当前位置:文档之家› 实验二 白盒测试 (2)

实验二 白盒测试 (2)

实验二 白盒测试 (2)
实验二 白盒测试 (2)

实验二白盒测试

一、实验目的

1、掌握白盒测试的基本方法;

2、掌握白盒测试用例的编写。

二、实验要求

1、根据给出的程序分别使用语句覆盖、判定覆盖(也称为分支覆盖)、条件覆盖、判定-条件覆盖、条件组合测试、路径测试设计测试用例。

2、输入数据进行测试,填写测试用例。

三、实验内容

1、用C++或者Java编写一个类,完成下面函数的功能,并编写另外一个类,调用该方法:

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

{

int k=0,j=0;

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

{

k=x*y-1; //语句块1

j=sqrt(k);

}

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

{

j=x*y+10; //语句块2

}

j=j%3; //语句块3

}

要求:

(1)画出上面函数的流程图。

(2)分别使用语句覆盖、判定覆盖(也称为分支覆盖)、条件覆盖、判定-条件覆盖、条

件组合测试、路径测试设计测试用例(注意测试用例的格式)。

语句覆盖:

用例:x=4,y=6,z=8

判定覆盖:

用例1:x = 4 , y = 6 , z = 8

用例2:x = 3 , y = 5 , z = 8

条件覆盖:

用例1:x=3,y=8,z=8

用例2:x=4,y=5,z=13

判定-条件覆盖:

用例1:x=4,y=8,z=8

用例2:x=3,y=5,z=13

条件组合测试

用例1:x=4,y=8,z=8

用例2:x=4,y=3,z=13

用例3:x=2,y=8,z=8

用例4:x=2,y=3,z=13

路径测试:

用例1:x=4,y=8,z=8

用例2:x=4,y=3,z=13

用例3:x=6,y=2,z=8

用例4:x=2,y=3,z=13

(3)执行每个测试用例,执行完毕后填写测试用例。

2、用C++或者Java编写“计算被输入日期是星期几,例如公元1年1月1日是星期一,只要输入年月日,能自动回复当天是星期几。”测试用例;

程序说明:

A程序思路:计算输入日期与公元1年1月1日所相差的天数,具体如下:总天数=公元1年到输入日期上一年年底天数+输入年份的1月到上月月底天数+输入日期的天数;

B闰年满足条件(year%4==0)&&(year%100!=0)||(year%400==0)。

要求:

(1)分析各种输入情况,结合程序输出结果,并给出详细测试用例;

(2)根据(1)所划分的等价类,进行边界值分析,并给出具体的测试用例;

(3)决策表测试法;

①列出输入变量month、day、year的有效等价类;(条件桩)

②分析程序的规格说明,给出问题规定的可能采取操作;(动作桩)

③画出决策表(简化);

④根据决策表,给出详细测试用例。

代码:

#include

using namespace std;

int main(){

int x=1,year, month, day;

while(x) {

int i, num=0,total, total1, total2;

cout<<"请输入年份: ";

cin>>year;

cout<<"请输入月份: ";

cin>>month;

cout<<"请输入日期: ";

cin>>day;

//求得输入年份之前一年末的总天数

for(i=1; i

if((i%4==0)&&(i%100!=0)||(i%400==0))

num++;

}

total1 = 365*(year-num-1) + 366*num;

//求得输入年份的总天数

if((year%4==0)&&(year%100!=0)||(year%400==0)) {

//求得输入月份之前一月末的总天数

switch(month) {

case 1:total2 = 0;break;

case 2:total2 = 31;break;

case 3:total2 = 60;break;

case 4:total2 = 91;break;

case 5:total2 = 121;break;

case 6:total2 = 152;break;

case 7:total2 = 182;break;

case 8:total2 = 213;break;

case 9:total2 = 244;break;

case 10:total2 = 274;break;

case 11:total2 = 305;break;

case 12:total2 = 335;break;

}

} else {

switch(month){

case 1:total2 = 0;break;

case 2:total2 = 31;break;

case 3:total2 = 59;break;

case 4:total2 = 90;break;

case 5:total2 = 120;break;

case 6:total2 = 151;break;

case 7:total2 = 181;break;

case 8:total2 = 212;break;

case 9:total2 = 243;break;

case 10:total2 = 273;break;

case 11:total2 = 304;break;

case 12:total2 = 334;break;

}

}

//在加上输入的日,求其总和可得到从公元1年1月1日到输入日期当天的总天数total = total1 + total2 + day;

int week;

week = total % 7;

cout<<"您输入的日期是";

switch(week){

case 0:cout<<"星期天"<

case 1:cout<<"星期一"<

case 2:cout<<"星期二"<

case 3:cout<<"星期三"<

case 4:cout<<"星期四"<

case 5:cout<<"星期五"<

case 6:cout<<"星期六"<

}

cout<<"**********退出程序请输入0,否则任一输入继续**********"<

cin>>x;

}

}

2.测试用例设计

1)控制流图

2)环路复杂度计算

由图可知,图中的环路有六条,故环路复杂度为六。

3)基本路径集设计

基本路径集为:

A.1、2、3、4、5、6、7、8、11、12、14、15、16、17、18、19 B.1、2、3、4、5、6、7、8、9、11、12、14、15、16、17、18、19 C.1、2、3、4、5、6、7、8、9、10、11、12、13、15、16、17、18、19 D.1、2、3、4、5、6、7、8、9、10、11、12、14、15、16、17、18、19

注:由源程序代码可知,未走路径10则必定不通过路径13,故省去两条检测路径。

4)测试用例集设计

测试用例集为:

A路径:1-2-26 预期输出:星期一

B路径:2-2-2 预期输出:星期六

C路径:2010-11-16 预期输出:星期二

D路径:2008-8-6 预期输出:星期三

3、插装后源程序清单与判定覆盖率分析结果

