文章目录
软件测试方法
基于输入域的方法
无论是整个系统还是一个模块、一个函数,都有数据输入或参数调用,通过对不同数据的输入,检查其输出的数据以判断测试是否通过的方法,都归为基于输入域的方法。
该方法既适用于由功能模块组成的系统,也适用于由对象构成的系统。
等价类划分法
等价类划分可有两种不同的情况:有效等价类和无效等价类。
有效等价类:是指对于程序的规格说明来说是合理的、有意义的输入数据构成的集合。利用有效等价类可检验程序是否实现了规格说明中所规定的功能和性能。
无效等价类:与有效等价类的定义恰巧相反。
弱一般等价类测试
每个测试用例只使用一个等价类(区间)中的一个变量。
注意:等价类测试方法同样根据不同的测试对象,可适用于基于输入变量的测试用例选择和基于输出的测试用例选择。
强一般等价类测试
强一般等价类测试是基于多缺陷假设的
等价类笛卡尔积的每个元素对应的测试用例
弱健壮等价类测试
考虑问题中的无效值
基于单缺陷假设
测试用例:对于有效输入,使用每个有效等价类中的一个值;
对于无效输入,取一个无效值,并保持其他的值是有效的。
强健壮等价类测试
考虑问题中的无效值
基于多缺陷假设
从所有等价类笛卡尔积的每个元素中获得测试用例
例子
等价类划分
测试用例:
等价类:
决策表:
边界值分析法
一般情况的边界值测试(4n+1)
关注输入空间的边界,以标识测试用例。
基本思想:利用输入变量的最小值、略高于最小值、正常值、略低于最大值和最大值来设计测试用例。
基于一种关键假设—“单缺陷”假设:失效极少是由两个(或多个)缺陷的同时发生引起。
测试用例:使所有变量取正常值,只一个变量取极值。
健壮性测试(6n+1)
边界值分析的扩展:除了五个边界值分析取值外,加上略超过最大值、略小于最小值的取值。
目的:测试系统物理量超过其最大值时出现的情况,关注测试的预期输出。
最坏情况测试(5的N次方)
健壮最坏情况测试(7的N次方)
例子
基于组合及其优化的方法
决策表法
判定表元素:
条件桩,列出问题的所有条件
动作桩:列出可能针对问题所采取的操作
条件项:针对所列条件的具体赋值
动作项:列出在条件项(各种取值)组合情况下应该采取的动作。
规则:任何一个条件组合的特定取值及其相应要执行的操作。
判定表方法步骤:
列出所有的条件桩和动作桩;
填入条件项;
填入动作项,制定初始判定表;
简化、合并相似规则或者相同动作
有限条目决策表(所有条件都是二叉条件)
扩展条目决策表(条件可以有多个值的决策表)
构建扩展项决策表必须保证等价类构成输入域的一个真正的划分。若规则项之间存在“重叠”现象,就会产生冗余,即有多个规则被满足。
因果图
设计方法:
分析软件规格说明书中的输入输出条件并分析出等价类,将每个输入输出赋予一个标示符;分析规格说明中的语义,通过这些语义来找出相对应的输入与输入之间,输入与输出之间关系。
将对应的输入输出之间,输入与输出之间的关系关联起来,并将其中不可能的组合情况标注成约束或者限制条件,形成因果图。
根据因果图,创建判定表,将复杂的逻辑关系和多种条件组合很具体明确的表示出来。
把判定表的每一行作为依据设计测试用例。
恒等:若原因出现,则结果出现;若原因不出现,则结果不出现。
非(~):若原因出现,则结果不出现;若原因不出现,则结果出现。
或(V):若几个原因中有一个出现,则结果出现;若几个原因都不出现,则结果不出现。
与(∧):若几个原因都出现,结果才出现;若其中有一个原因不出现,则结果不出现。
从输入(原因)考虑四种约束
E(异或):表示两个原因不会同时成立,两个中最多有一个可能成立。
I(或):表示三个原因中至少有一个必须成立。
O(惟一):表示两个原因中必须有一个,且仅有一个成立。
R(要求):表示两个原因,a出现时,b也必须出现,a出现时,b不可能不出现。
从输出(结果)考虑一种约束
M(强制):两个结果,a为1时,b必须是0,当a为0时,b值不定。
例子
一个处理单价为5元钱的饮料自动售货机软件测试用例的设计。规格说明如下:若投入5元钱或10元钱,按下“橙汁”或“啤酒”的按钮,则相应的饮料就送出来。若售货机没有零钱找,则一个显示“零钱找完”的红灯亮,这时在投入10元钱并按下按钮后,饮料不送出来而且10元钱也退出来;若有零钱找,则显示“零钱找完”的红灯灭,在送出饮料的同时退还5元钱。
构造因果图分析规格说明,用决策表设计测试用例。
基于逻辑覆盖的方法
基路径
:1 int Test(int i_count, int i_flag)
2 {
3 int i_temp = 0;
4 while (i_count>0)
5 {
6 if (0 == i_flag)
7 {
8 i_temp = i_count + 100;
9 break;
10 }
11 else
12 {
13 if (1 == i_flag)
14 {
15 i_temp = i_temp + 10;
16 }
17 else
18 {
19 i_temp = i_temp + 20;
20 }
21 }
22 i_count--;
23 }
24 return i_temp;
25 }
公式圈复杂度V(G)=E-N+2,E是流图中边的数量,N是流图中结点的数量。
上图的圈复杂图是4。这个结果对我们来说有什么意义呢?它表示我们只要最多4个测试用例就可以达到基本路径覆盖。
1 B(4,24)
2 C,E,J(4,6,8,24)
3 C,D,F,H,A,B(4,6,13,15,22,4,24)
4 C,D,G,I,A,B(4,6,13,19,22,4,24)