列表

详情


阅读以下说明,回答问题1至问题4,将解答填入答题纸的对应栏内。
【说明】
某公司需开发一套通用信息管理系统。为保证开发进度和开发质量,对开发的全过程进行测试,重点对模块和系统性能进行测试。

【问题1】(3分)
在测试准备会上,大家对测试目的和原则发表了以下观点:
A.测试是为了证明程序无错
B.因为在系统开发的各个阶段都可能出现错误,应尽早并不断进行测试
C.开发人员对功能理解的错误很难由本人测试出来,因此,测试工作的主要过程应避免由开发人员来承担
D.测试后软件中仍存在的错误概率与已经发现的错误数成反比
E.成功的测试是发现了至今尚未发现的错误的测试
F.严格的测试计划会使测试工作死板教条,影响测试进度
以上观点中正确的是 (1) ; (2) ; (3) 。
【问题2】(7分)
模块测试主要从模块的5个方面进行检查:模块接口、局部数据结构、重要的执行路径、出错处理和边界条件。测试工程师对开发的模块进行测试时,做了以下几项工作:
A.检查变量名是否正确
B.检查错误提示与实际错误是否相符
C.检查模块的输入参数的个数与形参的个数是否匹配
D.检查n元数组第n个元素的处理是否正确
E.检查算符优先级是否正确
F.设计用以模拟被测模块的上级模块
G.设计用以模拟被测模块的下级模块
其中, (4) 是模块接口检查, (5) 是局部数据结构检查, (6) 是重要的执行路径检查, (7) 是出错处理检查, (8) 是边界条件检查; (9) 是驱动模块设计, (10)是桩模块设计。
【问题3】(3分)
系统测试是针对系统中各个组成部分进行的综合性检验。 (11) 检测系统在异常情况下的承受能力; (12) 检查系统对非法侵入的防范能力, (13) 检查系统的容错能力。
(11)~(13)备选答案:
A.恢复测试
B.安装测试
C.安全性测试
D.性能测试
E.强度测试
F.可靠性测试
【问题4】(2分)
软件工程师通过以下几种方法对系统进行调试,其中 (14) 通过分析错误的症状,猜测问题的所在位置; (15) 从测试所暴露的错误出发,通过分析错误征兆之间的关系而找出故障。
(14)~(15)备选答案:
A.试探法
B.回溯法
C.归纳法
D.演绎法
E.对分查找法

参考答案:

【问题1】
(1)B或因为在系统开发的各个阶段都可能出现错误,应尽早并不断进行测试
(2)C或开发人员对功能理解的错误很难由本人测试出来,因此,测试工作的主要过程应避免由原开发软件的人或小组来承担
(3)E或成功的测试是发现了至今尚未发现的错误的测试
【问题2】
(4)C或检查模块的输入参数的个数与形参的个数是否匹配
(5)A或检查变量名是否正确
(6)E或检查算符优先级是否正确
(7)B或检查错误提示与实际错误是否相符
(8)D或检查n元数组第n个元素的处理是否正确
(9)F或设计了用以模拟被测模块的上级模块
(10)G或设计了用以模拟被测模块的下级模块
【问题3】
(11)E
(12)C
(13)A
【问题4】
(14)A
(15)C

详细解析:

