【软考软件评测师】2019年下案例分析历年真题
2019下案例分析历年真题
2019下案例分析历年真题第一题(20分)
阅读下列C程序,回答问题1至问题3。
【C程序】
【问题1】(6分)
请针对上述C程序给出满足100%DC (判定覆盖)所需的逻辑条件。
【问题2】 (6分)
请画出上述程序的控制流图,并计算其控制流图的环路复杂度v(G)。
【问题3】(8分)
请给出问题2中控制流图的线性无关路径。
【问题1我的解答】
buf_len>512 真,假
buf_len0 真,假
i<total_byte真,假
buf_c0 真,假
buf_c[i]>14;i>=32 真,假
满足100%DC (判定覆盖)所需的逻辑条件為10;
【问题1标准答案】
判定覆盖:设计足够的测试用例,使得使程序中的每个判定至少都获得一次“真值”或“假值”。又称分支覆盖:使程序中的每一个取“真”分支和取“假”分支至少经历一次
本题中涉及到判定的点的条件项分别为:buf_len>512;buf_len0;i<total_bytes;buf_c[i]’\0’;buf_c[i]<7||buf_c[i]>14;i>=32;
buf_len>512;buf_len<=512
buf_len0;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标准答案】
【问题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…)
2019下案例分析历年真题第二题(20分)
阅读下列说明,回答问题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)负整数✔️
【问题1标准答案】
1)非负整数
2)4
3)0
4)负整数
【问题2我的解答】
1)1,2,3,8✔️
2)0✔️
3)>=20✔️
4)非负整数15000✔️
5)10✔️
6)7000✔️
7)1,2,3,7✔️
8)非整数✔️
9)N/A✔️
【问题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都符合特定的要求,无法很好的体现出条件之间的制约情况,比如点数符合对应档次要求,但乘机次数未达到要求的情况;另外测试时没有对手机端进行测试。
2019下案例分析历年真题第三题(20分)
阅读下列说明,回答问题1至问题3。
【说明】
某公司欲开发一款二手车物流系统,以有效提升物流成交效率。该系统的主要功能是:
(1) 订单管理:帮买顾问看到有买车线索后,会打电话询问买家是不是需要物流,若需要,帮买顾问就将这个线索发起为订单,帮助买家来找承运商。
(2)线路管理与推荐:对承运商的线路进行管理。根据运输方式的不同,线路分为三种,即包车线路、固定线路、竞价体系,其中包车线路和固定线路是合约制。接入订单系统会根据订单的内容选择合适的承运商。即: 有新订单时,若符合固定线路和包车线路,系统自动分配给合约承运商;若不符合合约,系统将订单需求信息推送给各承运商,承运商对订单进行竞拍出价。
(3)合约管理:根据公司与承运商确定的合约,对合约内容进行设置。
(4)基础信息管理:包括帮买顾问(这部分缺失)
【问题1】(6分)
系统前端APP需支持不同品牌的不同系统平台,设计兼容性测试矩阵,以对系统的兼容性进行测试。
【问题2】(8分)
承运商进行竞价时,前端需提交竞拍价格(整数,单位:元)数和可接受浮动比例(整数),针对这一功能设计4个测试用例。
【问题3】(6分)
承运商竞拍部分的性能要求最高。采用性能测试工具在以系统竞拍功能为主进行性能测试时,采用Apdex (应用性能指数)对用户使用该系统的性能满意度进行度量,系统需要满足Apdex指数为0.9以上。测试数据如表3-1所示,请计算本系统的Apdex指数,并说明本系统是否达到要求。
【问题1我的解答】
系统平台:wondows7,Windows8,Windows10,Windows11,iOS,Andard OS,鸿蒙OS
品牌:微软,华为,苹果
【问题1标准答案】
题干中明确要求APP是针对不同品牌的不同系统,也就是一个品牌会涉及多种不同的系统,同时需要测试多种品牌,所以在设计兼容矩阵的时候,应该为
【问题2我的解答】
有效整数竞拍价格(整数)+ 有效可接受浮动比例(整数)
有效整数竞拍价格(整数)+ 无效可接受浮动比例(整数)
无效整数竞拍价格(整数)+ 无效可接受浮动比例(整数)
无效整数竞拍价格(整数)+ 有效可接受浮动比例(整数)
【问题2标准答案】
要求设计 竞拍价(整数)、可接受的浮动比例(整数)设计4个测试用例,
50000,1(功能正常)
50000.1,1(竞拍价输入异常)
50000,1.1(可接受的浮动比例异常)
50000,–(SQL注入式攻击,或Xss攻击测试用例任选一个)
【问题3我的解答】
(185+20*4)/ 2 = 132.5
不满足
【问题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 所以符合要求
2019下案例分析历年真题第四题(20分)
阅读下列说明,回答问题1至问题3。
【说明】
某汽车维修公司的工时计算模块每天定时根据系统登记的维修信息统计维修工的工时工资。维修工分为学徒、普通维修工和高级维修工三种,三种维修工有不同的时薪标准。
图4-1是该模块的类图,图中属性和操作前的“+”、“#”和“-”分别表示公有成员、保护成员和私有成员。
图4-1类图
其中:
(1) 类Engineer表示普通维修工。
(2)类studentEngineer和seniorEngineer都重新实现了类Engineer的方法calReward () 。
(3)方法calReward () 根据每个维修工每天的工时数(workTime)、时薪(hourSalary)来计算当天的工时工资。
(4)方法getReward () 调用方法calReward () 获取工时工资并打印显示。
(5) 类System中的方法statReward () 中首先调用了该类的方法load (),获取本系统工程师列表,然后调用了类Engineer中的方法calReward () 。现拟采用面向对象的方法进行测试。
【问题1】(4分)
(1)图4-1所示的类图中,类System和Engineer之间是什么关系?
(2)类seniorEngineer重新实现了类Engineer的方法calReward (), 这是面向对象的什么机制?
【问题2】 (6分)
类seniorEngineer中的方法calReward () 和类studentEngineer中的方法getReward ()是否需要重新测试?
【问题3】 (10分)
(1)请结合题干说明中的描述,给出测试类Engineer方法calReward () 时的测试序列。
(2)请给出图4-1中各个类的测试顺序。
(3)从面向对象特性考虑,测试类System中方法statReward () 时应注意什么?
【问题1我的解答】
1)两者是关联聚合关系✔️
2)是重载的关系✖️
【问题1标准答案】
1)关联关系
2)多态机制
【问题2我的解答】
1)类seniorEngineer中的方法calReward () 需要重新测试✔️
2)类studentEngineer中的方法getReward 不需要重新测试✖️
【问题2标准答案】
1)类seniorEngineer中的方法calReward () 需要重新测试
2)类studentEngineer中的方法getReward 调用了改动过的成员函数,需要重新测试。
对父类中已经测试过的成员函数,有两种情况需要在子类中重新测试:
(1)继承的成员函数在子类中做了改动;(2)成员函数调用了改动过的成员函数的部分。
本题中seniorEngineer中的方法calReWard()重写了,需要重新测试;
题干中(说明4)明确了getReward()方法要调用calReward()方法,而calReward()是重写了的,所以studentEngineer中的方法getReward()属于调用了改动过的成员函数,需要重新测试
【问题3我的解答】
1)调用类System中的statReward()
调用类System中的load()
调用Engineer中的同名构造函数,以及setWorkTime()方法
调用Engineer中的calReward方法
2)先测试studentEngineer类,然后测试seniorEngineer类,继承类测试完再测试基类:Engineer类;最后测试System类。
3)测试类System中方法statReward () 时应保证Engineer列表已经存在。
【问题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()方法设计测试用例进行测试
2019下案例分析历年真题第五题(20分)
阅读下列说明,回答问题1至问题3。
【说明】
在某嵌入式智能服务机器人的软件设计中,为了更好地记录机器人的个体信息和机器人的工作信息,为智能服务机器人设计了信息数据库。数据库主要完成收集智能服务机器人反馈信息的作用,记录所有机器人的所有工作记录,以方便使用者对机器人的管理和对机器人状态的掌握,并且在机器人发生运行故障时,可以根据数据库存储的信息分析产生故障的原因。数据库收集智能服务机器人反馈信息的流程如下:
服务器端接收反馈信息。
(1)第一次解析判断反馈信息类型是否正确,若正确执行(2),否则执行(3);
(2)第二次解析判断反馈信息内容是否正确,若正确执行(4),否则执行(3);
(3)调用错误信息处理函数后执行
(4)将反馈信息存入数据库。
【问题1】(6分)
在本软件测试过程中,测试人员为了设计测试用例,根据题目中的说明,画出了机器人反馈信息收集软件流程图,如图5.1所示。
图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.信息存入数据库✔️
【问题1标准答案】
依据题干说明(1)(2)(3)(4)的描述,(1)处应该为:判定反馈内容是否正确;(2)处应该为:执行错误信息处理函数;(3)信息存入数据库
【问题2我的解答】
1)语句覆盖:3✔️
2)条件覆盖:4✖️
3)4✔️
【问题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我的解答】
1)报告反馈类型不同✔️
2)报告反馈内容不同✔️
3)错误的✔️
4)经典类型3✔️
【问题3标准答案】
1)报告信息类型不正确
2)报告信息内容不正确
3)错误
4)经典类型3