第七章——实现-测试2【应聘准备可看看】
6 白盒测试技术
测试用例:测试数据和预期的输出结果
6.1 逻辑覆盖
- 语句覆盖:对程序的逻辑覆盖很少,只关心判定表达式的值,而没有分别测试判定表达式中每个条件取不同值时的情况
- 判定覆盖/分支覆盖:每个判定的每个分支都至少执行一次
- 条件覆盖:不仅每个语句至少执行一次,而且使判定表达式中的每个条件都取到各种可能的结果
- 判定/条件覆盖:选取足够多的测试数据,使得判定表达式中的每个条件都取到各种可能的值,而且每个判定表达式也都取到各种可能的结果。
- 条件组合覆盖:是更强的逻辑覆盖标准,它要求选取足够多的测试数据,使得每个判定表达式中条件的各种可能组合都至少出现一次。
- 点覆盖:点覆盖标准和语句覆盖标准是相同的。
- 边覆盖和路径覆盖:通常边覆盖和判定覆盖是一致的。选取足够多测试数据,使程序的每条可能路径都至少执行一次(如果程序图中有环,则要求每个环至少经过一次)。
6.2.控制结构测试
6.2.1 基本路径测试
① 根据过程设计结果画出相应的流图
② 计算流图的环形复杂度。【6.5.1讲过,我没啥印象】
③ 确定线性独立路径的基本集合
独立路径至少包含一条在定义该路径之前不曾用过的边。
④ 设计可强制执行基本集合中每条路径的测试用例。
6.2.2 条件测试
- 条件测试策略有两个优点:
①容易度量条件的测试覆盖率;
②程序内条件的测试覆盖率可指导附加测试的设计。 - 条件测试的目的不仅是检测程序条件中的错误,而且是检测程序中的其他错误。
- BRO(branch and relational operator)测试的条件测试策略:如果在条件中所有布尔变量和关系算符都只出现一次而且没有公共变量,则BRO测试保证能发现该条件中的分支错和关系算符错
6.2.3 循环测试
在结构化的程序中通常只有3种循环,即简单循环、串接循环和嵌套循环。
-
简单测试
应该使用下列测试集来测试简单循环,其中n是允许通过循环的最大次数。
跳过循环。
只通过循环一次。
通过循环两次。
通过循环m次,其中m<n-1。
通过循环n-1,n,n+1次。 -
嵌套循环
从最内层循环开始测试,把所有其他循环都设置为最小值。
对最内层循环使用简单循环测试方法,而使外层循环的迭代参数(例如,循环计数器)取最小值,并为越界值或非法值增加一些额外的测试。
由内向外,对下一个循环进行测试,但保持所有其他外层循环为最小值,其他嵌套循环为“典型”值。
继续进行下去,直到测试完所有循环。 -
串接循环
如果两个循环串接,而且第一个循环的循环计数器值是第二个循环的初始值,则这两个循环并不是独立的。当循环不独立时,建议使用测试嵌套循环的方法来测试串接循环。
独立则采用简单循环的方法。
7 黑盒测试技术
黑盒测试力图发现下述类型的错误:
(1) 功能不正确或遗漏了功能;
(2) 界面错误;
(3) 数据结构错误或外部数据库访问错误;
(4) 性能错误;
(5) 初始化和终止错误。
应用黑盒测试技术,能设计出满足下述标准的测试用例集。
(1)所设计出的测试用例能够减少为达到合理测试所需要设计的测试用例的总数。
(2)所设计出的测试用例能够告诉人们,是否存在某些类型的错误,而不是仅仅指出与特定测试相关的错误是否存在。
7.1 等价划分
有效和无效的代表
(1) 如果规定了输入值的范围,则可划分出一个有效的等价类(输入值在此范围内),两个无效的等价类(输入值小于最小值或大于最大值)。
(2) 如果规定了输入数据的个数,则类似地也可以划分出一个有效的等价类和两个无效的等价类。
(3) 如果规定了输入数据的一组值,而且程序对不同输入值做不同处理,则每个允许的输入值是一个有效的等价类,此外还有一个无效的等价类(任一个不允许的输入值)。
(4) 如果规定了输入数据必须遵循的规则,则可以划分出一个有效等价类(符合规则)和若干个无效等价类(从各种不同角度违反规则)。
(5) 如果规定了输入数据为整型,则可以划分出正整数、零和负整数3个有效类。
(6) 如果程序的处理对象是表格,则应该使用空表,以及含一项或多项的表。
7.2 边界值分析
使用边界值分析方法设计测试方案首先应该确定边界情况,通常输入等价类和输出等价类的边界。选取的测试数据应该刚好等于、刚刚小于和刚刚大于边界值。
7.3 错误推测
错误推测法在很大程度上靠直觉和经验进行
8 调试
- 调试(也称为纠错)作为成功测试的后果出现,即调试是在测试发现错误之后排除错误的过程。
- 软件错误的外部表现和它的内在原因之间可能并没有明显的联系。调试就是把症状和原因联系起来的尚未被人深入认识的智力过程。
8.1 调试过程
- 调试不是测试。
- 调试过程试图找出产生症状的原因,以便改正错误。
8.2.调试途径
- 蛮干法【读书人怎可蛮干?】
- 回溯法:从发现症状的地方开始,人工沿程序的控制流往回追踪分析源程序代码,直到找出错误原因为止。【适合用在小型程序】
- 原因排错法:对分查找法、归纳法和演绎法都属于原因排除法
9 软件可靠性
9.1.基本概念
- 软件可靠性是程序在给定的时间间隔内,按照规格说明书的规定成功地运行的概率。软件可靠性随着给定的时间间隔的加大而减少[时间段内不失效]
- 软件可用性是程序在给定的时间点,按照规格说明书的规定,成功地运行的概率