#0:a:2:b:a:0:c:a:2:8:9:1:f:9:f:a:3:e:6:0:3:a:1:b:7:1:6:5:4:f:6:1#
白盒测试用例练习
1.为以下所示的程序段设计一组测试用例,要求分别满足句子覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖和路径覆盖,并画出相应的程序流程图。
voidDoWork(intx,inty,intz)
intk=0,j=0;
if((x>3)&&(z
{k=x*y-1;
j=sqrt(k);//句子块1
if((x==4)||(y>5))
j=x*y+10;
}//句子块2
j=j%3;//句子块3
#8:1:b:a:4:6:1:2:8:8:b:3:6:c:5:0:f:9:8:f:a:7:9:d:b:c:4:f:e:4:0:0#
由这个流程图可以看出,该程序模块有4条不同的路径:
P1:(a-c-e)P2:(a-c-d)
P3:(a-b-e)P4:(a-b-d)
将上面的判断条件和过程记录如下:
判断条件M={x>3andz
判断条件N={x=4ory>5}
1、语句覆盖
2、判定覆盖
也可以让测试用例测试路径P2和P3。相应的两组输入数据如下:
3、条件覆盖
对于M:x>3取真时T1,取假时F1;
对于N:x=4取真时T3,取假时F3;
y>5取真时T4,取假时F4。
条件:x>3,z5
条件:x=10,x!=4,y3,z3,z>=10
3)x56)x=4,yc)&&(b+c>a)&&(a+c>b)){//判定为三角形
if((a==b)&&(b==c))//判定为等腰三角形
return3;
if((a==b)||(b==c)||(a==c))//判定为等边三角形return2;
else//判定为普通三角形
return1;
else{//为非三角形
return0;
二、程序流程图
三、测试用例
四、程序控制流图
基本路径覆盖测试用例
题目三:估算生日是礼拜几
已知公元1年1月1日是礼拜一。编撰一个程序,只要输入年月日,能够回答这天是礼拜几。应用逻辑覆盖方式和基路径测试方式为里面的问题设计测试用例
一.程序代码
#include
intcheck(intyear,intmonth,intday){
intpass=1;
intleap=0;
if((year%4==0&&year0!=0)||year%400==0)
leap=1;
if(year
switch(month)
{case1:case3:case5:case7:case8:case10:case12:if(day>31)return0;break;case4:case6:case9:case11:if(day>30)return0;break;
case2:if(leap==1&&day>29){return0;}
if(leap==0&&day>28){return0;}
break;
default:return0;break;
returnpass;
voidfun(){
intyear,month,day,sumday;
sumday=0;
printf("inputyear,month,day:\n");
scanf("%d%d%d",&year,&month,&day);
if(check(year,month,day)==0){printf("输入的日期无效");return;}
if(month==1||month==2)
{month+=12;
year--;
sumday=(day+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7;
if(month==13||month==14)
{month-=12;year++;}
switch(sumday)
{case0:printf("%d-%d-%disMonday\n",year,month,day);break;
case1:printf("%d-%d-%disTuesday\n",year,month,day);break;
case2:printf("%d-%d-%disWednesday\n",year,month,day);break;
case3:printf("%d-%d-%disThurday\n",year,month,day);break;
case4:printf("%d-%d-%disFriday\n",year,month,day);break;
case5:printf("%d-%d-%disSaturday\n",year,month,day);break;
case6:printf("%d-%d-%disSunday\n",year,month,day);break;
default:printf("dateerror");break;
main()
{for(inti=0;i
fun();
二.画出程序的控制流图
1.程序流程图如下:
2.程序控制流图如下:
3.用基本路径的测试路径
4.测试用例
题目四:选择排序
下边是选择排序的程序,其中datalist是数据表,它有两个数据成员:一是元素类型为Element的字段V,另一个是链表大小n。算法中用到两个操作,一是取某链表元素V[i]的关键码操作getKey(),一是交换两链表元素内容的操作Swap()::
voidSelectSort(datalist&list){
/对表list.V[0]到list.V[n-1]进行排序,n是表当前厚度。
for(inti=0;i intk=i;//在list.V[i].key到list.V[n-1].key中找具有最小关键码的对象 for(intj=i+1;j if(list.V[j].getKey() if(k!=i)Swap(list.V[i],list.V[k]);//交换 (1)试估算此程序段的McCabe复杂性; (2)用基本路径覆盖法给出测试路径; (3)为各测试路径设计测试用例。 解答如下: 首先画出程序的流程图 (1)McCabe复杂性为: V(G)=判断节点数+1=4+1=5 (2)用基本路径覆盖法给出测试路径: 从以上程序图中确定无关的基本路径:Path1:0-1-2-12 Path2:0-1-2-3-4-5-9-11 Path3:0-1-2-3-4-5-9-10-11 Path4:0-1-2-3-4-5-6-8 Path5:0-1-2-3-4-5-6-7-8 (3)为各测试路径设计测试用例: 因为节点2和节点5判断条件是等价的,所以Path2和Path3不可直达。A={1},n=1 路径:0-1-2-12 A={1,2},n=2 路径:0-1-2-3-4-5-6-8-5-9-11-2-12 A={2,1},n=2 路径:0-1-2-3-4-5-6-7-8-5-9-10-11-2-12 A={1,3,2},n=3 路径:0-1-2-3-4-5-6-8-5-9-11-2-3-4-5-6-7-8-5-9-10-11-2-12