资源描述
精品范文模板 可修改删除撰写人:_日 期:_南昌航空大学实验报告2013 年 10 月 20 日课程名称: 软件质量保证与测试 实验名称: 测试程序的设计 班级: * 姓名: * 同组人: 指导教师评定: 签名: 一、实验目的完成测试用程序的编写,为接下来的测试实验做准备。二、实验要求(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)当输入三条边的数值大小有一不在范围内,提示“输入范围不合理” (2)当输入三值不满足构成三角形条件时,输出“非三角形” (3)当输入三值只是满足构成三角形条件,没有其他特殊问题,输出“一般三角形” (4)当输入三条边只有两个值相等,输出“等腰三角形” (5) 当输入三条边都相等时,输出“等边三角形” (6) 当输入三条边只是满足勾股定理时,输出“直角三角形” (7)当输入三条边不仅满足勾股定理,而且其中有两条边相等,输出“等腰直角三角形”源代码:#include main() int a,b,c; system( graftabl 936 ); clrscr(); printf(请输入三个边长:n); scanf(%d,%d,%d,&a,&b,&c);if(a=1&a=1&b=1&cc & a+cb & b+ca) if(a*a=b*b+c*c | b*b=a*a+c*c | c*c=a*a+b*b) printf(可以构成一个直角三角形n); if(a=b|b=c|a=c) printf(可以构成一个等腰直角三角形n); else if(a=b & a=c) printf(可以构成一个等边三角形n); else if(a=b|b=c|a=c) printf(可以构成一个等腰三角形n); else printf(可以构成一个等腰三角形n); else printf(不能构成三角形n);else printf(输入范围不合理n); getch(); 运行结果:Nextday函数: 概要设计:分析不同情况下的输入,可以得到不同输出 (1)当输入数值只要有一个不符合范围,提示“不合理范围” (2)当输入非月头月尾数值时,输出日期将天数加1 (3)当输入非2月月尾时,输出日期将月份加1 (4)当输入的为年尾时,输出日期将年份加1 (5)当输入闰年28日时,输出日期将天数加1 (6)当输入闰年29日时,输出日期将月份加1 (7)当输入非闰年27日时,输出日期将天数加1 (8)当输入非闰年28日时,输出日期将月份加1 (9)当输入非闰年29日时,提示“输入错误”源代码:#includemain() int year,month,day; int a=31,29,31,30,31,30,31,31,30,31,30,31; int b=31,28,31,30,31,30,31,31,30,31,30,31; system( graftabl 936 ); clrscr(); printf(请输入日期:n); scanf(%d,%d,%d,&year,&month,&day); if(year=1900) if (year%4=0&year%100!=0|year%400=0) if(monthday) printf(后一天:%d年%d月%d日,year,month,day+1); else printf(后一天:%d年%d月1日,year,month+1); else if(month=12) if(amonth-1day) printf(后一天:%d年%d月%d日,year,month,day+1); else printf(后一天:%d年1月1日,year+1); else if(monthday) printf(后一天:%d年%d月%d日,year,month,day+1); else printf(后一天:%d年%d月1日,year,month+1); else if(month=12) if(bmonth-1day) printf(后一天:%d年%d月%d日,year,month,day+1); else printf(后一天:%d年1月1日,year+1); getch(); 运行结果:输出结果错误,代表程序源代码出现错误佣金问题:概要分析: 当输入不同数值时会有不同的的佣金 (1)当输入数值不满足要求时,提示“不合理范围” (2)当输入数值计算得总销售额不到(含)1000美元,佣金为其10% (3)当输入数值计算得总销售额为1000(不含)1800(含)美元,佣金为其15% (4)当输入数值计算得总销售额超过1800美元,佣金为其20%源代码:#include int main() int x,y,z,n; system( graftabl 936 ); clrscr(); printf(请输入购买的枪机、枪托、枪管数量:n);scanf(%d,%d,%d,&x,&y,&z);if(x=1&x=1&y=1&z=90) n=45*x+30*y+25*z; if(n=1000) printf(枪机数%d、枪托数%d、枪管数%d、总销售额%d、佣金%f,x,y,z,n,0.1*n); else if(nc a+cb b+ca)动作桩: A1:非三角形 C2: a=b A2:等腰三角形 C3: b=c A3:等边三角形 C4: a=c A4:一般三角形 A5:不可能出现 三角形问题决策表决策表1-8 9 10 11 12 13 14 15 16 C1 C2 C3 C4 F T T T T T T T F T T F T T T F F T F T T T F T F T F F T T F F F A1 A2 A3 A4 A5 三角形问题决策表测试用例测试用例输 入 条 件预期输出 a b c1-8 9101112131415162 3 63 3 3 15 15 20 15 20 2025 20 2515 20 26 非三角形 等边三角形 不可能 不可能 等腰三角形 不可能 等腰三角形 等腰三角形 一般三角形Nextday问题健壮性边界值测试用例测试用例输 入 条 件预 期 输 出实 际 输 出用例状态 年 月 日 Test1 1899 6 15提示“超出范围”提示“超出范围” failTest2 1900 6 151900/6/16 1900/6/16 passTest3 1901 6 15 1901/6/16 1901/6/16 passTest4 2000 6 152000/6/16 2000/6/16 passTest5 2099 6 152099/6/16 2099/6/16 passTest6 2100 6 152100/6/16 2100/6/17 passTest7 2101 6 15提示“超出范围”提示“超出范围” failTest8 2000 0 15提示“超出范围” 2000/1/1 failTest9 2000 1 152000/1/16 2000/1/16 passTest10 2000 2 152000/2/16 2001/2/16 passTest11 2000 11 152000/11/16 2000/11/16 passTest12 2000 12 152000/12/16 2000/12/16 passTest13 2000 13 15提示“超出范围”2000/1/16 fail Test14 2000 6 0提示“超出范围” 2000/6/1 fail Test15 2000 6 1 2000/6/2 2000/6/2 pass Test16 2000 6 22000/6/3 2000/6/3 pass Test17 2000 6 29 2000/6/30 2000/6/30 pass Test18 2000 6 302000/7/1 2000/7/1 pass Test19 2000 631提示“超出范围”提示“超出范围” fail缺陷截图:Test1:Test7:Test8:出现未知错误,预期输出“超出范围”,结果显示出了不相对应的输出结果,可能是程序中出现了一定程度的逻辑错误Test13:出现未知错误,预期输出“超出范围”,结果显示出了不相对应的输出结果,再观察完程序后,发现,在源代码中只是对年份的范围进行了一定的范围规范,没有对月份进行要求,才会出现以下的运行错误Test14:出现未知错误,预期输出“超出范围”,结果显示出了不相对应的输出结果,在观察完程序后,发现在源代码中只是对年份的范围进行了一定的范围规范,没有对月份进行规范,才会出现以下的运行错误Test19: Nextday函数弱健壮性等价类简易分析赋值归纳: Y1: 该年为闰年 Y2:该年不会闰年 M1:该月有30天 M2:该月有31天(12月除外) M3:该月为12月 M4:该月为2月 D1: 1=day=27 D2:28天 D3:29天 D4:30天 D5:31天条件桩: C1:month C2:day C3:year动作桩: A1:不可能 A2: day+1 A3:day复位 A4:month+1 A5: month复位 A6:year+1 Nextday函数的决策表 选项 规则1-3456-91011-1415161718192021-22条件C1M1M1M1M2M2M3M3M4M4M4M4M4M4C2D1-D3D4D5D1-D4D5D1-D4D5D1D2D2D3D3D4-D5C3 - - - - - - - -Y1Y2Y1Y2 -动作A1A2A3A4A5A6 Nextday函数决策表测试用例测试用例yearmonthday预期输出test1-320016152001-6-16test420016302001-7-1test52001631不可能test6-920017152001-7-16test1020017312001-8-1test11-14200112152001-12-16test15200112312002-1-1test1620012152001-2-16test1720002282000-2-29test1820012282001-3-1test1920002292000-3-1test202001229不可能test21-222001230不可能对此问题健壮性边界值测试得到的结果是,当输入的数值之间有逻辑关系的时候,不适合用健壮性测试,因为其间的逻辑关系,在取其特殊值的时候,需要考虑之前的正常取值。佣金问题健壮性边界值测试用例测试用例输 入 条 件预 期 输 出实 际 输 出用例状态 枪机 枪托枪管 Test1 0 40 45提示“输入范围不合理”提示“输入范围不合理” failTest2 1 40 45 474 474 passTest3 2 40 45 483 483 passTest4 35 40 45 780 780 passTest5 69 40 45 1086 1086 passTest6 70 40 45 1095 1095 passTest7 71 40 45提示“输入范围不合理”提示“输入范围不合理” failTest8 35 0 45提示“输入范围不合理”提示“输入范围不合理” failTest935 1 45 546 546 passTest1035 245 552 552 passTest1135 79 45 1014 1014 passTest12 35 80 45 1020 1020 passTest1335 81 45提示“输入范围不合理”提示“输入范围不合理” fail Test14 35 40 0提示“输入范围不合理”提示“输入范围不合理” fail Test15 35 40 1 560 560 pass Test16 35 40 2 565 565 pass Test17 35 40 89 1000 1000 pass Test1835 40 90 1005 1005 pass Test1935 40 91提示“输入范围不合理”提示“输入范围不合理” fail缺陷截图:Test1:Test7:Test8:Test13:Test14:Test19: 佣金问题弱健壮性等价类条件桩: C1:1=x=70 动作桩: A1:不合理范围 C2: 1=y=80 A2:合理范围 C3: 1=z=90 佣金问题决策表 选项规则12-56-8条件C1TFTC2T-FC3T-动作A1A2 佣金问题决策表测试用例测试用例xyz预期输出test1354045780test2-504045不合理范围test6-835040不合理范围通过对佣金问题的决策表用例测试,可以看出佣金问题不适合用决策表测试,因为动作桩的详细判断是无法达成的。例:每个不同的输入会有不同的输出,无法判断其是属于什么范围内的佣金比例,则无法达到预期的测试效果。五、结果分析对以上三个问题进行黑盒测试,在对三角形问题进行测试的时候,发现该代码不能对非整数进行测试,将要对其输入类型进行修改,再者在若健壮性等价类测试中无法对等腰直角三角形进行测试,无法得到想要的测试结果。在对nextday函数进行测试的时候,可以将其间不满足要求的,都测试的出来,将在白盒测试之前将其修改正确。佣金问题的黑盒测试没有发现问题,相对可以满足黑盒测试的要求。南昌航空大学实验报告2013 年 11 月 3 日课程名称: 软件质量保证与测试 实验名称: 结构性测试 班级: * 姓名: * 同组人: 指导教师评定: 签名: 一、实验目的掌握逻辑覆盖法、基路径法以及数据流测试基本结构性测试方法二、实验要求1、对三角形问题尝试用逻辑覆盖法(语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、路径覆盖)设计测试用例,具体要求如下: (1)为程序语句部分进行编号; (2)画出程序的程序结构图(节点图); (3)用上述五种方法分别设计测试用例,并说明每种测试用例的设计思路,例如测试用例所覆盖的语句、判定或条件的真分支假分支或路径等; (4)使用上述测试用例对三角形问题进行测试,并做好测试记录,即有缺陷进行截图,并试图分析产生缺陷原因。2、对NextDate问题尝试采用基路径方法设计测试用例,具体要求如下: (1)为程序语句部分进行编号; (2)画出程序的程序结构图(节点图); (3)用基路径方法设计测试用例,并说明每个测试用例的设计思路,例如测试用例所覆盖基路径; (4)使用上述测试用例对NextDate问题进行测试,并做好测试记录,即有缺陷进行截图,并试图分析产生缺陷原因。3、对佣金问题采用数据流测试方法设计测试用例,具体要求如下: (1)为程序语句部分进行编号; (2)画出程序的程序结构图(节点图); (3)找出程序中所定义的枪机、枪托、枪管、销售额以及佣金五个变量的定义节点、使用节点,并判断是谓词使用还是计算使用; (4)找出以上五个变量的所有定义-使用路径,并判断其是否为定义-清除路径; (5)根据上述路径分析程序可能出现的缺陷,并试图分析产生缺陷原因。26 实验步骤 该三个问题都是先将代码进行编号,根据代码形式画出相对应的程序流程图,再根据程序流程图将其修改成节点图,在对具体要求进行解答。 具体实验步骤已在实验内容中详细介绍四、实验内容三角形问题:解:(1)#include #define e 2.718281828 main() float a,b,c; system( graftabl 936 ); clrscr(); 1 printf(请输入三个边长:n);2 scanf(%f,%f,%f,&a,&b,&c);3 if(a=1&a=1&b=1&cc & a+cb & b+ca)5 if(a*a+b*b-c*c=e-2)|(a*a+c*c-b*b=e-2)|(c*c+b*b-a*a)=1&a=1&b=1&c=1编号为1.1 a=1编号为1.3 b=1编号为1.5 cc & a+cb & b+ca a+bc编号为2.1 a+cb编号为2.2 b+ca编号为2.3节点5:(a*a+b*b-c*c=e-2)|(a*a+c*c-b*b=e-2)|(c*c+b*b-a*a)=e-2) a*a+b*b-c*c=e-2编号为3.1 a*a+c*c-b*b=e-2编号为3.2 c*c+b*b-a*a)=e-2编号为3.3节点6:a=b|b=c|a=c a=b编号为4.1 b=c编号为4.2 a=c编号为4.3节点9:a=b|b=c|a=c a=b编号为5.1 b=c编号为5.2 a=c编号为5.3节点10:a=b&a=c a=b编号为6.1 a=c编号为6.2 条件覆盖=条件组合覆盖用例序号输入数据预期输出覆盖条件abc1-120210输入范围不合理F1.1F1.2F1.3F1.4F1.5F1.62102030非三角形F2.1F2.2F2.33452一般三角形T1T2F3F4F5F64345 直角三角形T1T2T3F4F5F65222.828等腰直角三角形T1T2T3T4F5F66445 等腰三角形T1T2F3F4T5F67555 等边三角形T1T2F3F4T5T68- -其余情况不可能存在其中,T1包括所有1.11.6的情况,也就是1.11.6整体判断为T F1指的是1.11.6整体判断值为F 以上为例,其他均为此规律Nextday函数:解:(1)#includeint main()int year,month,day;int a12=31,29,31,30,31,30,31,31,30,31,30,31;int b12=31,28,31,30,31,30,31,31,30,31,30,31;int y,m,d; system( graftabl 936 ); clrscr(); 1 printf(请输入日期: );2 scanf(%d,%d,%d,&year,&month,&day);3 if(year=1900&year=1&month=1&day=31) )4 if(monthday)7 d=day+1;8 m=month;9 y=year;10 printf(%d/%d/%dn,y,m,d);11 else if(bmonth-1=day)12 d=1;13 m=month+1;14 y=year;15 printf(%d/%d/%dn,y,m,d);16 else printf(输入错误n); else 17 if(amonth-1day)18 d=day+1;19 m=month;20 y=year;21 printf(%d/%d/%dn,y,m,d); else22 d=1;23 m=month+1;24 y=year;25 printf(%d/%d/%dn,y,m,d); else26 if(amonth-1day|bmonth-1day)27 printf(%d/%d/%d,year,month,day+1); else28 printf(%d/1/1,year+1); else29 printf(超出范围n); getch(); 开 始(2) 先画出程序流程图:printf scanfif 3 是 否if 4 29 是 否if 5if 26 是 否 否 是 if 6 if 17 28 27是 否 是 否 18 22 7 19 23 8 9 20 24 21 25 10if 11 是 否 12
展开阅读全文