一、[材料型]问答题
阅读下列C程序,回答问题1至问题3,将解答填入答题纸的对应栏内。(20分)

1、【问题1】请针对上述C程序给出满足100%DC(判定覆盖)所需的逻辑条件。 (4分)
参考答案:请看解析
解析:
本题考查的是白盒测试用例设计中的判定覆盖法。判定覆盖(Decision Coverage)要求设计足够的测试用例,使得被测程序中的每个判定表达式至少获得一次“真”值和“假”值,从而确保程序的每一个分支至少都通过一次。
在这个C程序中,我们需要找到所有的判定语句,然后为每个判定语句设计至少一个真值和一个假值的测试条件,以确保判定覆盖。由于无法查看具体的程序代码,无法给出具体的逻辑条件。但理论上,对于程序中的每一个if、switch等判定语句,我们需要设计两个测试用例,一个使得判定为真,一个使得判定为假,以满足判定覆盖的要求。
2、【问题2】请画出上述程序的控制流图,并计算其控制流图的环路复杂度V(G)。(8分)
参考答案:请看解析
解析:
控制流图是一种描述程序控制流的图示方式,由节点和定向边构成,节点代表一个基本块,定向边代表控制流的方向。根据提供的C程序,需要画出其控制流图,并计算其环路复杂度。环路复杂度等于控制流图中判定节点的个数加1。在这个问题中,需要分析程序的控制流,然后绘制出控制流图,并数出判定节点的数量,最后计算环路复杂度。由于无法查看提供的图片内容,因此无法给出具体的控制流图和环路复杂度的计算过程。
3、【问题3】请给出问题2中控制流图的线性无关路径。(8分)
参考答案:请看解析
解析:
本题的解答需要根据控制流图来确定线性无关路径。线性无关路径是指包含一组以前没有处理的语句或条件的路径,从控制流图上来看,一条线性无关路径是至少包含一条在其他线性无关路径中从未有过的边的路径。对于本题而言,首先需要明确控制流图中的各个节点和边,然后分析这些节点和边之间的逻辑关系,找到那些包含独特边的路径即为线性无关路径。因此,在给出的控制流图中,我们可以找到多条线性无关路径,具体路径可能还有其他分支和节点。
阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。(15分)
【说明】某航空公司考虑到在今年特殊形势下,很多会员无法通过搭乘航班延续之前的会员等级,特推出了“回望升级”活动。对2017年1月1日至2019年12月31日三个自然年度任意连续12/24/36个月机票消费达到一定金额时,奖励会员相应等级。
活动规则为:任意连续12/24/36个月机票消费金额达到人民币2.5/4.75/6.75万元及以上,给予银卡会员等级;任意连续12/24/36个月机票消费金额达到人民币5/9.5/13.5万元及以上,给予金卡会员等级;任意连续12/24/36个月机票消费金额达到人民币15/28.5/40.5万元及以上,给予白金卡会员等级。活动规则详见表2-1。
此外,为了鼓励在官网和官方App购票,针对不同的购票渠道,有不同的奖惩系数。官网购票不奖励不惩罚,官方App购票消费金额按1.2倍计算,第三方购票消费金额按0.8倍计算,详见表2-2。航空公司开发了一个程序来计算会员在该活动后的奖励等级,程序的输入包括会员在2017年1月1日至2019年12月31日中任意连续12个月最大消费金额A (单位:万元),任意连续24个月最大消费金额B (单位:万元),36个月消费金额C (单位:万元),购票渠道代码D,程序的输出为本次活动奖励等级L。其中,A、B、C为非负浮点数最多保留4位小数,D为正整数且取值为1、2、3之一,L为字母M、S、G、P中之一。

