西安交通大学 刘海岩 1
第 5章 软件测试
软件测试的概念
软件测试技术
软件测试策略
测试的管理
软件调试
软件的可靠性和可用性西安交通大学 刘海岩 2
5.1 软件测试的概念
1、软件测试的目的
1963年,美国,飞往火星的火箭爆炸,损失 $ 10 million。
原因,FORTRAN循环:
DO 5 I = 1,3 误写为 DO 5 I = 1.3
软件测试的工作量约占整个项目工作量的 40%左右,
对于要求极高的系统测试工作量还要成倍增加。
微软 Exchange 2000和 Windows 2000中的人员结构
Exchange 2000 Windows 2000
项目经理 25人 约 250人开发人员 140人 约 1700人测试人员 350人 约 3200人测试人员 /开发人员 2.5 1.9
西安交通大学 刘海岩 3
为什么需要这么多人、花这么多代价进行测试?目的何在?
,证明程序正确!,对吗?
Myers对软件测试目的提出以下观点:
( 1)软件测试是为了发现错误而执行程序的过程。
( 2)一个好的测试用例能够发现至今尚未发现的错误。
( 3)一个成功的测试是发现了至今尚未发现的错误的测试。
因此,测试阶段的 基本任务 应该是根据软件开发各阶段的文档资料和软件的结构,精心设计一组“高产”的测试用例,利用这些用例执行程序,找出软件中潜在的各种错误
( Bug)和缺陷( Defect)。
西安交通大学 刘海岩 4
2、软件测试的原则
( 1)测试用例不但应有输入数据,还应有预期的输出数据。这样便于对照检查,做到“有的放矢”。
( 2)测试用例不仅选用合理的输入数据,还要选择不合理的输入数据。这样能更多地发现错误,提高程序的可靠性。对于不合理的输入数据,要将反馈信息提供给用户。
( 3)除了检查程序是否做了它应该做的事,还可检查程序是否做了它不应该做的事。例如程序正确地打印出用户所需信息的同时还是否打印出用户并不需要的多余信息。
( 4)应制定测试计划并严格执行,排除随意性。
( 5)长期保留测试用例,为以后进行的回归测试和维护提供方便。
西安交通大学 刘海岩 5
( 6)对发现错误较多的程序段,应进行更深入的测试。
因为在修改错误过程中容易引入新的错误。
( 7)为了达到最有效的测试效果,程序员避免测试自己的程序。
3、测试阶段的信息流程测试评价 调试可靠性分析分析结果错 误 可提交预完善西安交通大学 刘海岩 6
其中软件配置:需求说明书、设计说明书和源程序。
测试配置:测试计划、测试工具、测试用例 (Test case)
和测试驱动程序 (Driver)、桩程序 (Stub)等。
4、测试方法
( 1)黑盒 (Black-box)法不考虑被测程序的内部结构和处理过程,只关心它的输入和输出是否能达到预期结果,因此也称为功能性测试。
( 2)白盒 (Black-box)法使用更细致的测试策略,检查被测程序的内部逻辑。
黑盒测试法与白盒测试法互为补充,在测试的不同阶段使用以发现不同类型的错误 。
西安交通大学 刘海岩 7
测试用例如何设计?
是否考虑 所有的数据域或所有的路径!
穷尽测试 (complete test)通常 是不可能的。
例如,(Black-box)
程序要求输入 3个整形数据。若字长 16位,则各种可能输入的排列组合共有
216× 216× 216 ≈ 3 × 1014
若程序执行一次需一毫秒,则对于所有合法输入的测试大约需用一万年 ! 还未包含测试输入非法数据的情况 。
西安交通大学 刘海岩 8
例,(White-box)
下图所示的程序中共有 520?1014条可能的执行通路,显然,每条通路都执行一遍是不现实的。
即使每条路径都测试了,程序仍可能有错,如一个升序程序编成了降序,穷尽测试也发现不了 。
循环 20次西安交通大学 刘海岩 9
5、测试步骤软件错误可能嵌入在需求分析、
设计、编码构件或文档等开发和维护的任何地方,
图中列举了每个开发活动中可能的错误原因。
因此测试步骤应与分析、设计、
编码等活动对应。
具体测试步骤 在
5.3节介绍。
西安交通大学 刘海岩 10
5.2 软件测试技术白盒法和黑盒法是设计测试用例的基本策略,每一种策略对应着多个设计用例的技术,每种技术可达到一定的测试目的。
1、白盒技术被测对象基本上是源程序,以程序的内部逻辑结构为基础设计测试用例。原则是:
保证被测程序中每一条独立的路径至少执行一次。
保证所有判断的每一分支至少执行一次。
保证每一循环都在边界条件和一般条件下至少各执行一次。
验证所有各内部数据结构的有效性。
西安交通大学 刘海岩 11
( 1)逻辑覆盖主要用于测试选择结构。
语句覆盖:
每个语句至少执行一次。
Test case,
A=2,B=0,X=4.
问题:若 AND错写为 OR,或 X>1
错写为 X<1,则错误无法由上例测出 。
入口
A > 1
AND B=0
T
A=2
OR X > 1
T
X = X / A
X = X + 1
返回
F
F
西安交通大学 刘海岩 12
判定覆盖:每个判定的每个分支至少执行一次
Test cases:
① A=3,B=0,X=3
② A=2,B=1,X=1
问题:若 X>1错写为 X<1,
仍然无法被测出入口
A > 1
AND B=0
T
A=2
OR X > 1
T
X = X / A
X = X + 1
返回
F
F
西安交通大学 刘海岩 13
条件覆盖
Test cases:
① A=2,B=0,X=4
(满足 A>1,B=0; A=2,X>1)
② A=1,B=1,X=1
(满足 A?1,B?0; A?2,X?1)
问:条件覆盖? 判定覆盖答,不一定。
反例,① A=2,B=0,X=1
② A=1,B=1,X=2
判定 /条件覆盖:
即判定覆盖?条件覆盖入口
A > 1
AND B=0
T
A=2
OR X > 1
T
X = X / A
X = X + 1
返回
F
F
西安交通大学 刘海岩 14
条件组合覆盖:每个判定表达式中条件的各种可能组合都至少出现一次。
全部可能的条件组合为,
① A>1,B=0 ② A>1,B? 0
③ A?1,B=0 ④ A?1,B? 0
⑤ A=2,X>1 ⑥ A=2,X? 1
⑦ A? 2,X>1 ⑧ A? 2,X? 1
Test cases:
① A=2,B=0,X=4 (T T)
② A=2,B=1,X=1 (F T)
③ A=1,B=0,X=2 (F T)
④ A=1,B=1,X=1 (F F)
问题:没有测试到( T F)的路径入口
A > 1
AND B=0
T
A=2
OR X > 1
T
X = X / A
X = X + 1
返回
F
F
西安交通大学 刘海岩 15
路径覆盖每条可能的路径都至少执行一次,若图中有环,则每个环至少经过一次。
Test cases,
① A=1,B=1,X=1 (F F)
② A=1,B=1,X=2 (F T)
③ A=3,B=0,X=1 (T F)
④ A=2,B=0,X=4 (T T)
路径覆盖? 条件组合覆盖入口
A > 1
AND B=0
T
A=2
OR X > 1
T
X = X / A
X = X + 1
返回
F
F
西安交通大学 刘海岩 16
( 2)循环覆盖要覆盖含有循环结构的所有路径是不可能的,可通过限制循环次数来测试。给出以下设计原则:
单循环设 n为允许执行循环的最大次数,作以下测试:
① 跳过循环;
② 仅循环一次;
③ 循环 m次,m<n;
④ 分别循环 n-1次,n次,n+ 1次。
嵌套循环
① 置外循环处于最小循环计数值,对内层进行单循环测试;
② 由里向外,回退到上一层循环测试。
并置循环若完全独立,采用单循环策略;若第一个循环的计数器作为第二个循环的初值,用嵌套循环策略。
西安交通大学 刘海岩 17
( 3)基本路径测试主要思想:
该方法把要覆盖的路径数压缩到一定限度内,程序中的循环体最多只执行一次。
它是在程序控制流图的基础上,分析控制结构的环路复杂性,导出基本可执行路径集,由此设计一组测试用例,保证对程序中的每一个可执行语句至少执行一次。
西安交通大学 刘海岩 18
基本路径 测试的步骤为:
① 以详细设计或源程序为基础导出程序的控制流图,简称为流图( flow graph),它是反映控制流程的有向图。其中小圆圈○为控制流图的一个结点,表示一个或多个无分支的 PDL语句或源程序语句,表示控制流的箭头称为边或路径。
左图中显示了程序流程图及对应的流图:
1
2,3
7
6
8
9
10
11
4,5
1
2
3
4
5
6
7 8
.
.
11
9
西安交通大学 刘海岩 19
转换时注意:
一条边必须终止于一个结点,在选择结构中分支汇聚处即使无语句也应有一个汇聚结点。
如果判断中的条件表达式是复合条件,
则需改为一系列只有单个条件的嵌套判断。
如右图所示:
西安交通大学 刘海岩 20
② 计算流图 G的环路复杂性 V(G)。 Mccabe定义:
V(G)=封闭区域数+ 1
其中 封闭区域为边和结点圈定的区域,1为图形外的区域。
也可按另一种方法计算,V(G)=判定结点数+ 1
例如,18页的流图 V(G)=4。
③ 确定只包含独立路径的基本路径集。
一条独立路径是至少包含一条在其它独立路径中从未有过的边的路径,即至少包含一条新边。
程序的环路复杂性给出了程序基本路径集中的独立路径条数,这是确保程序中每个可执行语句至少执行一次所必需的测试用例数目的上界。
基本路径集不唯一。对于给定的流图,可以得到不同的基本路径。
西安交通大学 刘海岩 21
例如,在 18页图示的控制流图中,一组独立的路径是
path1,1 - 11
path2,1 - 2 - 3 - 4 - 5 - 10 - 1 - 11
path3,1 - 2 - 3 - 6 - 8 - 9 - 10 - 1 - 11
path4,1 - 2 - 3 - 6 - 7 - 9 - 10 - 1 - 11
路径 path1,path2,path3,path4组成了控制流图的一个基本路径集。
④ 设计测试用例,确保基本路径集中的每一条路径的执行。
必须注意,某些独立的路径往往不能以独立的方式被测试,
即穿越路径所需的数据组合不能形成程序的正常流,在这种情况下,这些路径的测试必须作为另一条路径测试的一部分进行测试。
西安交通大学 刘海岩 22
例:用基本路径测试方法对以下的程序(伪码描述)
设计用例。
Sort ①
for (i=1; i<=n-1; i++)
k=i; ②
for (j=i+1; j<=n; j++)
if (a[k] >a[j]) k=j
endfor ③ ④
if ( k!=i ) swap(a[i],a[k])
⑦ endfor ⑤ ⑥
endSort
1
2
3
4
5
6 7
西安交通大学 刘海岩 23
Path1,1-7
Path2,1-2-5-1-7
Path3,1-2-5-6-1-7
Path4,1-2-3-2-5-1-7
Path5,1-2-3-4-2-5-6-1-7
设计用例:
输入 预期输出结果 通过路径
n=1 排序表中只有一个数 Path1
n≥2且输入表 已排序的输出表 Path4
中已排序
n≥2且输入表 已排序的输出表 Path5
中未排序
Path2和 Path3无法单独测试,但已包含在 Path4和 Path5中测试过了。
西安交通大学 刘海岩 24
2、黑盒技术被测对象是功能独立的模块或构件,注重测试软件的功能需求。试图发现以下几类错误:
不正确或遗漏的功能;
接口错误;
数据结构或外部数据库访问错误;
性能错误;
初始化和终止条件错误。
几种具体的方法:
( 1)等价类划分主要思想:根据被测对象的功能说明和输入域,按合理的或不合理划分为若干等价类,为每个等价类设计一个测试用例,这样大大减少测试次数,提高测试效率。
该方法步骤如下:
西安交通大学 刘海岩 25
① 划分等价类对被测程序功能说明的输入域划分等价类。
以下是一些原则或经验:
当规定了输入范围时可划分:
无效类 [ 有效类 ]无效类
当规定了输入的一组值,且对不同值做不同处理时,每个允许的输入值是一个合理的等价类,另有一个不合理的等价类 ( 任何一个不允许的输入值 ) 。
当规定了输入数据必须遵循的规则时,可确定一个合理等价类(符合规则)和若干不合理等价类(从各种角度违反规则)。
为便于设计用例,每个等价类可划分为更小的等价类。
以上经验也适用于对输出数据的划分。
西安交通大学 刘海岩 26
② 设计测试用例
为每个等价类编号。
设计一个测试用例,使其尽可能多地覆盖尚未被覆盖的合理等价类,重复这一步直到所有合理等价类都被覆盖。
设计一个测试用例,使其只覆盖一个尚未被覆盖的不合理等价类,重复这一步直到所有不合理等价类都被覆盖。
( 2)边界值分析输入域的边界比中间更容易发现错误,是一种补充等价类划分的设计测试用例技术。
西安交通大学 刘海岩 27
( 3)错误推测根据经验或直觉推测程序中可能存在的各种错误,有针对性的设计检查这些错误的测试用例。
如:输入、输出数据为零的情况;输入表格为空或输入表格只有一行的情况。
( 4)使用判定表如果功能说明中含有多个输入条件的逻辑组合,可以建立判定表,判定表的每一列对应一个测试用例。
在实际测试中,综合使用这些方法,以达到最有效的测试。
西安交通大学 刘海岩 28
例:测试一个二分法的检索程序。
二分法检索将检索空间划分成了三个部分,每个部分构成了一个 等价类,选择这些等价类集合的 边界值作为测试用例。再结合错误推测,考虑:
① 检索序列中只有一个数,
② 序列长是奇数,
③ 序列长是偶数,
④ 检索的值不在检索序列中。
西安交通大学 刘海岩 29
二分法检索程序的测试用例输入数组( T) 关键字( key) 输出( Found,Location)
17 17 true,1
17 0 false,
17,18,21,23,29 17 true,1
17,18,21,23,29,38,41 41 true,7
17,18,21,23,29,38,41 23 true,4
17,18,21,23,29,38,41 21 true,3
17,18,21,23,29,38,41 29 true,4
17,18,21,23 20 false,
西安交通大学 刘海岩 30
5.3 软件测试策略软件测试策略包括测试计划、测试用例设计、测试结果评估等。测试计划中最主要的是描述测试步骤。
下图列出了软件测试的步骤,包括各个测试活动之间的关系以及需要的信息。
西安交通大学 刘海岩 31
西安交通大学 刘海岩 32
1、单元测试完成对最小的软件设计单元-软件构件或模块的测试。使用详细设计描述作为指南。对重要的控制路径进行测试以发现错误,多采用白盒测试技术。该步骤可以针对系统中多个构件 或模块 并行进行。
( 1)测试任务:
模块接口
局部数据结构
重要的执行路径
错误处理
边界条件西安交通大学 刘海岩 33
( 2)测试环境单元测试紧接在编码之后进行。但一个模块一般不能独立运行,测试时要对每个模块开发驱动程序( driver)和桩程序 (stub) 。
驱动程序:接收测试数据,调用被测程序,打印结果。
需正确定义驱动程序与被测模块的接口。
桩程序,用来模拟测试时缺少的被调用模块的活动。
将来由被测程序调用的真正模块替代。桩程序的接口同真正模块一致,内部只做少量处理,(如响应调用请求,打印,进入-退出,消息,或直接传回所需数据)。
西安交通大学 刘海岩 34
2、集成测试也称为组装测试。对单个构件或模块的测试达到目标之后,将它们组合成一个能工作的系统。一般根据设计中建造的软件体系结构采用黑盒技术进行测试。
“单个模块能正常工作,组装起来不会有问题!”
真的吗?
单元测试使用的驱动模块和桩模块,与它们所代替的真正模块并不完全等效,因此单元测试有不彻底、不严格的情况。
各个模块组装起来,穿越模块接口的数据可能会丢失。
一个模块的功能可能会对另一个模块的功能产生不利的影响。
各个模块的功能组合起来可能达不到预期的总的功能。
西安交通大学 刘海岩 35
单个模块可以接受的误差,组装起来可能积累和放大到不能接受的程度。
全局数据可能会出现问题。
因此必须要进行集成测试,用于发现模块组装中可能出现的问题,最终构成一个符合要求的软件系统。
深度优先自顶向下宽度优先渐增式 三明治式集成的方法自底向上非渐增式西安交通大学 刘海岩 36
集成测试的具体方法与步骤系统是构件组成的的层次结构。如图所示:
西安交通大学 刘海岩 37
( 1)自顶向下集成( top-down integration)
西安交通大学 刘海岩 38
与单元测试结合 起来的自顶向下测试:
西安交通大学 刘海岩 39
集成测试的步骤:
①测试顶端模块( M),用桩模块 (S)替代直接下层模块。
②根据深度优先或宽度优先的策略,每次用一个实际模块
(M)代换一个桩。
③每结合进一个模块后进行测试
④全部或部分地重复以前做过的测试。 M
S1 S2M1
S3 S4
M2
西安交通大学 刘海岩 40
优点,能在早期发现高层模块接口、主要控制等方面的问题;
初期的程序概貌可让人们较早地看到程序的主要功能,增强人们的信心。
缺点,桩模块只是对低层模块的模拟,不能提供完整的信息,许多重要的测试须推迟进行;
桩模块设计较多,测试开销大;
早期不能并行工作,不能充分利用人力。
西安交通大学 刘海岩 41
( 2)自底向上集成 (Bottom - up integration)
西安交通大学 刘海岩 42
自底向上集成步骤:
①把底层模块( M)组合成族,每族实现一个子功能。
②用驱动程序 (D)输入 测试数据,
测试子功能族。
③用实际模块 (M)替代驱动程序,
把子功能族组合成更大的族。
④重复上述工作,直至系统整个结构都测试完毕。
M M MM M
M
M M M
M M
M
D D D
D D
D
西安交通大学 刘海岩 43
优点,随着上移,驱动模块逐步减少,测试开销较小;
容易设计测试用例;
早期可以并行工作;
底层模块的错误能较早发现。
缺点,系统整体功能最后才能看到;
全局性的问题发现较晚。
西安交通大学 刘海岩 44
( 3)三明治式集成
( sandwich integration)
西安交通大学 刘海岩 45
( 4)一次性集成 (big-bang integration)
非渐增式测试。
优点:并行工作,充分利用人力。
缺点:很难找出错误的原因;不易区分接口错误和其他类型错误。
西安交通大学 刘海岩 46
集成策略的比较( Myers 1979)
自底向上自顶向下改进的自顶向下一次性集成三明治式 改进的三明治式集成 早 早 早 晚 早 早能产生基本运行程序的时间晚 早 早 晚 早 早需要驱动程序是 否 是 是 是 是需要桩程序 否 是 是 是 是 是工作的并行性中等 低 中等 高 中等 高测试特殊路径能力容易 难 容易 容易 中等 容易计划和控制顺序能力容易 难 难 容易 难 难西安交通大学 刘海岩 47
微软的集成方法微软的集成策略是由市场驱动的,基于尽快产生能运作的产品的需要,使得测试小组能随着开发人员对产品能做什么和应该做什么有更多的了解的同时,随时变动产品说明的特征。
产品和项目按特征被划分成各部分,不同的小组负责不同的特征。
里程碑的定义由特征的划分来决定,分为最重要的、
需要的和最不重要的。最重要的特征首先被开发和集成,
而每个里程碑包含了“缓冲时间”,处理意外的复杂性或延迟。如果进度必须缩减,则从产品中删掉最不关键的特征。
下图显示了里程碑的演化:
西安交通大学 刘海岩 48
西安交通大学 刘海岩 49
3、系统测试有如下过程:
( 1) 功能测试,
检查集成的系统在运行时是否满足需求中指定的功能。 单元测试和集成测试的重点是构件及构件间的交互。
这里的测试不必知道正在执行哪个构件,但必须知道系统是作什么的。与功能相关的活动集合称为线程
( thread),因此这里的功能测试有时称为线程测试。
功能测试采用黑盒技术,测试用例从需求文档中产生。
如,对一个文字处理系统的测试可以检查文档创建、文档修改、文档删除等功能。 有时可分析需求的语义,用输入与输出之间或输入与转换之间的逻辑关系建立判定表来实现测试。
西安交通大学 刘海岩 50
( 2) 性能测试,
针对的是非功能性需求,即测试的类型由非功能性需求的定义来决定 。
强度测试( stress test) 评价系统在短时间内到达其极限时的表现。
容量测试( volume test) 检查系统对大量数据的处理。
恢复测试( environmental test) 检查系统的容错(出错、
故障、掉电等处理)能力,能否在指定时间内修正错误并重新启动系统。
安全测试( security test) 测试系统的保护措施及数据与服务的完整性、保密性等。
还有许多方面的测试,如对用户的响应时间、执行某个功能的运行时间的计时测试,系统的可用性测试等。
以上是开发人员以需求规约为依据、采用黑盒技术,
通过对系统及其目标的理解而进行的测试。开发人员的理解需要用户的认可,因此还要进行以下用户确认的测试。
西安交通大学 刘海岩 51
( 1) 验收测试,
也称确认测试。指 验收软件的有效性,使用户确信他们需要的就是这个系统。有时在实际环境中进行,有时在开发环境中进行。除了检查系统功能性能外,还要进行软件配置审查,包括文档的完整性、一致性、准确性的检查,
是否具有维护阶段必需的细节。
( 2) 安装测试,在实际环境中进行的测试。测试系统的完备性及可能被现场条件影响的那些功能或非功能性特性。
还有 2种系统测试策略:
( 1) Alpha测试,软件交付用户后,用户在开发环境中由开发人员,指导,下进行的测试。
( 2) Beta测试,用户在目标环境(实际使用环境)下进行的测试。
如微软的,Windows XP” Beta 2测试版由用户免费试用,半年后测试版作废。
西安交通大学 刘海岩 52
4、测试的管理
( 1)测试文档为了控制测试的复杂性并提高测试效率,需建立测试文档:
测试计划,目标,文档引用,系统输入 /出及主要处理,主要测试,进度,所需材料等。
测试说明:测试项标识,满足的需求,方法条件,
测试用例,测试步骤等。
问题报告和分析报告:记录每一个测试事件,给出测试结果的完整信息,分析实际测试结果和预期结果的差异及影响,并确定问题严重等级。
见下图:
西安交通大学 刘海岩 53
西安交通大学 刘海岩 54
( 2)职责分配单元测试可由开发人员自己测试。一个子系统开发小组同时可以作为其它子系统小组开发的构件的测试小组。
体系结构设计人员可以作为集成测试小组,同一个测试文档可以用于测试小组间的交流。
对于后期的测试(如功能测试和性能测试)或者是质量需求极高的软件应由另一个独立的控制质量小组负责。设计人员将模型、源代码和测试用例提供给该小组,
由他们进行测试。他们将问题报告和分析报告发送给设计人员,以便对系统作必要的修改。修改后还应进行回归测试,确保没有引入新的错误。
西安交通大学 刘海岩 55
( 3)何时停止测试
“时间不够、资金不够的时候,就完成了测试。”
Musa提出了一个基于统计标准的答复:“在按照概率的方法定义的环境中,1000个 CPU小时内不出错的操作的概率大于 0.995,就有 95%的信心说我们已经进行了足够的测试。”
软件可靠性理论建立了一种基于执行时间的函数的软件故障(在测试过程中发现的错误)模型:
f(t)=(1/p)ln(l0pt+1) (参考教材 1p349)
其中 f(t)为软件在一定的测试时间 t后可能会发生故障的预期累计数目,l0为测试开始时的初始故障密度
(单位时间内的故障数),p为错误被发现和修正中的故障密度的呈递减的指数。
西安交通大学 刘海岩 56
瞬时的故障密度 l(t)可以使用 f(t)的导数得出:
l(t)=l0/(l0pt+1)
使用上述公式,可预测测试进程中预期的故障密度,实际的错误密度可以画在预测曲线上。如图所示:
如果在测试过程中实际收集的数据与预测曲线比较接近的话,就可估算出为了达到低的故障密度,整个测试过程所需要的时间。
软件可靠性模型给出了回答“测试什么时候完成”这种问题的有意义的指导。
西安交通大学 刘海岩 57
5.5 软件调试测试是系统化的有计划的活动,而调试是一门艺术!
调试是发现错误后消除错误的过程。要根据错误的症状找出原因和位置以便改错。
( 1)一般的调试技术
插入打印语句
运行部分程序
使用调试工具
回溯法西安交通大学 刘海岩 58
( 2) 归纳法:从错误症状中找出规律,推断出错原因。
收集数据 组织数据 研究数据间的关系 提出假设证明假设纠正错误能能不能不能
Y e s No
W h at
W h e r e
W h e n
H ow
3 W 1 H T a b le
西安交通大学 刘海岩 59
例:学生考试评卷报告。要求输出成绩排名、平均分、试题分析报告。
发现错误:对 51个学生评分? 中间值为 26(期望值 80)
对 1个学生评 分? 中间值为 1
观察分析:取奇数时出错?
打印的是中间学生的编号而非分数?
增加测试来验证上述推测。
西安交通大学 刘海岩 60
( 3) 演绎法:普通? 特殊从假设中逐步排除、精化,从而导出错误原因。
列举可能的原因排除不正确的假设精化余下的假设证明假设收集更多数据 纠正错误有剩余能不能无剩余西安交通大学 刘海岩 61
5.6 软件的可靠性和可用性
1、概念可靠性 (Reliability):系统在给定的 时间间隔内,
根据需求说明成功地运行的概率。也可以说可靠性是系统依照需求指定的功能不失败运作的可能性。
可用性 (Usability):系统在给定的 时间点 上根据需求说明成功地运行的概率。也可以说可用性是当有请求时(即在一定时刻)系统能执行有用服务的可能性。
可靠性与长期的行为有关,而可用性描述时间中某一给定点上的事情。
对于硬件,有的东西可能是高可靠的,但在时间的某一特定点上可能是不可用的。同样的概念也适用于软件系统。
西安交通大学 刘海岩 62
2、提高可靠性的辅助方法可靠性、可用性是相互依赖的系统特性,都反映了用户对系统的信任程度。如果系统是不可靠的,就很难保证系统的可用性、安全性、保密性等许多特性。如果系统不可用,用户将无法接受!
提高可靠性的辅助方法:
错误避免 开发技术上采取预防手段,如避免使用易出错的语言成分(指针)。
错误检测 测试与调试。
容错 系统中嵌入自检设施。
可靠性与正常使用中发生的错误概率有关。系统中有些部分很少使用,从中删除错误对系统的可靠性提高不大。每个用户使用系统的模式不同,对系统的可靠性就有不同的评价。如某个用户使用的输入集与易错输入集相交,他会体会到系统失败的滋味;但对于从不使用来自易错输入集的用户,系统总是可靠的!
西安交通大学 刘海岩 63
习题
1、二分法检索程序的流图如右,请用基本路径测试方法设计用例,
并与黑盒技术比较。
2、什么是软件测试?
“证明程序正确”为什么不能作为软件测试的目的?
3、白盒测试技术与黑盒测试技术共同点是什么?最主要的区别是什么?
西安交通大学 刘海岩 64
3、软件测试的策略包括哪些方面?描述软件测试步骤。
4、单元测试需要的两个支持构件是什么?各有什么作用?
5、集成测试有哪些具体的方法?渐增式测试与非渐增式测试各有什么优缺点?
6、系统测试包括哪些具体的测试?
7、测试管理包括哪些方面?为什么要管理?
8、软件可靠性与软件可用性有什么关系?什么时候评价软件的可靠性?
9、掌握基本路径测试、等价类划分、边界值分析、错误推测等方法,针对某一应用问题会使用这些方法设计测试用例。