#include

using namespace std;

int main(){

int x=1,year, month, day;

int m1=0,m2=0,m3=0,m4=0,m=15,n=0,f=0;

while(x) {

n++;

cout<<"=====请输入测试用例====="<

int i, num=0,total, total1, total2,qw;

cout<<"请输入年份: ";

cin>>year;

cout<<"请输入月份: ";

cin>>month;

cout<<"请输入日期: ";

cin>>day;

cout<<"请输入预期输出结果(星期一到星期天,对应输入1~7):";

cin>>qw;

cout<<"程序运行路径: 1->2->3->4->5->6->7->8";

for(i=1; i

if((i%4==0)&&(i%100!=0)||(i%400==0))

num++;

}

if(i>1){

cout<<"->9";

if(m1==0){m++;m1=1;}

}

if(num>0){

cout<<"->10";

if(m2==0){m++;m2=1;}

}

total1=365*(year-num-1)+366*num;

cout<<"->11->12";

if((year%4==0)&&(year%100!=0)||(year%400==0)) { cout<<"->13";

if(m3==0){m++;m3=1;}

switch(month) {

case 1:total2 = 0;break;

case 2:total2 = 31;break;

case 3:total2 = 60;break;

case 4:total2 = 91;break;

case 5:total2 = 121;break;

case 6:total2 = 152;break;

case 7:total2 = 182;break;

case 8:total2 = 213;break;

case 9:total2 = 244;break;

case 10:total2 = 274;break;

case 11:total2 = 305;break;

case 12:total2 = 335;break;

}

}

else {

cout<<"->14";if(m4==0){m++;m4=1;}

switch(month) {

case 1:total2 = 0;break;

case 2:total2 = 31;break;

case 3:total2 = 59;break;

case 4:total2 = 90;break;

case 5:total2 = 120;break;

case 6:total2 = 151;break;

case 7:total2 = 181;break;

case 8:total2 = 212;break;

case 9:total2 = 243;break;

case 10:total2 = 273;break;

case 11:total2 = 304;break;

case 12:total2 = 334;break;

}

}

cout<<"->15->16->17->18->19"<

total = total1 + total2 + day; int week;

week = total % 7;

cout<<"-----该测试用例测试结果-----"<

cout<<"测试用例"<

case 0:cout<<"星期天, ";break;

case 1:cout<<"星期一, ";break;

case 2:cout<<"星期二, ";break;

case 3:cout<<"星期三, ";break;

case 4:cout<<"星期四, ";break;

case 5:cout<<"星期五, ";break;

case 6:cout<<"星期六, ";break;

}

cout<<"实际输出为:";

switch(week) {

case 0:cout<<"星期天, ";break;

case 1:cout<<"星期一, ";break;

case 2:cout<<"星期二, ";break;

case 3:cout<<"星期三, ";break;

case 4:cout<<"星期四, ";break;

case 5:cout<<"星期五, ";break;

case 6:cout<<"星期六, ";break;

}

if(week==qw%7) cout<<"成功!"<

else{

cout<<"失败!"<

}

cout<

cout<<"=====本次测试用例测试已结束,退出测试请输入0,否则任一输入继续测试====="<

cin>>x;

}

cout<<"最终对main函数中while内循环语句单元测试结果统计:"<

cout<<"共执行"<

}

测试结果:

四、实验步骤

1、依次按照每种方法的步骤来写出测试用例

2、测试,得出结果。

五、实验总结

本次实验主要是运用白盒测试的方法,设计测试用例。通过本次实验,了解了各种覆盖的区别与联系,对软件测试有了进一步的认识和学习,对白盒测试流程有了较清楚的了解,收获很多。

实验二 白盒测试

白盒测试实验 一实验内容 1、系统地学习和理解白盒测试的基本概念、原理,掌握白盒测试的基本技术和方法; 2、举例进行白盒测试,使用语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合 覆盖、路径覆盖进行测试。 3、通过试验和应用,要逐步提高和运用白盒测试 技术解决实际测试问题的能力; 4、熟悉C++编程环境下编写、调试单元代码的基本操作技术和方法; 5、完成实验并认真书写实验报告(要求给出完整的测试信息,如测试程序、测试用例, 测试报告等) 二实验原理 白盒测试原理:已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否已经过检查。它是把测试对象看作装在一个透明的白盒子里,也就是完全了解程序的结构和处理过程。这种方法按照程序内部的逻辑测试程序,检验程序中的每条通路是否都能按预定要求正确工作。其又称为结构测试。 对于该实验的例子给出其流程图如下图所示,我们来了解白盒测试的基本技术和方法。

语句覆盖是指选择足够的测试用例,使得程序中每个语句至少执行一次。如上例选择测试用例x=1,y=1和x=1,y=-1可覆盖所有语句。 判定覆盖是指选择足够的测试用例,使得程序中每一个判定至少获得一次“真”值和“假”值,从而使得程序的每个分支都通过一次(不是所有的逻辑路径)。选择测试用例x=1,y=1和x=1,y=-1可覆盖所有判定。 条件覆盖是指选择语句多数的测试用例,使得程序判定中的每个条件能获得各种不同的结果。选择测试用例x=1,y=1和x=-1,y=-1可覆盖所有条件。 判定/条件覆盖是指选择足够多的测试用例,使得程序判定中每个条件取得条件可能的值,并使每个判定取到各种可能的结果(每个分支都通过一次)。即满足条件覆盖,又满足判定覆盖。选择测试用例x=1,y=1和x=-1,y=-1可覆盖所有判定/条件。 条件组合覆盖是指选择足够的测试用例,使得每个判定中的条件的各种可能组合都至少出现一次(以判定为单位找条件组合)。 注:a,条件组合只针对同一个判断语句存在多个条件的情况,让这些条件的取值进行笛卡尔乘积组合。 b,不同的判断语句内的条件取值之间无需组合。 c,对于但条件的判断语句,只需要满足自己的所有取值即可。 选择测试用例x=1,y=1;x=1,y=-1,x=-1,y=1和x=-1,y=-1可覆盖所有条件组合。 路径覆盖是分析软件过程流的通用工具,有助分离逻辑路径,进行逻辑覆盖的测试,所用的流程图就是讨论软件结构复杂度时所用的流程图。 三实验方法 1、语句覆盖 测试用例输入输出magic 判定M的取值判定N的取值覆盖路径 x=1,y=1 12 T F abef x=1,y=-1 0 F T acdf 2、判定覆盖 测试用例输入输出magic 判定M的取值判定N的取值覆盖路径 x=1,y=1 12 T F abef x=1,y=-1 0 F T acdf 3、条件覆盖 测试用例输入输出magic 判定M的取值判定N的取值覆盖路径 x=1,y=1 12 T F abef x=-1,y=-1 0 T T acdf 4、判定/条件覆盖 测试用例输入输出magic 判定M的取值判定N的取值覆盖路径 x=1,y=1 12 T F abef x=-1,y=-1 0 T T acdf

