学号: 《软件测试技术》
实验报告与习题册
2014/2015学年第2学期
系别 专业 班级 姓名 指导教师
计算机学院
一班
目录
项目 实验一基于白盒测试的用例设计与验证(一) 实验二基于白盒测试的用例设计与验证(二) 实验三基于黑盒测试的用例设计与验证(一) 实验四基于黑盒测试的用例设计与验证(二) 实验五JUnit的安装与使用 实验六LoadRunner的使用 实验七WinRunner的使用 成绩 批改时间 实验一:基于白盒测试的用例设计与验证
(一)
一.实验目的
(1)熟悉Eclipse开发环境
(2)掌握Java语言的基本语法,能够利用Java实现简单的程序开发 (3)熟悉白盒测试基本原理
(4)掌握白盒测试的逻辑覆盖法,能够依据语句覆盖、判定覆盖、条件覆盖、判定\\条件覆盖、条件组合覆盖的原理进行相应测试用例的设计工作。
二.实验内容
(1)选择一门语言,完成指定的单元程序开发。 #include<> voidmain() {
intm,n,p,q;
printf(\"pleaseinputm,n,p,q:\\n\");
scanf(\"%d,%d,%d,%d\ if(m>0&&n<6) {
m=n+3; n=n*2; }
if(p>5||q<0) {
p=2*q+5;
q++; }
printf(\"输出的四个数是:%d,%d,%d,%d\\n\return; }
(2)分别依据白盒测试逻辑覆盖法中的语句覆盖、判定覆盖、条件覆盖、判定\\条件覆盖、条件组合覆盖的原理设计相应的测试用例。
(3)根据给定的流程图,实际运行测试用例,检测程序的实现是否正确。
三.程序流程图
运行结果 语句覆盖: 测试用例 m=1,n=2,p=6,q=-1 取值条件 T1,T2,T3,T4 具体取值条件 m>0,n<6,p>5,q<0 m=2,n=3,p=4,q=1 m=-1,n=7,p=7,q=-2 m=-2,n=4,p=3,q=3 判定覆盖: 测试用例 T1,T2,F3,F4 F1,F2,T3,T4 F1,F2,F3,F4 m>0,n<6,p<5,q>0 m<0,n>6,p>5,q<0 m<0,n<6,p<5,q>0 具体取值条件 m>0,n<6,p>5,q<0 判定条件 m>0andn<6 p>5orq<0 m<0andn>6 p<5orq>0 输入:{m=3,n=2,p=9,q=-3} 输出:{m=5,n=4,p=-1,q=-2} 输入:{m=-4,n=10,p=2,q=4} m<0,n>6,p<5,q>0 输出:{m=-4,n=10,p=2,q=4} 条件覆盖: 测试用例 输入:{m=1,n=7,p=6,q=2} 输出:{m=1,n=7,p=9,q=3} 输入:{m=-3,n=4,p=1,q=-1} 输出:{m=-3,n=4,p=3,q=0} 判定-条件覆盖: 测试用例 输入:{m=1,n=2,p=6,q=-1} 输出:{m=5,n=4,p=3,q=0} 输入:{m=-1,n=9,p=4,q=2} 输出:{m=-1,n=9,p=4,q=2} 条件组合覆盖:
F1,F2,F3,F4 取值条件 T1,T2,T3,T4 F1,T2,F3,T4 取值条件 T1,F2,T3,F4 具体取值条件 m>0,n>6,p>5,q>0 m<0,n<6,p<5,q<0 具体取值条件 m>0,n<6,p>5,q<0 m<0,n>6,p<5,q>0 测试用例 输入:{m=1,n=2,p=6,q=-1} 输出:{m=5,n=4,p=3,q=0} 输入:{m=1,n=7,p=6,q=1} 输出:{m=1,n=7,p=7,q=2} 输入:{m=-1,n=2,p=3,q=-1} 输出:{m=-1,n=2,p=3,q=0} 输入:{m=-1,n=7,p=3,q=1} 输出:{m=-1,n=7,p=3,q=0} 覆盖条件 T1,T2,T3,T4 具体取值条件 m>0,n<6,p>5,q<0 T1,F2,T3,F4 m>0,n>6,p>5,q>0 F1,T2,F3,T4 m<0,n<6,p<5,q<0 F1,F2,F3,F4 m<0,n>6,p<5,q>0 四.实验内容中遇到的问题、解决方法和体会。
答:遇到的问题:实验过程中,编写程序有点问题,总是输不出结果,不断进行检查和调试,以至于花费很多时间。
解决方法:通过自己检查和调试和向同学寻求帮助得以解决问题,最后运行得到结果。
体会:通过这次实验,我知道了只有自己动手去做,才会知道自己还有哪些不足,才能不断提高自己的实践能力。同时,我还知道了白盒覆盖的几种覆盖方法以及它们之间的区别。总之,我们要知道理论和实践相结合的重要性,通过不断实践来提高自己的能力。
实验一:基于白盒测试的用例设计与验证
(二)
一.实验目的
(1)熟悉二分查找算法,能正确实现程序
(2)掌握白盒测试的基本路径测试法,重点掌握如何根据程序控制流计算程序的环路复杂度,并且确定程序基本路径。
二.实验内容
(1)选择一门语言,完成二分查找的实现;。
源代码:
#include<>
intfind(int*arry,intleng,intkey) {
intlow=1; intmid;
inthigh=leng; while(low<=high) { mid=(low+high)/2; if(key>arry[mid-1]) low=mid; elseif(key intmain() { inta[10]; inti,m,n; for(i=0;i<10;i++) a[i]=i+1; do { printf(\"请输入查找数(1~10!):\"); scanf(\"%d\}while(m>10||m<1); n=find(a,10,m); printf(\"查询值为a[%d]\\n\ return0; } (2)完成相应的程序控制流图,并计算出程序的环路负责度; (3)确定程序的基本路径,设计相应的测试用例,覆盖确定的基本路径。 程序控制流图如下: 由程序控制图可知环路复杂度为5,因此有5条基本路径。 基本路径1:A-B-A 基本路径2:A-B-C-D-E-A 基本路径3:A-B-C-D-E-F-H-C-D-E-A 基本路径4:A-B-C-D-E-G-I-C-D-E-A 基本路径5:A-B-C-D-E-F-H-C-D-E-G-I-C-D-E-A 测试用例图: 测试用例 M=0 M=5 M=3 M=7 M=4 运行结果: 预期输出 Error! a[4] a[2] a[6] A[3] 结果输出 --- 查询值为a[4] 查询值为a[2] 查询值为a[6] 查询值为a[3] 通过路径 基本路径1 基本路径2 基本路径3 基本路径4 基本路径5 三.实验内容中遇到的问题、解决方法和体会。 答:遇到的问题:编写的程序有错误不知道该怎么改。 解决方法:通过向同学寻求帮助解决,最后运行得到结果。 体会:通过这次实验,感觉自己C语言的基础太差,以后要加强对C语言的学习。通过这次实验,我还知道了怎样计算出程序的环路复杂度,还有如何完成相应的程序控制流图。 实验一:基于黑盒测试的用例设计与验证 (一) 一.实验目的 (1) 理解黑盒测试的基本原理; (2) 掌握黑盒测试的等价类划分法与边界值分析法,并能够根据相应的方法设计测试用例。 二.实验内容 (1)选择一门语言,完成以下程序:输入三个整数,三角形三条边的长度,输出三角形所属的类型。 #include<> doubletriangle(doublea,doubleb,doublec) { if(a+b>c&&b+c>a&&a+c>b) return1; else return0; } doubledengbian(doublea,doubleb,doublec) { if(a==b&&b==c) return1; else return0; } doubledengyao(doublea,doubleb,doublec) { if(a==b||b==c||a==c) return1; else return0; } doublezhijiao(doublea,doubleb,doublec) { if(a*a+b*b==c*c||b*b+c*c==a*a||a*a+c*c==b*b) return1; else return0; } voidmain() { } doublea,b,c; printf(\"请输入三角形三边:\"); scanf(\"%lf\scanf(\"%lf\scanf(\"%lf\if(triangle(a,b,c)) { if(dengbian(a,b,c)) printf(\"等边三角形\\n\"); elseif(dengyao(a,b,c)&&zhijiao(a,b,c)) printf(\"等腰直角三角形\\n\"); elseif(dengyao(a,b,c)) printf(\"等腰三角形\\n\"); elseif(zhijiao(a,b,c)) printf(\"直角三角形\\n\"); else printf(\"一般三角形\\n\"); } else printf(\"不能构三角形\\n\"); (2)依据黑盒测试中的等价类划分法,边界值分析法设计相应的测试用例。 等价类划分: 编号 等价类 输入 输出 1 2 3 4 5 6 7 8 9 编号 1 三边为数字字符 两边之和大于第三边 两边相等且两边之和大于第三边 两边相等且满足a*a+b*b=c*c 能构成三角形且三边相等 三边中出现了非数字字符 两边之和小于第三边 三边中出现了负数 边界值分析法 输入 数字字符 边界值 234 234 334 2*2+2*2=8 222 a23 236 -113 一般三角形 一般三角形 等腰三角形 等腰直角三角形 直角三角形 等边三角形 不能构成三角形 不能构成三角形 不能构成三角形 测试用例的设计思路 如输入:a23,则不能构成三角形,反之成立 如果输入的数中有小于0的数,则不能构成三角形,反之成立 如果两边之和小于第三边,则不能构成三角形,反之成立 能构成三角形且满足a*a+b*b=c*c 3*3+4*4=25 出现了除数字字符之外的符号 三边大于0 2 边长 3 三边边长之和 两边之和大于第三边 (3)利用设计的测试用例测试编写的程序。 三.实验内容中遇到的问题、解决方法和体会。 答:遇到的问题:编写代码出现了一点问题,用等价类划分时不知道该怎么划分。 解决方法:通过查看书本和向同学寻求帮助解决。 体会:通过这次实验,我知道了黑盒测试的基本原理,掌握了黑盒测试的等价类划分法与边界值分析法,并能够根据相应的方法设计测试用例。在此次实验中也遇到了一些问题,不过出现问题才能知道我们的不足之处,然后改正并完善。所以遇到困难应该想办法解决,大胆尝试,这样才能提高自己的能力。 实验一:基于黑盒测试的用例设计与验证 (二) 一.实验目的 (1) 理解黑盒测试的基本原理; (2) 掌握黑盒测试的判定表设计方法; (3) 能够根据判定表完成测试用例的生成。 二.实验内容 (1)选择一门语言,完成以下程序:输入年月日,输出该日的下一日日期。 #include<> voidmain() { intyear,month,day,flag=0; m: printf(\"pleaseinputyearmonthday:\"); scanf(\"%d%d%d\ if((year%4==0&&year%100!=0)||year%400==0) flag=1;//当年份为闰年时,flag为1 if(month==2)//月份为2 { if((day==28&&flag==0)||(day==29&&flag==1)) { day=1; month++;//如果是平年的第28天或者闰年的第29天,则day复位,month加一 } elseif(day==29&&flag==0)//平年输入29天为错误 { printf(\"thereisnot29thFebruary!\\n\ gotom; } else//其他日期,则day加一 day++; } elseif(month==12)//月份为12 { if(day==31)//如果是输入31,则day复位,month复位,year++ { day=1; month=1; year++; } else//如果是其他日期,则day++ day++; } elseif(month==1||month==3||month==5||month==7||month==8||month==10)//月份为1,3,5,7,8,10 { if(day==31)//如果输入31,则day复位,month加一 { day=1; month++; } else//如果是其他日期,则day加一 day++; } else//月份为4,6,9,11 { if(day==30)//如果输入30,则day复位,month加一 { day=1; month++; } else//如果是其他日期,则day加一 day++; } printf(\"thenextdayis%4d%4d%4d\\n\} (2)利用黑盒测试中的判定表法确定程序的条件项,条件桩,动作项,动作桩,完成并优化判定表。 条件桩:(1)1<=month<=12 (2)1<=day<=31 (3)2月平年28天,闰年29天 动作桩:(1)日期加1 (2)日期复位 (3)月份加1 (4)月份复位 (5)年份加1 (6)不可能 条件 序号 每月30天 1 2 1 1 3 4 5 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 1 0 0 0 1 0 0 1 0 0 0 0 0 0 1 0 0 6 0 0 0 1 0 1 0 0 0 0 1 0 0 0 0 0 7 8 9 10 11 12 13 14 0 0 0 0 0 0 1 1 0 0 0 0 1 - 0 0 0 - 0 0 0 0 1 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 1 0 1 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0 1 1 0 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 每月31天,120 0 月除外 12月 2月 平年 闰年 日期=30天 日期=31天 日期=28天 日期=29天 动作 日期加1 日期复位 月份加1 月份复位 年份加1 不可能 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 1 0 1 0 0 0 0 0 0 1<=日期<=27 1 0 (3)根据判定表完成测试用例的设计,并结合编写的程序完成实际的测试工作。 测试用例 编号 1 2 3 4 5 6 7 8 9 等价类 每月30天 每月31天 2月平年28天 2月闰年29天 12月31天 2月输入30天 每月30天时输入31 月份大于12 输入中含有非数字字符 运行结果: 20110a12 输入 输出 200951 201381 200131 200031 201511 错误的输入 错误的输入 错误的输入 错误的输入 三.实验内容中遇到的问题、解决方法和体会。 答:遇到的问题:实验中编写代码的时候出现了许多问题,导致运行的不到结果;还有写判定表的时候不知道该怎么写,大脑有点混乱,不过最后判定表写出来了,虽然不知道是否正确。 解决方法:代码部分通过调试和向同学求助解决,最后运行得到正确的结果;判定表部分通过自己查看书本和不断思考解决。 体会:通过这次实验,我知道了判定表并不是像我们想象的那么好写,如果思绪紊乱就可能写不出来;同时我们要不断地锻炼自己,这样才能更好地提高自己的实践能力。 因篇幅问题不能全部显示,请点此查看更多更全内容