代码检查、走查与评审、覆盖率(白盒)测试.pdf

上传人:g****s 文档编号:85918192 上传时间:2023-04-13 格式:PDF 页数:20 大小:509.25KB
返回 下载 相关 举报
代码检查、走查与评审、覆盖率(白盒)测试.pdf_第1页
第1页 / 共20页
代码检查、走查与评审、覆盖率(白盒)测试.pdf_第2页
第2页 / 共20页
点击查看更多>>
资源描述

《代码检查、走查与评审、覆盖率(白盒)测试.pdf》由会员分享,可在线阅读,更多相关《代码检查、走查与评审、覆盖率(白盒)测试.pdf(20页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、代码检查、走查与评审、覆盖率(白盒)测试(总分:108.00,做题时间:90 分钟)一、选择题(总题数:39,分数:39.00)1.以下叙述中正确的是_。(分数:1.00)A.可跟踪性分析是在整体上分析整个资源的分配策略 B.关键性分析是标识原始需求和相应开发结果之间关系的能力 C.接口分析必须关注3 种接口:用户接口、硬件接口和软件接口 D.评估权在软件开发的最后阶段进行,以确认产品是否符合规格说明 解析:解析 接口分析的目的是评估软件交付物是否正确、已知、完整和准确地说明了接口需求。接口分析必须关注 3 种接口:用户接口、硬件接口和软件接口。2.走查是对软件进行静态测试的一种方法,以下不属

2、于走查活动的是_。(分数:1.00)A.计划走查会议 B.准备测试用例 C.执行走查以发现和改正错误 D.在走查过程中程序员逐渐讲解自己的程序 解析:解析 走查的步骤如下:(1)计划走查会议;(2)走查产品;(3)执行走查;(4)解决缺陷;(5)走查记录;(6)产品返工,准备测试用例是走查之前要进行的活动。3.检查是否存在“已定义但未使用”的变量引用异常应属于_。(分数:1.00)A.静态分析 B.动态分析 C.代码执行 D.调试 解析:解析 静态错误分析有以下几种:类型和单位分析、引用分析等,其中在静态错误分析中,使用技术最广泛的是发现引用异常。4.软件静态分析一般包括:控制流分析、数据流分

3、析、接口分析,以及 _。(分数:1.00)A.表达式分析 B.功能分析 C.边界值分析 D.因果图分析 解析:解析 静态错误分析主要用于确定在源程序中是否有某类错误或危险结构。它有以下几种类型:单位分析、引用分析、表达式分析、接口分析。5.在程序测试中,用于检查程序模块或子程序之间的调用是否正确的静态分析方法是 _。(分数:1.00)A.操作性分析 B.可靠性分析 C.引用分析 D.接口分析 解析:解析 静态错误分析主要用于确定在源程序中是否有某类错误或者危险结构,包括:(1)类型和单位分析。为了强化对源程序中数据类型的检查,在程序设计语言中扩充一些新的数据类型 (2)引用分析。在静态错误分析

4、中,使用技术最广泛的是发现引用异常。(3)表达式分析。对表达式进行分析,以发现和纠正在表达式中出现的错误。(4)接口分析。接口的一致性是程序的静态错误分析和设计分析共同研究的题目。接口一致性的设计分析主要检查模块之间接口的一致性和模块与外部数据库之间接口的一致性。6.下列引用表,不能直接从表中查出说明/使用错误的是_。(分数:1.00)A.循环层次表 B.等价表 C.变量交叉引用表 D.标号交叉引用表 解析:7.程序的静态错误分析和设计分析共同研究的题目是_。(分数:1.00)A.接口一致性 B.表达式分析 C.引用分析 D.类型和单位分析 解析:8.下列关于代码检查说法正确的是_。代码检查过

5、程的目的是发现错误,而不是纠正错误 程序员通常可以通过代码检查得到编程风格、算法选择及编程技术等方面的反馈信息 代码检查是早期发现程序中最易出错部分的方法之一(分数:1.00)A.B.C.D.都是 解析:9.以下关于人工检查方法叙述正确的是_。(分数:1.00)A.走查的主要工作是由程序编写者本人来完成的 B.代码检查是对程序进行模拟,一步一步地展示程序如何处理由检查人员提供的测试数据 C.同行评审是一种通过作者的同行来确认缺陷和需要变更区域的检查方法 D.桌上检查是以小组为单位进行检查程序的 解析:10.评审方法有很多,其中最便宜的评审方法是_。(分数:1.00)A.轮查 B.结对评审 C.

6、小组评审 D.走查 解析:11.同行评审是一种通过作者的同行来确认缺陷和需要变更区域的检查方法,它主要分为管理评审、技术评审、过程评审和_。(分数:1.00)A.程序评审 B.数据评审 C.组织体系评审 D.文档评审 解析:12.下列不属于人工测试方法的是_。(分数:1.00)A.单元测试 B.桌上检查 C.同行评审 D.走查 解析:13.在代码检查中,讲解员的最佳人选是_。(分数:1.00)A.检查人员 B.程序或文档的编写者 C.程序或文档的测试者 D.会议主持人员 解析:14.下列不属于表达式分析的是_。(分数:1.00)A.数组下标越界 B.形参和实参类型的一致性 C.除式为零 D.表

7、达式中不正确使用括号 解析:15.代码检查的作用是_。(分数:1.00)A.发现程序中的缺陷和错误 B.程序员会得到编程风格、算法选择及编程技术等反馈信息 C.可以在早期发现程序中最易出错的部分 D.以上全部 解析:16.用于代码检查的错误列表有_。(分数:1.00)A.数据引用或声明错误 B.运算、比较错误 C.控制流、接口、输入/输出错误 D.以上全部 解析:17.在走查的过程中,参加审查的人员中,程序编写者有_。(分数:1.00)A.1个 B.2个 C.多于 2 个 D.不确定 解析:18.在走查的第一步计划走查会议中,下列活动不属于协调人完成的是_。(分数:1.00)A.选择一名或多名

8、人员组成走查小组 B.为审查程序准备测试用例 C.分发所有必需的材料给审查人员 D.安排走查会议时间和地点 解析:19.负责在走查期间做出所有说明,包括发现的问题、样式方面错误、遗漏、矛盾、改进意见等,该角色应该是。(分数:1.00)A.协调人 B.走查小组秘书 C.测试员 D.记录员 解析:20.以小组形式进行,小组成员集体扮演计算机角色检查源程序的方法是 _。(分数:1.00)A.评审 B.代码检查 C.走查 D.轮查 解析:21.在一个正式的评审活动小组中,职责是确保即将评审的文件已经准备好,这个角色是 _。(分数:1.00)A.评审组长 B.作者 C.读者 D.评审秘书 解析:22.管

9、理评审主要是评价管理体系的_。(分数:1.00)A.适应性 B.充分性 C.有效性 D.以上全部 解析:23.技术评审分为正式和非正式两种,通常由技术负责人制度详细地评审计划,包括 _。(分数:1.00)A.评审时间 B.对所需文件的定义 C.评审地点 D.以上全部 解析:24.在软件开发过程中,需要的文档评审有_。(分数:1.00)A.需求文档评审 B.软件设计文档评审 C.代码评审和质量验证文档评审 D.以上全部 解析:25.过程评审的目标是_。(分数:1.00)A.评估主要的质量保证代码 B.总结和共享好的经验 C.指出进一步完善和改进的部分 D.以上全部 解析:26.有一种评审方法是有

10、计划和结构化的、非常接近于最正式的评审技术,它是 _。(分数:1.00)A.小组评审 B.正式评审 C.结对评审 D.走查 解析:27.对于核心代码的评审最好是_。(分数:1.00)A.结对评审 B.走查 C.正式评审 D.分配检查方法 解析:28.如果程序通过了 100%的代码覆盖率测试,则说明程序满足了_。(分数:1.00)A.语句覆盖 B.编程规范 C.设计规格 D.功能需求 解析:解析 语句覆盖就是设计若干测试用例,运行被测程序,使得每一可执行语句至少执行一次。29.设有一段程序如下:if(a=b)and(c=d)or(e=f)do S1 else if(p=q)or(s=t)do S

11、2 else do S3 满足判定/条件覆盖的要求下,最少的测试用例数目是_。(分数:1.00)A.6 B.8 C.3 D.4 解析:解析 判定/条件覆盖,就是设计足够的测试用例,使得判定语句中每个条件的所有可能取值至少评价一次,同时每个判定语句本身所有可能分支也至少评价一次。本程序一共有两个判定语句和三条路径。若以 1 代表某一个条件为真,0 代表为假,则对于(a=b)、(c=d)、(e=f)、(p=q)、(s=t)这 5 个条件,取不同的真值组合,即可设计出相应的测试用例,达到判定/条件覆盖的要求。在这里,先取(a=b)、(c=d)、(e=f)为 101,(p=q)、(s=t)为任意值,然

12、后取全部 5 个条件为 010 11和 010 00,即能达到判定/条件覆盖的要求。30.在以下有关逻辑覆盖的说法中错误的是_。(分数:1.00)A.所有满足条件组合覆盖标准的测试用例集,也满足路径覆盖的覆盖标准 B.条件覆盖能够查出条件中包含的错误,但有时达不到判定覆盖的覆盖率要求 C.路径覆盖的差错能力很强,但有时达不到条件组合覆盖的覆盖率要求 D.判定覆盖包含了语句覆盖,但它不能保证每个错误条件都能检查出来 解析:解析 满足了条件覆盖,并不一定满足判定覆盖。尽管路径覆盖比判定/条件覆盖更强,但是路径覆盖并不一定能包含判定/条件覆盖。31.对于具有串联型分支结构的程序,如果有 7 个判断语

13、句串联,则使用正交实验设计法,至少需要的测试用例数应为_。(分数:1.00)A.23 B.24 C.26 D.27 解析:解析 设串联型分支结构中有 n 个判定语句,计算满足关系式 n+12m 的最小自然数 m;设 t=2m,取正交表 Lt,并利用它设计测试数据,其中 t 为最少需要的测试用例数。32.下列指导选择和使用测试覆盖率的原则中错误的是_。(分数:1.00)A.覆盖率不是目的,仅是一种手段 B.不要追求绝对 100%的覆盖率 C.不可能针对所有的覆盖率指标来选择测试用例 D.只根据测试覆盖率指标来指导测试用例的设计 解析:解析 在选择和使用覆盖率时,应该注意以下原则:(1)覆盖率只是

14、一种手段,不是测试的最终目的。(2)不可能针对所有的覆盖率进行测试,但如果只考虑一种覆盖率也是不妥的。(3)不要追求绝对 100%的覆盖率。(4)设计测试用例时,不仅要考虑到覆盖率,还应综合考虑其他方面,如成本等。根据以上原则,A、B、C 的说法均正确,而 D 说法不当,覆盖率不是唯一的参考指标。33.覆盖率对软件测试有非常重要的作用,下列关于覆盖率说法正确的是 _。(分数:1.00)A.覆盖率是用于度量测试完整性的一个手段,覆盖率可以分为逻辑覆盖和功能覆盖两种 B.为了测试的完整性,我们在测试时通常要针对所有的覆盖率指标进行测试 C.路径覆盖是最强的覆盖,故达到路径覆盖的测试用例一定满足判定

15、/条件覆盖 D.为了测试更充分,我们通常要求测试用例能达到100%的覆盖率 解析:34.如果一个判定中的复合条件表达式为(A1)or(B=3),则为了达到 100%的判定覆盖率,至少需要设计多少个测试用例_。(分数:1.00)A.1 个 B.2 个 C.3个 D.4个 解析:35.路径覆盖必定也满足_。(分数:1.00)A.语句覆盖 B.条件覆盖 C.判定覆盖 D.条件组合覆盖 解析:36.以下关于逻辑覆盖的叙述中正确的是_。(分数:1.00)A.对所有代码达到 100%的语句覆盖率是不现实的 B.测试用例满足条件覆盖则必定满足判定覆盖 C.语句覆盖是测试完整性方面很好的度量方法 D.条件/判

16、定覆盖是一个比判定覆盖和条件覆盖更强的覆盖 解析:37.下列语句中既可以作为定义节点,同时还可以作为使用节点的是_。(分数:1.00)A.输入语句 B.输出语句 C.赋值语句 D.条件语句 解析:38.下列几种逻辑覆盖标准中,设计足够的测试用例,运行被测程序,使得程序中所有可能的路径至少执行一次,称为_。(分数:1.00)A.判定覆盖 B.条件覆盖 C.语句覆盖 D.路径覆盖 解析:39.程序流程如下图所示,要覆盖程序中所有可能的路径,所需测试用例数至少是 _。(分数:1.00)A.3个 B.5个 C.15个 D.30个 解析:二、论述题(总题数:7,分数:69.00)已知 C 源程序如下:/

17、*Input todays date,output tomorrows date*/*version 2*/#include stdio.h struct ydate int day;int month;int year;int leap(struct ydate d)if(d.year%4=0&d.year%100!=0)|(d.year%400=0)return 1;else return 0;int numdays(struct ydate d)int day;static int daytab=31,28,31,30,31,30,31,31,30,31,30,31;if(leap(d)

18、&d.month=2)day=29;else day=daytabd.month-1;return day;int main(void)struct ydate today,tomorrow;printf(format of date is:year,month,day 输入的年、月、日之间应用逗号隔开/n);printf(today is:);scanf(%d,%d,%d,&today.year,&today.month,&today.day);while(0=today.year|today.year65535|0=today.month|today.month12)|0=today.da