4、【问题1】采用等价类划分法对该程序进行测试(同时对输入输出进行等价类划分),等价类表如表2-3所示,请补充表2-3中的空(1)~(4)。(4分)
参考答案:
参考答案如下:
(1)最多4位小数的非负浮点数
(2)多于4位小数的非负浮点数
(3)非正整数
(4)1,2,3以外的正整数
解析:
本题考查的是黑盒测试用例设计中的等价类划分法。针对题目的描述,对程序的输入进行等价类划分。
对于输入项A、B、C,根据题目描述,它们都是非负浮点数,并且最多保留4位小数。因此,第(1)空应填“最多4位小数的非负浮点数”,第(2)空应填“多于4位小数的非负浮点数”。
对于输入项D,根据题目描述,它是购票渠道代码,为正整数且取值为1、2、3之一。因此,第(3)空应填“非正整数”,表示输入项D不能是负数或者零;第(4)空应填“除1、2、3之外的其他正整数”,表示输入项D必须是除了1、2、3以外的其他正整数。
5、【问题2】根据以上等价类表设计的测试用例如下表所示,请补充表2-4中空(1) ~ (9)。 (9分)
参考答案:
参考答案如下:
(1)1,2,3
(2)M
(3)N/A
(4)7,2,3
(5)-1(任意负浮点数)
(6)0.12345(任意多于4位小数的非负浮点数)
(7)0.1(任意非整数)
(8)-1(任意非正整数)
(9)4(1,2,3以外的正整数)
解析:
针对问题(1),由于购票渠道代码D为正整数且取值为1、2、3之一,所以空(1)应填写1、2、3中的任意一个值。
针对问题(2),根据等价类表,消费金额A、B、C满足最大连续消费金额条件时,输出L为活动奖励等级,而最低奖励等级为银卡会员等级,对应的字母是M,所以空(2)应填写M。
针对问题(3),由于未给出具体的连续消费月数(12/24/36个月)和金额条件,因此无法确定具体的奖励等级,所以空(3)无法填写具体的字母等级,填写N/A表示不确定。
针对问题(4),根据等价类表的规则,对于消费金额的计算,当消费金额不满足任何一个连续消费月数的金额条件时,程序不输出活动奖励等级,因此空(4)应填写不输出活动奖励等级的情况,即输入满足条件的连续消费月数和金额组合即可。此处可填写任意满足条件的组合,如7、2、3等。
针对问题(5),空(5)要求填写任意负浮点数,表示输入的消费金额应该是负数。
针对问题(6),空(6)要求填写任意多于4位小数的非负浮点数,表示输入的消费金额应是一个非负数,并且小数点后有超过4位的数字。例如:0.12345。
针对问题(7),空(7)要求填写任意非整数的消费金额,即输入的消费金额应为非整数。例如:0.1。
针对问题(8),空(8)要求填写任意非正整数的值,表示输入值不能是正整数。由于之前输入的是消费金额,这里应该填写一个表示非正整数的值,例如-1。
针对问题(9),空(9)要求填写除1、2、3以外的正整数,表示输入值是一个除给定的值以外的正整数。因此可以填写任何正整数,如4等。
6、【问题3】对于本案例的黑盒测试来说,以上测试方法有哪些不足?(2分)
参考答案:
(1)没有考虑边界值的设计;
(2)没有考虑对输出进行等价类划分;(输出的等级L的所有取值没有覆盖)
(3)A、B、C的取值设计不充分,覆盖度不够。
解析:
对于黑盒测试来说,上述测试方法的不足包括:
(1)边界值设计:在进行黑盒测试时,需要充分测试输入参数的边界值,以确保程序在极限情况下的表现。然而,本案例中并没有明确提及是否对A、B、C的最大消费金额的边界值进行了测试,如最大消费金额的上下限等。
(2)输出等价类划分:在黑盒测试中,除了测试各种输入情况外,还需要对输出进行等价类划分,确保每种可能的输出都得到了测试。然而,本案例中并没有明确提及是否对输出的等级L的所有可能取值进行了覆盖测试。
(3)输入参数覆盖度不足:在测试中,需要充分覆盖所有的输入参数组合。然而,本案例中对于A、B、C的取值设计似乎并不充分,没有明确说明是否覆盖了所有的输入组合,尤其是连续月份的不同组合(如只考虑了连续12个月的情况,但未明确是否考虑了连续24个月和36个月的情况)。因此,可能存在某些输入组合未被充分测试的情况。
阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。(20分)
【说明】为了应对疫情防控下的学生返校管理,某高校管理平台新开发紧急疫情管控系统,以有效管理师生员工的活动及身体情况。该系统提供Web和微信小程序两种不同的访问途径。
系统主要功能是:
(1)专职管理人员对基础信息管理和设置。
(2)师生员工每日信息申报,返校、离校活动申报,所在位置通过定位实时获取。
(3)对各类人员的活动申请进行审批。
(4)根据相关审批结果进行门禁控制。
(5)各级管理人员可对所辖部门的人员申报情况进行查询和统计。
7、【问题1】(1)信息申报采用表单进行实现,输入测试需要测试哪几个方面?
(2)什么情况下表单中输入的内容可能会传到后台引起安全问题?如何设计测试用例进行输入测试?(7分)
参考答案:
(1)①每个字段的验证;②字段的缺省值;③表单中的输入;④提交操作的完整性。
(2)①若输入的内容中输入某些功能符号可能会传到后台引起安全问题。
②在测试设计时,在输入域包含HTML,如: HTML,或脚本,如: SCRIPT,或SQL功能符号,如:2020'OR'1'='1等,以测试是否存在XSS脚本和SQL注入等安全问题。
解析:
本题主要考查表单测试和安全测试的基础知识。对于信息申报的表单测试,需要验证每个字段的合规性、缺省值处理、各种输入组合的处理以及提交操作的完整性。而在安全测试中,需要特别关注输入内容可能带来的安全风险,如XSS脚本攻击和SQL注入等。通过设计包含特定符号或语句的测试用例,可以检测系统的安全性。
8、【问题2】系统前端采用HTML5实现,以使用户可以通过电脑和不同移动设备的浏览器进行访问。设计兼容性测试矩阵,对系统兼容性进行测试(不考虑机型)。(6分)
参考答案:
解析:
本题考查的是系统兼容性的测试设计。系统前端采用HTML5实现,以使用户可以通过电脑和不同移动设备的浏览器进行访问。为了对系统兼容性进行测试,需要设计兼容性测试矩阵。
一、测试环境:
- 电脑浏览器:包括主流浏览器如Chrome、Firefox、Safari、Edge等;
- 移动设备浏览器:涵盖iOS和Android系统的不同版本浏览器。
二、测试内容:
- 页面显示:测试页面在不同浏览器和移动设备上的显示是否正常,是否有布局混乱、文字错位等问题;
- 功能操作:测试系统各项功能在不同浏览器和移动设备上的操作是否正常,如信息申报、审批、门禁控制等;
- 表单提交:测试表单提交功能在不同浏览器和移动设备上的兼容性,是否能正常提交数据;
- 数据交互:测试系统在不同浏览器和移动设备与服务器之间的数据交互是否正常。
三、测试结果记录:
根据测试情况,记录每个测试环境(浏览器/设备)下的测试结果,包括页面显示、功能操作、表单提交和数据交互等方面的问题。
四、测试矩阵:
测试环境 \ 测试内容 | 页面显示 | 功能操作 | 表单提交 | 数据交互 |
---|---|---|---|---|
电脑浏览器(Chrome) | 通过/不通过 | 通过/不通过 | 通过/不通过 | 通过/不通过 |
电脑浏览器(Firefox) | 通过/不通过 | 通过/不通过 | 通过/不通过 | 通过/不通过 |
电脑浏览器(Safari) | 通过/不通过 | 通过/不通过 | 通过/不通过 | 通过/不通过 |
电脑浏览器(Edge) | 通过/不通过 | 通过/不通过 | 通过/不通过 | 通过/不通过 |
移动设备浏览器(iOS) | 通过/不通过 | 通过/不通过 | 通过/不通过 | 通过/不通过 |
移动设备浏览器(Android) | 通过/不通过 | 通过/不通过 | 通过/不通过 | 通过/不通过 |
根据测试结果,填写测试矩阵,记录每个测试环境下的测试结果。这样的测试矩阵有助于发现系统在不同浏览器和设备上的兼容性问题,以便进行修复和改进。
9、【问题3】(7分)申报审批有时间段约束,性能测试时,采用Apdex (应用性能指数)对用户使用该系统的性能满意度进行度量,系统的Apdex指数需要满足基本要求为0.7以上,满足期望要求为0.85以上。Apdex量化时,对应用户满意度分为三个区间,通过响应时间阈值(Threshold) T来划分,Apdex的用户满意度区间如下:
满意:(0,T],让用户感到很愉快;
容忍:(T, 4T],慢了一点,但还可以接受,继续这一应用过程;
失望:高于4T,太慢了,受不了,用户决定放弃这个应用;
Apdex的计算如下:Apdex =(满意的样本数+容忍的样本数/2)/总样本数
请计算本系统的Apdex指数,并说明本系统是否达到要求。

