习题八答案一、选择题1. 软件测试的主要特点是(A C)。
A) 软件测试的开销大B)软件测试要依靠工具C) 软件不能进行“穷举”测试D)软件测试要依靠人工2. 整体测试又称为组装测试,其主要内容包括(C D)。
A) 对整体的性能进行测试B)用白盒法设计测试用例进行测试C) 确定组装策略和次序D)对组装过程进行测试3. 渐增式是将模块一个一个地连入系统,每连入一个模块(C)。
A) 只需要对新连入的模块进行测试B) 都不需要再进行测试C) 要对新子系统进行测试D) 都要进行回归测试4. 静态测试是以人工的、非形式化的方法对程序进行分析和测试。
常用的静态测试方法有(B CD)。
A) 运行程序并分析运行结果B)桌前检查与代码会审C) 数据流分析图D)调用图5. 集成过程的原则是(B C)。
A) 按照模块的大小集成B) 尽早测试包含I/O的模块C) 尽早测试关键模块D) 按照“输入—处理—输出”的次序进行集成6. 面向对象的测试与传统测试方法的主要区别是(A C)。
A) 面向对象的测试可在编码前进行,传统测试方法在编码后进行B) 面向对象的测试以需求和设计阶段的测试为主,不需要进行代码测试C) 测试对象不同D) 面向对象的测试不需要设计测试用例,只需要进行会议评审7. 软件测试的基本原则是(A C D)。
A) 关键是注重选择高效的测试用例B) 选择尽可能多的测试用例C) 尽量不由程序设计者进行测试D) 充分注意测试中的群集现象8. 等价分类法的关键是(C)。
A) 确定等价类的边界条件B) 按照用例来确定等价类C) 划分等价类D)确定系统中相同和不同的部分二、判断题1. 单元测试通常应该先进行人工走查,再以白盒法为主,辅以黑盒法进行动态测试。
(√)2. 功能测试是系统测试的主要内容,检查系统的功能、性能是否与需求规格说明书相同。
( √)3. 白盒法是一种静态测试方法,主要用于模块测试。
(×)4. 整体测试又称为逻辑覆盖测试,需要对系统模块的内部结构进行测试。
(×)5. 在等价分类法中,为了提高测试效率,一个测试用例可以覆盖多个无效等价类。
(×)6. 发现错误多的模块,残留在模块中的错误也多。
(√)7. 面向对象的测试不能采用黑盒法,因为它是一种全新的开发模式。
(×)8. 在发现错误后,则应按照一定的技术去纠正它,纠错的关键是定位错误。
(√)三、简答题1. 等价分类法的基本思想是什么?答:根据程序的输入特性,将程序的定义域划分为有限个等价区段——“等价类”,从等价类中选择出具有“代表性”的用例,即测试某个等价类的代表值就等价于对这一类其他值的测试。
如果某个等价类的一个输入数据(代表值)测试中查出了错误,说明该类中其他测试用例也会有错误。
2. 自顶向下渐增与自底而上渐增各有何优、缺点?答:①自顶向下渐增优点:能够尽早发现系统主控方面的问题,并尽早测试系统结构的问题。
缺点:需要编写桩模块,由于下属模块往往不止一个,也不止一层,加之模块接口的复杂性,桩模块很难模拟各下层模块之间的调用关系,也无法验证桩模块是否完全模拟了下属模块的功能。
因此很难尽早查出底层容易出错的复杂模块中的错误,所以导致过多的回归测试。
②自底向上渐增优点:需要编写驱动模块。
驱动模块是模拟主程序或者调用模块的功能,处于被测试模块的上层,所以驱动模块只需模拟向被测模块传递数据,接收或打印从被测模块返回的数据等功能,比编写桩模块容易。
还能够尽早查出底层涉及较复杂的算法和实际的I/O模块中的错误。
缺点:只有当系统所有模块全部组装完成,才能看到系统完整的结构,才能测试系统的主控功能。
3. 渐增式与非渐增式有何区别?为什么通常采用渐增式?答:非渐增式是将所有的模块一次连接起来,简单、易行,节省机时,但测试过程中难于查错,发现错误也很难定位,测试效率低。
渐增式是将模块一个一个地连入系统,每连入一个模块,都要对新子系统进行测试。
这种组装测试方案虽然用机时多,但比较非渐增式容易查出错误及进行错误定位,有利于查出模块接口部分的错误,测试效率高。
因此通常采用渐增式。
4. 什么是α测试和β测试?答:α测试是在开发机构的监督下,在确认测试阶段后期由个别用户对软件进行测试,目的是评价软件的FLURPS(功能、局域化、可使用性、可靠性、性能和支持性),注重界面和特色。
β测试是在进行了α测试的基础上,由支持软件预发行的客户对FLURPS进行测试,主要目的是测试系统的可支持性,是在软件产品正式发布前的测试。
5. 黑盒法与白盒法的区别是什么?各自运用在什么情况下?答:白盒法测试又称结构测试或逻辑驱动测试。
必须考虑程序内部结构和内部特性,针对特定条件或与循环集设计测试用例,对软件的主要逻辑路径进行测试。
一般主要用于模块测试。
黑盒法测试又称功能测试或基于规格说明的测试。
这种方法是从用户观点出发,测试时把被测程序当作一个黑盒,不考虑程序内部结构和内部特性,测试者只知道该程序输入和输出之间的关系或程序的功能的情况下,依靠能够反映着这一关系和程序功能需求规格的说明书,来确定测试用例和推断测试结果的正确性。
一般用于集成测试、确认测试及功能测试、系统测试等。
6.软件测试与其他软件开发活动相比具有什么样的特点?答:软件测试的目标在于,以最小的工作量和成本,尽可能多地发现软件系统中存在的各种错误和缺陷,以确保软件系统的正确性和可靠性。
其主要特点是:⑴软件测试的开销大。
按照Boehm的统计,软件测试的开销大约占总成本的30%~50%。
⑵不能进行“穷举”测试。
只有将所有可能的情况都测试到,才有可能检查出所有的错误,但这是不可能的。
⑶软件测试难度大。
既然不能进行“穷举”测试,又要查出尽可能多的错误,随着软件的规模和复杂度不断增加,软件测试工作的难度越来越大。
测试也是一种开发活动,但鉴于软件测试的以上特点,它比其他软件开发活动更加复杂、困难和重要,且无论怎样强调它的重要性都不过分。
7.软件测试通常包含哪几个基本步骤?答:软件测试通常应该对需求、总体设计、详细设计、编码实现各个阶段所获得的开发产进行测试,软件测试应该贯穿于整个软件开发的全过程。
软件测试过程按测试的先后次序可分为以下步骤进行:单元测试、集成测试、确认测试和系统测试,最后进行验收测试。
⑴单元测试。
完成每个模块的测试,尽可能发现模块内部的错误。
单元测试主要采用白盒测试法。
⑵集成测试。
把已测试过的模块按照一定顺序组装起来,构成软件系统。
主要采用黑盒测试法。
但对发现错误较多的新子系统,还可能采用白盒法进行回归测试。
⑶确认测试:检验所开发的软件能否满足所有功能和性能需求的最后手段,通常均采用黑盒测试法。
⑷系统测试:完成确认测试以后,检验它能否与系统的其他部分(如硬件,数据库及操作人员)协调工作,需要进行系统测试。
⑸验收测试:检验软件产品质量的最后一道工序是验收测试。
与前面讨论的各种测试活动的不同之处主要在于它突出了客户的作用,同时软件开发人员也应有一定程度的参与。
8.软件调试有哪些方法?各自有什么特点?答:常见的软件调试策略包括:试探法、归纳法、演绎法、回溯法和对分法等。
⑴试探法。
一种比较原始的调试策略。
它的基本思想是通过分析软件系统运行过程中大量数据信息、中间结果的变化情况来查找错误发生的原因、确定错误发生的位置。
该方法简单、易行,但调试效率低,只适用于结构比较简单的小型系统。
⑵归纳法。
一种由特殊到一般的逻辑推理方法。
根据软件测试所取得的个别错误数据,错误线索着手,通过分析这些线索之间的关系而发现错误。
⑶演绎法。
一种由一般到特殊的逻辑推理方法。
根据已有的测试数据,设想所有可能的出错原因,然后通过测试逐一排除不正确、不可能的出错原因,最后证明剩余的错误的合理性,确定错误发生的位置。
⑷回溯法。
从软件系统中发现错误位置开始,沿着程序的控制流程往回追踪程序代码,直至找到错误发生的位置或范围。
回溯法对于规模较小的软件系统而言是一种比较有效的调试策略,但不适宜较大型的软件。
⑸对分查找法。
在程序中插入某些变量关键点的正确值,检查程序的运行结果,在插入点以后的运行正确,则错误发生在插入点的前半部分;反之,错误发生在插入点的后半部分。
不断对分缩小错误范围,进行错误定位。
9.面向对象的测试与传统的测试有什么相同和不同之处?答:⑴传统的测试要在编码之后才进行,主要测试的对象是程序代码。
而面向对象的测试既在没有代码的情况下进行测试,也在有代码的情况下进行测试,是一种被应用在开发过程不同阶段的活动,是与开发过程密切相关而又分离出来的过程,贯穿软件开发的全过程。
⑵面向对象的测试更关注对象而不是像传统的测试仅完成输入输出的单一功能,强调需求或设计的测试,验证和确认规格说明的有效性和正确性。
一般采用静态走查和动态的场景模拟等方法,保证了需求和设计的高质量。
⑶由于测试对象不同,如传统测试中的单元测试,对应面向对象的测试中的类测试,类测试包括:类属性的测试、类操作的测试、可能状态下对象测试。
根据面向对象的主要特性,在测试策略和方法上有所区别。
通常面向对象的测试更加困难,例如类间的继承性可能给测试带来新的困难,继承性层次的测试需要更彻底的测试方法。
⑷在面向对象的测试中,一些常用的传统测试技术,如白盒法、黑盒法仍然可以使用。
10.面向对象的集成测试与传统的集成测试有何区别?答:传统测试方法中的集成测试,主要采用黑盒法,按照自顶向下和自底向上的集成策略对模块进行组装测试。
面向对象的集成测试即交互测试,要检测类相互作用时才会产生的错误,即交互测试只关心系统的结构和内部的相互作用。
对类进行交互测试,以确定它们能否在一起共同工作。
交互测试的重点是要确保那些已经单独测试过的类的对象,相互间能够正确地传送消息。
而面向对象的软件没有层次控制结构,一次集成一个操作到类中(传统的增量集成方法)是不可能的。
通常采用两种不同的策略:⑴基于线程的测试(thread-based testing),集成对回应系统的一个输入或事件所需的一组类,每个线程被集成并分别测试。
⑵基于使用的测试(use-based testing),先测试独立类(几乎不使用服务器的类),然后测试下一层使用独立类的类(依赖类)。
通过对依赖类层次的测试,逐步构造新的子系统,最后构造完整的系统。
1. 为什么要进行软件项目管理?答:软件项目管理是对软件项目开发全过程的管理,是对整个软件生存期的所有活动进行管理。
任何工程的成败,都与管理的好坏密切相关,软件项目也不例外。
尤其是软件产品的特殊性,软件项目的管理对于保证软件产品的质量具有极为重要的作用,是软件项目开发成功的关键。
2. 软件项目管理有哪些特点?答:软件项目管理的主要特点包括如下几个方面:⑴软件项目管理涉及的范围广,涉及软件开发进度计划、人员配置与组织、项目跟踪与控制等。