当前位置:文档之家› 《软件测试黑盒白盒测试方法综合实训》

《软件测试黑盒白盒测试方法综合实训》

《软件测试黑盒白盒测试方法综合实训》
《软件测试黑盒白盒测试方法综合实训》

《软件测试综合实训》报告填写内容

(一)黑盒测试实训一

1、实训目的

理解黑盒测试的基本方法,掌握等价类划分法、边界值方法。

2、实验内容、步骤及结果

实验内容:程序有三个输入变量month、day、year(month、day和year均为

整数值,并且满足:1≤month≤12、1≤day≤31、1900≤ year ≤2050。),分别作为输入日期的月份、日、年份,通过程序可以输出该输入日期在日历上下一天的日期。例如,输入为2005年11月29日,则该程序的输出为2005年11月30日。

a.大家用自己熟悉的编程语言,实现上面问题的描述。

b.用等价类设计法和边界值法设计测试用例并执行,将测试结果与预期结果进行比对并查找、修复bug。

实验步骤:步骤一:编写源程序并运行该程序。

步骤二:编写测试用例设计。

步骤三:执行测试。

步骤四:将测试结果与预期结果进行比对并查找、修复bug。

实验结果:

条件划分:

等价类测试法:

2010/01/02 T1,T2,T3,T

6

2001/03/01 T4

2001-03-01 T5

T8

T7

T9

T10

T11

T12

T13

T14

T15

多变量边界测试法:对于n个变量的程序采用五点法产生4n+1个测试用例,本实验

3、结果分析与问题讨论

通过本次实验,我对黑盒测试用例有了进一步的了解。实验要求使用等价类划分法、边界值法的设计测试用例。在分析边界值设计时测试有点混,因为针对于本实验可以采用多变量边界值分析(通常采用“五点法”)或者健壮性边界值分析(通常采用“七点法”),本题有是有三个变量的程序,采用五点法将产生4n+1=4*3+1=13个测试用例,对于多变量健壮性边界值分析,需要设计6n+1=6*3+1=19个测试用例。在本次实验我采用的方法是五点法,测试用例比较多,需要认真分析。

(二)黑盒测试实训二

1、实训目的

理解黑盒测试的基本方法,掌握因果图法和决策表法设计测试用例。

2、实验内容、步骤及结果

1) 某软件规格说明书包含这样的要求:第一列字符必须是A或B,第二列字符必须是一个数字,在此情况下进行文件的修改,但如果第一列字符不正确,则给出信息L;如果第二列字符不是数字,则给出信息M。

要求:

a.根据问题描述画出因果图。

b.画出决策表并设计测试用例。

实验结果:

1)根据题意,

条件桩:问题的所有条件:

c1:第一列为A c2:第一列为B c3:第二列为数字

条件项:对条件桩给出的条件列出所有可能的取值

c1: 1-第一列为A,0-第一列不为A

c2: 1-第一列为B,0-第一列不为B

c3: 1-第二列为数字,0-第一列不为数字

动作桩:出现问题时按规定可能采取的操作

结果:e1:修改文件 e2:给出信息L e3:给出信息M

2)其对应的因果图如下:

C为中间节点,考虑到原因c1和c2不可能同时为1,因此在因果图上加上E(异或)约束。

2) 支付宝个人认证中,分为两部分:个人身份认证和银行卡认证。这两者都通

过后,认为个人认证成功。

个人身份认证需要提交个人基本信息及身份证复印件。银行卡认证分为两种:提现认证和充值认证。

要求:

a. 根据问题描述画出因果图。

b. 画出决策表并设计测试用例。

实验步骤:

步骤一:分析问题,列出原因和结果。

步骤二:画出因果图,将原因与结果用关系连接线连接。

步骤三:根据因果图生成决策表。

步骤四:根据决策表设计测试用例。

实验结果:

条件桩:问题的所有条件:

C1:个人基本信息

C2:身份证复印件

C3:提现认证

C4:充值认证

条件项:对条件桩给出的条件列出所有可能的取值

C1: 1—个人基本信息正确 0—个人基本信息不准确

C2: 1—身份证复印件有效 0—身份证复印件无效

C3: 1—提现认证成功0—提现认证失败

C4: 1—充值认证成功0—充值认证失败

动作桩:出现问题时按规定可能采取的操作

A1:个人身份认证成功。

A2:银行卡认证成功

A3:支付宝个人认证成功

