软件工程(速成)——第十章 软件测试
一、软件测试
1.(软件)测试的定义或目标
(1)测试是为了发现程序中的错误而执行程序的过程
(2)好的测试方案极可能是发现了迄今为止尚未发现的错误的测试方案
(3)成功的测试是发现了至今为止尚未发现的错误的测试
2.测试方法
(1)黑盒测试(功能测试)
把程序看作一个黑盒子;完全不考虑程序的内部结构和处理过程;是在程序接口进行的测试
(2)白盒测试(结构测试)
把程序看成装在一个透明的白色盒子里;测试者完全知道程序的结构和处理算法;按照程序内部的逻辑测试程序,检测程序中的主要执行通路是否能按预定要求工作
3.测试步骤
模块测试(单元测试)、子系统测试、系统测试、验收测试、平行运行
二、白盒测试技术
1.测试用例
测试用例=测试数据+预期的结果
2.逻辑覆盖
(1)语句覆盖
每个语句至少执行一次
(2)判定覆盖
每个语句至少执行一次,每个判定的每个分支至少执行一次
(3)条件覆盖
每个语句至少执行一次,判定表达式的每种结果至少执行一次
条件覆盖通常比判定覆盖强,有时条件覆盖也是判定覆盖
(4)判定/条件覆盖
覆盖判定+条件判定
有时判定/条件覆盖也不一定比条件覆盖强
三、黑盒测试技术
1.基本概念
(1)黑盒测试着重测试软件功能
(2)黑盒测试不能取代白盒测试,两者为互补关系
(3)白盒测试—测试过程的早期;黑盒测试——测试过程的后期
2.黑盒测试准则
(1)测试用例尽可能少
(2)一个测试用例能指出一类错误
3.黑盒测试手段
等价划分、边界值分析、错误推测
四、单元测试
1.单元测试集中检测模块
2.单元测试和编码属于软件过程的同一个阶段
3.可以应用人工测试和计算机测试这样两种不同类型的测试方法
4.单元测试主要使用白盒测试技术,对多个模块的测试可以并行地进行
五、集成测试
1.集成测试是测试和组装软件的系统化技术,主要目标是发现与接口有关的问题
2.集成测试的策略
(1)非渐增式
(2)自顶向下
(3)自底向上
(4)混合
3.回归测试:重新执行已经做过的测试的某个子集,保证程序的变化没有带来非预期的副作用
六、确认测试
1.确认测试也称为验收测试,目标是验证软件的有效性
2.软件有效性的定义
如果软件的功能和性能如用户所合理期待,需求分析阶段产生的软件规格说明书,准确地描述了用户对软件的合理期望,需求分析阶段的软件规格说明书是软件有效性的标准
3.Alpha测试和Beta测试
七、调试
1.调试是在测试发现错误之后排除错误的过程
2.调试的方法
蛮干法、回溯法、原因排除法
八、软件可靠性
1.软件可靠性
程序在给定的时间间隔内,按照规格说明书的规定成功地运行的概率
2.估算平均无故障时间的方法
(1)计算平均无故障时间/需要改正多少个错误测试结束
MTTF=1/K(ET/IT-Ec(t)/It),即Ec=ET-IT/KxMTTF
MTTF:平均无故障时间
K:常数,典型值200
IT:程序长度(机器指令总数)
ET:测试之前程序中的错误总数
Ec:在时间段内发现的错误总数
(2)估计错误总数的方法
B0=B1B2/bc
B0:t=0时错误总数
B1:t=t1时测试员甲发现的错误数
B2:t=t1时测试员乙发现的错误数
bc:t=t1时两个测试员发现的相同错误数
练习题:
1.测试用例是专门为了发现软件错误而设计的一组或多组数据,它由( )组成。
A、测试输入数据
B、预期的测试输出数据
C、测试输入与预期的输出数据
D、按照测试用例设计方法设计出的数据
2.一个成功的测试是( )。
A、发现错误
B、发现至今尚未发现的错误
C、没有发现错误
D、证明发现不了错误
3.单元测试阶段主要涉及( )的文档。
A、需求设计
B、编码和详细设计
C、详细设计
D、概要设计
4.软件调试的目的是( )。
A、发现错误
B、改正错误
C、改善软件的性能
D、挖掘软件的潜能
选择题答案:CBBB
5.测试是为了验证该软件以正确地实现了用户的需求。()
6.白盒测试法是根据程序的功能来设计测试用例的。()
7.确定测试计划是在需求分析阶段制定的。()
8.单元测试是在编码阶段完成的。()
判断题答案:错错对对
9.在测试一个长度为24000条指令的程序时,第一个月由甲、乙两名测试员各自独立测试这个程序。经一个月测
试后,甲发现并改正20个错误,使MTTF达到10h。与此同时,乙发现24个错误,其中6个甲也发现了。以后由甲
一个人继续测试这个程序。问: (1) 刚开始测试时程序中总共有多少个潜藏的错误? (2) 为使MTTF达到60h,
必须再改正多少个错误?
解:
(1)B0=B1B2/bc -> B0=20x24/6=80(个)
(2)E=B0-I/KxMTTF -> K=I/MTTFx(B0-E)=24000/10x(80-20)=40
E'=B0-I/KxMTTF'=80-24000/40x60=70(个) 还需再改正70-20=50个错误
10.为以下程序段设计一组测试用例,要求分别满足语句覆盖、判定覆盖、条件覆盖。
int test(int A,int B)
{
if((A>1) AND (B<10)) then
X=A-B;
if((A=2) OR (B>20)) then
X=A+B;
return x;
}
解:(建议画出流程图方便解题)
语句覆盖:A=2,B=1,X=3
判定覆盖:A=3,B=1,X=2
A=2,B=10,X=12
条件覆盖:A=2,B=1,X=3
A=0,B=21,X=21
(答案不唯一)
11.用等价类划分法设计测试用例
在某一PASCAL语言版本中规定:
“标识符是由字母开头,后跟字母或数字的任意组合构成。最大字符数为80个。”
并且规定:“标识符必须先说明,再使用。” “在同一说明语句中,标识符至少必须有一个。”
解:
输入条件: 有效等价类: 无效等价类:
标识符的个数 1个(1)、多个(2) 0个(3)
标识符的字符数量 1~80(4) 0(5)、大于80(6)
标识符的组成 字母(7)、数字(8) 除数字、字母其他符号(9)、保留字(10)
标识符首个字符 字母(11) 非字母(12)
标识符的使用 先说明,后使用(13) 未说明直接使用(14)
测试用例:
下面选取了 9 个测试用例,它们覆盖了所有的等价类。
① VAR x,T1234567:REAL; (1), (2), (4), (7), (8), (11), (13)
BEGIN x := 3.414;
T1234567 := 2.732;
......
② VAR :REAL; (3)
③ VAR x,:REAL; (5)
④ VAR T12345......(多于80个字符):REAL; (6)
⑤ VAR T$:CHAR; (9)
⑥ VAR GOTO:INTEGER; (10)
⑦ VAR 2T:REAL; (12)
⑧ VAR PAR:REAL; (14)
BEGIN ...... PAP := SIN (3.14 * 0.8) / 6;
上一篇: 多线程_抢票_龟兔赛跑
下一篇: dubbo-common-rpc