一、问答题
1、阅读下列C程序,回答问题1至问题3,将解答填入答题纸的对应栏内。问题:1.1 (3分)
请针对上述C程序给出满足100%DC(判定覆盖)所需的逻辑条件。
问题:1.2 (7分)
请画出上述程序的控制流图,并计算其控制流图的环路复杂度V(G)。
问题:1.3 (5分)
请给出问题2中控制流图的线性无关路径
参考答案:1.1
x>0;x<=0
x==1;x!=1
y==7或者y==21;y!=7且y!=21
1.2
V(g)=5
1.3
线性无关路径是指包括一组以前没有处理的语句或条件的一条路径。从控制流图来看,一条线性无关路径是至少包含有一条在其他线性无关路径中从未有过的边的路径:
解析:
问题一的解析是,为了满足判定覆盖,每个判定点都需要有真值和假值的测试,所以给出了针对每个判定点的逻辑条件。
问题二的解析是,控制流图是一种描述程序控制流的图示方法,通过绘制控制流图可以更好地理解程序的流程结构。环路复杂度V(G)的计算公式是边数减去结点数再加二,或者等于判定数加一。根据这个公式和程序的结构,计算出环路复杂度V(G)为5。
问题三的解析是,线性无关路径是包含一组以前没有处理的语句或条件的一条路径,这些路径需要至少包含一条在其他路径中从未出现过的边。具体的线性无关路径需要根据控制流图来确定,因为控制流图详细展示了程序的流程结构。
2、阅读下列说明,回答问题1至问题2,将解答填入答题纸的对应栏内。
【说明】
某航空公司的会员卡分为普卡、银卡、金卡和白金卡4个级别,会员每次搭乘该航空公司航班均可能获得积分,积分规则如下表所示。
此外银卡及以上级别会员有额外积分奖励,奖励规则如下表所示。
公司开发了一个程序来计算会员每次搭乘航班累积的积分,程序的输入包括会员的级别B、舱位代码C和飞行公里数K,程序的输出为本次积分S。其中B和C字母其大小写不敏感,K为正整数,S为整数(小数部分四舍五入)。
问题1:(7分)采用等价类划分法对该程序进程测试,等价类表如下所示,请补充空(1)-(7)
问题2:(13分)根据以上等价类表设计的测试用例,如下表所示,请补充(1)-(13)。
参考答案:2.1
1、P 2、Z/C 3、A/D/I/Y 4、正整数5、非FSGP的字母 6、非规定仓位的字母 7、非正整数
2.2
1:1000 2:500 3:3,7,11 4:R/B/H/K/L/M/W5:F 6:0 7:9 8:GG9:3 10:XYZ;(非规定舱位的字母) 11:300.3 12:N/A 13:-200/0
解析:
按照等价类的定义和划分原则进行解析。\n\n问题二:答案基于问题一的等价类划分结果进行测试用例设计。\n\n对于每个有效等价类,我们需要设计至少一个测试用例来验证程序在有效输入下的表现是否符合预期。\n\n对于每个无效等价类,我们也需要设计至少一个测试用例来验证程序在无效输入下的表现是否能够正确处理异常情况。\n\n比如对于会员级别B的有效等价类测试,我们可以设计普卡会员搭乘指定舱位并飞行一定距离的测试用例;对于无效等价类测试,我们可以设计其他字母代替会员级别的测试用例来验证程序的异常处理能力。\n\n同样地,对于舱位代码C和飞行公里数K的等价类测试也是按照这个原则进行设计。\n\n另外还需要注意一些特殊情况的设计,比如零积分情况(舱位代码为空或者飞行里程数为零)、额外积分奖励规则的应用等。", “问题二”: "
3、阅读下列说明,回答问题1至问题4,将解答填入答题纸的对应栏内。【说明】
某证券交易所为了方便提供证券交易服务,欲开发一个基于Web的证券交易平台。其主要功能包括客户开户,记录查询、存取款、股票交易等。客户信息包括姓名、Email(必填且唯一)、地址等;股票交易信息包括股票代码(6位数字编码的字符串)、交易数量(100的整数倍)、买/卖价格(单位:元,精确到分)。
系统要支持:
(1)在特定时朝内3000个用户并发时,主要功能的处理能力至少要达到128个请求/秒,平均数据量2KB/请求;
(2)页面中采用表单实现客户信息、交易信息等的提交与交互,系统前端采用HTML5实现。
问题:3.1 (5分)
在对此平台进行非功能测试时,需要测试哪些方面?
问题:3.2 (6分)
在满足系统要支持的(1)时,计算系统的通信吞吐量。
问题:3.3 (3分)
表单输入测试需要测试哪几个方面?
问题:3.4 (6分)
(1)针对股票代码:111111、数量:10万、当前价格:6.00,设计4个股票交易的测试输入。
(2)设计2个客户开户的测试输入,以测试是否存在XSS、SQL注入。
参考答案:
3.1
性能测试、安全性测试、兼容性测试、易用性测试。
3.2
3000*128*2KB=750MB
3.3
每个字段的验证
字段的缺省值
表单中的输入
3.4
(1)
1、正确输入:111111,10万,6.00;
2、代码错误:1212,10万,6.00;
3、数量错误:111111,0,6.00;
4、价格错误: 111111,10万,0;
(2)1:姓名:张三 or 1=1-- Email:q123@q123.com 地址:xxxxxxx
2:姓名:张三 Email:q123@q123.com 地址:xxxxxxx<script>alert(‘测试信息’)</script>
解析:(1)本题中有3条件,应该设计一个测试用例覆盖3个有效等价类;然后针对每个条件的无效等价类各设计一个测试用例。(2)针对客户信息包括姓名、Email(必填且唯一)、地址等输入,任意挑选一个输入文本框,在保障SQL能运行的前提下,输入带有注入式攻击和XSS攻击的特征内容即可。
解析:
在对基于Web的证券交易平台进行非功能测试时,需要测试以下几个方面:
- 性能测试:测试系统的响应时间和吞吐量,确保系统在高并发和大数据量的情况下能够稳定运行。
- 安全性测试:测试系统的安全性能,包括用户密码的加密存储、数据传输的安全性、防止SQL注入和跨站脚本攻击(XSS)等。
- 兼容性测试:测试系统在不同浏览器、不同操作系统、不同网络环境下的兼容性,确保用户在不同平台上都能正常使用。
- 易用性测试:测试系统的用户界面是否友好、操作是否便捷,用户能否快速上手。
问题3.2:
4、阅读下列说明,回答问题1至问题5,将解答写在答题纸的对应栏内。
【说明】
图4-1是银行卡应用的部分类图,图中属性和操作前的“+”和“-”分别表示公有成员和私有成员。银行卡Account有两种类型,借记卡SavingAccount和信用卡CreditAccount 。
图4-1银行卡应用的部分类图
(1)借记卡和信用卡都有卡号account Number和余额balance两个属性。借记卡的余额是正常余额,信用卡的余额是目前未还的金额,如果没有未还的金额,则为0;有开户set Up、取款withdraw、查询余额get Balance和销户close四个方法。借记卡取钱时,要求取钱金额不能超过余额;而信用卡取钱金额不能超过信用额度,因此需要在子类中实现该方法。
(2)借记卡可以存钱deposit。
(3)信用卡有信用额度creditLimit属性,可以查询信用额度getCreditLimit、修改信用额度updateCreditLimit和还款retumCredit。现拟采用面向对象的方法进行测试。
问题:4.1 (3分)
面向对象单元测试的主要对象是什么?
问题:4.2 (4分)
在继承关系上,若某方法在测试父类时已经测试过,那么在什么情况下在子类中也需要测试?
问题:4.3 (4分)
要测试方法deposit()时,还需要调用什么方法?给出测试序列。
问题:4.4 (6分)
方法withdraw在基类Account中定义,但在两个子类中有不同的实现。这是面向对象的什么机制?这种情况在测试时如何进行?
问题:4.5 (3分)
给出类SavingAccount的最小测试序列。
参考答案:4.1
是针对程序的函数、过程或完成某以特定功能的程序块。
4.2
1、继承类的成员函数在子类中做了改动
2、成员函数调用了改动过的成员函数的部分
4.3
getBalance()
先测试getBalance()再测试deposit( )
4.4
多态。
只需要在原有的测试分析和基础上增加对测试用例中输入数据的类型的考虑;先测试基类,然后再分别依据输入数据设计不同的测试用例。
4.5
先测试Account类,然后测试SavingAccount类。
解析:
问题4.1的答案是面向对象单元测试的主要对象是类中的方法和操作。这是因为单元测试中主要针对程序的最小可测试单元进行测试,而在面向对象编程中,类和其中的方法、操作是基本的可测试单元。
问题4.2的答案是在继承关系上,如果子类中修改了从父类继承来的方法或者该方法在子类中调用了新的方法或修改了已有的方法,那么在测试父类时已经测试过的方法在子类中也需要进行测试,以确保子类的实现没有错误。
问题4.3的答案是测试deposit()方法时,还需要调用getBalance()方法。因为存款操作需要知道账户的当前余额,以确保存款后余额正确。因此,测试序列为先测试getBalance(),确认账户的余额信息能够正确获取,然后测试deposit(),验证存款功能是否正常。
问题4.4的答案是方法withdraw在基类Account中定义,但在两个子类中有不同的实现,这是多态机制。在测试时,需要分别测试基类Account和两个子类中的withdraw方法,并根据不同类型的账户设计不同的测试用例。对于基类,测试通用的逻辑和正确性;对于子类,测试其特有的业务规则和逻辑处理。
问题4.5的答案是对类SavingAccount的最小测试序列是先测试其父类Account的相关方法,如accountNumber、balance、setUp、close等,以确保继承的功能正常。然后针对SavingAccount类特有的方法进行测试,如deposit方法,验证存款功能在SavingAccount类中的实现是否正确。
5、阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。【说明】
某嵌入式控劁软件通过采集传感器数值来计算输出控制率,为了提高数据采集的可靠性,使用三余度采集方法进行三个通道的数据采集。
1.三余度通道数据采集及处理要求:
(1)三通道采集值In_U[0]、In_U[1]、In_U[2]的正常范围为[一3.0,3.O]V,且任意两通道间差值不大于0.5V;
(2)如果某通道采集值超过正常范围或者因为通道采集值造成与其它通道差值大于0.5V,则该通道数据不满足要求;
(3)如果三通道值均满足要求,则取三通道中差值较小的两通道数据的平均值;
(4)如果仅有一个通道数据不满足采集要求,取满足要求的两个通道数据的平均值;
(5)如果多于一个通道数据不满足采集要求,取安全值0V。
2.对采集数值计算控制率的具体处理算法如下:
(1)如果依据采集数据计算的控制率C1与目前实际控制率C0差值不大于0.01则使用本周期计算控制率C1进行输出控制,否则使用目前实际控制率C0输出控制.不上报传感器故障;
(2)如果连续3个周期计算的控制率C1与目前实际控制率C0差值大于0.01,则上报传感器三级故障,连续超差计数清零,使用目前实际控制率C0输出控制;如果已经连续3个周期控制率超差,并上报三级故障,但第4个周期计算的控制率C1与目前实际控制率C0差值不大于0.01,则清除三级故障上报;
(3)如果累计大于等于10个周期计算的控制率C1与目前实际控制率C0差值大于0.01,则上报传感器二级故障,使用目前实际控制率输出控制;
(4)如果累计大于等于100个周期计算的控制率C1与目前实际控制率C0差大于0.01,则上报传感器一级故障,并清除二级故障,并切断输出控制(输出安全值0)
(5)如果低级故障和高级故障同时发生,则按高级故障处理。
问题:5.1 (9分)
为了测试采集算法,在不考虑测量误差的情况下,设计了表5-1所示的测试用例,请填写该表中的空(1)~(6)。
问题:5.2 (9分)
为了测试控制率计算算法,在不考虑测量误差的情况下,设计了表5-2所示的用例,请完善其中的空(1)~(6)。
问题:5.3 (2分)
测试人员在设计测试用例进行采集算法测试时,发现本项目的三余度采集值的具体处理算法存在l处缺陷,请指出此处缺陷。
参考答案:5.1
1:1.9 2:1.55 3:2.7 4:-2.90
5:0 6:0
5.2
1:1.454 2:2 3:9 4:二级故障 5:0 6:一级故障
5.3
缺陷:当三个通道的数据只差不超过0.5,而且两两之间的差值有两个相等时,存在取值问题。如:测试数据为:2.0 2.2 2.4 这时,存在取值问题,是取2.1还是2.3?
解析:
分析正确,该缺陷确实存在于三余度采集值的处理算法中。当多个通道的数据差值很小且存在相等差值时,算法没有明确规定应如何选择两个通道来计算平均值,这可能导致结果的不确定性和错误。
喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!