动作项:指出在条件项的各组取值情况下采取的动作

H1: √--个人身份认证成功

H2: √--银行可认证成功

H3: √--支付宝个人认证成功因果图:

根据因果图推导出决策表

3.结果分析与问题讨论

通过本次黑盒测试实训,从结果上看,因果图只是清晰地表达了需求分析的内容,为了得到测试用例,我们需要借助于决策表,因果图中的“因”和“果”直接可以作为条件桩和动作桩。在画因果图的时候,要注意分析有些条件是不可以同时存在。

(三)白盒测试实训一

1.实训目的

a.掌握路径测试、数据流测试的基本方法。

b.运用路径测试、数据流测试的方法设计测试用例。

2.实验内容、步骤及结果

1) 阅读下面代码。

0 void DoWork (int x,int y,int z){

1 int k=0, j=0;

2 if((x>3)&&(z<10))

3 {

4 k=x*y-1;

5 j=sqrt(k);

6 }

7 if((x==4)||(y>5))

8 j=x*y+10;

9 }

要求:

①使用路径测试的方法

a. 画出控制流图。

b. 计算环形复杂度并列出基本路径。

c. 根据基本路径设计测试用例并执行测试。

②使用数据流测试法

a. 根据已画出的控制流图分析代码中所有变量的定义使用(区分谓词使用和计算使用)节点、定义使用对、定义使用路径(注明是否为定义清除路径)。

b. 根据全定义-使用路径覆盖准则(测试路径需要覆盖所有定义点到所有使用点的路径)找出测试路径并设计测试用例并执行测试。

实验步骤:

步骤一:根据代码画出相关图形。

步骤二:根据不同测试方法设计测试用例。

步骤三:运行代码执行测试用例

实验结果:

控制流图

环形复杂度分为两个圈计算,圈1和圈2分别如下:

圈1:V(G)=6-5+2=3

圈2:V(G)=5-4+2=3

总独立路径为:圈1复杂度*圈2复杂度=9条(取8条即可,分别为:

路径1:2(x>3?)→7(x==4?)→7(y>5?)→9

路径2:2(x>3?)→7(x==4?)→7(y>5?)→8→9

路径3:2(x>3?)→2(z<10)→7(x==4?)→7(y>5?)→9

路径4:2(x>3?)→2(z<10)→7(x==4?)→7(y>5?)→8→9

路径5:2(x>3?)→2(z<10)→4→5→7(y==4?)→7(y>5?)→9

路径6:2(x>3?)→2(z<10)→4→5→7(x==4?)→7(y>5?)→8→9

路径7:2(x>3?)→2(z<10)→7(x==4?)→8→9

路径8:2(x>3?)→2(z<10)→4→5→7(x==4?)→8→9

根据基本路径设计测试用例并执行测试。

测试结果测试路径

路径

k=0,j=22 路径

路径

k=29,j=40 路径

k=19,j=4 路径

k=35,j=46 路径

k=0,j=10 路径

k=-1,j=10 路径

②使用数据流测试法

的路径)找出测试路径并设计测试用例并执行测试。

测试路径1:0-1-2-4-5-7-8-9

测试路径2:0-1-2-7-9

测试路径3:0-1-2-7-8-9

3.结果分析与问题讨论

要正确分析判断程序的走向,然后画出控制流图。根据控制流图计算环形(圈)复杂度,

主要运用两种方法计算环形复杂度:(1)V(G)=E-N+2(2)V(G)=P+1,正确计算出环形复杂度,并确定独立路径,用测试用例来测试路径。复杂度是独立路径数的上界,独立路径可以小于复杂度。先计算预期结果,再用代码验证预期结果与测试结果是否一致。

(四)白盒测试实训二

1.实训目的

a. 掌握逻辑覆盖的基本方法。

b. 运用逻辑覆盖的方法设计测试用例。

2.实验内容、步骤及结果

1) 阅读下面源码。

#include

using namespace std;

int main()

{

int b;

int c;

int a;

cin >> a >> b >> c;

if (a*b*c != 0 && (a + b > c&&b + c > a&&a + c > b))

{

if (a == b&&b == c)

{

cout << "您输入的是等边三角形!";

}

else if((a==b||b==c)||a==c)

{

cout << "您输入的是等腰三角形!";

}

else if ((a*a + b*b == c*c) || (b*b + c*c == a*a) || (a*a + c*c == b*b)) {

cout << "您输入的是直角三角形!";

}

else {

cout << "普通三角形";

}

}

else{

cout << "您输入的不能构成三角形";

}

}