软件测试实验二(三角形白盒测试)报告

实验二测试报告 一、核心程序代码 /** 判断三角形的类 */ public class TriangleTestMethod { /** 判断三角形的种类。参数a, b, c分别为三角形的三边, * 返回的参数值为0,表示非三角形; * 为1,表示普通三角形; * 为2,表示等腰三角形; * 为3,表示等边三角形。 */ public static int comfirm(int a, int b, int c) { if((a + b > c) && (b + c > a) && (a + c > b)) { // 判断为三角形 if((a == b) && (b ==c)) // 判断为等边三角形 return 3; if((a == b) || (b == c) || (a == c)) // 判断为等腰三角形 return 2; else // 判断为普通三角形 return 1; } else { // 为非三角形 return 0; } } }

二、程序流程图 ① N a + b > c && b + c > a && a + c > b Y ② Y a == b && b ==c N ④ a == b || b == c || a == c N Y ③⑥⑦⑤ Return 3 Return 1 Return 2 Return 0 Exit 三、测试用例 1.语句覆盖测试用例: 输入期望输出覆盖对象测试结果 Case1 Case2 Case3 Case4 a=1, b=2, c=3 a=3, b=4, c=5 1 2 3 ①,⑤0 1 2 3 ①,②,④,⑥ ①,②,④,⑦ ①,②,③ a=3, b=3, c=4 a=3, b=4, c=5 2.判定覆盖测试用例 输入期望输出覆盖对象测试结果 Case11 Case12 Case13 Case14 a=1, b=2, c=3 a=3, b=4, c=5 a=3, b=3, c=4 a=3, b=4, c=5 1 2 3 ①,⑤0 1 2 3 ①,②,④,⑥ ①,②,④,⑦ ①,②,③

实验四、白盒测试技术(二)

实验四、白盒测试技术(二) 一、实验类型 实验类型为验证型,2个学时。 二、实验目的 (1)通过简单程序白盒测试,熟悉测试过程,对软件测试行程初步了解,并养成良好的测试习惯; (2)熟练掌握如何运用基路径测试方法进行测试用例设计,初步熟悉如何利用程序插装技术进行逻辑覆盖率分析; 三、背景知识 基本路径测试 如果把覆盖的路径数压缩到一定限度内,例如,程序中的循环体只执行零次和一次,就成为基本路径测试。它是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例的方法。 设计出的测试用例要保证在测试中,程序的每一个可执行语句至少要执行一次。 ① 程序的控制流图 控制流图是描述程序控制流的一种图示方法。基本控制构造的图形符号如图所示。符号○称为控制流图的一个结点,一组顺序处理框可以映射为一个单一的结点。控制流图中的箭头称为边,它表示了控制流的方向,在选择或多分支结构中分支的汇聚处,即使没有执行语句也应该有一个汇聚结点。边和结点圈定的区域叫做区域,当对区域计数时,图形外的区域也应记为一个区域。 图1 控制流图的各种图形符号 如果判定中的条件表达式是复合条件时,即条件表达式是由一个或多个逻辑运算符(OR,AND,NAND,NOR)连接的逻辑表达式,则需要改复合条件的判定为一系列只有单个条件的嵌套的判定。例如对应图3-2. (a) 的复合条件的判定,应该画成如图3-2. (b) 所示的控制流图。条件语句if a OR b 中条件a和条件b各有一个只有单个条件的判定结点。

图2 复合逻辑下的控制流图 ② 计算程序环路复杂性 进行程序的基本路径测试时,程序的环路复杂性给出了程序基本路径集合中的独立路径条数,这是确保程序中每个可执行语句至少执行一次所必需的测试用例数目的上界。 所谓独立路径,是指包括一组以前没有处理的语句或条件的一条路径。如在图3-3(b)所示的控制流图中,一组独立的路径是: 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组成了图3-3 (b) 所示控制流图的一个基本路径集。只要设计出的测试用例能够确保这些基本路径的执行,就可以使得程序中的每个可执行语句至少执行一次,每个条件的取真分支和取假分支也能得到测试。基本路径集不是唯一的,对于给定的控制流图,可以得到不同的基本路径集。 (a) 程序流程图(b) 控制流图 图3 程序流程图与对应的控制流图 通常环路复杂性可用以下三种方法求得。 ?将环路复杂性定义为控制流图中的区域数。 ?设E为控制流图的边数,N为图的结点数,则定义环路复杂性为V(G)=E-N+2。 ?若设P为控制流图中的判定结点数,则有V(G)=P+1。 因为图5.14(b)所示控制流图有4个区域。其环路复杂性为4。它是构成基本路径集的

实验二 白盒测试 (2)

实验二白盒测试 一、实验目的 1、掌握白盒测试的基本方法; 2、掌握白盒测试用例的编写。 二、实验要求 1、根据给出的程序分别使用语句覆盖、判定覆盖(也称为分支覆盖)、条件覆盖、判定-条件覆盖、条件组合测试、路径测试设计测试用例。 2、输入数据进行测试,填写测试用例。 三、实验内容 1、用C++或者Java编写一个类,完成下面函数的功能,并编写另外一个类,调用该方法:void DoWork(int x,int y,int z) { int k=0,j=0; if((x>3)&&(z<10)) { k=x*y-1; //语句块1 j=sqrt(k); } if((x= =4)||(y>5)) { j=x*y+10; //语句块2 } j=j%3; //语句块3 } 要求: (1)画出上面函数的流程图。

(2)分别使用语句覆盖、判定覆盖(也称为分支覆盖)、条件覆盖、判定-条件覆盖、条 件组合测试、路径测试设计测试用例(注意测试用例的格式)。 语句覆盖: 用例:x=4,y=6,z=8 判定覆盖: 用例1:x = 4 , y = 6 , z = 8 用例2:x = 3 , y = 5 , z = 8 条件覆盖: 用例1:x=3,y=8,z=8 用例2:x=4,y=5,z=13 判定-条件覆盖: 用例1:x=4,y=8,z=8 用例2:x=3,y=5,z=13 条件组合测试 用例1:x=4,y=8,z=8 用例2:x=4,y=3,z=13

用例3:x=2,y=8,z=8 用例4:x=2,y=3,z=13 路径测试: 用例1:x=4,y=8,z=8 用例2:x=4,y=3,z=13 用例3:x=6,y=2,z=8 用例4:x=2,y=3,z=13 (3)执行每个测试用例,执行完毕后填写测试用例。 2、用C++或者Java编写“计算被输入日期是星期几,例如公元1年1月1日是星期一,只要输入年月日,能自动回复当天是星期几。”测试用例; 程序说明: A程序思路:计算输入日期与公元1年1月1日所相差的天数,具体如下:总天数=公元1年到输入日期上一年年底天数+输入年份的1月到上月月底天数+输入日期的天数; B闰年满足条件(year%4==0)&&(year%100!=0)||(year%400==0)。 要求: (1)分析各种输入情况,结合程序输出结果,并给出详细测试用例; (2)根据(1)所划分的等价类,进行边界值分析,并给出具体的测试用例; (3)决策表测试法; ①列出输入变量month、 day、 year的有效等价类;(条件桩) ②分析程序的规格说明,给出问题规定的可能采取操作;(动作桩) ③画出决策表(简化); ④根据决策表,给出详细测试用例。 代码: #include using namespace std; int main(){ int x=1,year, month, day; while(x) { int i, num=0,total, total1, total2; cout<<"请输入年份: "; cin>>year; cout<<"请输入月份: "; cin>>month; cout<<"请输入日期: "; cin>>day; //求得输入年份之前一年末的总天数 for(i=1; i

[求职简历]白盒测试实验报告

软件测试实验二 一:实验目的 1.通过实验熟悉测试用例设计 2.通过实验熟悉白盒测试 二:实验内容1: 1.用java编写一个类,完成下面函数的功能,并编写另外一个类,调用该方法: void DoWork(int x,int y,int z) { int k=0,j=0; if((x>3)&&(z<10)) { k=x*y-1; //语句块1 j=sqrt(k); } if((x= =4)||(y>5)) { j=x*y+10; //语句块2 } j=j%3; //语句块3 } 试验内容2: 1、画出上面函数的流程图。 2、分别使用语句覆盖、判定覆盖(也称为分支覆盖)、条件覆盖、判定-条件覆盖、条件组合测试、路径测试设计测试用例(注意测试用例的格式)。 3、执行每个测试用例,执行完毕后填写测试用例。

二:程序 public class Test { static void dowork(int x,int y,int z) { int k=0,j=0; if((x>3)&&(z<10)) { k=x*y-1; j=(int)Math.sqrt(k); } if((x==4)||(y>5)) { j=x*y+10; } j=j%3; System.out.println("k="+k); x>3 and z<10 x==4 or y>5 k=x*y-1 j=sqrt(k) T F T a c e b j=j%3 j=x*y+10 F d

System.out.println("j="+j); } public static void main(String[] args) { dowork(4,6,5); } } 三:设计测试用例 1.语句覆盖 x=4,y=6,z=5 2.判定覆盖 x,y,z (x>3) and (z<10) (x=4) or (y>5) 执行路径4,6,7 真真ace 2,5,10 假假abd 3.条件覆盖 x>3为真,记为T1 x>3为假,记为-T1 z<10为真,记为T2 z<10为假,记为-T2 x=4为真,记为T3 x=4为假,记为-T3 y>5为真,记为T4 y>5为假,记为-T4 x,y,z 执行路径覆盖条件覆盖分支3,5,5 abe -T1,T2,-T3,T4 be 4,4,11 abe T1,-T2,T3,-T4 be 4.判定—条件覆盖 x,y,z 执行路径覆盖条件覆盖分支 1 4, 4, 5 ace T1,T2,T3,T4 ce 2 2, 6,11 abd -T1,-T2,-T3,-T4 bd 5.条件组合覆盖 1.X>3,Z<10,记为T1,T2 2.X>3,Z>=10,记为T1,-T2 3.X<=3,Z<10,记为–T1,T2 4.X<=3,Z>=10记为–T1,-T2 5.X=4,Y>5 记为T3,T4

实验1-白盒测试实验报告

实验1-白盒测试实验报告

第一章白盒测试 实验1 语句覆盖 【实验目的】 1、掌握测试用例的设计要素和关键组成部 分。 2、掌握语句覆盖标准,应用语句覆盖设计测 试用例。 3、掌握语句覆盖测试的优点和缺点。 【实验原理】 设计足够多的测试用例,使得程序中的每个语句至少执行一次。 【实验内容】 根据下面提供的程序,设计满足语句覆盖的测试用例。 1、程序1源代码如下所示: #include void main()

{ int b; int c; int a; if(a*b*c!=0&&(a+b>c&&b+c>a&&a+c>b)) { if(a==b&&b==c) { cout<<"您输入的是等边三角形!"; } else if((a+b>c&&a==b)||(b+c>a&&b==c)||(a+c> b&&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=6,b=7,c=8普通三角形 A=3,b=4,c=5直角三角形 A=4,b=2,c=4等腰三角形 A=1,b=1,c=1等边三角形 A=20,b=10,c=1非三角形 2、程序2源代码如下所示: void DoWork(int x,int y,int z) {

白盒测试实验报告-范例

实验报告书 实验一白盒测试 学生姓名:李庆忠 专业:计算机科学与技术学号:1341901317

白盒测试实验报告 一实验内容 1、系统地学习和理解白盒测试的基本概念、原理,掌握白盒测试的基本技术和方法; 2、举例进行白盒测试,使用语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合 覆盖、路径覆盖进行测试。 3、通过试验和应用,要逐步提高和运用白盒测试技术解决实际测试问题的能力; 4、熟悉C++编程环境下编写、调试单元代码的基本操作技术和方法; 5、完成实验并认真书写实验报告(要求给出完整的测试信息,如测试程序、测试用例, 测试报告等) 二实验原理 白盒测试原理:已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否已经过检查。它是把测试对象看作装在一个透明的白盒子里,也就是完全了解程序的结构和处理过程。这种方法按照程序内部的逻辑测试程序,检验程序中的每条通路是否都能按预定要求正确工作。其又称为结构测试。 流程图如下图所示 实验代码 #include"stdio.h"

int main() { int x,y,z; scanf("%d%d",&x,&y); if((x>0)&&(y>0)) { z=x+y+10; } else { z=x+y-10; } if(z<0) { z=0; printf("%d\n",z); } else { printf("%d\n",z); } return 0; } 语句覆盖是指选择足够的测试,使得程序中每个语句至少执行一次。如选择测试x=1,y=1和x=1,y=-1可覆盖所有语句。 判定覆盖是指选择足够的测试,使得程序中每一个判定至少获得一次“真”值和“假”值,从而使得程序的每个分支都通过一次(不是所有的逻辑路径)。选择测试x=1,y=1和x=1,y=-1可覆盖所有判定。 条件覆盖是指选择语句多数的测试,使得程序判定中的每个条件能获得各种不同的结果。选择测试x=1,y=1和x=-1,y=-1可覆盖所有条件。 判定/条件覆盖是指选择足够多的测试,使得程序判定中每个条件取得条件可能的值,并使每个判定取到各种可能的结果(每个分支都通过一次)。即满足条件覆盖,又满足判定覆盖。选择测试x=1,y=1和x=-1,y=-1可覆盖所有判定/条件。 条件组合覆盖是指选择足够的测试,使得每个判定中的条件的各种可能组合都至少出现一次(以判定为单位找条件组合)。 注:a,条件组合只针对同一个判断语句存在多个条件的情况,让这些条件的取值进行笛卡尔乘积组合。 b,不同的判断语句内的条件取值之间无需组合。 c,对于但条件的判断语句,只需要满足自己的所有取值即可。 选择测试用例x=1,y=1;x=1,y=-1,x=-1,y=1和x=-1,y=-1可覆盖所有条件组合。 路径覆盖是分析软件过程流的通用工具,有助分离逻辑路径,进行逻辑覆盖的测试,所用的流程图就是讨论软件结构复杂度时所用的流程图。

最新软件测试白盒测试实验报告

7.使用白盒测试用例设计方法为下面的程序设计测试用例: ·程序要求:10个铅球中有一个假球(比其他铅球的重量要轻),用天平三次称出假球。 ·程序设计思路:第一次使用天平分别称5个球,判断轻的一边有假球;拿出轻的5个球,拿出其中4个称,两边分别放2个球;如果两边同重,则剩下的球为假球;若两边不同重,拿出轻的两个球称第三次,轻的为假球。 【源程序】 using System; using System.Collections.Generic; using System.Linq; using System.Text; using NUnit.Framework; namespace Test3_7 { [TestFixture] public class TestGetMinValue { [Test] public void AddTwoNumbers() { Random r = new Random(); int n; int[] a=new int[10]; n = r.Next(0, 9); for (int i = 0; i < a.Length; i++) { if (i == n) a[i] = 5; else a[i] = 10; } GetMin gm = new GetMin(); Assert.AreEqual(n,gm.getMinvalue(a)); }

} public class GetMin { public int getMinvalue(int[] m) { double m1 = 0, m2 = 0, m3 = 0, m4 = 0; for (int i = 0; i < 5; i++) { m1 = m1 + m[i]; } for (int i = 5; i < 10; i++) { m2 = m2 + m[i]; } if (m1 < m2) { m3 = m[1] + m[0]; m4 = m[3] + m[4]; if (m3 > m4) { if (m[3] > m[4]) return 4; else return 3; } else if (m3 < m4) { if (m[0] > m[1]) return 1; else return 0; } else return 2; } else { m3 = m[5] + m[6]; m4 = m[8] + m[9]; if (m3 < m4) { if (m[5] > m[6]) return 6;

2016年东南大学软件测试白盒测试实验二

实用文档 软件测试基础与实践实验报告 实验名称:白盒测试实验二 实验地点:计算机软件楼 实验日期:2016.11.9 学生姓名:王鑫 学生学号:71114430

东南大学软件学院制 实用文档 一、实验目的 (1)巩固白盒测试知识,能熟练应用基本路径测试方法设计测试用例 (2)学习测试用例的书写 二、实验内容 (一)实验一: 基本路径测试技术实验 运用基本路径测试方法,分别对程序WeekB 中的方法IsCorrect()和getResult()进行测试。要求: (1) 画出程序流图。 (2) 计算环复杂度。 (3) 找到基本路径集合。 (4) 设计具体的测试用例。 方法IsCorrect() 1.画出程序流图 bool IsCorrect(int y,int m,int d) { if(y<1) return false; else { if(((y%4==0)&&(y_x0010_0!=0))||(y@0==0)) maxA[1]=29; if(m<0||m>12) return false; else { if(d>maxA[m-1]) return false; else return true;

} } 实用文档 78 end

2.计算环复杂度 V(G)=流图中的区域数量=8 3.找到基本路径集合 设计具体的测试用例4. 基本路径实际输出期望输出编号输入执行条件实用文档

条件判断编号6 3 3y 5x 5 3x 1 T P1 F T P2 F F F T P3 F F F T P4 F F F F F F F F F F P5 F T P6 F F T T P7 F F T F T T T P8 T F 方法getResult () 1.画出程序流图 int getResult(int y,int m,int d) { long totalDays=0; for(int i=1;i

白盒测试实验报告

白盒测试实验报告 一实验内容 1、系统地学习和理解白盒测试的基本概念、原理,掌握白盒测试的基本技术和方法; 2、举例进行白盒测试,使用语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合 覆盖、路径覆盖进行测试。 3、通过试验和应用,要逐步提高和运用白盒测试技术解决实际测试问题的能力; 4、熟悉C++编程环境下编写、调试单元代码的基本操作技术和方法; 5、完成实验并认真书写实验报告(要求给出完整的测试信息,如测试程序、测试用例, 测试报告等) 二实验原理 白盒测试原理:已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否已经过检查。它是把测试对象看作装在一个透明的白盒子里,也就是完全了解程序的结构和处理过程。这种方法按照程序内部的逻辑测试程序,检验程序中的每条通路是否都能按预定要求正确工作。其又称为结构测试。 对于该实验的例子给出其流程图如下图所示,我们来了解白盒测试的基本技术和方法。 语句覆盖是指选择足够的测试用例,使得程序中每个语句至少执行一次。如上例选择测

试用例x=1,y=1和x=1,y=-1可覆盖所有语句。 判定覆盖是指选择足够的测试用例,使得程序中每一个判定至少获得一次“真”值和“假”值,从而使得程序的每个分支都通过一次(不是所有的逻辑路径)。选择测试用例x=1,y=1和x=1,y=-1可覆盖所有判定。 条件覆盖是指选择语句多数的测试用例,使得程序判定中的每个条件能获得各种不同的结果。选择测试用例x=1,y=1和x=-1,y=-1可覆盖所有条件。 判定/条件覆盖是指选择足够多的测试用例,使得程序判定中每个条件取得条件可能的值,并使每个判定取到各种可能的结果(每个分支都通过一次)。即满足条件覆盖,又满足判定覆盖。选择测试用例x=1,y=1和x=-1,y=-1可覆盖所有判定/条件。 条件组合覆盖是指选择足够的测试用例,使得每个判定中的条件的各种可能组合都至少出现一次(以判定为单位找条件组合)。 注:a,条件组合只针对同一个判断语句存在多个条件的情况,让这些条件的取值进行笛卡尔乘积组合。 b,不同的判断语句内的条件取值之间无需组合。 c,对于但条件的判断语句,只需要满足自己的所有取值即可。 选择测试用例x=1,y=1;x=1,y=-1,x=-1,y=1和x=-1,y=-1可覆盖所有条件组合。 路径覆盖是分析软件过程流的通用工具,有助分离逻辑路径,进行逻辑覆盖的测试,所用的流程图就是讨论软件结构复杂度时所用的流程图。 三实验方法 1、语句覆盖 测试用例输入输出magic 判定M的取值判定N的取值覆盖路径 x=1,y=1 12 T F abef x=1,y=-1 0 F T acdf 2、判定覆盖 测试用例输入输出magic 判定M的取值判定N的取值覆盖路径 x=1,y=1 12 T F abef x=1,y=-1 0 F T acdf 3、条件覆盖 测试用例输入输出magic 判定M的取值判定N的取值覆盖路径 x=1,y=1 12 T F abef x=-1,y=-1 0 T T acdf 4、判定/条件覆盖 测试用例输入输出magic 判定M的取值判定N的取值覆盖路径 x=1,y=1 12 T F abef x=-1,y=-1 0 T T acdf 5、条件组合覆盖

软件测试-实验2-白盒测试案例分析

实验2 白盒测试 一、实验目的与要求 1、掌握白盒测试的语句覆盖和判定覆盖测试方法的原理及应用 2、掌握条件覆盖、条件组合覆盖的方法,提高应用能力 3、掌握路径法测试 二、实验设备 1、电脑PC 三、实验原理 白盒测试原理:已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否已经过检查。它是把测试对象看作装在一个透明的白盒子里,也就是完全了解程序的结构和处理过程。这种方法按照程序内部的逻辑测试程序,检验程序中的每条通路是否都能按预定要求正确工作,其又称为结构测试。 1、语句覆盖 语句覆盖指代码中的所有语句都至少执行一遍,用于检查测试用例是否有遗漏,如果检查到没有执行到的语句时要补充测试用例。无须细分每条判定表达式,该测试虽然覆盖了可执行语句,但是不能检查判断逻辑是否有问题。 2、判定覆盖 又称判断覆盖、分支覆盖,指设计足够的测试用例,使得程序中每个判断的取真分支和取假分支至少经历一次,即判断真假取值均曾被满足。 判定覆盖比语句覆盖强,但是对程序逻辑的覆盖度仍然不高,比如由多个逻辑条件组合而成的判定,仅判定整体结果而忽略了每个条件的取值情况。 3、条件覆盖、条件判定覆盖 条件覆盖指程序中每个判断中的每个条件的所有可能的取值至少要执行一次,但是条件覆盖不能保证判定覆盖,条件覆盖只能保证每个条件至少有一次为真,而不考虑所有的判定结果。 条件判定覆盖是条件覆盖和判定覆盖的组合,指设计足够的测试用例,使得判定中每个条件的所有可能的取值至少出现一次,并且每个判定取到的各种可能的结果也至少出现一次。条件判定覆盖弥补了条件和判定覆盖的不足,但是未考虑条件的组合情况。 4、条件组合覆盖 又称多条件覆盖,设计足够的测试用例,使得判定条件中每一个条件的可能组合至少出现一次。线性地增加了测试用例的数量。 5、基本路径法 在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行的路径集合,从而设计测试用例的方法。在基本路径测试中,设计出的测试用例要保证在测试中程序的每条可执行语句至少执行一次,在基本路径法中,需要使用程序的控制流图进行可视化表达。

2020关于三角形问题的白盒测试实验报告123

关于三角形问题的白盒测试实验报告 一、实验目的 1、系统地学习和理解白盒测试的基本概念、原理,掌握白盒测试的基本技术和方法;二、实验内容 1、题目内容描述 针对实验一编写的源代码进行白盒测试。要求绘制出程序的控制流图,采用逻辑覆盖和基路径方法设计测试用例。执行测试用例,并分析测试结果 2、测试用例的编写 根据条件绘制程序流程图如下: 开开 scanf(%d,%d, %d,&1< m_num1 <200&1< m_num2<200 &1< m_num3 <200) 开 N 开m_num1+m_num2<= m_num3 开 开

cout<<"开开开开 m_num1+m开开"<

开 <<"开开开开开 "<

1213 14 采用逻辑覆盖设计测试用例并执行测试用例:(1)语句覆盖:输入 M_num1 3 3 3 3 (2)判定覆盖 输入 M_num1 3 M_num2 4 M_num3 5 1-2-3-6-7-8-10-11-12-14 一般三角形 测试路径 测试结果 M_num2 2 4 3 3 M_num3

白盒测试实验报告-范例

广西科技大学计算机学院《软件测试技术》实验报告书 实验一白盒测试 学生姓名:xxxx 学号:xxxx 班级:xxxx 指导老师:xxxxx 专业:计算机学院软件工程 提交日期:2014年10月20日

白盒测试实验报告 一实验内容 1、系统地学习和理解白盒测试的基本概念、原理,掌握白盒测试的基本技术和方法; 2、举例进行白盒测试,使用语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合 覆盖、路径覆盖进行测试。 3、通过试验和应用,要逐步提高和运用白盒测试技术解决实际测试问题的能力; 4、熟悉C++编程环境下编写、调试单元代码的基本操作技术和方法; 5、完成实验并认真书写实验报告(要求给出完整的测试信息,如测试程序、测试用例, 测试报告等) 二实验原理 白盒测试原理:已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否已经过检查。它是把测试对象看作装在一个透明的白盒子里,也就是完全了解程序的结构和处理过程。这种方法按照程序内部的逻辑测试程序,检验程序中的每条通路是否都能按预定要求正确工作。其又称为结构测试。 对于该实验的例子给出其流程图如下图所示,我们来了解白盒测试的基本技术和方法。

语句覆盖是指选择足够的测试用例,使得程序中每个语句至少执行一次。如上例选择测试用例x=1,y=1和x=1,y=-1可覆盖所有语句。 判定覆盖是指选择足够的测试用例,使得程序中每一个判定至少获得一次“真”值和“假”值,从而使得程序的每个分支都通过一次(不是所有的逻辑路径)。选择测试用例x=1,y=1和x=1,y=-1可覆盖所有判定。 条件覆盖是指选择语句多数的测试用例,使得程序判定中的每个条件能获得各种不同的结果。选择测试用例x=1,y=1和x=-1,y=-1可覆盖所有条件。 判定/条件覆盖是指选择足够多的测试用例,使得程序判定中每个条件取得条件可能的值,并使每个判定取到各种可能的结果(每个分支都通过一次)。即满足条件覆盖,又满足判定覆盖。选择测试用例x=1,y=1和x=-1,y=-1可覆盖所有判定/条件。 条件组合覆盖是指选择足够的测试用例,使得每个判定中的条件的各种可能组合都至少出现一次(以判定为单位找条件组合)。 注:a,条件组合只针对同一个判断语句存在多个条件的情况,让这些条件的取值进行笛卡尔乘积组合。 b,不同的判断语句内的条件取值之间无需组合。 c,对于但条件的判断语句,只需要满足自己的所有取值即可。 选择测试用例x=1,y=1;x=1,y=-1,x=-1,y=1和x=-1,y=-1可覆盖所有条件组合。 路径覆盖是分析软件过程流的通用工具,有助分离逻辑路径,进行逻辑覆盖的测试,所用的流程图就是讨论软件结构复杂度时所用的流程图。 三实验方法 1、语句覆盖 测试用例输入输出magic 判定M的取值判定N的取值覆盖路径 x=1,y=1 12 T F abef x=1,y=-1 0 F T acdf 2、判定覆盖 测试用例输入输出magic 判定M的取值判定N的取值覆盖路径 x=1,y=1 12 T F abef x=1,y=-1 0 F T acdf 3、条件覆盖 测试用例输入输出magic 判定M的取值判定N的取值覆盖路径 x=1,y=1 12 T F abef x=-1,y=-1 0 T T acdf 4、判定/条件覆盖 测试用例输入输出magic 判定M的取值判定N的取值覆盖路径 x=1,y=1 12 T F abef x=-1,y=-1 0 T T acdf

2016年东南大学软件测试白盒测试实验二Word版

软件测试基础与实践 实验报告 实验名称:白盒测试实验二 实验地点:计算机软件楼 实验日期: 2016.11.9 学生姓名:王鑫 学生学号: 71114430 东南大学软件学院制

一、实验目的 (1)巩固白盒测试知识,能熟练应用基本路径测试方法设计测试用例 (2)学习测试用例的书写 二、实验内容 (一)实验一: 基本路径测试技术实验 运用基本路径测试方法,分别对程序WeekB 中的方法IsCorrect()和getResult()进行测试。要求: (1) 画出程序流图。 (2) 计算环复杂度。 (3) 找到基本路径集合。 (4) 设计具体的测试用例。 方法IsCorrect() 1.画出程序流图 bool IsCorrect(int y,int m,int d) { if(y<1) return false; else { if(((y%4==0)&&(y%100!=0))||(y%400==0)) maxA[1]=29; if(m<0||m>12) return false; else { if(d>maxA[m-1]) return false; else return true; } }

2.计算环复杂度 V(G)=流图中的区域数量=8 3.找到基本路径集合 4.设计具体的测试用例

方法getResult () 1.画出程序流图 int getResult(int y,int m,int d) { long totalDays=0; for(int i=1;i

白盒测试实验报告 (2)

软件学院综合性、设计性实验报告 一、实验目的 1.通过实验熟悉测试用例设计 2.通过实验熟悉白盒测试 二、实验仪器或设备 计科楼计算机 三、总体设计(设计原理、设计方案及流程等) 程序流程图:

程序控制流图 四、实验步骤(包括主要步骤、代码分析等) 代码分析 /** 判断三角形的类 */ public class TriangleTestMethod { /** 判断三角形的种类。参数a, b, c分别为三角形的三边, *返回的参数值为0,表示非三角形; *为1,表示普通三角形; *为2,表示等腰三角形; *为3,表示等边三角形。 */ public static int comfirm(int a, int b, int c) { if((a + b > c) && (b + c > a) && (a + c > b)) {//判断为三角 形 if((a == b) && (b ==c))//判断为等边三角 形 return 3; if((a == b) || (b == c) || (a == c))//判断为等腰三角 形 return 2;

else //判断为普通三角形 return 1; } else {//为非三角 形 return 0; } } } 三、测试用例 2.判定覆盖测试用例

4.条件-判定覆盖测试用例 5.条件组合覆盖测试用例

基本路径覆盖测试用例 试验中对于路径测试有了更深的理解,可以更好,更迅速的去划分路径,设计测试用例,通过试验,我对软件测试有了进一步的认识和学习,对白盒测试流程有了较清楚的了解,收获很多。 教师签名: 年月日

实验2-1答案

白盒测试用例练习 1.为以下所示的程序段设计一组测试用例,要求分别满足语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖和路径覆盖,并画出相应的程序流程图。 void DoWork (int x,int y,int z) { int k=0,j=0; if ( (x>3)&&(z<10) ) { k=x*y-1; j=sqrt(k); //语句块1 } if ( (x==4)||(y>5) ) { j=x*y+10; } //语句块2 j=j%3; //语句块3 }

由这个流程图可以看出,该程序模块有4条不同的路径: P1:(a-c-e) P2:(a-c-d) P3:(a-b-e) P4:(a-b-d) 将里面的判定条件和过程记录如下: 判定条件M={x>3 and z<10} 判定条件N={x=4 or y>5} 1、语句覆盖 2、判定覆盖 p1和p4可以作为测试用例,其中p1作为取真的路径,p4作为取反的路径。 也可以让测试用例测试路径P2和P3。相应的两组输入数据如下:

3、条件覆盖 对于M:x>3取真时T1,取假时F1; z<10取真时T2,取假时F2; 对于N:x=4取真时T3,取假时F3; y>5取真时T4,取假时F4。 条件:x>3,z<10,x=4,y>5 条件:x<=3,z>=10,x!=4,y<=5 根据条件覆盖的基本思路,和这8个条件取值,组合测试用例如表所示: 4、判定/条件覆盖 5、组合覆盖 条件组合 1)x>3,z<10 2)x>3,z>=10 3) x<=3,z<10 4)x<=3,z>=10 5)x=4,y>5 6)x=4,y<=5 7)x!=4,y>5 8)x!=4,y<=5

实验4白盒测试(二)new

南京信息工程大学实验(实习)报告 实验四白盒测试(二) 一、实验目的 理解白盒测试的基本方法,掌握语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖等代码覆盖测试策略,并能运用相应的方法设计测试用例 二、实验时间 2学时 三、实验准备 主流PC 机一套,要求安装windows 操作系统和Office 工具及相应编程软件; 四、实验内容 1.题目一:使用逻辑覆盖测试方法测试以下程序段 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 j=j%3; 10 } 说明:程序段中每行开头的数字(1~10)是对每条语句的编号。 (1)画出程序的控制流图(用题中给出的语句编号表示)。 (2)分别以语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖方法设计测试用例,并写出每个测试用例的执行路径(用题中给出的语句编号表示)。 2.题目二: 请按要求对下面的java 代码进行测试。代码的功能是:用折半查找法在元素呈升序排列的数组中查找值为key 的元素。 public int binSearch ( int array[], int key ) { 1 int mid, low, high; 2 low = 0; 3 high = array.length-1;

4 while ( low <= high ) { 5 mid = (low +high)/2; 6 if ( key = = array [mid] ) 7 return mid; 8 else if ( key < array [mid] ) 9 high = mid -1; 10 else 11 low = mid + 1 12 } 13 return -1; 14 } (1)画出此程序段的控制流图; (2)试计算此程序段的McCabe 复杂性; (3)用独立路径覆盖法给出测试路径;并为各测试路径设计测试用例。 五、实验步骤 程序流程图

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