19、y|today.daynumdays(today)printf(input date error!reenter the day!/n);printf(today is:);scanf(%d,%d,%d,&today.year,&today.month,&today.day);if(today.day!=numdays(today)tomorrow.year=today.year;tomorrow.month=today.month;tomorrow.day=today.day+1;else if(today.month=12)tomorrow.year=today.year+1;tomorr

20、ow.month=1;tomorrow.day=1;else tomorrow.year=today.year;tomorrow.month=today.month+1;tomorrow.day=1;printf(tomorrow is:%d,%d,%d/n/n,tomorrow.year,tomorrow.month,tomorrow.day);(分数:10.00)(1).画出程序中所有函数的控制流程图。(分数:5.00)_ 正确答案:()解析:函数 leap的流程图如下:函数 numdays的流程图如下左图所示。main函数的流程图如下右图所示(语句的具体内容已略去)。(2).设计一组测试

21、用例,使该程序所有函数的语句覆盖率和分支覆盖率均能达到 100%。如果认为该程序的语句或分支覆盖率无法达到 100%,则说明为什么。(分数:5.00)_ 正确答案:()解析:本题的程序用来打印输入日期的第二天日期,只要根据程序中的判断语句设计出相关的测试用例,就能使得所有函数的语句覆盖率和分支覆盖率均能达到 100%。为了满足 leap函数的语句覆盖率和分支覆盖率均能达到 100%,应当设置两个测试用例,其中一个是闰年,一个不是,在这里可以取 2008年和 2007年。由于numdays函数的判定语句是对leap的函数值进行判定,满足了leap的覆盖率要求,就能够满足numdays的覆盖率要求

22、。对于 main函数中的 while语句,根据流程图,先使判断部分为 1,然后为 0,这样就可以达到覆盖要求。对于 while语句之后的 if.else if.else语句,只要能够使每个分支都执行一遍,就能达到覆盖要求。根据以上分析,设计测试用例如下:用例编号 年 月 日 leap numdays while if.else if.else 输出结果 1 2008 2 30 1 29 1 error 2 2007 12 31 0 30 0 month=12 2008.1.1 3 6 10 31 0 31 0 today=numdays 6.11.1 4 804 4 17 1 30 0 tod

23、ay!=numdays 804.4.18 注意,这里的第 1、2 个用例使得 leap函数中的 return 1和 return 0都能执行一遍,同时 numdays函数中的 if.else结构两个分支也都能得到执行;第 1 个用例也能够使 while循环体能够得到执行;第 2、3、4 用例 3 个测试用例刚好使 main中的 if.else if.else 3个分支都执行一遍。已知 C 源程序如下:#includestdio.h#includestring.h void reverse(char s)int c,i,j;for(i=0,j=strlen(s)-1;ij;i+,j+)c=si;

24、si=sj;sj=c;void getHex(int number,char s)int I;i=0;while(number0)if(number%1610)si+=number%16+0;else switch(number%16)case 10:si+=A;break;case 11:si+=B;break;case 12:si+=C;break;case 13:si+=D;break;case 14:si+=E;break;case 15:si+=F;break;default:printf(Error);break;number/=16;si=/0;reverse(s);int ms

25、in()unsigned int number;int i=0;char s50;printf(%s,please input number:/n);scanf(%d,&number);getHex(number,s);i=0;while(si)printf(%c,si+);return 0;(分数:10.00)(1).画出程序中所有函数的控制流程图。(分数:5.00)_ 正确答案:()解析:流程图 void reverse(char s)的流程图如下图所示。void getHex(int number,char s)的流程图如下图所示。int main()的流程图如下图所示。(2).设计一组

26、测试用例,使该程序所有函数的语句覆盖率和分支覆盖率均能达到 100%。如果认为该程序的语句覆盖率或分支率无法达到 100%,则说明为什么。(分数:5.00)_ 正确答案:()解析:设计测试用例 输入 0,输出 0。输入 2,输出 2。输入 26,输出 1A。输入 27,输出 1B。输入 28,输出 1C。输入 29,输出 1D。输入 30,输出 1E。输入 31,输出 1F。输入 20P,输出错误。语句覆盖率无法达到 100%,因为 main()函数中的 return 0 语句永远无法执行。已知 C 源程序如下:/*一个使用结构体数组的简单地址列表*/#includestdion.h#incl

27、udestdlib.h define MAX 4 struct addr char name30;char street40;char city20;unsigned long int zip;addr_listMAX;void init_list(void),enter(void);void deleteAddr(void),list(void);int menu_select(void),find_free(void);int main(void)char choice;init list();/*初始化结构体数组*/for(;)choice=menu select();switch(ch

28、oice)case 1:enter();break;case 2:deleteAddr();break;case 3:list();break;case 4:exit(0);return 0;/*初始化列表*、void init list(void)register int t;for(t=0;tMAX;+t)addr_list t.name 0=/0;/*获取菜单选择*/int menu select(void)char s80;int c;printf(1.Enter a name/n);printf(2.Delete a name/n);printf(3.List the filekn)

29、;printf(4.Quitkn);do printf(/nEnter your choice:);gets(s);c=atoi(s);while(c1|c4);return c;/*增加地址*/void enter(void)int slot;char s80;slot=find free();if(slot=-1)printf(/nList Full);return;printf(Enter name:);gets(addr listslot.name);printf(Enter street:);gets(addr listslot.street);printf(Enter city:)

30、;gets(addr listslot.city);printf(Enter zip:);gets(s);addr listslot.zip=strtoul(s,/0,10);/*查找未用结构*/int find free(void)register int t;for(t=0;addr listt.name0&tMAX;+t);if(t=MAX)return-1;/*no slots free*/return t;/*删除地址*/void deleteAddr(void)register int slot;char s80;printf(enter record#:);gets(s);slo

31、t=atoi(s);if(slot=0&slotMAX)addr listslot.name0=/0;/*在屏幕上显示列表*/void list(void)register int t;for(t=0;t if(addr listt.name0)printf(%s/n,addr_listt.name);printf(%skn,addr_listt.street);printf(%s/n,addr_listt.city);printf(%lu/n/n,addr_listt.zip);printf(/n/n);5.画出 main函数的控制流程图。main 函数的控制流程图如下(限于篇幅只显示语句块

32、,不显示具体语句):*图中各判断语句如下:tMAX c1|c4 addr_listt.name0&tMAX slot=-1 slot=0&slot=MAX addr_listt.name0 6.设计一组测试用例,使该程序所有函数的语句覆盖率尽量达到100%。如果认为该程序的语句覆盖率无法达到 100%,则说明原因。设计测试用例时,关键需要注意将 t 的值达到 Max,即起码要输入 4 个 name 才行,这样,当 t=Max 才能为真,才可以执行相应的分支语句。具体输入如下:输入 4 个 name:1 小明 凤凰街 南京 210000 1 小红 南京路 上海 120000 1 王明 达成路 上

33、海 120000 1 李明 南京路 北京 100000 打算输入第 5 个:1 删除一个 name:2 小明 列出所有:3 退出:4 这样,程序中每一条语句都能够被执行。上述测试用例能够使每条语句均执行,故语句覆盖率能够达到100%。(分数:10.00)(1).画出 main 函数的控制流程图。(分数:5.00)_ 正确答案:()解析:main 函数的控制流程图如下(限于篇幅只显示语句块,不显示具体语句):图中各判断语句如下:tMAX c1|c4 addr_listt.name0&tMAX slot=-1 slot=0&slot=MAX addr_listt.name0(2).设计一组测试用例

34、,使该程序所有函数的语句覆盖率尽量达到 100%。如果认为该程序的语句覆盖率无法达到 100%,则说明原因。(分数:5.00)_ 正确答案:()解析:设计测试用例时,关键需要注意将 t 的值达到 Max,即起码要输入 4 个 name 才行,这样,当 t=Max才能为真,才可以执行相应的分支语句。具体输入如下:输入 4 个 name:1 小明 凤凰街 南京 210000 1 小红 南京路 上海 120000 1 王明 达成路 上海 120000 1 李明 南京路 北京 100000 打算输入第 5 个:1 删除一个 name:2 小明 列出所有:3 退出:4 这样,程序中每一条语句都能够被执行

35、。上述测试用例能够使每条语句均执行,故语句覆盖率能够达到100%。针对以下 C 语言程序,请按要求回答问题。已知 link.c源程序如下:/*link.c程序对单向链表进行操作,首先建立一个单向链表,然后根据用户的选择可以对其进行插入节点、删除节点和链表反转操作*/#includestdio.h#includestdlib.h typedef struct list_node*list_pointer;/定义链表指针 typedef struct list_node/定义链表结构 int data;list_pointer link;list node;/用到的操作函数 list_pointe

36、r create();/建立一个单向链表 void insert(list_pointer*p_ptr,list_pointer node);/在 node后加入一个新的节点 void delete_node(list_pointer*p_ptr,list_pointer trail,list_pointer node);/删除前一个节点是trail的当前节点 node void print(list_pointer*p_ptr);/打印链表节点中的值 list_pointer invert(list_pointer lead);/反转链表 int main()list_pointer ptr

37、=NULL;list_pointer node,trail;list_pointer*p=&ptr;int choose,location,i;printf(you should create a link first:/n);/建立一个单向链表 prt=create();/*ptr指向链表的第一个节点*/print(ptr);/根据用户的不同选择进行相应的操作 printf(input number 0,you can quit the program/n);printf(input number 1,you can insert a new node to link/n);printf(i

38、nput number 2,you can delete a node from the link/n);printf(input number 3,you can invert the link/n);printf(please input you choice/n);scanf(%d,&choose);while(choose!=0)switch(choose)case 1:i=1;while(ilocation)node=node-link;i+;insert(p,node);/*p为指向 ptr的指针*/print(ptr);break;case 2;printf(you wiii d

39、elete a node from the link/n);printf(please input the location of the node:/n);scanf(%d,&location);node=ptr;if(location=1)trail=NULL;trail=ptr;i=1;while(ilocation)trail=trail-link;i+;node=trail-link;delete_node(p,trail,node);print(ptr);break;case 3:printf(you will invert the link/n);ptr=invert(ptr);

40、print(ptr);break;default:break;return-1;printf(please input you choice/n);scanf(%d,&choose);return 0;/根据用户的输入值建立一个新的单向链表 list pointer create()int i,current,length;list_pointer p1,p2,head;printf(please input the node number of the link:/n);scanf(%d,%length);printf(the number of the link is:%d,length)

41、;printf(please input the data for the link node:/n);i=0;p1=p2=(list pointer)malloc(sizeof(list_node);head=p1;for(i=1;ilength;i+)scanf(%d,¤t);p1-data=current;p2-link=p1;p2=p1;p1=(list pointer)malloc(sizeof(list node);p2-link=NULL;return head;.(分数:10.00)(1).画出主函数 main的控制流程图。(分数:5.00)_ 正确答案:()解析:

42、主函数的控制流程如下图所示。(2).设计一组测试用例,尽量使 main函数的语句覆盖率能达到 100%。如果认为该函数的语句覆盖率无法达到 100%,则说明原因。(分数:5.00)_ 正确答案:()解析:设计测试用例如下:输入数据:choose=0,预期输出:0。输入数据:choose=1,预期输出:在链表某位置的节点后插入一个节点。输入数据:choose=2,预期输出:删除链表中某个位置的节点。输入数据:choose=3,预期输出:反转链表的链接顺序。输入数据:choose=其他非零数,预期输出:-1。采用条件覆盖设计的测试用例如下表所示。测试用例 输入:a=2,b=1,c=-2 输出:a=

43、2,b=-1,c=-3 输入:a=-1,b=2,c=3 输出:a=-1,b=2,c=6 取值条件 T1,F2,T3,F4 F1,T2,F3,T4 具体取值条件 a 0,b=0,a 1,c=1 A=0,b 0,a=1,c 1 通过路径 P3(1-3-4)P4(1-3-5)针对以下 C 语言程序,请按要求回答问题。已知 weekday.c源程序如下:#includestidio.h#includeconio.h /*主函数*/Int main()Char letter;Printf(please input the first letter,Y to exit!/n);While(1etter=g

44、etch()!=Y)/当输入字母为 Y 时结束 Switch(letter)Case S:Printf(%c/n,letter);Printf(please input second letter/n);/输入第二个字母 If(letter=getch()=a)Printf(Saturday/n);Else if(letter=u)Printf(Sunday/n);Else printf(data error/n);Break;Case F:Printf(fridaykn);Break;Case M:Printf(mondayha);Break;Case T:Printf(%c/n,lette

45、r);Printf(please input second letter/a);/输入第二个字母 If(letter=getch()=u)Printf(Tuesday/n);Else if(letter=h)Printf(Thursday/n);Break;Case W:Printf(Wednesday/n);Return 0;(分数:15.00)(1).画出主函数 main 的控制流程图。(分数:5.00)_ 正确答案:()解析:(2).设计一组测试用例,使 main 函数的语句覆盖率尽量达到 100%。(分数:5.00)_ 正确答案:()解析:path11,2 path22,3 path3

46、2,3,4,5,22 path42,3,6,7,22 path52,3,6,8,22 path69,10,22 path711,12,22 path813,14 path913,14,15,16 path101 3,14,17,18,22 path1113,14,8,22 path1219,20,22 path1319,8,22 生成测试用例,确保基本路径集中每条路径的执行:path1:输入数据 y,输出的结果程序结束返回值 0。path2:输入数据 s,输出结果“s 输入第二个字母”。path3:输入数据 s 后,输入数据 a,输出结果“Saturdav”。path4:输入数据 s 后,输入

47、数据 u,输出结果“Sunday”。path5:输入数据 s 后,输入数据非 a 非 u,输出结果“data error”。path6:输入数据 f,输出结果“friday”。path7:输入数据 m,输出结果“monday”。path8:输入数据 t,输出结果“输入第二个字母”。path9:输入数据 t 后,输入数据 u,输出结果“tuesday”。path10:输入数据 t 后,输入数据 h,输出结果“thursday”。path11:输入数据 t 后,输入数据非 u 非 h,输出结果“data crror”。path12:输入数据 w,输出结果“Wednesday”。path13:输入数

48、据 defalt,输出结果“data error。(3).Main函数的语句覆盖率能否达到 100%?如果认为无法达到,则说明原因。(分数:5.00)_ 正确答案:()解析:不能达到 100%,一些独立的路径如此程序中的“输入”,往往不是完全孤立的,有时它是程序正常的控制流的一部分,这时,这些路径的测试可以是另一条路径测试的部分。40.用基本路径测试法为下列程序设计测试用例。程序功能描述:计算学生人数、学生分数的总分数和平均分。要求运行时最多输入 50 个学生分数(以-1 作为输入结束的标志),程序流程图如下图所示。(分数:9.00)_ 正确答案:()解析:(1)根据题目中的程序流程图,将其转

49、换为控制流图,如下图所示。(2)计算得到的控制流图 G 的环路复杂性 V(G)V(G)=P+1=5(判定节点数)+1=6 V(G)=E-N+2=16-12+2=6 V(G)=6(区域数)(3)确定线性无关的路径的基小集。由该程序的环路复杂性为 6,可确定该图有 6 条线性无关的基本路径集,分别是:Path1:1-2-9-10-12 Path2:1-2-9-11-12 Path3:1-2-3-9-10-12 Path4:1-2-4-5-8-2-.Path5:1-2-4-5-6-8-2-.Path6:1-2-4-5-6-7-8-2-.(4)生成测试用例,确保基本路径集中每条路径的执行。根据判定节点

50、给出的条件选择适当 的数据以保证特定路径可以被测试剑。满足上而基本路径集的测试用例是:测试用例 1-Path1(1-2-9-10-12)。输入数据:scorek=有效分数值;scorei=-1,2=i=50。期望输出结果:根据输入的有效分数算出正确的学生人数n1,总分 sum,平均分 average。测试用例 2-Path2(1-2-9-11-12)。输入数据:scorei=-1。期望输出结果:平均分 average=-1,其他保持初始值。测试用例 3-Path3(1-2-3-9-10-12)。输入数据:多于 50 个有效分数值,即试图处理 51 个分数,要求前 51 个为有效分数。期望输出结

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 文案大全

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com