要求:

a. 画出程序流程图。

b. 分析判断语句与条件表达式。

c. 分别使用逻辑覆盖的5种覆盖标准设计测试用例并执行测试。

实验步骤:

步骤一:根据代码画出相关图形。

步骤二:根据5种覆盖标准计测试用例。

步骤三:运行代码执行测试用例

实验结果:

a. 画出程序流程图。

b.分析判断语句与条件表达式。

(1)a*b*c != 0 && (a + b > c&&b + c > a&&a + c > b)这四个条件必须同时满足才能构成三角形,若不满足其中任意一项都不可能构成三角形。

(2)a == b&&b == c在a*b*c != 0 && (a + b > c&&b + c > a&&a + c > b)成立的情况下,满足a == b&&b == c这两个条件,输出的三角形是等边三角形,若不满足其中任意一项,则不能输出等边三角形

(3)(a==b||b==c)||a==c,在a*b*c != 0 && (a + b > c&&b + c > a&&a + c > b)成立

的情况下,且a == b&&b == c不成立,满足(a==b||b==c)||a==c这三个条件,输出等腰三角形,则不能输出等腰三角形

(4)(a*a + b*b == c*c) || (b*b + c*c == a*a) || (a*a + c*c == b*b),在a*b*c != 0 && (a + b > c&&b + c > a&&a + c > b)成立的情况下,且 a == b&&b == c不成立,(a==b||b==c)||a==c也不成立,满足(a*a + b*b == c*c) || (b*b + c*c == a*a) || (a*a + c*c == b*b)这个条件输出直角三角形,否则输出普通三角形。

c.分别使用逻辑覆盖的5种覆盖标准设计测试用例并执行测试。在a*b*c != 0 && (a + b > c&&b + c > a&&a + c > b)成立的情况下

1.语句覆盖:选择足够多的测试数据,使得程序中的每一个可执行语句至少执行一次

2.判定(分支)覆盖:使得程序中的每一个判断至少获得一次“真”和一次“假”

3.条件覆盖:使得程序中每个判定表达式中的每个条件至少获得一次“真”和一次“假”第一个判定表达式:

a*b*c!=0 取真值,记为T1

a*b*c!=0 取假值,即a*b*c= 0,记为~T1

a+b>c取真值,记为T2

a+b>c取假值,即a+b≤c,记为~T2

b+c>a取真值,记为T3

b+c>a取假值,即b+c≤a,记为~T3

a+c>b取真值,记为T4

a+c>b取假值,即a+c≤b,记为~T4

第二个判定表达式:

a==b 取真值,记为T5

a==b 取假值,即a≠b,记为~T5

b==c取真值,记为T6

b==c取假值,即b≠c,记为~T6

第三个判定表达式:

a==b 取真值,记为T7

a==b 取假值,即a≠b,记为~T7

b==c取真值,记为T8

b==c取假值,即b≠c,记为~T8

a==c 取真值,记为T9

a==c取假值,即a≠c,记为~T9

第四个判定表达式:

a*a+b*b==c*c 取真值,记为T10

a*a+b*b==c*c 取假值,即a*a+b*b≠c*c,记为~T10 b*b+c*c==a*a取真值,记为T11

b*b+c*c==a*a取假值,即b*b+c*c≠a*a,记为~T11 a*a+c*c==b*b取真值,记为T12

a*a+c*c==b*b取假值,即a*a+c*c≠b*b记为~T12 条件覆盖的测试用例

测试结果:

4.判定/条件组合:

第一个判定表达式:

a*b*c!=0, a+b>c, b+c>a, a+c>b,记为T1,T2,T3,T4

a*b*c!=0, a+b≤c,b+c>a, a+c>b,记为T1, ~T2,T3,T4

a*b*c!=0, a+b>c, b+c≤a,a+c>b,记为T1,T2, ~T3,T4

a*b*c!=0, a+b>c, b+c>a, a+c≤b,记为T1,T2,T3, ~T4

a*b*c==0, a+b>c, b+c≤a,a+c>b,记为~T1,T2, ~T3,T4

a*b*c==0, a+b≤c,b+c>a ,a+c>b,记为~T1, ~T2,T3,T4

a*b*c==0, a+b>c, b+c>a, a+c≤b,记为~T1,T2,T3, ~T4

