软件测试文档

南昌航空大学实验报告

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


相关内容

  • 软件文档管理指南GBT16680-1996
  • 软件文档管理指南GB/T 16680-1996 <GB/T 16680-1996软件文档管理指南>(由原国家技术监督局于1996年12月18日发布,1997年7月1日起实施, 该标准为那些对软件或基于软件的产品的开发负有职赍的管理者提供软件文档的管理指南.该标准的目的在于协助管理者在他们 ...

  • 模板_测试用例
  • 文档标识:uuid_doc_id 中国软件评测中心 软件测试说明 项目名称:CNAS T0407测试能力验证 项目标识:uuid_project_id 测试级别:性能测试 委托单位:国家应用软件产品质量监督检验中心 密 级:无 文档信息 修订历史记录 文档审核与批准 目录 1 范围 ........ ...

  • 如何写软件设计文档
  • 软件设计的不同模型:瀑布式.快速原型法以及迭代式 自从1968年提出"软件工程"概念以来,软件开发领域对于借鉴传统工程的原则.方法,以提高质量.降低成本的探索就从未停止过.而在这个过程中,提出了许多不同的软件开发模型,典型的有:瀑布式,快速原型法,以及迭代式开发等. 瀑布式模型 ...

  • 科技项目相关测试验收方案
  • 项目测试验收方案 1.1验收流程 在验收阶段,平台系统所有应用系统将按照用户和我公司都认可的<系统需求分析>,组织验收小组,进行功能和性能的验收测试.从系统的实用性.稳定性.可维护性.灵活性.可操作性.和安全性及系统文档.代码.规范及注释说明等方面组织全面验收.验收测试安排分为系统初验和 ...

  • 电子文档管理系统论文
  • 毕业设计(论文) 安徽工业职业技术学院 毕业设计(论文)任务书 信息工程 系 09软件一 班 姓名 赵晓丽 毕业设计(论文)题目: 电子文档管理系统 毕业设计(论文)起止日期: 2012年2月-4月 指导教师: 刘兵老师 (输入章及标题) 毕业设计论文 题 目: 电子文档管理系统 毕业学校:安徽工业 ...

  • 软件生存周期过程.活动和任务(开发部分)
  • http://blog.chinaunix.net/uid-21411227-id-1826866.html 2010.05 过 程 活 动 任 务 开 发 开发者的活动 1.建立过程 2.尽可能参加系统需求分析 3.尽可能参加系统设计 4.软件需求分析 5.软件体系结构设计 6.软件的详细设计 7 ...

  • 文档共享平台项目计划书
  • 文档共享平台项目 姓学教项目计划书名称:名:许英杰号:SA09225395师: 一.需求 随着现代网络技术的发展,人们对于网络的的体验越来越丰富,同时对于网络的功能要求也越来越高,因此各种新的功能也层出不穷,为用户提供更多的功能和更好的服务. 传统的文档共享是用户上传了文档,别的用户可以根据要求下载 ...

  • 软件需求-第14课-软件需求规格说明书
  • 软件需求 Che cking Che Ckin Che cking g Che cking Che Ckin Che cking g Checking Checking Checking Checking Checking Settings Entry/ OpenShutter( 0.5 ); Me ...

  • 三个版本电子文档管理制度[1]
  • 电子文件归档与电子档案管理办法(第一个版本) 一.总 则 (一).对电子文件的形成.积累.鉴定.归档及电子档案的保管实行全过程管理,由行政办公室统一协调,指定专门机构或人员负责,保证管理工作的连续性. (二).电子文件形成部门负责电子文件的积累.保管.整理和上传工作,行政办公室档案管理员要进行指导与 ...

  • 软件开发文档
  • 软件开发文档 软件开发文档是软件开发使用和维护种的必备资料.它能提高软件开发的效率,保证软件的质量,而且在软件的使用过程中有指导,帮助,解惑的作用,尤其在维护工作中,文档是不可或缺的资料. 软件文档可以分为开发文档和产品文档两大类.  开发文档包括:<功能要求>.<投标方案> ...