本题从软件测试的过程出发,考查对软件测试的基本概念、模块测试和系统测试的任务以及软件调试方法的掌握情况。
【问题1】
本问题考查对软件测试基本概念的掌握。
在6个备选答案中,A选项是错误的,因为测试的目的是查找软件中的错误,它无法证明软件的正确性。D选项是错误的,因为按照软件工程的基本观点,经测试后,软件中仍存在的错误概率与已经发现的错误数成正比。F选项是错误的,因为严格的测试计划会使测试工作有效地发现软件的错误,从而保障测试进度。其余选项是正确的。
【问题2】
本问题考查对模块测试基本概念和工作任务的掌握。
单元测试也称为模块测试,通常在编码阶段进行,是软件测试的最基本的部分。单元测试对源程序的每一个程序单元进行测试,检查模块内部的错误,并验证每个模块是否满足系统设计说明书的要求。单元测试可以选用人工测试或机器测试,当用机器测试时,一般采用白盒测试法。
在单元测试中,主要从模块的5个方面进行检查:模块接口、局部数据结构、重要的执行路径、出错处理和边界条件。
(1)模块接口:正确地输入输出数据是模块进行其他测试的基础,所以在单元测试中要考查模块的接口。
(2)局部数据结构:在单元测试中,为确保模块内的临时数据在程序执行过程中的完整性和正确性,必须仔细检查局部数据结构。
(3)重要的执行路径:在单元测试中,对路径的测试是最基本的任务。由于不能进行穷举测试,所以需要精心设计用例,保证模块中每条语句至少执行一次,检查是否有计算、比较或控制流等方面的错误。
(4)出错处理:好的设计应该能预测到各种出错的条件,并且有对出错进行处理的路径,以保证程序逻辑的正确性,便于用户维护。因此,要对程序中包含的出错处理通路进行测试。
(5)边界条件:边界条件的测试是单元测试的最后工作,也是非常重要的工作。软件容易在边界出现错误,如处理n元数组第n个元素时常常有错误。
由于模块不是独立运行的程序,各模块之间存在调用与被调用的关系,所以在对每个模块进行测试时,需要为被测模块编写一些测试模块来代替它的上级模块或下级模块。所编写的测试模块主要模拟与被测模块直接相关部分的功能,分为驱动模块与桩模块两种。驱动模块(driver)相当于一个主程序,它用于接收测试用例的数据,并将这些数据送到被测模块,被测模块被调用后,“主程序”输出测试结果,如打印“进入——退出”信息等。桩模块(stub)代替被测模块所调用的子模块,利用它对被测模块的调用能力和输出数据进行测试,其中可进行少量的数据处理,目的是为了检验入口、输出调用和返回信息。
【问题3】
本问题考查对系统测试基本概念和工作任务的掌握。
系统测试是对已经集成好的软件系统进行彻底的测试,以验证软件系统的功能和性能等是否满足要求。其目的是将软件与系统需求定义进行比较,发现软件与定义不相符或相矛盾的问题。系统测试的主要内容如下。
(1)功能测试
功能测试又称正确性测试,它检查系统的功能是否符合规格说明,主要采用黑盒测试方法。通常的做法是构造一些合理输入,检查是否得到期望的输出。
(2)性能测试
性能测试是检查系统是否满足系统分析说明书对性能的要求。特别是实时系统或嵌入式系统,即使软件的功能满足需求,但性能选不到要求也是不行的。性能测试覆盖了软件测试的各阶段,而不是等到系统的各部分全部组装之后才确定系统的真正性能。通常与强度测试结合起来,同时对软件、硬件进行测试,主要从响应时间、处理速度、吞吐量、处理精度等方面来检测。
(3)恢复测试
恢复测试主要检测系统的容错能力。检测方法是采用各种方法让系统出现故障,检验系统是否按照要求能从故障中恢复过来,并在预定的时间内开始事务处理,而且不对系统造成任何损害。对于自动恢复,需要验证重新初始化、检查点、数据恢复和重新启动等机制是否正确。如果恢复需要人工干预,就要对恢复的平均时间进行评估,并判断它是否在可接受的范围内。
(4)安全性测试
系统的安全性测试主要是为了检查系统对非法侵入的防范能力,以及系统的安全机制、保密措施是否完善。测试的方法是测试人员模拟非法入侵者,采用各种方法冲破防线。例如,想方设法截取或破译口令;故意使系统出错,利用系统恢复的过程非法入侵;企图通过浏览非保密数据获取所需信息,等等。从理论上说,只要时间和资源允许,没有进入不了的系统。所以,系统安全性设计准则是使非法入侵者所花费的代价比进入系统后所得到的好处要大;此时非法入侵者已无利可图。
(5)负载测试
负载测试是为了测量系统在某一负载级别上的性能,看数据在超负荷环境中运行时程序是否能够承担。在这种测试中,将使系统承担不同的工作量,以评测和评估系统在不同工作量条件下的性能行为,以及持续正常运行的能力,其目标是确定并确保系统在超出最大预期工作量的情况下仍能正常运行。
(6)强度测试
强度测试是对系统在异常情况下的承受能力的测试,是检查系统在极限状态下运行时性能下降的幅度是否在允许的范围内。因此,强度测试要求系统在非正常数量、频率或容量的情况下运行,例如,运行使系统处理超过设计能力的最大允许值的测试用例;设计测试用例,使系统传输超过设计最大能力的数据,包括内存的写入和读出、外部设备等;对磁盘保留的数据,设计产生过度搜索的测试用例,等等。强度测试主要是为了发现在有效的输入数据中可能引起不稳定或不正确的数据组合。
(7)可靠性测试
对于系统分析说明书提出了可靠性要求时,要对系统的可靠性进行测试,主要验证系统在指定条件和规定的时间内执行操作的能力。通常使用以下两个指标来衡量系统的可靠性:①平均失效间隔时间是否超过了规定的时限;②因故障而停机的时间在一年中应不超过多少时间。
(8)安装测试
安装测试就是为了检测在安装过程中是否有误、是否易操作等。主要检测系统的每一个部分是否齐全;硬件的配置是否合理;安装中需要产生的文件夹数据库是否已产生,其内容是否正确;等等。安装测试要在完全、部分或升级等不同的安装环境中进行。此外,还要对卸载过程进行测试。
【问题4】
本问题考查对软件调试方法的掌握情况。
调试的任务就是根据测试时所发现的错误,找出原因和具体的位置,并进行改正。调试过程主要由确定错误位置及改正错误这两个步骤组成。与测试不同,调试工作主要由程序开发人员来进行,也就是说,谁开发的程序由谁来进行调试。
常用的调试方法有如下几种。
(1)试探法
调试人员分析错误的症状,猜测问题的所在位置,利用在程序中设置输出语句,分析寄存器、存储器的内容等手段来获得错误的线索,一步步地试探和分析找到错误所在。这种方法效率很低,且比较缓慢,适合于结构比较简单的程序。
(2)回溯法
调试人员从发现错误症状的位置开始,人工沿着程序的控制流程往回跟踪程序代码,直到找出错误根源或确定故障范围为止。这种方法适合于小型程序,往往能把故障范围缩小为程序中的一小段代码,仔细分析这段代码不难确定故障的准确位置。但对于大规模程序,由于其需要回溯的路径太多而使这种方法变得不可操作。
(3)对分查找法
这种方法主要用来缩小错误的范围。如果已经知道程序中的变量在若干位置的预期正确取值,可以在这些位置上用赋值语句给这些变量以正确值。运行程序,观察输出结果,如果没有发现问题,则说明从给出变量的正确值开始到输出结果之间的程序没有出错,问题可能在除此之外的程序中,否则错误就在所考查的这部分程序中。对含有错误的程序段再使用这种方法,直到把故障范围缩小到比较容易诊断为止。
(4)归纳法
归纳法就是从测试所暴露的错误出发,通过分析错误征兆之间的关系而找出故障。归纳法从个别推出一般,是一种系统化的思考方法,其步骤如下。
①收集相关数据。列出程序做得对或不对的所有数据,不产生错误的数据往往也能提供重要的线索;
②整理数据,找出规律。对收集到的数据进行组织与整理,由特殊推出一般,主要发现在什么条件下出现错误,什么条件下不出错;
③导出假设。提出一个或多个可能的错误原因,并选择可能性最大的那个。如果提不出来,则说明收集的数据不够,需要设计和执行追加的测试用例来得到;
④证明假设。用上一步的假设来解释所有的原始测试结果,如果能解释这一切,则假设得以证实,也就找出错误;否则,要么是假设不完备或不成立,要么有多个故障同时存在,需要重新分析,提出新的假设,直到发现错误为止。
(5)演绎法
演绎法从一般原理出发,首先根据测试结果列出所有可能产生错误的原因,再仔细分析已有的数据,排除不可能和彼此矛盾的原因,利用已知线索进一步精化余下的假设,以便精确确定故障的位置,最后运用归纳法的第④步来证明剩下的原因即为错误的根源。
以上这方法均可辅以调试工具。随着测试技术和软件开发环境的发展,会出现功能越来越强的自动测试和调试工具,支持断点设置、单步运行和各种跟踪技术,为软件的调试提供很大的方便。但无论哪种工具都代替不了开发人员对整个文档和程序代码的仔细研究和认真审查所起的作用。

上一题