南昌航空大学实验报告
2013 年 10 月 20 日
课程名称: 软件质量保证与测试 实验名称: 测试程序的设计 班级: 112032 27 姓名: 肖心远 同组人: 指导教师评定: 签名:
一、实验目的
完成测试用程序的编写,为接下来的测试实验做准备。 二、实验要求
(1)设计程序的语言可以选择C、C++、JAVA等; (2)保证程序语法正确
(3)记录实验数据并书写实验报告 题目要求:
题目一:三角形问题
问题描述:输入三角形三条边a、b、c,三条边有效取值范围为[1,200],判断该三角形是什么三角形,输出内容具体包括:(1)等边三角形;(2)等腰三角形;(3)直角三角形;(4)等腰直角三角形;(5)一般三角形;(6)非三角形;(7)输入数据非法。 题目二:NextDate问题
问题描述:输入年月日year、month、day,其中年份的有效取值范围为[1900,2100],请输出输入日期的下一天,例如输入2013年9月29日,输出为2013年9月30日。若输入日期非法,例如输入2013年2月30日,则输出“输入日期不存在”,若输入日期超出取值范围,例如输入2013年9月32日,则输出“输入日期超出范围”。
问题三:佣金问题
问题描述:前亚利桑那洲境内的一位步枪销售商销售密苏里州制造商制造的步枪机(lock)、枪托(stock)和枪管(barrel)。枪机卖45美元,枪托卖30美元,枪管卖25美元。销售商每月至少要售出一支完整的步枪,且生产限额是大多数销售商在一个月内可销售70个枪机、80个枪托和90个枪管。
根据当月的销售情况,并计算销售商的佣金如下: (1)不到(含)1000美元的部分为10%;
(2)1000(不含)~1800(含)美元的部分为15%; (3)超过1800美元的部分为20%。
佣金程序生成月份销售报告,汇总售出的枪机、枪托和枪管总数,销售商的总销售额以及佣金。
三、实验步骤
1.运行TC, Visual C++, JAVA等开发工具;
2.在开发环境中完成程序设计,并进行调试;
3.在程序没有语法错误的前提下重点检查程序的逻辑错误; 4.对程序进行调试,并记录实验数据。 四、实验内容 1.三角形问题 (1)程序流程图
(2)源代码
import java.util.Scanner; public class triangel {
public static void main(String[] args){ Scanner input=new Scanner(System.in); double a=input.nextDouble(); double b=input.nextDouble(); double c=input.nextDouble(); }
}
if(a200||b200||c200){ System.out.println("输入数据非法\n"); }
else if((a+b)
else if(a==b&&b==c&&a==c){
System.out.println("等边三角形\n"); }
else if(a==b||b==c||a==c){
if(a*a==b*b+c*c||b*b==a*a+c*c||c*c==a*a+b*b){
System.out.println("等腰直角三角形\n"); }else{
System.out.println("等腰三角形\n"); }
}
else if(a*a==b*b+c*c||b*b==a*a+c*c||c*c==a*a+b*b){ System.out.println("直角三角形\n"); } else{
System.out.println("一般三角形\n"); }
(3)测试数据及测试结果
a=1,b=2,c=3
a=2,b=2,c=3
a=3,b=4,c=5
a=8,b=8,c=8
a=4,b=7,c=9
2.NextDate问题
(1)程序流程图
(2)源代码
import java.util.Scanner;
public class Nextday {
public static void main(String[] args){ Scanner input=new Scanner(System.in); int year=input.nextInt(),input.nextInt(),day=input.nextInt(); int tomorrowday=day,tomorrowmonth=month,tomorrowyear=year; if(year2100||month12||day31) { System.out.printf("输入日期非法");System.exit(-1);} else
if((month==4||month==6||month==9||month==11)&&(day==31)){ System.out.printf("输入日期不存在\n");System.exit(-1);} else
if((year%400==0||(year%100!=0&&year%4==0))&&month==2&&day>29){
System.out.printf("输入日期不存在\n");System.exit(-1);} else
if((!(year%400==0||(year%100!=0&&year%4==0))&&month==2&&day>
28)){
System.out.printf("输入日期不存在\n");System.exit(-1);}
else if((month==4||month==6||month==9||month==11)&&day==30) { tomorrowmonth++; tomorrowday=1; } else
if((month==1||month==3||month==5||month==7||month==8||month==10)&&day==31){
tomorrowmonth++;
tomorrowday=1;}
else if(month==12&&day==31){ tomorrowyear++;
tomorrowmonth=1; tomorrowday=1;} else
if(month==2&&(year%400==0||(year%100!=0&&year%4==0))&&day==29){ tomorrowmonth++;
tomorrowday=1;} else
if(month==2&&(!(year%400==0||(year%100!=0&&year%4==0)))&&day==28){
tomorrowmonth++;
tomorrowday=1;}
else{ tomorrowday++;}
System.out.println("nextday
is\n"+tomorrowyear+"/"+tomorrowmonth+"/"+tomorrowday); } }
(3)测试数据及测试结果
year=2130,month=11,day=11
year=2001,month=4,day=30
year=2013,month=5,day=31
year=2013,month=2,day=28
year=2008,month=2,day=29
year=2008,month=2,day=29
year=2013,month=12,day=31
3.佣金问题 (1)程序流程图
(2)源代码
import java.util.Scanner;
public class yongjin {
public static void main(String[] args){
double lockprice=45,stockprice=30,barrelprice=25; double totallocks=0,totalstocks=0,totalbarrels=0; double commission;
Scanner input=new Scanner(System.in);
System.out.print("Input the locks,stocks and barrels:\n");
int locks=input.nextInt(); int stocks=input.nextInt();
int barrels=input.nextInt();
if(1>locks||locks>70||1>stocks||locks>=80||1>barrels||barrels>=90){
System.out.println("输入错误");System.exit(-1);}
totallocks=totallocks+locks;
totalstocks=totalstocks+stocks; totalbarrels=totalbarrels+barrels; double locksales=lockprice*totallocks, double stocksales=stockprice*totalstocks,
double barrelsales=barrelprice*totalbarrels, double sales=locksales+stocksales+barrelsales; if(sales>1800){
commission=0.10*1000;
commission=commission+0.15*800;
commission=commission+0.20*(sales-1800);} else if(sales>1000){
commission=0.10*1000;
commission=commission+0.15*(sales-1000);} else commission=0.10*sales; System.out.print("sales
is $"+sales+"commission is $:"+commission); }
}
(3)测试数据及测试结果
locks=60,stocks=60,barrels=70
locks=30,stocks=40,barrels=50
locks=80,stocks=48,barrels=31
五、结果分析 1.三角形问题
程序较为简单,算法和语法基本没问题,题目要求也都实现了,程序未出现大错误,只是在编写时有几个符号打错,后经改正后无错误。
2.NextDate问题
经多次分析程序和设计算法后,算法和语法基本没问题,题目要求也都实现了,程序未出现大错误,只是在编写时有几个符号打错,后经改正后无错误。
3.佣金问题
程序较为简单,算法设计容易,语法基本没问题,题目要求也都实现了,程序未出现大错误,只是在编写时有几个符号打错,后经改正后无错误。
南昌航空大学实验报告
2013 年 10 月 27 日
课程名称: 软件质量保证与测试 实验名称: 功能性测试 班级: 112032 27 姓名: 肖心远 同组人: 指导教师评定: 签名:
一、实验目的
掌握边界值、等价类、决策表测试的基本功能性测试方法 二、实验要求
分别用健壮性测试(边界值方法)、弱健壮等价类测试(等价类方法)和决策表测试技术分别对三角形问题|、Nextdate问题和佣金问题设计测试用例(即每个程序都要用这三种方法进行测试),并分别对实验一所编写的三个程序进行测试。
要求:对于测试用例的设计必须给出详细的设计过程,在测试过程中如果发现缺陷(预期输出与实际输出不符),则采用截图的方式说明缺陷现象,并简单分析其可能产生的原因及建议,但不允许修改程序。 三、实验步骤
1.运行TC, Visual C++, JAVA等开发工具;
2.在开发环境中完成程序设计,并进行调试;
3.在程序没有语法错误的前提下重点检查程序的逻辑错误; 4.对程序进行调试,并记录实验数据。 四、实验内容 1.三角形问题
三边取值范围: 1≦a≦200 1≦b≦200 1≦c≦200
(1) 边界值健壮性测试
(2) 等价类弱健壮性测试 等价类的划分:
①有效等价类:
1.三边都不相等且在取值范围; 2.任意两边相等且在取值范围; 3.三边相等且在取值范围; ②无效等价类: 1.输入非数值;
2.两边和小于第三边; 3.只输入两个数据; 4.有一边大于取值范围;
用例4缺陷截图:
(3) 决策表测试
条件:
条件一C1:a,b,c能构成三角形 条件二C2:a=b? 条件三C3:a=c? 条件四C4:b=c? 行动:
行动一A1:非三角形 行动二A2:一般三角形 行动三A3:等腰三角形 行动四A4:等边三角形 行动五A5:不可能
2.NextDate问题 Nextdate问题 1900≦
y≦2100 1≦m≦12 1≦d≦31
(1)边界值健壮性测试
(2)等价类弱健壮性测试
等价类的划分:
测试用例:
(3)决策表测试
Y1={年:闰年} Y2={年:平年}
M1={月份:每月有30天}
M2={月份:每月有31天,除12月} M3={月份:12月} M4={月份:2月}
D1={日期:1≦日期≦31} D2={日期:日期=28} D3={日期:日期=29} D4={日期:日期=30} D5={日期:日期=31} 条件:
C1:月份在 C2:日期在 C3:年份在
行动: A1:不可能 A2:日期增加1 A3:日期复位 A4:月份加1 A5:月份复位 A6:年加1
3.佣金问题 1≦lock≦70 1≦stock≦80 1≦barrel≦90
(1)边界值健壮性测试用例
(2)等价类弱健壮性测试 有效等价类:
1、lack在1≦lock≦70 2、stock在1≦stock≦80 3、barrel在1≦barrel≦90 无效等价类: 1、lack小于1 2、lack大于70 3、Stock小于1 4、Stock大于80 5、Barrel小于1 (3)决策表测试: L:lock S:stock B:barrel
sales:总金额
计算方式一:sales*10%
计算方式二:1000*10%+(sales-1000)*15%
计算方式三:1000*10+800*15%+(sales-1800)*20%
五、结果分析
1.三角形问题
三角形的等价类弱健壮性测试中,发现程序的一个缺陷,即当程序输入非数值数据时,还未运行程序就开始报错,虽然题目未明确说明非数值的情况,但出现这样的原因应该是程序输入的健壮性处理不够完善。
2.NextDate问题
在黑盒测试中设计的测试用例,实际结果与预期结果完全相同,没检测出缺陷。
3.佣金问题
在黑盒测试中设计的测试用例,实际结果与预期结果完全相同,没检测出缺陷。
南昌航空大学实验报告
2013 年 11 月 3 日
课程名称: 软件质量保证与测试 实验名称: 结构性测试 班级: 112032 27 姓名: 肖心远 同组人: 指导教师评定: 签名:
一、实验目的
掌握逻辑覆盖法、基路径法以及数据流测试基本结构性测试方法 二、实验要求
1、对三角形问题尝试用逻辑覆盖法(语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、路径覆盖)设计测试用例,具体要求如下:
(1)为程序语句部分进行编号;
(2)画出程序的程序结构图(节点图);
(3)用上述五种方法分别设计测试用例,并说明每种测试用例的设计思路,例如测试用例所覆盖的语句、判定或条件的真分支假分支或路径等;
(4)使用上述测试用例对三角形问题进行测试,并做好测试记录,即有缺陷进行截图,并试图分析产生缺陷原因。
2、对NextDate问题尝试采用基路径方法设计测试用例,具体要求如下:
(1)为程序语句部分进行编号;
(2)画出程序的程序结构图(节点图); (3)用基路径方法设计测试用例,并说明每个测试用例的设计思路,例如测试用例所覆盖基路径;
(4)使用上述测试用例对NextDate问题进行测试,并做好测试记录,即有缺陷进行截图,并试图分析产生缺陷原因。
3、对佣金问题采用数据流测试方法设计测试用例,具体要求如下: (1)为程序语句部分进行编号;
(2)画出程序的程序结构图(节点图);
(3)找出程序中所定义的枪机、枪托、枪管、销售额以及佣金五个变量的定义节点、使用节点,并判断是谓词使用还是计算使用;
(4)找出以上五个变量的所有定义-使用路径,并判断其是否为定义-清除路径;
(5)根据上述路径分析程序可能出现的缺陷,并试图分析产生缺陷原因。
三、实验步骤
1.运行TC, Visual C++, JAVA等开发工具;
2.在开发环境中完成程序设计,并进行调试;
3.在程序没有语法错误的前提下重点检查程序的逻辑错误; 4.对程序进行调试,并记录实验数据。
四、实验内容
1.三角形问题逻辑覆盖法
(1)语句编号:
Scanner input=new Scanner(System.in);
double a=input.nextDouble(); double b=input.nextDouble(); double c=input.nextDouble(); boolean isTriangle=true;
if(a200||b200||c200){
System.out.println("输入数据非法\n");} System.out.println("非三角形\n");} System.out.println("等边三角形\n");}
if(a*a==b*b+c*c||b*b==a*a+c*c||c*c==a*a+b*b){
System.out.println("等腰直角三角形\n"); }else{System.out.println("等腰三角形\n");}} System.out.println("直角三角形\n");} else if((a+b)
else if(a*a==b*b+c*c||b*b==a*a+c*c||c*c==a*a+b*b){ else System.out.println("一般三角形\n");
(2)程序结构图
(2)程序分析
语句:1、2、3、4、5、7、9、11、14、15、17、18
路径:共七条路径
1)1-2-3-4-5-6-7 2)1-2-3-4-5-6-8-9 3)1-2-3-4-5-6-8-10-11
4)1-2-3-4-5-6-8-10-12-13-14 5)1-2-3-4-5-6-8-10-12-13-15 6)1-2-3-4-5-6-8-10-12-16-17 7)1-2-3-4-5-6-8-10-12-16-18 判定:
1)a200||b200||c200 (节点6) 2)(a+b)
3)a==b&&b==c (节点10)
4)a==b||b==c||a==c (节点12)
5)a*a==b*b+c*c||b*b==a*a+c*c||c*c==a*a+b*b(节点13) 6)a*a==b*b+c*c||b*b==a*a+c*c||c*c==a*a+b*b(节点16)
条件:
1)a200||b200||c200 (1.1-1.6)
2)(a+b)
4)a==b||b==c||a==c (4.1,4.2,4.3)
5)a*a==b*b+c*c||b*b==a*a+c*c||c*c==a*a+b*b (5.1,5.2,5.3) 6)a*a==b*b+c*c||b*b==a*a+c*c||c*c==a*a+b*b (6.1,6.2,6.3)
(4)用例设计 1)语句覆盖/路径覆盖
2)判定覆盖
3)条件覆盖/判定条件覆盖
2.NextDate问题基路径方法
(1)语句编码
1. Scanner input=new Scanner(System.in);
2. int year=input.nextInt(),input.nextInt(),day=input.nextInt(); 3. int tomorrowday=day,tomorrowmonth=month,tomorrowyear=year; 4. if(year2100||month12||day31) { 5. 7.
System.out.printf("输入日期非法");System.exit(-1);} System.out.printf("输入日期不存在\n");System.exit(-1);}
6. else if((month==4||month==6||month==9||month==11)&&(day==31)){ 8. else
if((year%400==0||(year%100!=0&&year%4==0))&&month==2&&day>29){ 9.
System.out.printf("输入日期不存在\n");System.exit(-1);}
10. else
if((!(year%400==0||(year%100!=0&&year%4==0))&&month==2&&day>28)){ 11.
System.out.printf("输入日期不存在\n");System.exit(-1);}
12. else if((month==4||month==6||month==9||month==11)&&day==30) 13. { tomorrowmonth++; 14.
tomorrowday=1; }
15. else
if((month==1||month==3||month==5||month==7||month==8||month==10)&&day==31){
tomorrowmonth++;
16.
tomorrowday=1;}
17. else if(month==12&&day==31){ 18. tomorrowyear++; 19. tomorrowmonth=1;
20.
tomorrowday=1;}
21. else
if(month==2&&(year%400==0||(year%100!=0&&year%4==0))&&day==29) 22. { tomorrowmonth++; 23.
tomorrowday=1;}
24. else
if(month==2&&(!(year%400==0||(year%100!=0&&year%4==0)))&&day==28)
{ tomorrowmonth++; 25. 27.
tomorrowday=1;}
System.out.println("nextday
26. else{ tomorrowday++;}
is\n"+tomorrowyear+"/"+tomorrowmonth+"/"+tomorrowday);
(2)程序结构图
(3)程序分析 基路径数量:
分支节点:4、6、8、10、12、15、18、22、25 基路径数量9+1=10
基路径:
1)最长的路径:Start-1-2-3-4-6-8-10-12-15-18-22-25-26-27-29-End 2)节点4翻转:Start-1-2-3-4-5-29-End 3)节点6翻转:Start-1-2-3-4-6-7-29-End 4)节点8翻转:Start-1-2-3-4-6-8-9-29-End
5)节点10翻转:Start-1-2-3-4-6-8-10-11-29-End
6)节点12翻转:Start-1-2-3-4-6-8-10-12-13-14-29-End 7)节点15翻转:Start-1-2-3-4-6-8-10-12-15-16-17-29-End
南昌航空大学实验报告
2013 年 10 月 20 日
课程名称: 软件质量保证与测试 实验名称: 测试程序的设计 班级: 112032 27 姓名: 肖心远 同组人: 指导教师评定: 签名:
一、实验目的
完成测试用程序的编写,为接下来的测试实验做准备。 二、实验要求
(1)设计程序的语言可以选择C、C++、JAVA等; (2)保证程序语法正确
(3)记录实验数据并书写实验报告 题目要求:
题目一:三角形问题
问题描述:输入三角形三条边a、b、c,三条边有效取值范围为[1,200],判断该三角形是什么三角形,输出内容具体包括:(1)等边三角形;(2)等腰三角形;(3)直角三角形;(4)等腰直角三角形;(5)一般三角形;(6)非三角形;(7)输入数据非法。 题目二:NextDate问题
问题描述:输入年月日year、month、day,其中年份的有效取值范围为[1900,2100],请输出输入日期的下一天,例如输入2013年9月29日,输出为2013年9月30日。若输入日期非法,例如输入2013年2月30日,则输出“输入日期不存在”,若输入日期超出取值范围,例如输入2013年9月32日,则输出“输入日期超出范围”。
问题三:佣金问题
问题描述:前亚利桑那洲境内的一位步枪销售商销售密苏里州制造商制造的步枪机(lock)、枪托(stock)和枪管(barrel)。枪机卖45美元,枪托卖30美元,枪管卖25美元。销售商每月至少要售出一支完整的步枪,且生产限额是大多数销售商在一个月内可销售70个枪机、80个枪托和90个枪管。
根据当月的销售情况,并计算销售商的佣金如下: (1)不到(含)1000美元的部分为10%;
(2)1000(不含)~1800(含)美元的部分为15%; (3)超过1800美元的部分为20%。
佣金程序生成月份销售报告,汇总售出的枪机、枪托和枪管总数,销售商的总销售额以及佣金。
三、实验步骤
1.运行TC, Visual C++, JAVA等开发工具;
2.在开发环境中完成程序设计,并进行调试;
3.在程序没有语法错误的前提下重点检查程序的逻辑错误; 4.对程序进行调试,并记录实验数据。 四、实验内容 1.三角形问题 (1)程序流程图
(2)源代码
import java.util.Scanner; public class triangel {
public static void main(String[] args){ Scanner input=new Scanner(System.in); double a=input.nextDouble(); double b=input.nextDouble(); double c=input.nextDouble(); }
}
if(a200||b200||c200){ System.out.println("输入数据非法\n"); }
else if((a+b)
else if(a==b&&b==c&&a==c){
System.out.println("等边三角形\n"); }
else if(a==b||b==c||a==c){
if(a*a==b*b+c*c||b*b==a*a+c*c||c*c==a*a+b*b){
System.out.println("等腰直角三角形\n"); }else{
System.out.println("等腰三角形\n"); }
}
else if(a*a==b*b+c*c||b*b==a*a+c*c||c*c==a*a+b*b){ System.out.println("直角三角形\n"); } else{
System.out.println("一般三角形\n"); }
(3)测试数据及测试结果
a=1,b=2,c=3
a=2,b=2,c=3
a=3,b=4,c=5
a=8,b=8,c=8
a=4,b=7,c=9
2.NextDate问题
(1)程序流程图
(2)源代码
import java.util.Scanner;
public class Nextday {
public static void main(String[] args){ Scanner input=new Scanner(System.in); int year=input.nextInt(),input.nextInt(),day=input.nextInt(); int tomorrowday=day,tomorrowmonth=month,tomorrowyear=year; if(year2100||month12||day31) { System.out.printf("输入日期非法");System.exit(-1);} else
if((month==4||month==6||month==9||month==11)&&(day==31)){ System.out.printf("输入日期不存在\n");System.exit(-1);} else
if((year%400==0||(year%100!=0&&year%4==0))&&month==2&&day>29){
System.out.printf("输入日期不存在\n");System.exit(-1);} else
if((!(year%400==0||(year%100!=0&&year%4==0))&&month==2&&day>
28)){
System.out.printf("输入日期不存在\n");System.exit(-1);}
else if((month==4||month==6||month==9||month==11)&&day==30) { tomorrowmonth++; tomorrowday=1; } else
if((month==1||month==3||month==5||month==7||month==8||month==10)&&day==31){
tomorrowmonth++;
tomorrowday=1;}
else if(month==12&&day==31){ tomorrowyear++;
tomorrowmonth=1; tomorrowday=1;} else
if(month==2&&(year%400==0||(year%100!=0&&year%4==0))&&day==29){ tomorrowmonth++;
tomorrowday=1;} else
if(month==2&&(!(year%400==0||(year%100!=0&&year%4==0)))&&day==28){
tomorrowmonth++;
tomorrowday=1;}
else{ tomorrowday++;}
System.out.println("nextday
is\n"+tomorrowyear+"/"+tomorrowmonth+"/"+tomorrowday); } }
(3)测试数据及测试结果
year=2130,month=11,day=11
year=2001,month=4,day=30
year=2013,month=5,day=31
year=2013,month=2,day=28
year=2008,month=2,day=29
year=2008,month=2,day=29
year=2013,month=12,day=31
3.佣金问题 (1)程序流程图
(2)源代码
import java.util.Scanner;
public class yongjin {
public static void main(String[] args){
double lockprice=45,stockprice=30,barrelprice=25; double totallocks=0,totalstocks=0,totalbarrels=0; double commission;
Scanner input=new Scanner(System.in);
System.out.print("Input the locks,stocks and barrels:\n");
int locks=input.nextInt(); int stocks=input.nextInt();
int barrels=input.nextInt();
if(1>locks||locks>70||1>stocks||locks>=80||1>barrels||barrels>=90){
System.out.println("输入错误");System.exit(-1);}
totallocks=totallocks+locks;
totalstocks=totalstocks+stocks; totalbarrels=totalbarrels+barrels; double locksales=lockprice*totallocks, double stocksales=stockprice*totalstocks,
double barrelsales=barrelprice*totalbarrels, double sales=locksales+stocksales+barrelsales; if(sales>1800){
commission=0.10*1000;
commission=commission+0.15*800;
commission=commission+0.20*(sales-1800);} else if(sales>1000){
commission=0.10*1000;
commission=commission+0.15*(sales-1000);} else commission=0.10*sales; System.out.print("sales
is $"+sales+"commission is $:"+commission); }
}
(3)测试数据及测试结果
locks=60,stocks=60,barrels=70
locks=30,stocks=40,barrels=50
locks=80,stocks=48,barrels=31
五、结果分析 1.三角形问题
程序较为简单,算法和语法基本没问题,题目要求也都实现了,程序未出现大错误,只是在编写时有几个符号打错,后经改正后无错误。
2.NextDate问题
经多次分析程序和设计算法后,算法和语法基本没问题,题目要求也都实现了,程序未出现大错误,只是在编写时有几个符号打错,后经改正后无错误。
3.佣金问题
程序较为简单,算法设计容易,语法基本没问题,题目要求也都实现了,程序未出现大错误,只是在编写时有几个符号打错,后经改正后无错误。
南昌航空大学实验报告
2013 年 10 月 27 日
课程名称: 软件质量保证与测试 实验名称: 功能性测试 班级: 112032 27 姓名: 肖心远 同组人: 指导教师评定: 签名:
一、实验目的
掌握边界值、等价类、决策表测试的基本功能性测试方法 二、实验要求
分别用健壮性测试(边界值方法)、弱健壮等价类测试(等价类方法)和决策表测试技术分别对三角形问题|、Nextdate问题和佣金问题设计测试用例(即每个程序都要用这三种方法进行测试),并分别对实验一所编写的三个程序进行测试。
要求:对于测试用例的设计必须给出详细的设计过程,在测试过程中如果发现缺陷(预期输出与实际输出不符),则采用截图的方式说明缺陷现象,并简单分析其可能产生的原因及建议,但不允许修改程序。 三、实验步骤
1.运行TC, Visual C++, JAVA等开发工具;
2.在开发环境中完成程序设计,并进行调试;
3.在程序没有语法错误的前提下重点检查程序的逻辑错误; 4.对程序进行调试,并记录实验数据。 四、实验内容 1.三角形问题
三边取值范围: 1≦a≦200 1≦b≦200 1≦c≦200
(1) 边界值健壮性测试
(2) 等价类弱健壮性测试 等价类的划分:
①有效等价类:
1.三边都不相等且在取值范围; 2.任意两边相等且在取值范围; 3.三边相等且在取值范围; ②无效等价类: 1.输入非数值;
2.两边和小于第三边; 3.只输入两个数据; 4.有一边大于取值范围;
用例4缺陷截图:
(3) 决策表测试
条件:
条件一C1:a,b,c能构成三角形 条件二C2:a=b? 条件三C3:a=c? 条件四C4:b=c? 行动:
行动一A1:非三角形 行动二A2:一般三角形 行动三A3:等腰三角形 行动四A4:等边三角形 行动五A5:不可能
2.NextDate问题 Nextdate问题 1900≦
y≦2100 1≦m≦12 1≦d≦31
(1)边界值健壮性测试
(2)等价类弱健壮性测试
等价类的划分:
测试用例:
(3)决策表测试
Y1={年:闰年} Y2={年:平年}
M1={月份:每月有30天}
M2={月份:每月有31天,除12月} M3={月份:12月} M4={月份:2月}
D1={日期:1≦日期≦31} D2={日期:日期=28} D3={日期:日期=29} D4={日期:日期=30} D5={日期:日期=31} 条件:
C1:月份在 C2:日期在 C3:年份在
行动: A1:不可能 A2:日期增加1 A3:日期复位 A4:月份加1 A5:月份复位 A6:年加1
3.佣金问题 1≦lock≦70 1≦stock≦80 1≦barrel≦90
(1)边界值健壮性测试用例
(2)等价类弱健壮性测试 有效等价类:
1、lack在1≦lock≦70 2、stock在1≦stock≦80 3、barrel在1≦barrel≦90 无效等价类: 1、lack小于1 2、lack大于70 3、Stock小于1 4、Stock大于80 5、Barrel小于1 (3)决策表测试: L:lock S:stock B:barrel
sales:总金额
计算方式一:sales*10%
计算方式二:1000*10%+(sales-1000)*15%
计算方式三:1000*10+800*15%+(sales-1800)*20%
五、结果分析
1.三角形问题
三角形的等价类弱健壮性测试中,发现程序的一个缺陷,即当程序输入非数值数据时,还未运行程序就开始报错,虽然题目未明确说明非数值的情况,但出现这样的原因应该是程序输入的健壮性处理不够完善。
2.NextDate问题
在黑盒测试中设计的测试用例,实际结果与预期结果完全相同,没检测出缺陷。
3.佣金问题
在黑盒测试中设计的测试用例,实际结果与预期结果完全相同,没检测出缺陷。
南昌航空大学实验报告
2013 年 11 月 3 日
课程名称: 软件质量保证与测试 实验名称: 结构性测试 班级: 112032 27 姓名: 肖心远 同组人: 指导教师评定: 签名:
一、实验目的
掌握逻辑覆盖法、基路径法以及数据流测试基本结构性测试方法 二、实验要求
1、对三角形问题尝试用逻辑覆盖法(语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、路径覆盖)设计测试用例,具体要求如下:
(1)为程序语句部分进行编号;
(2)画出程序的程序结构图(节点图);
(3)用上述五种方法分别设计测试用例,并说明每种测试用例的设计思路,例如测试用例所覆盖的语句、判定或条件的真分支假分支或路径等;
(4)使用上述测试用例对三角形问题进行测试,并做好测试记录,即有缺陷进行截图,并试图分析产生缺陷原因。
2、对NextDate问题尝试采用基路径方法设计测试用例,具体要求如下:
(1)为程序语句部分进行编号;
(2)画出程序的程序结构图(节点图); (3)用基路径方法设计测试用例,并说明每个测试用例的设计思路,例如测试用例所覆盖基路径;
(4)使用上述测试用例对NextDate问题进行测试,并做好测试记录,即有缺陷进行截图,并试图分析产生缺陷原因。
3、对佣金问题采用数据流测试方法设计测试用例,具体要求如下: (1)为程序语句部分进行编号;
(2)画出程序的程序结构图(节点图);
(3)找出程序中所定义的枪机、枪托、枪管、销售额以及佣金五个变量的定义节点、使用节点,并判断是谓词使用还是计算使用;
(4)找出以上五个变量的所有定义-使用路径,并判断其是否为定义-清除路径;
(5)根据上述路径分析程序可能出现的缺陷,并试图分析产生缺陷原因。
三、实验步骤
1.运行TC, Visual C++, JAVA等开发工具;
2.在开发环境中完成程序设计,并进行调试;
3.在程序没有语法错误的前提下重点检查程序的逻辑错误; 4.对程序进行调试,并记录实验数据。
四、实验内容
1.三角形问题逻辑覆盖法
(1)语句编号:
Scanner input=new Scanner(System.in);
double a=input.nextDouble(); double b=input.nextDouble(); double c=input.nextDouble(); boolean isTriangle=true;
if(a200||b200||c200){
System.out.println("输入数据非法\n");} System.out.println("非三角形\n");} System.out.println("等边三角形\n");}
if(a*a==b*b+c*c||b*b==a*a+c*c||c*c==a*a+b*b){
System.out.println("等腰直角三角形\n"); }else{System.out.println("等腰三角形\n");}} System.out.println("直角三角形\n");} else if((a+b)
else if(a*a==b*b+c*c||b*b==a*a+c*c||c*c==a*a+b*b){ else System.out.println("一般三角形\n");
(2)程序结构图
(2)程序分析
语句:1、2、3、4、5、7、9、11、14、15、17、18
路径:共七条路径
1)1-2-3-4-5-6-7 2)1-2-3-4-5-6-8-9 3)1-2-3-4-5-6-8-10-11
4)1-2-3-4-5-6-8-10-12-13-14 5)1-2-3-4-5-6-8-10-12-13-15 6)1-2-3-4-5-6-8-10-12-16-17 7)1-2-3-4-5-6-8-10-12-16-18 判定:
1)a200||b200||c200 (节点6) 2)(a+b)
3)a==b&&b==c (节点10)
4)a==b||b==c||a==c (节点12)
5)a*a==b*b+c*c||b*b==a*a+c*c||c*c==a*a+b*b(节点13) 6)a*a==b*b+c*c||b*b==a*a+c*c||c*c==a*a+b*b(节点16)
条件:
1)a200||b200||c200 (1.1-1.6)
2)(a+b)
4)a==b||b==c||a==c (4.1,4.2,4.3)
5)a*a==b*b+c*c||b*b==a*a+c*c||c*c==a*a+b*b (5.1,5.2,5.3) 6)a*a==b*b+c*c||b*b==a*a+c*c||c*c==a*a+b*b (6.1,6.2,6.3)
(4)用例设计 1)语句覆盖/路径覆盖
2)判定覆盖
3)条件覆盖/判定条件覆盖
2.NextDate问题基路径方法
(1)语句编码
1. Scanner input=new Scanner(System.in);
2. int year=input.nextInt(),input.nextInt(),day=input.nextInt(); 3. int tomorrowday=day,tomorrowmonth=month,tomorrowyear=year; 4. if(year2100||month12||day31) { 5. 7.
System.out.printf("输入日期非法");System.exit(-1);} System.out.printf("输入日期不存在\n");System.exit(-1);}
6. else if((month==4||month==6||month==9||month==11)&&(day==31)){ 8. else
if((year%400==0||(year%100!=0&&year%4==0))&&month==2&&day>29){ 9.
System.out.printf("输入日期不存在\n");System.exit(-1);}
10. else
if((!(year%400==0||(year%100!=0&&year%4==0))&&month==2&&day>28)){ 11.
System.out.printf("输入日期不存在\n");System.exit(-1);}
12. else if((month==4||month==6||month==9||month==11)&&day==30) 13. { tomorrowmonth++; 14.
tomorrowday=1; }
15. else
if((month==1||month==3||month==5||month==7||month==8||month==10)&&day==31){
tomorrowmonth++;
16.
tomorrowday=1;}
17. else if(month==12&&day==31){ 18. tomorrowyear++; 19. tomorrowmonth=1;
20.
tomorrowday=1;}
21. else
if(month==2&&(year%400==0||(year%100!=0&&year%4==0))&&day==29) 22. { tomorrowmonth++; 23.
tomorrowday=1;}
24. else
if(month==2&&(!(year%400==0||(year%100!=0&&year%4==0)))&&day==28)
{ tomorrowmonth++; 25. 27.
tomorrowday=1;}
System.out.println("nextday
26. else{ tomorrowday++;}
is\n"+tomorrowyear+"/"+tomorrowmonth+"/"+tomorrowday);
(2)程序结构图
(3)程序分析 基路径数量:
分支节点:4、6、8、10、12、15、18、22、25 基路径数量9+1=10
基路径:
1)最长的路径:Start-1-2-3-4-6-8-10-12-15-18-22-25-26-27-29-End 2)节点4翻转:Start-1-2-3-4-5-29-End 3)节点6翻转:Start-1-2-3-4-6-7-29-End 4)节点8翻转:Start-1-2-3-4-6-8-9-29-End
5)节点10翻转:Start-1-2-3-4-6-8-10-11-29-End
6)节点12翻转:Start-1-2-3-4-6-8-10-12-13-14-29-End 7)节点15翻转:Start-1-2-3-4-6-8-10-12-15-16-17-29-End