15、根据3.7.5节的规则(详见本书光盘),检查测试用例表3.24发现输入条件“账面余额”未取到“I”,说明测试用例有漏洞,而表3.24中又显示测试用例覆盖了所有五个场景,为什么会出现这种相互矛盾的情况?是规则有错,还是别的什么原因呢?
对于备选流4的含义是:输入金额校验失败,这里有很多情况可以导致金额校验失败,如输入金额格式错误、账面余额不足等,表3.24的测试用例ATM-ST-006的触发事件是输入金额格式错误的情况,而未测试账面余额不足的情况,所以输入条件“账面余额”未取到“I”。这里并不矛盾,因为表3.24中的第2列是从较粗的粒度来考查用例覆盖的,而设计测试用例时若需要覆盖备选流4,却需要从细节来考虑,所以出现了不一致的情况。
第4章 白盒测试技术
1、对于4.2.2节中的函数FuncSC,随着三个布尔变量取值的不同,在特殊的取值组合条件下,程序的输出与输入是不相等的。请问在什么条件下,该函数的输出不等于输入?
当函数FuncSC的第1和第2个布尔变量不同时取真值的时候,函数的输出不等于输入。 2、对于4.2.2节中的函数Func7,其代码中隐含一个空间分配的缺陷,请找出该缺陷。
函数Func7中的缺陷在第3-5行代码处,即当变量bFlag为假的时候,未对pArray分配空间,该指针为空,所以后续操作将失败。
3、4.2.3节中,表4.3中取LC-003到LC-005中的任意一个与LC-002组合起来,都满足判定覆盖。请问,LC-003到LC-005这三个测试用例中,哪个测试效果相对更好?
在同时满足覆盖指标的前提下,应从判定表达式的屏蔽效应以及边界值测试的角度判断测试数据选择的好坏。为执行路径L13,两判定节点都应取假值,为了避免判断表达式的屏蔽现象,必须保证T1为真(即(a>1)为真),测试用例LC-004显然不满足该要求。另外,应保证T4为假(即(x>3)为假),考虑到3是x取值的边界,因此,应针对边界值来选择测试数据,所以LC-005更优于LC-003。总体看来LC-005是三个测试用例中最优的一个。
11
4、4.2.5节中,按照函数Func6Modified将复杂逻辑表达式拆分为简单的表达式之后,请设计两个测试用例来满足判定覆盖。
设计的测试用例见表4-1。
表4-1函数Func6Modified的测试用例集合(满足判定覆盖)
5、给定以下代码,请利用逻辑覆盖的各项覆盖指标分别设计测试用例。
列出真值表如表4-2所示。
表4-2 真值表
●对于语句覆盖和判定覆盖,选择测试用例005和006。 ●条件覆盖,选择测试用例004和005。 ●判定/条件覆盖,选择测试用例004和005。 ●条件组合覆盖,选择所有。
●修正的判定/条件覆盖,选择测试用例003、005、006、007。
6、当判定表达式具有三个简单逻辑判断条件时,所有可能构成的表达式形式如题表4.1所示,请针对下表中的四种组合情况,分别采用修正的判定/条件覆盖指标设计测试用例。
12
题表4.1 三个简单逻辑判断条件构成的所有可能的判定表达式
根据题目中给出的真值表,采用唯一原因法得到各条件的独立影响对如表4-3所示。因此得到满足不同表达式的修正判定/条件覆盖的测试用例集合分别见表4-3。
表4-3 不同复合表达式的条件独立影响对
7、请针对扩展的Trgl问题展开基路径测试。
Trgl问题描述为:给定三角形的三条边长,分别为a、b和c,且边长均为整数,要求根据三条边长的关系输出:不构成三角形、不等边三角形、等腰但不等边三角形或等边三角形, 具体的程序代码如下。
13
考虑到不可行路径,最终测试4条路径: Path1:1,3,4,7,8,9,End Path2:1,3,4,7,8,10,11,End Path3:1,3,4,7,8,12,13,End Path4:1,3,5,6,7,15,16,End
得到测试用例见表4-4。且应考虑到输入的各种组合,所以给出了更多的测试用例。
表4-4 三角形问题测试用例集合
8、请针对以下的Commission代码进行基路径测试
该CommissionModify函数只有3条路径。若用A表示1,2,3,4,5号语句,则有 Path1:A,6,7,12,13 Path2:A,6,8,9,12,13 Path3:A,6,10,11,12,13
这其实已经等同于等价类测试+边界值测试了。测试用例不再列出。
14
第 5 章 面向对象软件测试
1、所有类都需要进行单元测试吗?
并非所有类都需要进行单元测试,类的优先级可从三方面来衡量: ①类在系统中所起的作用
②类自身的复杂度和与其他类之间的交互复杂度 ③开发该类的测试程序所需的成本 2、私有方法可以测试吗?
私有方法可以测试,测试方法有: ①直接修改被测代码的访问权限 ②在被测类中加入公有方法 ③利用内类机制
3、对于一个类而言,测试用例设计的一般策略是怎样的?
面向对象的单元测试一般策略:
①首先根据方法特性划分:构造函数、功能函数和接口函数。 ②针对构造函数,根据前置和后置条件设计用例。 ③针对功能函数
公有方法:基于前置条件和后置条件设计测试用例。
受保护的方法:严格区分有访问权限和无访问权限的前置条件和后置条件,设计测试用例。 私有方法:根据实际情况选用适当的策略进行测试。 ④针对接口函数,根据状态转换设计测试用例。
⑤对于以上每种情况,都应结合边界值、等价类等测试方法来选择测试数据。 4、将测试代码直接写在被测类的代码中即可,对吗?
可以将测试代码直接写在被测类的代码中,但这不利于开发代码与测试代码的分开,不 利于后续测试代码的维护和开发产品的交付。
5、抽象类无法实例化,所以不能测试,对吗?
抽象类虽然无法实例化,但可以通过以测试类的内类继承方式来测试,是可以的。 6、顺序图和协作图可用作面向对象的单元测试,对吗?
顺序图和协作图适用于面向对象的集成测试。
第 6 章 单元测试
1、良好的单元测试是否能够代替集成测试?
若每个模块都经过了严格的单元测试,还需要集成测试。我们在测试过程中经常遇到的情况是:单元测试中每个模块都能单独工作,但将这些模块集成在一起之后,某些模块就不能正常工作了。例如,接口数据丢失,模块之间的不良影响,误差的不断累积等。因此,单元测试无法代替集成测试,每个模块的性能最优并不能保证集成之后的指标达到最优。
2、什么是驱动模块?什么是桩模块?为什么需要驱动模块和桩模块?
驱动模块是模拟被测单元的上级模块,用于接收测试数据、启动被测模块和输出结果。 桩模块是模拟被测单元所调用的模块。
测试时需要通过驱动模块和桩模块搭建单元测试环境。 3、单元测试的过程是怎样的?
单元测试的过程可划分三个阶段:
计划阶段:完成单元测试计划,制定单元测试策略。 设计实现阶段:建立单元测试环境,完成测试设计和开发。
15