软件测试实验报告.docx
《软件测试实验报告.docx》由会员分享,可在线阅读,更多相关《软件测试实验报告.docx(17页珍藏版)》请在冰豆网上搜索。
软件测试实验报告
件
测
试
实
验
报
姓名:
*******
专业:
*********************
班级:
***********
学号:
*************
日期:
2011-5-25
实验一:
黑盒测试
一、实验目的:
了解三角形问题的边界值分析测试用例。
二、实验要求:
在三角形问题描述中,除了要求边长是整数外,没有给出其它的限制条件。
在此,我们将三角形每边边长的取范围值设值为[1,100]。
在三角形问题中,有四种可能的输出:
等边三角形、等腰三角形、一般三角形和非三角形。
利用这些信息能够确定下列输出(值
域)等价类。
R1={:
边为a,b,c的等边三角形}
R2={:
边为a,b,c的等腰三角形}
R3={:
边为a,b,c的一般三角形}
R4={:
边为a,b,c不能组成三角形}
三、实验程序:
#include"iostream.h"
voidmain()
{
inta,b,c;
cout«"请输入1<=a<=100或1<=b<=100或lv=c<=100"v>a>>b>>c;
if((1<=a&&a<=100)&&(1<=b&&b<=100)&&(1<=c&&c<=100))
{if(a+b>c&&a+c>b&&c+b>a)
{
if(a==b&&a==c&&c==b){cout<<"三角形为等边三角形"<{
coutvv"三角形为等腰三角形"<}
elseif((a*a+b*b)==c*c||(c*c+b*b)==a*a||(a*a+c*c)==b*b)
{
cout«"三角形为直角三角形"<}
elsecout«"a,b,c可组成三角形"<}
elsecout«"不存在a,b,c组成的三角形"<}
elsecout<<"a或b或c的值不合法,无法判断"<四、测试用列:
用列ID
a
b
c
预期输出
1
P1
1十
1
三角形为等边三角形
2
2
2
1
三角形为等腰三角形
3
3
4
5
三角形为直角三角形
4
P2
2亍
2
三角形为等边三角形
5
2
3
3
三角形为等腰三角形
6
4
3
5
三角形为直角三角形
7
r5
4n
3
三角形为直角三角形
8
1
1
2
不存在a,b,c组成的三角形
9
4
2
2
不存在a,b,c组成的三角形
10
P2
4
2
不存在a,b,c组成的三角形
11
4
2
5
不存在a,b,c组成的三角形
12
0
0
0
a或b或c的值不合法,无法判断
13
P0
1「
1
a或b或c的值不合法,无法判断
14
2
0
12
a或b或c的值不合法,无法判断
15
13
13
0
a或b或c的值不合法,无法判断
16
P100
100n
100
三角形为等边三角形
17
100
100
0
a或b或c的值不合法,无法判断
18
100
12
101
a或b或c的值不合法,无法判断
19
100
12
100
不存在a,b,c组成的三角形
20
90
90
80
三角形为等腰三角形
五、等价类划分:
输入条件
有效等价类
编号
无效等价
类
编号
三角形
a+b>c&&a+c>b&&c+b>a&&a=b&&c=b
1
a<1,a>100,
b<1,b>100,c<1,c>100
5
a+b>c&&a+c>b&&c+b>a&&a=b||c=b
2
a+b>c&&a+c>b&&c+b>a&&
3
非三角形
a+b4
六、实验结论:
通过实验要求的条件编写的程序和测试用列的预期输出证明给该
程序是正确的
实验二:
黑盒测试
1.
一、实验目的:
了解xtDate函数的边界值分析测试用例。
二、实验要求:
程序有三个输入变量month、day、year(month、day和year均为整数值,并且满足:
1wmonth<<121311900Wyearw2050),分别作为输入日期的月份、日、年份,通过程序可以输
出该输入日期在日历上第二天的日期。
例如,输入为2005年11月30日,则该程序的输出为2005年12
月1日。
请用等价类测试和边界测试法设计测试用例。
三、实验程序:
#include"stdio.h"
intIsLeapYear(intYear);
intIsCurrentDate(intYear,intMonth,intDay);
intReturnNextDay(intYear,intMonth,intDay);
intLeapYear_Month_SumDay[12]={31,29,31,30,31,30,31,31,30,31,30,31};voidmain()
{intYear=0,Month=0,Day=0,NextDay=0;
printf("pleaceenterrightDate(example:
2005627):
\n");scanf("%d%d%d",&Year,&Month,&Day);
NextDay=ReturnNextDay(Year,Month,Day);
switch(NextDay)
{case0:
printf("notacurrentdate\n");break;
case1:
if(Month==12)
{Year++;Month=1;}else{Month++;}break;
}
if(NextDay!
=0)printf("Theyouinputnextdateis%d-%d-%d.\n",Year,Month,NextDay);
}
intIsLeapYear(intYear)
{if(Year%4==0)
{if(Year%400)return1;
else{if(Year%100==0)return0;
elsereturn1;
}}
else{return0;}
}
intIsCurrentDate(intYear,intMonth,intDay)
{if((Year<1900)&&(Year>2050)&&(Month>12)&&(Month<1)&&(Day<1)&&(Day>31))printf("输入的数据有错,请重新输入!
!
");
elsereturn1;
intReturnNextDay(intYear,intMonth,intDay){intThisMonthSumDay;
if(IsCurrentDate(Year,Month,Day)==1)
{ThisMonthSumDay=LeapYear_Month_SumDay[Month-1];
if(Month==2)
{if(IsLeapYear(Year)==0)ThisMonthSumDay--;}
if(Dayelse{if(Day==ThisMonthSumDay){return1;}
else{return0;}
}
}else{return0;}
}
四、实验用例:
用例ID
Year
Month
Day
预期输出
1
2000
1
1
2000-1-2
2
2000
2
31
不可能
3
2001
3
30
2001-3-31
4
1900
4
15
1900-4-16
5
2001
2
29
不可能
6
2004
2
28
2004-2-29
五、等价类划分:
输入条件
编号
有小等价类
编号
无效等价类
输入年份
1
1900<=n<=2050
7
n>2050||n<1900
输入月份
2
1<=y<=12
8
y>12||y>1
输入日期
3
1<=r<=31
9
r>31||r<1
闰年
4
1<=r<=29
10
r>29||r<1
非闰年
5
1<=r<=28
11
r>28||r<1
2.
一、实验目的:
了解找零钱组合的方法
二、实验要求:
假设商店货品价格(R)都不大于100元(且为整数),若顾客付款(P)在10元内,现有-个程序能在每位顾客付款后给出找零钱的最佳组合(找给顾客货币张数最少)。
假定此商店的货币面值只
包括:
50元(N50)、10元(N10)、5元(N5)、1元(N1)四种。
请结合等价类划分法和边界值分析法为上述
程序设计出相应的测试用例。
三、实验程序:
#include"iostream.h"
voidmain()
{chari;
inta,b;〃a代表商品价钱,b代表顾客付的钱。
do
{cout<<"请输入商品价钱a(1—100):
";
cin>>a;
cout<<"请输入顾客付款b(1—100):
";
cin>>b;
cout<<"最佳找零方案:
"<cout<<(b-a)/50<<"张50元"<cout<<((b-a)%50)/10<<"张10元"<cout<<((b-a)%10)/5<<"张5元"<cout<<(b-a)%5<<"张1元\n"<cout<<"你还要继续吗?
输入n表示结束"<cin>>i;
}
while(i!
='n');}
四、等价类划分:
输入条件
有效等价类
编号
无效等价类
编号
付款金额
1<=b<=100
1
b>100||b<1
3
商品金额
12
a>=100||a<=1
4
五、测试用例:
测试用例
输入数据
预期输出
实际输出
b
a
最佳找钱路径
1
100
50
一张50
一张50
2
100
40
一张50、一张10
一张50、一张10
3
150
40
无法推算
无法推算
4
100
150
无法推算
无法推算
实验三:
白盒测试
、实验目的:
根据流程图编写程序,并使用逻辑覆盖测试方法测试
、实验要求:
语句1:
k=x*y-1;j=sqrt(k);
语句2:
j=x*y+10;
语句3:
j=j%3;
要求:
(1)画出该程序的控制流图
设计测试用例,并写出每个测试用例的执行路径。
三、实验程序:
#include"stdio.h"
voidmain()
{intx=0,y=0,k=0;
floatj=5;
printf("请输入X,Y的值”);
scanf("%d%d%d\n",&x,&y,&j);
if(x>8&&y>5)
四、控制流程图:
五、语句覆盖:
测试的路径为{x=10,y=6};程序执行的路径为:
1►37;
六、判定覆盖:
测试的路径为:
{x=17,y=11};{x=9,y=7};{x=7,y=6};{x=-1,y=-2};
(1)
当测试路径为
{x=17,y=11}时,程序执行的路径为:
1―3—7;
(2)
当测试路径为
{x=9,y=7}时,程序执行的路径为:
1——►3——7;
(3)
当测试路径为
{x=7,y=6}时,程序执行的路径为:
1—2—5—7;
(4)
当测试路径为
{x=-1,y=-2}时,程序执行的路径为:
1—►2—>4—►7;
七、条件覆盖:
(1)
第一个判定((x>8)&&(y>5)):
1、条件x>8取真值记为T1,取假值记为-T1
2、条件z<5取真值记为T2,取假值记为-T2
(2)第二个判定((x>0)||(y>0)):
1、条件x>0取真值记为T3,取假值记为-T3
2、条件y>0取真值记为T4,取假值记为-T4
(3)第三个判定((x>16)||(y>10)):
1、条件x>16取真值记为T5,取假值记为-T5
2、条件y>10取真值记为T6,取假值记为-T6
根据条件覆盖的基本思想,要使上述6个条件可能产生的12种情况至少满足一次,设计测试
用例如下:
测试用例
执行路径
覆盖条件
覆盖分支
X=17,y=11
1-3-6-7
:
T1,T2,T3,T4,T5,T6
3-6-7
X=-1,y=-1
1-2-4-7
-T1,-T2,-T3,-T4,-T5,-T6
2-4-7
八、判定/条件覆盖:
根据判定/条件覆盖的基本思想,只需设计以下两个测试用例便可以覆盖6个条件的12种取值以及6个判定分支。
测试用例
执行路径
覆盖条件
覆盖分支
X=17,y=11
1-3-6-7
T1,T2,T3,T4,T5,T6
3-6-7
X=-1,y=-1
1-2-4-7
-T1,-T2,-T3,-T4,-T5,-T6
2-4-7
九、组合覆盖:
对函数中的各个判定的条件取值组合加以标记:
1、x>8,y>5记做T1T2,第一个判定的取真分支;
2、x>8,y<=5记做T1-T2,第一个判定的取假分支;
3、x<=8,y>5记做-T1T2,第一个判定的取假分支;
4、x<=8,y<5
5、x>0,y>0
6x>0,y<=0
7、x<=0,y>0
8、x<=0,y<=0
9、x>16,y>10
记做-T1-T2,第一个判定的取假分支;
记做T3T4,第一个判定的取假分支和第二个判定的取真分支;记做T3-T4,第一个判定的取假分支和第二个判定的取真分支;记做-T3T4,第一个判定的取假分支和第二个判定的取真分支;记做-T3-T4,第一个判定的取假分支和第二个判定的取假分支;记做T5T6,第一个判定的取真分支和第三个判定的取真分支;
10、x>16,y<=10记做T5-T6,第一个判定的取真分支和第三个判定的取真分支;
11、x<=16,y>10记做-T5T6,第一个判定的取真分支和第三个判定的取真分支;
12、x>=16,y<10记做-T5-T6,第一个判定的取真分支和第三个判定的取假分支;
根据组合覆盖的基本思想,设计测试用例如下:
测试用例
执行路径
覆盖条件
覆盖组合号
x=17,y=11
1-3-6-7
T1,T2,T3,T4,T5,T6
1、5、9
x=9,y=-1
1-2-5-7
T1,-T2,T3,-T4,T5,-T6
2、6、10
x=9,y=6
1-2-5-8
T1,T2,T3,T4,-T5,-T6
3、7、11
X=-1,y=-1
1-2-4-7
-T1,-T2,-T3,-T4,-T5,-T6
4、&12
十、路径覆盖:
根据路径覆盖的基本思想,在满足组合覆盖的测试用例中修改其中一个测试用例,则可以
实现路径覆盖:
测试用例
执行路径
覆盖条件
x=9,y=6
1-3-7
T1,T2,T3,T4,-T5,-T6
X=17,y=6
1-3-6-7
T1,T2,T3,T4,T5,-T6
X=5,y=6
1-2-5-7
T1,T2,T3,T4,-T5,-T6
X=-1,y=-1
1-2-4-7
-T1,-T2,-T3,-T4,-T5,-T6
实验四:
白盒测试
一、实验目的:
计算生日是星期几
二、实验要求:
已知公元1年1月1日是星期一。
编写一个程序,只要输入年月日,就能回答那天是星期几。
应用逻辑覆盖方法和基本路径测试方法为上面的问题设计测试用例。
要求:
(1)画出该程序的控制流图;
(2)用基本路径测试方法给出测试路径;(3)为各测试路径设计测试用例。
三、实验程序:
#include
voidmain()
{intyear,month,day;
intt=0,t1=0,a=0,b=2050,c=0;
coutvv"请输入year:
"vcin>>year;
cout«"请输入month:
"<cin>>month;
coutvv"请输入day:
"<cin>>day;
coutvvyearvv","vvmonthvv","vvdayvvendl;
1for(year=1;yearvb;year++)
{
2if((year%4==0&&year%100!
=0)
||(year%400==0))
3{c=year/4;
t1=(year-1)*365+c-1;
switch(month)
{
case1:
a=day;break;
case2:
a=31+day;break;
case3:
a=60+day;break;
case4:
a=91+day;break;
case5:
a=121+day;break;
case6:
a=152+day;break;
case7:
a=182+day;break;
case8:
a=213+day;break;
case9:
a=244+day;break;
case10:
a=274+day;break;
case11:
a=305+day;break;
case12:
a=335+day;break;
}
4else
{c=(int)(year/4);
t1=(year-1)*365+c;
switch(month)
{case1:
a=day+;break;
case2:
a=31+day;break;case3:
a=59+day;break;case4:
a=90+day;break;
case5:
a=120+day;break;case6:
a=151+day;break;
case7:
a=181+day;break;case8:
a=212+day;break;
case9:
a=243+day;break;case10:
a=273+day;break;case11:
a=304+day;break;
case12:
a=334+day;break;
}
}
t=(t1+a)%7;
5switch(t)
{case1:
cout<<'星期一";break;case2:
cout<<'星期二";break;case3:
cout<<'星期三";break;case4:
cout<<'星期四";break;
case5:
cout<<'星期五";break;case6:
cout<<'星期六";break;
case0:
cout}
}
}
四、实验流程图:
五、基本测试路径:
六、各测试路径设计测试用例:
测试用例
执行路径
预期输出
实际输出
2000年1月1日
1*2^35
星期日
星期日
2001年5月15日
1f2f4―*5
星期三
星期三