201911评测下午真题
第 1 题
阅读下列C程序,回答问题1至问题3。
【C程序】
【问题1】(6分)
请针对上述C程序给出满足100%DC (判定覆盖)所需的逻辑条件。
【问题2】 (6分)
请画出上述程序的控制流图,并计算其控制流图的环路复杂度v(G)。
【问题3】(8分)
请给出问题2中控制流图的线性无关路径。
答案与解析
- 试题难度:一般
- 知识点:下午应用题>基于结构的测试
- 试题答案:
【问题1】
buf_len>512;buf_len<=512
buf_len==0;buf_len!=0
i<total_bytes;i>=total_bytes
buf_c[i]==’\0’; buf_c[i]!=’\0’
buf_c[i]<7||buf_c[i]>14;buf_c[i]>=7&&buf_c[i]<=14
i>=32;i<32
【问题2】
V(g)=8
【问题3】
1)1、2、4、5、13
2)1、3、4、5、13
3)1、3、4、6、13 (1、2、4、6、13)
4)1、3、4、6、7、8、13 (1、2、4、6、7、8、13)
5)1、3、4、6、7、9、11、12、13 (1、2、4、6、7、9、11、12、13)
6)1、3、4、6、7、9、10、11、12、13 (1、2、4、6、7、9、10、11、12、13)
7)1、3、4、6、7、9、10、6… (1、2、4、6、7、9、10、6…)
8)1、3、4、6、7、9、10、11、6… (1、2、4、6、7、9、10、11、6…)
或者与之等价的答案。 - 试题解析:
【问题1】
判定覆盖:设计足够的测试用例,使得使程序中的每个判定至少都获得一次“真值”或“假值”。又称分支覆盖:使程序中的每一个取“真”分支和取“假”分支至少经历一次
本题中涉及到判定的点的条件项分别为:buf_len>512;buf_len==0;i<total_bytes;buf_c[i]==’\0’;buf_c[i]<7||buf_c[i]>14;i>=32;
buf_len>512;buf_len<=512
buf_len==0;buf_len!=0
i<total_bytes;i>=total_bytes
buf_c[i]==’\0’; buf_c[i]!=’\0’
buf_c[i]<7||buf_c[i]>14;buf_c[i]>=7&&buf_c[i]<=14
i>=32;i<32
【问题2】
控制流图是描述程序控制流的一种图示方法。其基本符号有圆圈和箭线:圆圈为控制流图中的一个结点,表示一个或多个无分支的语句;带箭头的线段称为边或连接,表示控制流。基本结构如下所示:本题由于在//8 //12后都存在break语句,导致执行//8 //12后程序结构会发生改变。
控制流程图的环路复杂性 V(G)等于:
(1)控制流程图中的区域个数。
(2)边数-结点数+2。
(3)判定数+1。
V(g)=8
【问题3】
线性无关路径是指包括一组以前没有处理的语句或条件的一条路径。从控制流图来看,一条线性无关路径是至少包含有一条在其他线性无关路径中从未有过的边的路径:
本题由于主干有分支,所以线性无关路径可能有多种组合。
1)1、2、4、5、13
2)1、3、4、5、13
3)1、3、4、6、13 (1、2、4、6、13)
4)1、3、4、6、7、8、13 (1、2、4、6、7、8、13)
5)1、3、4、6、7、9、11、12、13 (1、2、4、6、7、9、11、12、13)
6)1、3、4、6、7、9、10、11、12、13 (1、2、4、6、7、9、10、11、12、13)
7)1、3、4、6、7、9、10、6… (1、2、4、6、7、9、10、6…)
8)1、3、4、6、7、9、10、11、6… (1、2、4、6、7、9、10、11、6…)
第 2 题
阅读下列说明,回答问题1至问题3。
【说明】
某航空公司进行促销活动,会员在指定日期范围内搭乘航班将获得定奖励,奖励分为4个档次,由乘机次数和点数共同决定,如表2- 1所示。其中点数跟票面价格和购票渠道有关,规则如表2-2所示。
航空公司开发了一个程序来计算会员在该促销活动后的奖励,程序的输入包括会员在活动期间的乘机次数C、官网购票金额A (单位:元)和手机客户端购票金额B(单位:元),程序的输出为本次活动奖励档次L。其中,C、A、B为非负整数,L为0~5之间的整数(0表示无奖励)。
【问题1】 (4分)
采用等价类划分法对该程序进行测试(同时对输入输出进行等价类划分), 等价类表如表2-3所示,请补充表2-3中的空(1) ~ (4)。
【问题2】 (9分)
根据以上等价类表设计的测试用例如表2-4 所示,请补充表2-4中的空(1)~(9)
【问题3】(2分)
对于本案例的黑盒测试来说,以上测试方法有哪些不足?
答案与解析
- 试题难度:一般
- 知识点:下午应用题>基于规格说明的测试技术
- 试题答案:
【问题1】
(1)非负整数
(2)4
(3)0
(4)负整数
【问题2】
(1)1、2、3、8
(2)0
(3)20(大于等于20的等价答案)
(4)15000(大于等于15000的等价答案)
(5)10(大于等于10且小于15的等价答案)
(6)7000(大于等于15000的等价答案)
(7)1、2、3、7
(8)1.1(非整数的等价答案)
(9)N/A
【问题3】
1)无法体现出C、A/B之间的制约关系,比如当满足A/B(转换后对应的点数满足),但不满足C(乘机次数)的情况
2)没有考虑手机端的情况,题干中B的数值都为0 - 试题解析:
【问题1】
划分等价类的6条原则:
(1)在输入条件规定了取值范围或值的个数的情况下,可以确立一个有效等价类和两个无效等价类。
(2)在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,可以确立一个有效等价类和一个无效等价类。
(3)在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类。
(4)在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类。
(5)在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。
(6)在确知已划分的等价类中,各元素在程序处理中的方式不同的情况下,则再将该等价类进一步地划分为更小的等价类。
题干中明确:C、A、B为非负整数,结合乘机次数的无效等价了,A、B的有效等价类(1)处应该填写非负整数。
题干中明确:C、A、B为非负整数,L为0~5之间的整数(结合题干分析,应该是0~4之间整数),而且每一种是单独处理的,再结合问题2的测试用例表的测试编号1和4,所以,(2)(3)应该填写4、0
题干中明确:C、A、B为非负整数,结合前面两个无效等价,(4)处应该填写负整数
【问题2】
测试编号1:依据题干含义,当C、A、B全为零的时候,应该输出为0,也就是覆盖1,2,3,8等有效等价类。
测试编号2:覆盖1、2、3、4等价类输出为1,且A为20000/100=200点,所以乘机次数应该大于等于20次。
测试编号3:覆盖1、2、3、5等价类输出为2,且乘机次数为15,所以点数应该为大于等于150点的数值,所A应该大于等于15000的数值。
测试编号4:覆盖1、2、3、6等价类输出为3,且A为10000/100=100点,所以乘机次数应该大于等于10且小于15。
测试编号5:C为7、B为0、预期输出为4,所以乘机点数应该大于等于70点,所以A应为大于等于7000的数值,覆盖 1、2、3、7等价类。
测试编号6:覆盖9、2、3,即C为非整数。
测试编号7:覆盖10、2、3,即应为无效输入,没有对应的输出 即N/A。
【问题3】
本题中由于存在多条件的制约情况,如输出1时,需要乘机次数C和点数A/B都符合特定的要求,无法很好的体现出条件之间的制约情况,比如点数符合对应档次要求,但乘机次数未达到要求的情况;另外测试时没有对手机端进行测试。
第 3 题
阅读下列说明,回答问题1至问题3。
【说明】
某公司欲开发一款二手车物流系统,以有效提升物流成交效率。该系统的主要功能是:
(1) 订单管理:帮买顾问看到有买车线索后,会打电话询问买家是不是需要物流,若需要,帮买顾问就将这个线索发起为订单,帮助买家来找承运商。
(2)线路管理与推荐:对承运商的线路进行管理。根据运输方式的不同,线路分为三种,即包车线路、固定线路、竞价体系,其中包车线路和固定线路是合约制。接入订单系统会根据订单的内容选择合适的承运商。即: 有新订单时,若符合固定线路和包车线路,系统自动分配给合约承运商;若不符合合约,系统将订单需求信息推送给各承运商,承运商对订单进行竞拍出价。
(3)合约管理:根据公司与承运商确定的合约,对合约内容进行设置。
(4)基础信息管理:包括帮买顾问(这部分缺失)
【问题1】 (6分)
系统前端APP需支持不同品牌的不同系统平台,设计兼容性测试矩阵,以对系统的兼容性进行测试。
【问题2】(8分)
承运商进行竞价时,前端需提交竞拍价格(整数,单位:元)数和可接受浮动比例(整数),针对这一功能设计4个测试用例。
【问题3】(6分)
承运商竞拍部分的性能要求最高。采用性能测试工具在以系统竞拍功能为主进行性能测试时,采用Apdex (应用性能指数)对用户使用该系统的性能满意度进行度量,系统需要满足Apdex指数为0.9以上。测试数据如表3-1所示,请计算本系统的Apdex指数,并说明本系统是否达到要求。
答案与解析
- 试题难度:一般
- 知识点:第1版本考点>web应用测试
- 试题答案:
【问题1】
【问题2】50000,1(功能正常)
50000.1,1(竞拍价输入异常,非整数)
50000,1.1(可接受的浮动比例异常,非整数)
50000,--(SQL注入式攻击,或Xss攻击测试用例任选一个)
【问题3】
(185+20/2)/(185+20+10)=0.9070 >=0.9 所以符合要求 - 试题解析:
【问题1】
题干中明确要求APP是针对不同品牌的不同系统,也就是一个品牌会涉及多种不同的系统,同时需要测试多种品牌,所以在设计兼容矩阵的时候,应该为:【问题2】
要求设计 竞拍价(整数)、可接受的浮动比例(整数)设计4个测试用例,
50000,1(功能正常)
50000.1,1(竞拍价输入异常)
50000,1.1(可接受的浮动比例异常)
50000,--(SQL注入式攻击,或Xss攻击测试用例任选一个)
【问题3】
Apdex 定义了应用响应时间的最优门槛为 T,另外根据应用响应时间结合 T 定义了三种不同的性能表现:
Satisfied(满意):应用响应时间低于或等于 T(T 由性能评估人员根据预期性能要求确定),比如 T 为 1.5s,则一个耗时 1s 的响应结果则可以认为是 satisfied 的。
Tolerating(可容忍):应用响应时间大于 T,但同时小于或等于 4T。假设应用设定的 T 值为 1s,则 4 * 1 = 4 秒极为应用响应时间的容忍上限。
Frustrated(烦躁期):应用响应时间大于 4T
Apdext= (Satisfied Count + Tolerating Count / 2) / Total Samples
本题为:(185+20/2)/(185+20+10)=0.9070 >=0.9 所以符合要求
第 4 题
阅读下列说明,回答问题1至问题3。
【说明】
某汽车维修公司的工时计算模块每天定时根据系统登记的维修信息统计维修工的工时工资。维修工分为学徒、普通维修工和高级维修工三种,三种维修工有不同的时薪标准。
图4-1是该模块的类图,图中属性和操作前的“+”、“#”和“-”分别表示公有成员、保护成员和私有成员。
图4-1类图
其中:
(1) 类Engineer表示普通维修工。
(2)类studentEngineer和seniorEngineer都重新实现了类Engineer的方法calReward () 。
(3)方法calReward () 根据每个维修工每天的工时数(workTime)、时薪(hourSalary)来计算当天的工时工资。
(4)方法getReward () 调用方法calReward () 获取工时工资并打印显示。
(5) 类Svstem中的方法statReward () 中首先调用了该类的方法load (),获取本系统工程师列表,然后调用了类Engineer中的方法calReward () 。现拟采用面向对象的方法进行测试。
【问题1】(4分)
(1)图4-1所示的类图中,类System和Engineer之间是什么关系?
(2)类seniorEngineer重新实现了类Engineer的方法calReward (), 这 是面向对象的什么机制?
【问题2】 (6分)
类seniorEngineer中的方法calReward () 和类stud entEngineer中的方法getReward ()是否需要重新测试?
【问题3】 (10分)
(1)请结合题干说明中的描述,给出测试类Engineer方法calReward () 时的测试序列。
(2)请给出图4-1中各个类的测试顺序。
(3)从面向对象特性考虑,测试类System中方法statReward () 时应注意什么?
答案与解析
- 试题难度:一般
- 知识点:第1版本考点>面向对象测试
- 试题答案:
【问题1】
关联关系
多态机制
【问题2】
seniorEngineer中的方法calReWard()重写了,需要重新测试;
studentEngineer中的方法getReward()调用了改动过的成员函数,需要重新测试
【问题3】
(1)Engineer()-setWorkTime()-calReward()-getReward()(注意本题时薪属于属性,不是方法/函数,后面getReward()可以不写)
(2)Engineer-seniorEngineer-studentEngineer-system(或者Engineer-studentEngineer -seniorEngineer -system)
(3)在测试System中statReward()方法时涉及基类Engineer、子类studentEngineer、seniorEngineer中的calReward()方法,即需要分别对各类的calReward()方法设计测试用例进行测试。 - 试题解析:
【问题1】
从类图上分析,System和Engineer之间应属于关联关系
SeniorEngineer重新实现Engineer的方法,属于多态机制
【问题2】
对父类中已经测试过的成员函数,有两种情况需要在子类中重新测试:(1)继承的成员函数在子类中做了改动;(2)成员函数调用了改动过的成员函数的部分。
本题中seniorEngineer中的方法calReWard()重写了,需要重新测试;
题干中(说明4)明确了getReward()方法要调用calReward()方法,而calReward()是重写了的,所以studentEngineer中的方法getReward()属于调用了改动过的成员函数,需要重新测试
【问题3】
(1)依据说明3中的描述,再结合本题中时薪(hourSalary)是属性,所测试序列如下:
Engineer()-setWorkTime()-calReward()-getReward()(注意本题时薪属于属性,不是方法/函数,后面getReward()可以不写)
(2)由于senioEngineer和studentEngineer是Engineer的子类,sysytem要调用Engineer中的方法,所以类的测试顺序为:Engineer-seniorEngineer-studentEngineer-system(或者Engineer-studentEngineer -seniorEngineer -system)
(3)在测试System中statReward()方法时需要基类Engineer、子类studentEngineer、seniorEngineer中的calReward()方法,即需要分别对各类的calReward()方法设计测试用例进行测试。
第 5 题
阅读下列说明,回答问题1至问题3。
【说明】
在某嵌入式智能服务机器人的软件设计中,为了更好地记录机器人的个体信息和机器人的工作信息,为智能服务机器人设计了信息数据库。数据库主要完成收集智能服务机器人反馈信息的作用,记录所有机器人的所有工作记录,以方便使用者对机器人的管理和对机器人状态的掌握,并且在机器人发生运行故障时,可以根据数据库存储的信息分析产生故障的原因。数据库收集智能服务机器人反馈信息的流程如下:
服务器端接收反馈信息。
(1)第一次解析判断反馈信息类型是否正确,若正确执行(2),否则执行(3);
(2)第二次解析判断反馈信息内容是否正确,若正确执行(4),否则执行(3);
(3)调用错误信息处理函数后执行(4) ;
(4)将反馈信息存入数据库。
【问题1】(6分)
在本软件测试过程中,测试人员为了设计测试用例,根据题目中的说明,画出了机器人反馈信息收集软件流程图,如图5.1所示。
请在下列选项中,为图5.1中的空(1)~(3)选择正确的描述内容。(1)处对应_____ (2)处对应_____,(3)处对应_____
(1) A.反馈格式是否正确 B.反馈长度是否正确
C.反馈类型是否正确 D.反馈内容是否正确
(2) A.标记错误信息 B.错误信息处理
C.错误信息纠正 D.错误信息报告
(3) A.信息存入内存 B.信息存入文件
C.信息存入数据库 D.倍息存入软件
【问题2】(6分)
软件的结构覆盖率是度量测试完整性的一种手段。也是度量测试有效性的一种手段,在嵌入式软件白盒测试过程中。通常以语句覆盖率、分支覆盖率和MC/DC覆盖率作为度量指标。
在实现题目说明中第(1) 、(2) 条功能时,设计人员采用了下列算法:
请指出对上述算法达到100%语句覆盖、100%分支覆盖和100%MC/DC覆盖所需的最少测试用例数目。
【问题3】
为了测试软件功能,测试人员设计了表5- -2所示的测试用例,请填写该表中的空(1) ~(4)。
答案与解析
- 试题难度:一般
- 知识点:下午应用题>基于结构的测试
- 试题答案:
【问题1】
(1)D
(2)B
(3)C
【问题2】
(1)3
(2)3
(3)4
【问题3】
(1)报告信息类型不正确
(2)报告信息内容不正确
(3)错误
(4)典型类型3 - 试题解析:
【问题1】
依据题干说明(1)(2)(3)(4)的描述,(1)处应该为:判定反馈内容是否正确;(2)处应该为:执行错误信息处理函数;(3)信息存入数据库
【问题2】
语句覆盖(SC):设计足够的测试用例,使得被测试程序中每条语句至少执行一次。
判定覆盖(DC):设计足够的测试用例,使得程序中的每个判定至少都获得一次“真值”或“假值”;又称分支覆盖:使程序中的每一个取“真”分支和取“假”分支至少经历一次。
修正判定条件覆盖(MCDC):设计足够的测试用例,使得每一程序模块的入口和出口点都要考虑至少被调用一次,每个程序的判定到所有可能的结果值要至少转换一次;程序的判定被分解为通过逻辑操作符(and or)连接的bool条件,每个条件判定的结果值是独立的。
本题中是两个if…else…的嵌套结构:
语句覆盖和判定覆盖:当第1层if为真时就不会覆盖假,所以假部分需要一个测试用例覆盖,当第1层if判定为真时可以覆盖第2层if判定为真的结构或者第2层if判定为假的结构,所以当要覆盖第2层判定,需要2个测试用例,所以综合起来至少需要3个测试用例来达到语句覆盖的要求和判定覆盖的要求。
MC/DC覆盖:
由于是嵌套结构,满足第一个判定的测试用例为:(TT)(FT)(TF);第2个判定为T,F,,由于第一个判定为T后会涉及到第2个判定,所以综合起来需要4个测试用例,如下表:【问题3】
结合题干描述。