return;
}while(c1&&c2&&c3);
}
第三章习题解答
1.什么是单元测试?
单元测试时对软件设计的最小单位------模块进行正确性检验的测试工作,主要测试模块在语法、格式和逻辑上的错误。
2.单元测试主要采用什么测试方法?
单元测试的基本方法有:
人工静态分析、自动静态分析、自动动态测试,人工动态测试。
第四章习题解答
1.写出“直接插入排序”的算法,画出流程图,并用逻辑覆盖法,写出测试用例。
【解】已知直接插入排序算法得基本步骤如下:
(1)从一组数中取出第一个数
(2)取下一个数,如数已取完,则排序结束;
(3)如果所取数大于等于其前邻数,则重复
(2)步
(4)如果所取数小于其前邻数,则与其前邻数交换位置
(5)重复第(4)步,直到所取已无前邻数(即已交换到当前数列得第一位置),或大于等于其前邻数为止
(6)返回第
(2)步。
流程图如下:
程序代码如下
Programbubblesor
DimnAsinteger
DimA[n]Asinteger;
Dimi,j,k,tempAsInteger
n=100
input(k)
FORi=1tok
input(a[i])
FORi=2tok
IFa[i]<=a[i-1]
Forj:
=Idownto2
Temp:
=a[j]
A[j]:
=a[j-1]
A[j-1]:
=temp
Endfor
ENDif
Fori=1tok
Output(a[i])
EndProgram
【设计测试用例】
由以上分析可知,排序程序具有双重嵌套循环结构。
其内外循环体各包含一条选择语句,用于在条件满足时提前推出循环。
程序中得4个判断是测试时考察得重点。
以下分别列出按不同覆盖标准设计得测试用例:
语句覆盖。
稍作分析便不难看出,只要送入先大后小得两个数,程序执行时就可以遍历流程图中的所有框。
因此,仅需选用一组测试数据如{A={8,4},K=2},就能实现语句覆盖。
这类覆盖发现错误得能力不强,例如若将程序中得两个“>=”均误写为“=”,用上述得测试数据就不能发现。
判定覆盖。
选用上述得测试数据,内、外层循环都是从正常得循环出口退出得。
要实现判定覆盖,还需在语句覆盖得基础上,增加两个能使程序从非正常出口退出的测试数据。
例如,用以下两组数据:
{A={8,4,8},K=3}和{A={8,4,4},K=3}或{A={8,4,8,4},K=4}
则程序将在满足A[I]=A[I-1]或A[J]=A[J-1]的条件下通过非正常出口,也能实现判定覆盖。
但又可能出现另一种偏向,掩盖把“>=”误写为“=”的错误,造成更加严重得测试漏洞。
条件覆盖。
从以上分析很容易想到,必须选取足够得测试,使复合条件占的每个条件分别按“真”、“假”出现一次,才能克服前述的缺点,进一步提高发现错误的能力。
测试用例:
{A={8,4,9,6},K=4}{A={8,4,8,4},K=4}
就能对程序实现条件覆盖。
此时A[I](或A[J])大于、等于或小于A[I-1](或A[J-1])的3中情况将分别至少出现一次,无论把“>=”误写为“>”或“=”,都可用这两组数据检查出来。
其它覆盖。
本例中得两个复合条件,其组成条件都不是互相独立的。
如果其中有一个条件(例如A[I]=A[I-1])为真,则另一个条件(例如A[J]=A[J-1])必然为假。
所有就本例来说,判定条件覆盖及条件组合覆盖都没有实际意义,可以不必讨论。
由此可见,本例宜选择条件覆盖,以便得到较强得查错能力。
测试数据可选择
{A={8,4,9,6},K=4}{A={8,4,8,4},K=4}或合成一组:
{A={8,4,8,4,9,6},K=6}
2.请把下面的程序流程图转化成控制流图。
解答:
3.请把第2章的NextDate问题的伪代码转换成为控制流图,并简化。
(略)
4.重新编写程序片断14~20,用嵌套if-then-else语句替代复合条件。
14.if(a=b)AND(b=c)
15.ThenOutput(“Equilateral”)
16.ElseIf(a<>b)AND(a<>c)AND(b<>c)
17.ThenOutput(“Scalence”)
18.ElseOutput(“Isosecles”)
19.EndIf
20.EndIf
比较你改写后的程序和上面程序片断的圈复杂度。
解答:
改写如下:
If(a=b)
Thenif(b=c)
ThenOutput(“Equilateral”)
Elseif(a<>b)
Thenif(a<>c)
Thenif(b<>c)
ThenOutput(“Scalence”)
ElseOutput(“Isosecles”)
Endif
Endif
Endif
Endif
Endif
第5章习题解答
1.黑盒测试有哪两种基本方法?
解答:
黑盒测试有两种基本方法,即通过测试和失败测试。
在进行通过测试时,实际上是确认软件能做什么,而不会去考验其能力如何。
软件测试员只运用最简单,最直观的测试案例。
在设计和执行测试案例时,总是先要进行通过测试。
在进行破坏性试验之前,看一看软件基本功能是否能够实现。
这一点很重要,否则在正常使用软件时就会奇怪地发现,为什么会有那么多的软件缺陷出现?
在确信了软件正确运行之后,就可以采取各种手段通过搞“垮”软件来找出缺陷。
纯粹为了破坏软件而设计和执行的测试案例,被称为失败测试或迫使出错测试。
2.黑盒测试中,测试用例设计主要有哪些方法?
(1)等价类划分方法
(2)边界值分析方法
(3)错误推测方法
(4)因果图方法
(5)判定表驱动分析方法
(6)功能图分析方法
3.简述等价类划分的原则。
解答:
①在输入条件规定了取值范围或值的个数的情况下,则可以确立一个有效等价类和两个无效等价类。
②在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,可确立一个有效等价类和一个无效等价类。
③在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类。
④在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类。
⑤在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。
⑥在确知已划分的等价类中各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步的划分为更小的等价类。
4.列举一些常见的边界值。
1)对16-bit的整数而言32767和-32768是边界
2)屏幕上光标在最左上、最右下位置
3)报表的第一行和最后一行
4)数组元素的第一个和最后一个
5)循环的第0次、第1次和倒数第2次、最后一次
5.简述边界值分析法的原则。
1)如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据。
2)如果输入条件规定了值的个数,则用最大个数,最小个数,比最小个数少一,比最大个数多一的数作为测试数据。
3)将规则1)和2)应用于输出条件,即设计测试用例使输出值达到边界值及其左右的值。
4)如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例。
5)如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试用例。
6)分析规格说明,找出其它可能的边界条件。
6.因果图中有哪些关系和约束?
解答:
1)4种符号分别表示了规格说明中向4种因果关系。
1) 关系
①恒等:
若ci是1,则ei也是1;否则ei为0。
②非:
若ci是1,则ei是0;否则ei是1。
③或:
若c1或c2或c3是1,则ei是1;否则ei为0。
“或”可有任意个输入。
④与:
若c1和c2都是1,则ei为1;否则ei为0。
“与”也可有任意个输入。
2) 约束
输入状态相互之间还可能存在某些依赖关系,称为约束。
例如,某些输入条件本身不可能同时出现。
输出状态之间也往往存在约束。
在因果图中,用特定的符号标明这些约束。
A.输入条件的约束有以下4类:
①E约束(异):
a和b中至多有一个可能为1,即a和b不能同时为1。
②I约束(或):
a、b和c中至少有一个必须是1,即a、b和c不能同时为0。
③O约束(唯一);a和b必须有一个,且仅有1个为1。
④R约束(要求):
a是1时,b必须是1,即不可能a是1时b是0。
B.输出条件约束类型
输出条件的约束只有M约束(强制):
若结果a是1,则结果b强制为0。
7.简述用因果图法设计测试用例的步骤。
解答:
(1)分析软件规格说明描述中,那些是原因(即输入条件或输入条件的等价类),那些是结果(即输出条件),并给每个原因和结果赋予一个标识符。
(2)分析软件规格说明描述中的语义。
找出原因与结果之间,原因与原因之间对应的关系。
根据这些关系,画出因果图。
(3)由于语法或环境限制,有些原因与原因之间,原因与结果之间的组合情况不不可能出现。
为表明这些特殊情况,在因果图上用一些记号表明约束或限制条件。
(4)把因果图转换为判定表。
(5)把判定表的每一列拿出来作为依据,设计测试用例。
第6章习题解答
1.什么是测试桩?
模拟被调用单元的一次性代码。
2.什么是驱动模块?
用以模拟被测模块的上级模块的一次性代码。
3.系统测试包含哪些内容?
压力测试、容量测试、性能测试、安全测试、容错测试