软件测试实例
1,黑盒测试
等价类+边界值
流程:
1,根据输入需求划分有效等价类与无效等价类(对有效等价类的条件取反),并且对每个等价类进行编号
2,根据有效等价类的取值范围进行边界值划分
参考:
输入项 | 有效等价类 | 无效等价类 |
---|---|---|
输入项 | 等价类 | 边界值 |
---|---|---|
用例编号 | 覆盖用例 | 输入集合 | 预期集合 |
---|---|---|---|
因果图
流程:
1,根据需求描述提炼以下序列(原因,结果)
2,对原因进行抽象提炼(eg:add,delete,update,search等原因可以总结为修改数据)
3,根据需求描述画图···(常用∩∪~三个符号上线)
4,(可选)因果图转换为判定表并设计测试实例
参考:
原因 | 结果 |
---|---|
输入条件 | 原因聚簇 | ||||
---|---|---|---|---|---|
中间结果 | 抽象聚簇 | ||||
输出结果 | 结果聚簇 | ||||
测试用例 | Y/N |
用例编号 | 输入 | 预期结果 |
---|---|---|
决策表
流程:
1,同因果图,区别在于提炼序列变更为条件,动作
2,遍历所有动作导致的可能结果并填表(表格参考见)
3,根据化简规则(同消消乐的规则)对决策表进行化简
参考:
1 | 2 | 3 | … | N |
---|---|---|---|---|
条件聚簇 | ||||
动作聚簇 |
编号 | 输入条件 | 输入数据 | 预期结果 |
---|---|---|---|
2,白盒测试
逻辑覆盖测试
分类以及概念:
名称 | 概念 |
---|---|
语句覆盖 | 每个语句至少执行一次 |
判定覆盖 | 每个判定每个分支至少执行一次 |
条件覆盖 | 每个判定每个条件获得各种可能的取值 |
条件判定覆盖 | 条件∩判定 |
条件组合覆盖 | 各种条件的各种组合至少执行一次 |
路径覆盖 | 所有可能的路径被执行一次 |
参考:
#include <stdio.h>
void main(){
float A,B,X;
scanf("%f%f%f",&A,&B,&X);
if((A>1)&&(B==0))
X=X/A;
if((A==2)||(X>1))
X=X+1;
printf("%f",X);
}
1,绘制流程图
2,根据要求设计测试用例(丫不废话么)
eg:
1,语句覆盖,满足条件(A=2,B=0,X>1)的随意来一组
2,判定覆盖,每个判定一组约束条件,非本组的判定条件取反即可(A>1,B=0,X<=1)(A=2,B!=0,X>1)
3,条件覆盖,分解条件如下(A>1|A<=1)(B=0|B!=0)(A==2|A!=2)(X>1X<=1)设计用例覆盖以上条件即可
4,条件判定覆盖,根据判定得出覆盖路径,筛选条件设计满足该路径的条件即可
5,条件组合覆盖,通过第一个判定
if((A>1)&&(B==0))
可以得出以下组合的判定组合:
((A>1)&&(B!=0))
((A>1)&&(B==0))
((A<=1)&&(B!=0))
((A<=1)&&(B==0))
以此类推可以得出所有的该程序段的条件组合覆盖测试用例
6,路径覆盖,通过流程图转化为控制流图即可进行路径覆盖的测试用例的设计
基本路径测试
流程:
1,绘制控制流图
2,计算环路复杂度
3,找出独立路径
4,设计覆盖独立路径的测试用例
参考:
1,参考流程图(好像没有什么区别)三大结构(顺序,循环,选择)
2,边-节点+2|判定节点+1|区域数量
3,独立路径,每次至少(也可以多一点)引入一条新的,尚未执行的语句。该类路径的数量与环路复杂度相等
4,看具体需求了