参考答案:
Apdex=(满意的样本数+容忍的样本数/2)/总样本数=(150+40/2)/(150+40+30)=0.77。
由于0.77大于0.7,但是小于0.85,所以满足基本要求,但是不满足期望要求。
解析:
本题主要考查根据Apdex的计算公式进行实际应用的能力。首先,我们需要明确Apdex的计算方式,它等于“满意的样本数加上容忍的样本数的一半”除以总样本数。根据题目给出的信息,满意的样本数为150,容忍的样本数为40,失望的样本数为30。将这些数值代入公式,我们可以计算出Apdex的值为0.77。然后,我们需要判断这个值是否满足系统的要求。题目中明确指出,Apdex指数需要满足基本要求为0.7以上,满足期望要求为0.85以上。我们的计算结果为0.77,显然满足了基本要求,但不满足期望要求。
阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。(20分)
【说明】为了有效控制疫情,需要记录所有人最后一次出行的信息。其中:
(1)类Travel记录了一次旅行的基本信息,包括出发地(Source)、 目的地(Des)、 15日内是否有境外旅行史(OverSeas) 和15日内是否去过高风险疫区(HighDanArea)。
(2)类HighTrain和AirPlane分别表示高铁旅行和飞机旅行,这两个类继承了类Travel的属性和方法。HighTrain 定义了自己的属性车厢号(CaseNo)和座位号(SeatNo)。AirPlane定义了自己的属性座位号( SeatNo)。
(3)函数checkIso调用Travel的相关方法读取旅行者的出发地、目的地以及15日内是否有境外和高风险区域的信息,判断该旅行者是否需要被隔离。
现拟采用面向对象的方法进行测试。
10、【问题1】 (9分)
(1)面向对象的测试分为哪几个阶段?
(2)类Person和Travel之间是什么关系?
(3)该关系是否影响测试?
参考答案:
(1)面向对象分析的测试;面向对象设计的测试;面向对象编程的测试;面向对象单元测试;面向对象集成测试,面向对象系统测试(也可以写成面向对象确认和系统测试)。
(2)关联关系。
(3)影响测试。
解析:
(1)面向对象的测试与传统的测试方法相比,更加注重于对象、类、继承等面向对象特性的测试。因此,面向对象的测试分为面向对象分析的测试(对需求分析和设计模型的测试)、面向对象设计的测试(对类的设计、接口和继承关系的测试)、面向对象编程的测试(对编码阶段的测试)、面向对象单元测试(对单个对象的测试)、面向对象集成测试(将各个对象组合起来进行测试)以及面向对象系统测试(对整个系统的测试)。
(2)在给出的说明中,没有明确的说明Person类和Travel类之间的具体关系。但从问题中我们可以推断,可能存在一个Person类,其内部调用了Travel类作为其成员变量,用于记录旅行信息。因此,Person类和Travel类之间应为关联关系。
(3)由于Person类和Travel类之间存在关联关系,如果Travel类存在问题,那么在测试Person类时可能会遇到由于Travel类问题导致的错误。因此,在进行Person类的测试之前,应该先对Travel类进行测试,确保Travel类的功能正确。所以,这种关系确实会影响测试。
11、【问题2】 (6分) 为了更方便函数checkIso的实现,程序员在Person类中增加了属性IsIso和方法checkDan,具体实现如下:
方法checkDan中判断该旅行者是否需要被隔离,并且把结果写入IsIso,在checkIso中直接读取旅行者的IsIso属性值就可以得出结论。
(1)这种实现方法破坏了面向对象的哪种机制?
(2)这种问题的测试需要在面向对象测试的哪个阶段实施?
参考答案:(1)破坏了面向对象的封装机制。
(2)在面向对象编程的测试阶段进行。
解析:
第一问:在面向对象编程中,封装是一种重要的机制,它隐藏对象的内部状态和实现细节,只允许通过对象提供的方法进行访问和修改。在提供的实现方法中,直接修改了Person类的属性IsIso,而没有使用封装机制中的SET方法进行修改,因此破坏了面向对象的封装机制。
第二问:这种问题的测试需要在面向对象编程的测试阶段实施。因为面向对象编程中的测试主要包括单元测试、集成测试和系统测试等阶段,而这个问题涉及到面向对象编程中的类和方法的实现,需要在单元测试阶段进行测试,以确保类和方法的功能和性能符合预期要求。
12、【问题3】 (5分)请给出各个类的测试顺序。
参考答案:Travel-HighTrain-AirPlane-Person-main(类HighTrain和AirPlane顺序不分前后,main是函数,没有写到一个类里面,所以可写可不写)
解析:
本题考查面向对象测试的基础知识。根据题目描述,应该先测试基类Travel,因为HighTrain和AirPlane继承了Travel的属性和方法,所以需要在测试Travel类之后再测试HighTrain和AirPlane(两者的顺序可以根据实际情况调整)。然后,由于Person类调用了Travel类作为其成员变量,因此应该在Travel类及其子类测试完成后,再测试Person类。最后,测试main函数。这样的测试顺序可以确保每个类的方法都能正常运作,并且类之间的依赖关系也得到了正确的处理。
阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。(20分)
【说明】某测湿仪用于测量目标物体的相对湿度。该仪器中软件主要完成AD数据采集,并通过数学运算将数据转换为湿度值,在显示终端显示。软件主要包括主程序模块、测湿程序模块、显示程序模块、报警程序模块等。程序的主要功能说明如下:
1、主程序模块判断是否存在按键按下的情况,如果没有按键按下,继续执行1;否则执行2。
2、如果按下键为“设置键”,则通过“+ ”键每次增加1或通过“-”键每次减少1,设置最高湿度报警值(默认值为70),再次按下“设置键” 进行确认,并通过“+ ”键或“-”键设置最低湿度报警值(默认值为40),再次按下“设置键”进行确认后执行1。
3、如果按下键为“测湿键” ,则读取测湿程序模块送回的目标湿度信息。
4、将读取的湿度信息与设定的最大值与最小值比较,如果大于等于最大值或小于等于最小值,则执行5,否则向显示程序模块发送显示的湿度信息,并执行6。
5、调用报警处理程序,并向显示程序模块发送报警信息。
6、显示程序模块显示湿度过高报警或湿度过低报警或者湿度信息。
13、【问题1】 (8分)为了测试软件功能,测试人员设计了表5-1所示的测试用例。假定开始执行测试用例时,最高湿度和最低湿度报警值为默认值,请填写该表中的空白(1)~ (8),将答案填写在答题纸的对应栏中。
参考答案:
(1)63
(2)50
(3)55
(4)被测目标容器湿度为52
(5)湿度过高报警信息
(6)51
(7)湿度过低报警信息
(8)50
解析:
(1)根据题干描述,测试人员需要设置最高湿度报警值,默认值为70。由于测试人员连续按下“-”键7次,每次减少1,所以最高湿度报警值设置为63。
(2)设置最低湿度报警值时,默认值为40。测试人员连续按下“+”键10次,每次增加1,所以最低湿度报警值设置为50。
(3)按下“测湿键”后,软件会读取测湿程序模块送回的目标湿度信息。根据表格中的输出值为55,因此应将测湿仪置入湿度为55的目标容器进行测试。
(4)根据题干描述和表格序号3的信息,当执行到相关操作时,屏幕会显示被测目标容器的湿度信息,因此答案为屏幕显示被测目标容器湿度为52。
(5)当湿度达到最高报警值63时,软件会调用报警处理程序,并向显示程序模块发送报警信息。根据表格中的输出信息,屏幕会显示湿度过高报警信息。
(6)对于输出值为51的情况,由于51在设置的合理范围内,所以应将测湿仪置入湿度为51的目标容器进行测试。
(7)当湿度达到最低报警值50时,软件会发送报警信息。根据表格中的输出信息,屏幕会显示湿度过低报警信息。
(8)根据题干描述和表格信息,当设置的湿度值小于或等于50时,软件会触发最低边界报警。
14、【问题2】(6分) 软件的结构覆盖率是度量测试充分性的一种手段,也是度量测试有效性的一种手段。 在嵌入式软件白盒测试过程中,通常以语句覆盖率、分支覆盖率和MC/DC覆盖率作为度量指标。在实现题目说明的第4条判断湿度是否在正常范围”的功能时,设计人员采用了下列算法:
请完成表5-2中的(1)~ (3)空白,指出对上述算法达到100%语句覆盖、100%分支覆盖和100%MC/DC覆盖所需的最少测试用例数目。请将答案填写在答题纸的对应栏中。
参考答案:
(1)3
(2)3
(3)3
解析:
本题考查软件结构覆盖率的基础知识。
- 语句覆盖:只需要让程序中的语句都执行一遍即可,从控制流程图可以看出,需要3个测试用例分别走不同的路径以覆盖所有语句。
- 分支覆盖(判定覆盖):是指使得程序中每个判断的取真分支和取假分支至少经历一次。从控制流程图分析,需要1个测试用例使判断1为真,1个使判断1为假、判断2为真,以及1个使判断1为假、判断2为假,共需要3个测试用例。
- MC/DC 覆盖:要求每一种输入输出至少出现一次,并且每一个判定中的每一个条件必须能够独立影响一个判定的输出。对于本题,判断1有两个条件(目标物体湿度<高湿报警值、目标物体湿度>低湿报警值),判断2有一个条件(目标物体湿度≥高湿报警值)。通过分析,需要3个测试用例来满足MC/DC覆盖。
15、【问题3】 (6分)嵌入式软件中通常使用注释率来衡量程序的可维护性,嵌入式软件的注释率一般要求不小于(1)。
本项目在开发过程中通过测试发现了11个缺陷,在实际使用中用户反馈了1个缺陷,缺陷探测率(DDP)为(2)(结果保留小数点后1位)。
参考答案:
(1)20%(或者写1/5也行)
(2)DDP=测试者发现的缺陷/(测试者发现的缺陷+用户发现的缺陷)=11/(11+1)=91.7%
解析:
本题主要考察嵌入式软件的基础知识和缺陷探测率的概念。注释率是衡量嵌入式软件可维护性的重要指标,通常要求不低于20%。缺陷探测率则是衡量测试工作效率和软件质量成本的指标,旨在评估测试发现的缺陷数量与总缺陷数量的比例,以评估测试的效率和投资回报。在本项目中,测试者发现了11个缺陷,用户仅反馈了1个缺陷,因此缺陷探测率较高,说明测试工作较为有效。
喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!