1、计算机四级软件测试工程师-64 及答案解析(总分:80.00,做题时间:90 分钟)一、选择题(总题数:25,分数:50.00)1.下列测试用例设计中既适用于失效恢复测试用例设计又适用于健壮性测试用例设计的方法为_。A) 规范导出法 B) 错误猜测法C) 基于故障的测试 D) 基于风险的测试(分数:2.00)A.B.C.D.2.关于做好系统测试的原则,下列说法中错误的是_。(A) 所有的测试都应追溯到总体设计(B) 在测试工作真正开始之前,尽早开始测试计划(C) Pareto 原则应用于软件测试(D) 系统缺陷应记入文档(分数:2.00)A.B.C.D.3.一个测试团队中,负责项目的管理、测试
2、技术的制定、项目文档的审查、测试用例的设计和审查等的角色应是 _。A测试组长 B内审员CQA/测试经理 D测试设计人员(分数:2.00)A.B.C.D.4.在面向对象软件的集成测试中,下列关于基干集成的叙述中,错误的是_。(A) 基干测试最大的优点是无须设计桩模块和驱动模块(B) 在嵌入式系统中,基干集成划分为两部分:内核部分(基干部分)和外围应用部分。(C) 基干集成集中了传统集成的优点,并对缺点进行了控制,更加适合大型复杂项目的集成。(D) 基干集成的缺点是,必须对系统的结构和相互依存性急性分析。(分数:2.00)A.B.C.D.5.对于具有串联型分支结构的程序,如果有七个判断语句串联,则
3、使用正交实验设计法,至少需要的测试用例数应为_。A) 23 B) 24 C) 26 D) 27(分数:2.00)A.B.C.D.6.对下列产品进行测试,要优先考虑自底向上集成策略的是 _。A采用契约式设计的产品 B高层接口变化极为频繁的产品C底层接口比较稳定的产品 D以上全部(分数:2.00)A.B.C.D.7.以下关于面向对象软件测试的说法中,错误的是_。A) 对于面向对象程序集成测试而言,大突击集成可能导致测试不充分B) 面向对象软件只能采用白盒测试,不能采用黑盒测试C) 在存在多态的情况下,为了提高测试的充分性需要对所有可能的绑定都进行测试D) 单个成员方法的测试属于面向对象程序单元测试
4、考虑的范畴(分数:2.00)A.B.C.D.8.下列关于测试方法,说法正确的是A) 白盒测试不同于黑盒测试之处是它可以减少测试用例数量B) 覆盖所有独立路径就能够覆盖所有分支C) 在单元测试中不使用黑盒测试技术D) 满足分支覆盖就满足条件覆盖和语句覆盖(分数:2.00)A.B.C.D.9.程序的静态错误分析和设计分析共同研究的题目是 _。A接口一致性 B表达式分析C引用分析 D类型和单位分析(分数:2.00)A.B.C.D.10.如果一个判定中的复合条件表达式为(A10)or(B=7),则为了达到 100%的判定覆盖率,至少需要设计多少个测试用例 _。A1 个 B2 个C3 个 D4 个(分数
5、:2.00)A.B.C.D.11.软件问题报告管理的核心功能是A) 对软件问题报告的分类存储B) 软件问题报告生命周期状态转换控制C) 软件问题报告生命周期跟踪机制D) 以上全部(分数:2.00)A.B.C.D.12.下述软件测试过程管理特点的叙述,不正确的是_。A) 软件质量标准定义不准确、任务边界模糊B) 软件测试项目的变化控制和预警分析要求高C) 要求测试人力资源丰富,有快速的变动调整以适应D) 测试任务分配难(分数:2.00)A.B.C.D.13.为了提高测试的效率,正确的做法是_。A) 选择发现错误可能性大的数据作为测试用例B) 随机选取测试用例C) 取一切可能的输入数据作为测试用例
6、D) 在完成程序的编码之后再制订软件的测试计划(分数:2.00)A.B.C.D.14.软件可靠性的研究很大程度借鉴了硬件可靠性的研究,但二者还是有很多区别,主要体现在A) 软件设计出来后,每份拷贝都完全一样,而硬件设计出来后,每个按照设计生产的都不可能完全相同B) 软件是纯逻辑产品,内部逻辑复杂度高,而硬件的内部逻辑相对简单C) 软件版本更新很频繁,但硬件版本更新通常很慢D) 以上全部(分数:2.00)A.B.C.D.15.同行评审主要分为管理评审、文档评审、过程评审和A) 项目评审 B) 误差评审C) 技术评审 D) 组织体系评审(分数:2.00)A.B.C.D.16.在模块测试的过程中,采
7、用自底向上的测试比自顶向下的测试A) 好 B) 差C) 一样 D) 不确定(分数:2.00)A.B.C.D.17.下列语句通常不是作为定义结点的是_。(A) 输入语句(B) 过程调用语句(C) 赋值语句(D) 输出语句(分数:2.00)A.B.C.D.18.关于逻辑覆盖,说法错误的是_。A) DDP 覆盖是判定覆盖的一个变体B) 满足条件覆盖一定也满足判定覆盖C) 指令块覆盖属于语句覆盖D) 若判定覆盖率达 100%,则语句覆盖率一定也是 100%(分数:3.00)A.B.C.D.19.软件开发过程中必须伴有质量保证活动,而软件测试又是软件质量保证的关键因素。针对下列说法正确的是_。A) 发布
8、出去的软件有质量问题,是软件测试人员的错B) 软件测试技术要求不高,至少比编程容易得多C) 软件测试是测试人员的事,与开发人员无关D) 软件测试阶段发现的错误并不只是在编码阶段产生的,需求和设计极端也会产生错误(分数:2.00)A.B.C.D.20.下列关于面向对象测试问题的说法中,不正确的是_。A在面向对象软件测试时,设计每个类的测试用例时,不仅仅要考虑调用各个成员方法的输入参数,还需要考虑如何设计调用的序列B构造抽象类的驱动程序会比构造其他类的驱动程序复杂C类 B 继承自类 A,如果对类 B 进行了严格的测试,就意味着不需再对类 A 进行测试D在存在多态的情况下,为了达到较高的测试充分性,
9、应对所有可能的绑定都进行测试(分数:2.00)A.B.C.D.21.下列几种逻辑覆盖标准中,查错能力最强的是 _A语句覆盖 B条件覆盖C判定覆盖 D条件组合覆盖(分数:1.00)A.B.C.D.22.问题还没有解决,测试人员新报告的缺陷,或验证后缺陷仍然存在,这些缺陷所处的状态是_。A) 激活状态 B) 非激活状态 C) 已修正状态 D) 关闭状态(分数:2.00)A.B.C.D.23.在面向对象软件的基干集成测试策略中,将基干中的模块形成基干子系统使用的集成方式是_。A大突击集成方式 B自底向上集成方式 C自顶向下集成方式 D综合集成方式(分数:2.00)A.B.C.D.24.关于 Web
10、应用软件的特点描述,错误的是_。(A) 基于无连接协议(B) 由内容驱动(C) 开发周期较长,演变较慢(D) 完全性要求较高(分数:2.00)A.B.C.D.25.关于数据库应用系统的需求分析工作,下列说法正确的是_。(A) 通过需求分析过程,需要确定出整个应用系统的目标、任务和系统的范围说明(B) 在需求分析阶段,系统需求分析员要与用户充分沟通,并做出各类用户视图(C) 数据需求分析的主要工作是要辩识出数据处理中的数据数据处理流程(D) 数据操作响应时间、系统吞吐量、最大并发用户数都是性能需求分析的重要指标(分数:2.00)A.B.C.D.二、论述题(总题数:2,分数:30.00)以下是一个
11、自动饮料售货机软件的操作规格说明,请按要求回答问题。设要对一个自动饮料售货机软件进行黑盒测试。该软件的规格说明如下:“有一个处理单价为 1 元 5 角钱的盒装饮料的自动售货机软件。若投入 1 元 5 角硬币,按下“可乐”、“雪碧”或“红茶”按钮,相应的饮料就送出来。若投入的是 2 元硬币,在送出饮料的同时退还 5 角硬币。”(分数:12.00)(1).试利用因果图法,建立该软件的因果图。(分数:6.00)_(2).设计测试该软件的全部测试用例。(分数:6.00)_针对以下 C 语言程序,请按要求回答问题。已知 link. c 源程序如下:/*link. c 程序对单向链表进行操作,首先建立一个
12、单向链表,然后根据用户的选择可以对其进行插入结点、删除结点和链表反转操作*/#includestdio. h#includestdlib. htypedef struct list_node * list_pointer; /定义链表指针typedef struct list_node /定义链表结构int data;list_pointer link;list_node;/用到的操作函数list_pointer create(); /建立一个单向链表void insert(list_pointer * p_ptr,list_pointer node); /在 node 后加入一个新的结点vo
13、id delete_node(list_pointer * p_ptr,list_pointer trail,list_pointer node);/删除前一个结点是 trail 的当前结点 nodevoid print(list_pointer * p_ptr); /打印链表结点中的值list_pointer invert(list_pointer lead); /反转链表int main()list_pointer ptr=NULL;list_pointer node,trail;list_pointer * P=ptr;int choose,location,i;printf(“you
14、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(“input number 2,you can delete a node from the link/n“);printf(“input number 3,yo
15、u 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 will delete a node from the link/n“);printf(“please input the location of the
16、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);print(ptr);break;default;break;return -1;printf(“please input you
17、 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);printf(“please input the data for the link node:/n“);
18、i=0;p1=p2=(list_pointer)malloc(sizeof(list_node);head=p1;for(i=1;ilength;i+)scanf(“%d“,current);p1-data=current;p2-link=p1;p2=p1;p1=(list_pointer)malloc(sizeof(list_node);p2-link=NULL;return head;(分数:18.00)(1).画出主函数 main 的控制流程图。(分数:9.00)_(2).设计一组测试用例,尽量使 main 函数的语句覆盖率能达到 100%。如果认为该函数的语句覆盖率无法达到 100%,
19、需要说明原因。(分数:9.00)_计算机四级软件测试工程师-64 答案解析(总分:80.00,做题时间:90 分钟)一、选择题(总题数:25,分数:50.00)1.下列测试用例设计中既适用于失效恢复测试用例设计又适用于健壮性测试用例设计的方法为_。A) 规范导出法 B) 错误猜测法C) 基于故障的测试 D) 基于风险的测试(分数:2.00)A.B. C.D.解析:解析 健壮性测试常用的测试用例设计方法有:故障插入测试、变异测试和错误猜测法。失效恢复测试常用的测试用例设计方法有:规范导出法、错误猜测法、基于故障的测试和基于风险的测试。所以选择 B 选项。2.关于做好系统测试的原则,下列说法中错误
20、的是_。(A) 所有的测试都应追溯到总体设计(B) 在测试工作真正开始之前,尽早开始测试计划(C) Pareto 原则应用于软件测试(D) 系统缺陷应记入文档(分数:2.00)A. B.C.D.解析:3.一个测试团队中,负责项目的管理、测试技术的制定、项目文档的审查、测试用例的设计和审查等的角色应是 _。A测试组长 B内审员CQA/测试经理 D测试设计人员(分数:2.00)A. B.C.D.解析:4.在面向对象软件的集成测试中,下列关于基干集成的叙述中,错误的是_。(A) 基干测试最大的优点是无须设计桩模块和驱动模块(B) 在嵌入式系统中,基干集成划分为两部分:内核部分(基干部分)和外围应用部
21、分。(C) 基干集成集中了传统集成的优点,并对缺点进行了控制,更加适合大型复杂项目的集成。(D) 基干集成的缺点是,必须对系统的结构和相互依存性急性分析。(分数:2.00)A. B.C.D.解析:5.对于具有串联型分支结构的程序,如果有七个判断语句串联,则使用正交实验设计法,至少需要的测试用例数应为_。A) 23 B) 24 C) 26 D) 27(分数:2.00)A. B.C.D.解析:解析 设串联型分支结构中有 n 个判定语句,计算满足关系式”+12m 的最小自然数 m;设 t=2m取正交表 Lt,并利用它设计测试数据,其中 t 为最少需要的测试用例数。6.对下列产品进行测试,要优先考虑自
22、底向上集成策略的是 _。A采用契约式设计的产品 B高层接口变化极为频繁的产品C底层接口比较稳定的产品 D以上全部(分数:2.00)A.B.C.D. 解析:7.以下关于面向对象软件测试的说法中,错误的是_。A) 对于面向对象程序集成测试而言,大突击集成可能导致测试不充分B) 面向对象软件只能采用白盒测试,不能采用黑盒测试C) 在存在多态的情况下,为了提高测试的充分性需要对所有可能的绑定都进行测试D) 单个成员方法的测试属于面向对象程序单元测试考虑的范畴(分数:2.00)A.B. C.D.解析:解析 由于大突击集成面对的是整个软件的所有代码,几乎没有什么方法能够为此生成合适的测试用例集,所以大突击
23、集成可能导致测试不充分,A 说法正确。在面向对象中,一般有少数的方法需要单独进行测试,D 说法正确。8.下列关于测试方法,说法正确的是A) 白盒测试不同于黑盒测试之处是它可以减少测试用例数量B) 覆盖所有独立路径就能够覆盖所有分支C) 在单元测试中不使用黑盒测试技术D) 满足分支覆盖就满足条件覆盖和语句覆盖(分数:2.00)A.B.C.D. 解析:解析 白盒测试与黑盒测试的本质区别是对内部逻辑的理解,与测试用例数量无关。单元测试是以自盒测试为主,但有时也会用到黑盒测试技术。满足分支测试不一定满足条件测试。9.程序的静态错误分析和设计分析共同研究的题目是 _。A接口一致性 B表达式分析C引用分析
24、 D类型和单位分析(分数:2.00)A. B.C.D.解析:10.如果一个判定中的复合条件表达式为(A10)or(B=7),则为了达到 100%的判定覆盖率,至少需要设计多少个测试用例 _。A1 个 B2 个C3 个 D4 个(分数:2.00)A.B. C.D.解析:解析 题目要求达到 100%的判定覆盖率,即要求所有的判定真假都至少执行一次,故我们取定(A=12,B=7)和(A=7,B=10)两组测试用例,即可满足题目要求。11.软件问题报告管理的核心功能是A) 对软件问题报告的分类存储B) 软件问题报告生命周期状态转换控制C) 软件问题报告生命周期跟踪机制D) 以上全部(分数:2.00)A
25、.B.C.D. 解析:解析 测试问题报告管理的核心功能是对软件问题报告的分类存储、软件问题报告生命周期状态转换控制和软件问题报告生命周期跟踪机制。12.下述软件测试过程管理特点的叙述,不正确的是_。A) 软件质量标准定义不准确、任务边界模糊B) 软件测试项目的变化控制和预警分析要求高C) 要求测试人力资源丰富,有快速的变动调整以适应D) 测试任务分配难(分数:2.00)A.B.C. D.解析:解析 软件测试过程管理的基本内容有:计划、组织和监控。软件测试项目具有智力密集、劳动密集的特点,受人力资源影响大。所以测试要求人力资源稳定。13.为了提高测试的效率,正确的做法是_。A) 选择发现错误可能
26、性大的数据作为测试用例B) 随机选取测试用例C) 取一切可能的输入数据作为测试用例D) 在完成程序的编码之后再制订软件的测试计划(分数:2.00)A. B.C.D.解析:解析 对于一个软件,其可能的输入数据数量一般是非常惊人的,所以要想全部将其作为测试用例是不现实的,应当选择发现错误可能性大的数据作为测试用例,不能随机选取测试用例,故 A 正确,B、C 错误。软件测试贯穿于软件开发的各个阶段,D 项错误。14.软件可靠性的研究很大程度借鉴了硬件可靠性的研究,但二者还是有很多区别,主要体现在A) 软件设计出来后,每份拷贝都完全一样,而硬件设计出来后,每个按照设计生产的都不可能完全相同B) 软件是
27、纯逻辑产品,内部逻辑复杂度高,而硬件的内部逻辑相对简单C) 软件版本更新很频繁,但硬件版本更新通常很慢D) 以上全部(分数:2.00)A.B.C.D. 解析:解析 软件可靠性和软件可靠性测试的研究在很大程度上借鉴了硬件可靠性的研究,但由于软件和硬件的不同特点导致软件可靠性和硬件可靠性有很大区别,具体而言,软件可靠性和硬件可靠性的区别有:唯一性,软件设计出来后,所有副本就是一模一样的;硬件设计出来后,每个按照设计生产的硬件都不可能完全相同。物理退化,一个正确的硬件器件会因为物理退化在某时刻失效,但正确的软件则不会因为物理退化而发生失效。逻辑复杂性,软件是纯逻辑产品,具有复杂的内部逻辑,而硬件的内
28、部逻辑则相对简单。版本更新,硬件的版本更新通常很慢,而软件的版本更新比较频繁。15.同行评审主要分为管理评审、文档评审、过程评审和A) 项目评审 B) 误差评审C) 技术评审 D) 组织体系评审(分数:2.00)A.B.C. D.解析:解析 同行评审是一种通过作者同行来确认缺陷和需要变更区域的检查方法。它涉及的内容很多,主要可以分为管理评审、技术评审、文档评审和过程评审。16.在模块测试的过程中,采用自底向上的测试比自顶向下的测试A) 好 B) 差C) 一样 D) 不确定(分数:2.00)A. B.C.D.解析:解析 自底向上测试和自顶向下测试都是增量式的测试方法,在自底向上测试中,首先测试最
29、底层的模块,利用辅助的驱动模块调用,然后测试高层次的模块。而白顶向下测试则刚好相反,它是首先测试顶层模块,无需编写驱动模块,但要使用桩模块,然后测试下一层模块。二者各有优缺点,但权衡来看,自底向上测试的方法要优于自顶向下测试方法。17.下列语句通常不是作为定义结点的是_。(A) 输入语句(B) 过程调用语句(C) 赋值语句(D) 输出语句(分数:2.00)A.B.C.D. 解析:18.关于逻辑覆盖,说法错误的是_。A) DDP 覆盖是判定覆盖的一个变体B) 满足条件覆盖一定也满足判定覆盖C) 指令块覆盖属于语句覆盖D) 若判定覆盖率达 100%,则语句覆盖率一定也是 100%(分数:3.00)
30、A.B. C.D.解析:解析 条件覆盖是指设计若干个测试用例,运行被测程序,使得程序中每个判定的每个条件的可能取值至少评价一次。而判定覆盖是设计测试用例,使得程序中每个判定的取真分支和取假分支至少评价一次。二者没有必然的联系,故满足条件覆盖的未必会满足判定覆盖,选项 B 错误。而满足判定覆盖一定会满足语句覆盖是容易理解的,因为每个判定的取真分支和取假分支都至少评价一次必然预示着每个可执行语句至少评价了一次,即满足了语句覆盖。另外指令块覆盖是语句覆盖的一个变体而 DDP 覆盖(判定路径覆盖)是判定覆盖的一个变体。19.软件开发过程中必须伴有质量保证活动,而软件测试又是软件质量保证的关键因素。针对
31、下列说法正确的是_。A) 发布出去的软件有质量问题,是软件测试人员的错B) 软件测试技术要求不高,至少比编程容易得多C) 软件测试是测试人员的事,与开发人员无关D) 软件测试阶段发现的错误并不只是在编码阶段产生的,需求和设计极端也会产生错误(分数:2.00)A.B.C.D. 解析:解析 软件测试环节现在已经引起了越来越多人们的注意。但是相对于软件开发而言,对软件测试还是存在很多误区。A、B、C 均为错误的认识。而 D 选项则正确地表明了测试中发现的软件错误的来源,不只在编码阶段,软件开发的各个阶段都会产生错误。20.下列关于面向对象测试问题的说法中,不正确的是_。A在面向对象软件测试时,设计每
32、个类的测试用例时,不仅仅要考虑调用各个成员方法的输入参数,还需要考虑如何设计调用的序列B构造抽象类的驱动程序会比构造其他类的驱动程序复杂C类 B 继承自类 A,如果对类 B 进行了严格的测试,就意味着不需再对类 A 进行测试D在存在多态的情况下,为了达到较高的测试充分性,应对所有可能的绑定都进行测试(分数:2.00)A.B.C. D.解析:解析 由于面向对象具有封装的特点,在设计类的测试用例时,不仅要考虑各成员方法的输入参数,还要考虑如何设计调用的序列。若类 B 继承自类 A,如果对类 B 进行了严格的测试,有些情况也许可以不对类 A 进行测试,但由于继承的存在,就会导致类 A 的规格说明可能
33、与类 B 不一致,此时就必须按照类 A 的规格说明重新对类 A 重新进行测试。多态是指对一个类的引用可以与多个类的实现绑定。抽象类是指只有一些成员方法而没有其实现的类,甚至有的抽象类中的所有成员方法都没有实现,在测试抽象类时,需要为抽象类构造一个子类,并实现所有抽象类没有实现的成员方法,这也说明构造抽象类的驱动程序显然比构造其他类的驱动程序复杂。21.下列几种逻辑覆盖标准中,查错能力最强的是 _A语句覆盖 B条件覆盖C判定覆盖 D条件组合覆盖(分数:1.00)A.B.C.D. 解析:解析 对于选项中的几种逻辑覆盖,查错能力最强的应该是条件组合测试。22.问题还没有解决,测试人员新报告的缺陷,或
34、验证后缺陷仍然存在,这些缺陷所处的状态是_。A) 激活状态 B) 非激活状态 C) 已修正状态 D) 关闭状态(分数:2.00)A. B.C.D.解析:解析 缺陷处于激活状态,即是问题还没有解决,测试人员新报告的缺陷,或验证后缺陷仍然存在。23.在面向对象软件的基干集成测试策略中,将基干中的模块形成基干子系统使用的集成方式是_。A大突击集成方式 B自底向上集成方式 C自顶向下集成方式 D综合集成方式(分数:2.00)A. B.C.D.解析:解析 面向对象软件的基干集成测试策略的具体测试步骤为:对基干中的每个模块进行孤立的、充分的测试。对基干中的所有模块进行一次性集成,形成基干子系统,并使用一个
35、驱动模块检查使用经过一次性集成的基干。此时采用的是大突击集成方式。对应用的控制子系统进行自顶向下的集成。集成基干和控制子系统,重新构造控制子系统。对各应用子系统采用自底向上的集成策略。集成基干子系统、控制子系统和各应用子系统,形成整个系统。基干集成的优点是集成了自底向上集成、自顶向下集成和大突击集成三者的优点,而对三者的缺点也进行了控制,更适合于大型复杂项目的集成。24.关于 Web 应用软件的特点描述,错误的是_。(A) 基于无连接协议(B) 由内容驱动(C) 开发周期较长,演变较慢(D) 完全性要求较高(分数:2.00)A.B.C. D.解析:25.关于数据库应用系统的需求分析工作,下列说
36、法正确的是_。(A) 通过需求分析过程,需要确定出整个应用系统的目标、任务和系统的范围说明(B) 在需求分析阶段,系统需求分析员要与用户充分沟通,并做出各类用户视图(C) 数据需求分析的主要工作是要辩识出数据处理中的数据数据处理流程(D) 数据操作响应时间、系统吞吐量、最大并发用户数都是性能需求分析的重要指标(分数:2.00)A.B.C.D. 解析:二、论述题(总题数:2,分数:30.00)以下是一个自动饮料售货机软件的操作规格说明,请按要求回答问题。设要对一个自动饮料售货机软件进行黑盒测试。该软件的规格说明如下:“有一个处理单价为 1 元 5 角钱的盒装饮料的自动售货机软件。若投入 1 元
37、5 角硬币,按下“可乐”、“雪碧”或“红茶”按钮,相应的饮料就送出来。若投入的是 2 元硬币,在送出饮料的同时退还 5 角硬币。”(分数:12.00)(1).试利用因果图法,建立该软件的因果图。(分数:6.00)_正确答案:(首先分析软件中出现的所有原因和结果,并将其标号。原因:1投入 1 元 5 角硬币2投入 2 元硬币3按“可乐”按钮4按“雪碧”按钮5按“红茶”按钮结果:21退还 5 角硬币22送出“可乐”饮料23送出“雪碧”饮料24送出“红茶”饮料中间状态:11已投币12已按钮然后根据上述原因和结果,以及各状态问的关系,画出因果图,如下图所示。)解析:(2).设计测试该软件的全部测试用例
38、。(分数:6.00)_正确答案:(将上述因果图转换为判定表,如下表所示,每一列可以作为确定测试用例的依据。表 判定表1 2 3 4 5 6 7 8 9 10 11输入 1 元 5 角硬币 (1) 1 1 1 1 0 0 0 0 0 0 0输入 2 元硬币 (2) 0 0 0 0 1 1 1 1 0 0 0按“可乐”按钮 (3) 1 0 0 0 1 0 0 0 1 0 0按“雪碧”按钮 (4) 0 1 0 0 0 1 0 0 0 1 0输入按“红茶”按钮 (5) 0 0 1 0 0 0 1 0 0 0 1已投币 (11) 1 1 1 1 1 1 1 1 0 0 0 中间结点 已按钮 (12) 1
39、 1 1 0 1 1 1 0 1 1 1退还 5 角硬币 (21) 0 0 0 0 1 1 1 0 0 0 0送出“可乐”饮料 (22) 1 0 0 0 1 0 0 0 0 0 0 送出“雪碧”饮料 (23) 0 1 0 0 0 1 0 0 0 0 0输出送出“红茶”饮料 (24) 0 0 1 0 0 0 1 0 0 0 0)解析:解析 对自动软件售货机的软件进行基于因果图的黑盒测试,首先根据软件的规格说明,找出所有可能的原因和结果,以及两者之间的联系,画出因果图。然后根据基于因果图的黑盒测试方法,将因果图转换为判定表,设计测试用例即可。针对以下 C 语言程序,请按要求回答问题。已知 link
40、. c 源程序如下:/*link. c 程序对单向链表进行操作,首先建立一个单向链表,然后根据用户的选择可以对其进行插入结点、删除结点和链表反转操作*/#includestdio. h#includestdlib. htypedef struct list_node * list_pointer; /定义链表指针typedef struct list_node /定义链表结构int data;list_pointer link;list_node;/用到的操作函数list_pointer create(); /建立一个单向链表void insert(list_pointer * p_ptr,l
41、ist_pointer node); /在 node 后加入一个新的结点void delete_node(list_pointer * p_ptr,list_pointer trail,list_pointer node);/删除前一个结点是 trail 的当前结点 nodevoid print(list_pointer * p_ptr); /打印链表结点中的值list_pointer invert(list_pointer lead); /反转链表int main()list_pointer ptr=NULL;list_pointer node,trail;list_pointer * P=
42、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(“input number 2,you can delete a node from
43、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 will delete a node from the link/n“);pri
44、ntf(“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);print(ptr);break;default;br
45、eak;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);printf(“please
46、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“,current);p1-data=current;p2-link=p1;p2=p1;p1=(list_pointer)malloc(sizeof(list_node);p2-link=NULL;return head;(分数:18.00)(1).画出主函数 main 的控制流程图。(分数:9.00)_正确答案:(主函数的控制流程如下图所示。)解析:(2).设计一组测试用例,尽量使 main 函数的语句覆盖率能达到 100%。如果认为该函数的语句覆盖率无法达到 100%,需要说明原因。(分数:9.00)_