a*b*c==0, a+b≤c, b+c≤a, a+c>b,记为~T1, ~T2, ~T3,T4

a*b*c==0, a+b≤c, b+c>a, a+c≤b,记为~T1, ~T2, T3, ~T4

a*b*c==0, a+b>c, b+c≤a, a+c≤b,记为~T1,T2, ~T3, ~T4

a*b*c==0, a+b≤c, b+c≤a, a+c≤b,记为~T1, ~ T2, ~T3, ~T4

第二个判定表达式:

a==b,b==c,记为T5,T6

a==b,b≠c,记为T5, ~T6

a≠b,b==c,记为~T5,T6

a≠b, b≠c,记为~T5, ~T6

第三个判定表达式:(因为第三判定表达式包含了第二个判定表达式) a≠b, b≠c,a==c, 记为~T5, ~T6,T7

a≠b, b==c, a≠c, 记为~T5, T6, ~T7

a==b, b≠c, a≠c, 记为T5, ~T6, ~T7

a≠b, b≠c,a≠c, 记为~T5, ~T6, ~T7

a==b, b==c, a==c, 记为T5, T6,T7

第四个判定表达式:

a*a+b*b≠c*c,b*b+c*c≠a*a,a*a+c*c=b*b,记为~T8, ~T9,T10

a*a+b*b≠c*c,b*b+c*c=a*a,a*a+c*c≠b*b,记为~T8,T9, ~T10

a*a+b*b=c*c,b*b+c*c≠a*a,a*a+c*c≠b*b,记为T8, ~T9, ~T10

a*a+b*b≠c*c, b*b+c*c≠a*a,a*a+c*c≠b*b,记为~T8, ~T9, ~T10

判定/条件组合测试用例

T13 0,2,0 ab ~T1,T2,T3, ~T4,~T5, ~T6,T7, ~T8,~T9, ~T10

5.条件组合覆盖:

(1)a*b*c!=0,a+b>c,b+c>a,a+c>b属第一个判断地真分支

(2)a*b*c!=0,a+b≤c,b+c>a,a+c>b属第一个判断地假分支

(3)a*b*c!=0,a+b>c,b+c≤a,a+c>b属第一个判断地假分支

(4)a*b*c!=0,a+b>c,b+c>a,a+c≤b属第一个判断地假分支

(5)a*b*c==0,a+b>c,b+c≤a,a+c>b属第一个判断地假分支

(6)a*b*c==0,a+b≤c,b+c>a,a+c>b属第一个判断地假分支

(7)a*b*c==0,a+b>c,b+c>a,a+c≤b属第一个判断地假分支

(8)a*b*c==0,a+b≤c,b+c≤a,a+c>b属第一个判断地假分支

(9)a*b*c==0,a+b≤c,b+c>a,a+c≤b属第一个判断地假分支

(10) a*b*c==0,a+b>c,b+c≤a,a+c≤b属第一个判断地假分支

(11) a*b*c==0,a+b≤c,b+c≤a,a+c≤b属第一个判断地假分支

(12) a≠b, b≠c,a==c属第三个判断地真分支

(13) a≠b, b==c, a≠c属第三个判断地真分支

(14) a==b, b≠c, a≠c属第三个判断地真分支

(15) a≠b, b≠c,a≠c属第三个判断地假分支

(16) a==b,b==c,a==c属第三个判断地假分支

(17) a*a+b*b≠c*c, b*b+c*c≠a*a,a*a+c*c≠b*b属第四个判断地假分支(18) a*a+b*b=c*c,b*b+c*c≠a*a,a*a+c*c≠b*b属第四个判断地真分支(19) a*a+b*b≠c*c,b*b+c*c=a*a,a*a+c*c≠b*b属第四个判断地真分支(20) a*a+b*b≠c*c,b*b+c*c≠a*a,a*a+c*c=b*b属第四个判断地真分支

条件组合覆盖测试用例

测试结果

3.结果分析与问题讨论

本次实训主要是针对白盒的逻辑覆盖进行分析测试,逻辑覆盖是通过对程序逻辑结构的遍历实现对程序的覆盖,本次实训的题目需要分析各个判断或各个条件的数目较多,容易混在一起,注意区分5种覆盖准则。在分析条件组合时要注意else if((a==b||b==c)||a==c)已经包含了if (a == b&&b == c)。有些条件组合不符合逻辑是不可能成立的,需要删掉。

相关主题
文本预览
相关文档 最新文档