网站首页 公文大全 个人文档 实用范文 讲话致辞 实用工具 心得体会 哲学范文 总结范文 范文大全 报告 合同 文书 信函 实用
  • 情书
  • 检讨书
  • 委托书
  • 保证书
  • 承诺书
  • 证明
  • 倡议书
  • 公证书
  • 悔过书
  • 意向书
  • 担保书
  • 请假条
  • 百花范文网 > 文书 > 检讨书 > 白盒测试用例练习

    白盒测试用例练习

    时间:2021-04-16 15:01:08来源:百花范文网本文已影响

    白盒测试用例练习 1.为以下所示的程序段设计一组测试用例,要求分别满足语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖和路径覆盖,并画出相应的程序流程图。

    void DoWork (int x,int y,int z) { int k=0,j=0; if ( (x>3)&&(z<10) ) { k=x*y-1; j=sqrt(k); //语句块1 } if ( (x==4)||(y>5) ) { j=x*y+10; } //语句块2 j=j%3; //语句块3 k=0 j=0 k=x*y-1 j=sqrt(k) x>3 and z<10 } a Y c N b x=4 or y>5 e Y j=x*y+10 N d j=j%3 由这个流程图可以看出,该程序模块有4条不同的路径:
    P1:(a-c-e) P2:(a-c-d) P3:(a-b-e) P4:(a-b-d) 将里面的判定条件和过程记录如下:
    判定条件M={x>3 and z<10} 判定条件N={x=4 or y>5} 1、 语句覆盖 测试用例输入 输出 判定M的取值 判定N的取值 覆盖路径 x=4,z=5,y=8 k=31,j=0 T T P1(a-c-e) 2、判定覆盖 p1和p4可以作为测试用例,其中p1作为取真的路径,p4作为取反的路径。

    测试用例输入 输出 判定M的取值 判定N的取值 覆盖路径 x=4,z=5,y=8 k=31,j=0 T T P1(a-c-e) x=2,z=11,y=5 k=0,j=0 F F P4(a-b-d) 也可以让测试用例测试路径P2和P3。相应的两组输入数据如下:
    测试用例输入 输出 判定M的取值 判定N的取值 覆盖路径 x=5,z=5,y=4 k=19,j=sqrt(19)%3 T F P2(a-c-d) x=4,z=11,y=6 k=0,j=1 F T P3(a-b-e) 3、条件覆盖 对于M:x>3取真时T1,取假时F1; z<10取真时T2,取假时F2;

    对于N:x=4取真时T3,取假时F3; y>5取真时T4,取假时F4。

    条件:x>3,z<10,x=4,y>5 条件:x<=3,z>=10,x!=4,y<=5 根据条件覆盖的基本思路,和这8个条件取值,组合测试用例如表所示: 测试用例输入 输出 取值条件 具体取值条件 覆盖路径 x=4,z=5,y=8 k=31, j=0 T1,T2,T3,T4 x>3,z<10,x=4,y>5 P1(a-c-e) x=3,z=11,y=5 k=0, j=0 F1,F2,F3,F4 x<=3,z>=10,x!=4,y<=5 P4(a-b-d) 4、判定/条件覆盖 测试用例输入 输出 取值条件 具体取值条件 覆盖路径 x=4,z=5,y=8 k=31, j=0 T1,T2,T3,T4 x>3,z<10,x=4,y>5 P1(a-c-e) x=3,z=11,y=5 k=0, j=0 F1,F2,F3,F4 x<=3,z>=10,x!=4,y<=5 P4(a-b-d) 5、组合覆盖 条件组合 1)x>3,z<10 2)x>3,z>=10 3) x<=3,z<10 4)x<=3,z>=10 5)x=4,y>5 6)x=4,y<=5 7)x!=4,y>5 8)x!=4,y<=5 测试用例输入 输出 覆盖条件取值 覆盖条件组合 覆盖路径 x=4,z=5,y=6 k=23, j=1 T1,T2,T3,T4 1,5 P1(a-c-e) x=4,z=10,y=5 k=0, j=0 T1,F2,T3,F4 2,6 P2(a-c-d) x=3,z=5,y=6 k=14 j=1 F1,T2,F3,T4 3,7 P3(a-b-e) z=3,z=10,y=5 k=0, j=2 F1,F2,F3,F4 4,8 P4(a-b-d) 6、路径覆盖 测试用例输入 输出 覆盖条件取值 覆盖条件组合 覆盖路径 x=4,z=5,y=8 k=31,j=0 T1,T2,T3,T4 1,5 P1(a-c-e) x=5,z=5,y=4 k=19,j=sqrt(19)%3 T1,T2,F3,F4 1,8 P2(a-c-d) x=4,z=11,y=6 k=0,j=1 T1,F2,T3,T4 2,5 P3(a-b-e) x=2,z=11,y=5 k=0,j=0 F1,F2,F3,F4 4,8 P4(a-b-d) 题目二:三角形问题 在三角形计算中,要求输入三角型的三个边长:A、B 和C。当三边不可能构成三角形时提示错误,可构成三角形时计算三角形周长。若是等腰三角形打印“等腰三角形”,若是等边三角形,则提示“等边三角形”。画出程序流程图、控制流程图、计算圈复杂度V(g),找出基本测试路径。

    一、核心程序代码 /** 判断三角形的类 */ public class TriangleTestMethod { /** 判断三角形的种类。参数a, b, c分别为三角形的三边, * 返回的参数值为0,表示非三角形;

    * 为1,表示普通三角形;

    * 为2,表示等腰三角形;

    * 为3,表示等边三角形。

    */ public static int comfirm(int a, int b, int c) { if((a + b > c) && (b + c > a) && (a + c > b)) { // 判断为三角形 if((a == b) && (b ==c)) // 判断为等边三角形 return 3; if((a == b) || (b == c) || (a == c)) // 判断为等腰三角形 return 2; else // 判断为普通三角形 return 1; } else { // 为非三角形 return 0; } } } 二、程序流程图 三、测试用例 1.语句覆盖测试用例 输入 期望输出 覆盖对象 测试结果 Case1 a=1, b=2, c=3 0 ① , ⑤ 0 Case2 a=3, b=4, c=5 1 ① , ②, ④, ⑥ ② 1 Case3 a=3, b=3, c=4 2 ① , ②, ④, ⑦ ② 2 Case4 a=3, b=4, c=5 3 ① , ②, ③ ② 3 2.判定覆盖测试用例 输入 期望输出 覆盖对象 测试结果 Case11 a=1, b=2, c=3 0 ② , ⑤ 0 Case12 a=3, b=4, c=5 1 ③ , ②, ④, ⑥ ④ 1 Case13 a=3, b=3, c=4 2 ③ , ②, ④, ⑦ ④ 2 Case14 a=3, b=4, c=5 3 ③ , ②, ③ ④ 3 3.条件覆盖测试用例 输入 期望输出 覆盖对象 测试结果 Case5 a=1, b=6, c=7 0 F1, T2, T3 0 Case6 a=7, b=1, c=6 0 T1, F2, T3 0 Case7 a=1, b=7, c=6 0 T1, T2, F3 0 Case8 a=3, b=3, c=4 2 T1, T2, T3, T4, F5, T6, F7, F8 2 Case9 a=3, b=4, c=3 2 T1, T2, T3, F4, F5, F6, F7, T8 2 Case10 a=4, b=3, c=3 2 T1, T2, T3, F4, T5, F6, T7, F8 2 4.条件-判定覆盖测试用例 输入 期望输出 覆盖对象 测试结果 Case15 a=1, b=6, c=7 0 F1, T2, T3 0 Case16 a=7, b=1, c=6 0 T1, F2, T3 0 Case17 a=1, b=7, c=6 0 T1, T2, F3 0 Case18 a=3, b=3, c=4 2 T1, T2, T3, T4, F5, T6, F7, F8 2 Case19 a=3, b=4, c=3 2 T1, T2, T3, F4, F5, F6, F7, T8 2 Case20 a=4, b=3, c=3 2 T1, T2, T3, F4, T5, F6, T7, F8 2 Case21 a=3, b=3, c=3 3 F1, T2, T3 (3 , ②, ③) 3 Case22 a=3, b=4, c=5 1 T1, F2, T3 (①, ②, ④, ⑥) 1 5.条件组合覆盖测试用例 输入 期望输出 覆盖对象 测试结果 Case23 a=1, b=6, c=7 0 F1, T2, T3 0 Case24 a=7, b=1, c=6 0 T1, F2, T3 0 Case25 a=1, b=7, c=6 0 T1, T2, F3 0 Case26 a=3, b=3, c=4 2 T1, T2, T3, T4, F5, T6, F7, F8 2 Case27 a=3, b=4, c=3 2 T1, T2, T3, F4, F5, F6, F7, T8 2 Case28 a=4, b=3, c=3 2 T1, T2, T3, F4, T5, F6, T7, F8 2 Case29 a=3, b=4, c=5 1 T1, T2, T3, F4, F5, F6, F7, F8 1 Case30 a=3, b=4, c=3 2 T1, T2, T3, F4, F5, F6, F7, T8 2 备注 其他条件组合,无法到达结束 四、程序控制流图 基本路径覆盖测试用例 输入 期望输出 覆盖对象 测试结果 Case31 a=1, b=6, c=7 0 A->D 0 Case32 a=7, b=6, c=1 0 A->B->D 0 Case33 a=1, b=7, c=6 0 A->B->C->D 0 Case34 a=3, b=3, c=3 3 A->B->C->E->G->H 3 Case35 a=3, b=3, c=4 2 A->B->C->E->G->I 2 Case36 a=4, b=3, c=3 2 A->B->C->E->F->H 2 Case37 a=3, b=4, c=3 2 A->B->C->E->F->J->H 2 Case38 a=3, b=4, c=5 1 A->B->C->E->F->J->K 1 题目三:计算生日是星期几 已知公元1年1月1日是星期一。编写一个程序,只要输入年月日,就能回答那天是星期几。应用逻辑覆盖方法和基路径测试方法为上面的问题设计测试用例 一.程序代码 #include<stdio.h> int check(int year,int month,int day){ int pass=1; int leap=0; if( (year%4==0 && year%100!=0 )|| year%400==0 ) leap=1; if(year<1 ||day<1) return 0; switch(month) { case 1:case 3:case 5:case 7:case 8:case 10:case 12:if(day>31)return 0;break; case 4:case 6:case 9:case 11:if(day>30) return 0; break; case 2: if(leap==1&&day>29) {return 0;} if(leap==0&&day>28){return 0;} break; default:return 0;break; } return pass; } void fun(){ int year,month,day,sumday; sumday=0; printf(“input year,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) {case 0:printf(“%d-%d-%d is Monday\n“,year,month,day);break; case 1:printf(“%d-%d-%d is Tuesday\n“,year,month,day);break; case 2:printf(“%d-%d-%d is Wednesday\n“,year,month,day);break; case 3:printf(“%d-%d-%d is Thurday\n“,year,month,day);break; case 4:printf(“%d-%d-%d is Friday\n“,year,month,day);break; case 5:printf(“%d-%d-%d is Saturday\n“,year,month,day);break; case 6:printf(“%d-%d-%d is Sunday\n“,year,month,day);break; default:printf(“date error“);break; } } main() { for(int i=0;i<14;i++) fun(); } 二.画出程序的控制流图 1.程序流程图如下:
    month==13||month==14 no month==1||month==2 yes month+=12; year--; 计算星期数sumday=公式(year,month,day) no yes Month-=12; year++; 5 4 6 0 1 2 3 4 5 6 其他 sumday 输出语句1 输出语句2 输出语句3 输出语句4 输出语句5 输出语句6 输出语句7 输出语句0 结束 7 8 9 10 11 12 13 14 15 15 输入年月日year,month,day 2 3 end Check(year,month,day) 0 1 Check( )函数 no no no yes yes 得到year,month,day year<1 ||day<1 no (year%4==0 && year%100!=0 )|| year%400==0 1 3 5 7 8 10 12 4 6 9 11 2 其他 month return pass pass=1; leap=0; leap=1; return 0 day>31 day>30 return 0 no yes return 0 yes leap==1&&day>29 leap==0&&day>28 return 0 16 18 17 19 20 21 22 23 24 25 26 28 29 28 27 31 30 32 33 2.程序控制流图如下:
    16 19 17 21 22 23 24 31 33 34 end 15 2 4 3 5 8 7 6 12 end 9 10 11 13 14 3.用基本路径的测试路径 编号 基本路径 编号 基本路径 1 ⒃⒄⒆(21)(24)(31)(33) 11 (0)① 2 ⒃⒆(34) 12 (0)②③④⑤⑥⑦⑧ 3 ⒃⒆(21)(34) 13 (0)②④⑤⑦⑨ 4 ⒃⒆(21)(22)(34) 14 (0)②④⑤⑦⑩ 5 ⒃⒆(21)(23)(34) 15 (0)②④⑤⑦(11) 6 ⒃⒆(21)(24)(34) 16 (0)②④⑤⑦(12) 7 ⒃⒆(21)(31)(34) 17 (0)②④⑤⑦(13) 8 ⒃⒆(21)(22)(33) 18 (0)②④⑤⑦(14) 9 ⒃⒆(21)(23)(33) 10 ⒃⒆(21)(31)(33) 条件: 编号 条件 编号 编号 T1 month==1 T13 year%100!=0 T25 month==2 T2 month==2 T14 year%100!=0 T26 month==3 T3 month==13 T15 year%400==0 T27 month==4 T4 month==14 T16 year<1 T28 month==5 T5 sumday==0 T17 day<1 T29 month==6 T6 sumday==1 T18 month==1 T30 month==7 T7 sumday==2 T19 day>31 T31 month==8 T8 sumday==3 T20 day>30 T32 month==9 T9 sumday==4 T21 leap==1 T33 month==10 T10 sumday==5 T22 leap==0 T34 month==11 T11 sumday==6 T23 day>29 T35 month==12 T12 year%4==0 T24 day>28 4.测试用例 用例编号 输入的数据 预期的输出 实际的输出 执行的路径 覆盖的条件 1 2012 2 1 Wednesday Wednesday (0)②③④⑤⑥⑦⑧ T12,T13,T25,T21,T2,T4,T7 2 2012 3 1 Thurday Thurday (0)②④⑤⑦⑨ T12,T13,T26,T8 3 2012 4 6 Friday Friday (0)②④⑤⑦⑩ T12,T13,T27,T9 4 2012 5 5 Saturday Saturday (0)②④⑤⑦(11) T12,T13,T28,T10 5 2012 6 3 Sunday Sunday (0)②④⑤⑦(12) T12,T13,T29,T11 6 2012 7 30 Monday Monday (0)②④⑤⑦(13) T12,T13,T30,T5 7 2000 8 15 Tuesday Tuesday (0)②④⑤⑦(14) T12,T15,T31,T6 8 2012 9 31 错误提示 错误提示 (0)① T12,T13,T20,T32 9 2013 2 8 Wednesday Wednesday ⒃⒄⒆(21)(24)(31)(33) T25,T22,T2,T4,T7 10 2013 0 12 错误提示 错误提示 ⒃⒆(34) T17 11 2013 1 26 Saturday Saturday ⒃⒆(21)(34) T18,T1,T3,T10 12 2013 10 33 错误提示 错误提示 ⒃⒆(21)(22)(34) T33,T19 13 2013 11 31 错误提示 错误提示 ⒃⒆(21)(23)(34) T34,T20 14 2012 2 30 错误提示 错误提示 ⒃⒆(21)(24)(34) T12,T13,T25,T21,T23 15 2013 2 29 错误提示 错误提示 ⒃⒆(21)(31)(34) T25,T24 16 2013 12 31 Saturday Saturday ⒃⒆(21)(22)(33) T35,T10 17 2013 6 30 Sunday Sunday ⒃⒆(21)(23)(33) T29,T11 18 2013 2 15 Friday Friday ⒃⒆(21)(24)(31)(33) T25,T22,T2,T4,T9 19 0 12 12 错误提示 错误提示 ⒃⒆(34) T16 题目四:选择排序 下面是选择排序的程序,其中datalist是数据表,它有两个数据成员:一是元素类型为Element的数组V,另一个是数组大小n。算法中用到两个操作,一是取某数组元素V[i]的关键码操作getKey ( ),一是交换两数组元素内容的操作Swap( )::
    void SelectSort ( datalist & list ) { /对表list.V[0]到list.V[n-1]进行排序, n是表当前长度。

    for ( int i = 0; i < list.n-1; i++ ) { int k = i; //在list.V[i].key到list.V[n-1].key中找具有最小关键码的对象 for ( int j = i+1; j < list.n; j++) if ( list.V[j].getKey ( ) < list.V[k].getKey ( ) ) k = j;//当前具最小关键码的对象 if ( k != i ) Swap ( list.V[i], list.V[k] ); //交换 } } (1) 试计算此程序段的McCabe复杂性;

    (2) 用基本路径覆盖法给出测试路径;

    (3) 为各测试路径设计测试用例。

    解答如下:
    首先画出程序的流程图 开始 i = 0 i < list.n-1 j++ k = i j < list.n k = j k != i Swap ( list.V[i], list.V[k] ) list.V[j] < list.V[k] i++ 结束 j = i+1 Y N N N N Y Y Y 程序流程图 (1)McCabe复杂性为:
    V(G)=判定节点数+1=4+1=5 (2)用基本路径覆盖法给出测试路径:
    1 2 3 4 5 6 7 8 9 10 11 12 程序图 0 从以上程序图中确定无关的基本路径:
    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

    相关热词搜索:

    • 范文大全
    • 说说大全
    • 学习资料
    • 语录
    • 生肖
    • 解梦
    • 十二星座

    推荐访问