作者 | 李伟 上海控安安全测评部总监
来源 | 鉴源实验室
上篇文章我们介绍了等价类的分析和生产方法(ISO 26262中测试用例的得出方法-等价类的生成和分析),并在代码测试中对等价类进行了举例,本篇我们将对边界值分析和代码测试中边界值的测试用例设计进行介绍。
01
开始之前
等价类生成方法很大程度上避免重复测试提高了测试效率,在一类输入数据中取少量的该类数据,来代表整个类的所有数据进行测试。边界值则是因为人们在长时间的测试经验总结后发现,缺陷通常会在输入输出的边界上因处理上的疏忽而出现,所以针对数据在边界上的处理做测试逐渐成了一个必要的测试设计方法。
边界值法可以单独使用,通常情况下为了更全面地对输入数据的场景进行测试覆盖,特别是异常情况下的测试设计,边界值分析法会和等价类分析法配合使用。配合使用时先对输入情况进行等价类分析,然后在划分好的每个等价类中使用边界值分析,对类中的测试取值做选取。
02
边界值分析
2.1 边界条件的选择
我们依然以上一篇中代码的逻辑来展示边界值的选取设计,示例中逻辑如下:根据获得的传感器温度,在车内温度超过25摄氏度时打开空调,此时风扇启动吹冷风,空调压缩机启动,风扇中档风,返回“空调制冷启动”;在车内温度低于15摄氏度时打开空调,此时风扇启动吹热风,空调压缩机不启动,风扇中档风,返回“空调加热启动”;在温度大于等于15摄氏度,且小于等于25摄氏度时不做响应。
我们根据输入条件温度分为3个等价类,有效等价类集合是(25,+∞)、(-∞,15),无效等价类为[15,25]。边界值设计有效的边界值对应选取为26、14,无效等价类边界值设计为15、25。
在一些项目中,或者公司测试质量规范中会根据实际情况对边界值测试设计选取做要求,除了上述的基本设计选取,在每个边界上的取值数量和步进有要求,如次例中通常会额外要求选取边界值、次边界值、中间值、次中间值,连续取值的步进为整数1。按照这个要求测试用例设计选值为(-∞,15)选取-30、13、14,(25,+∞)选取26、27、40,无效等价类边界值设计为15、16、19、20、21、24、25。
上面举例中我们发现边界的取值没有什么特殊的地方,容易造成出问题的点可能在边界15和25取值时的处理,要看这两个值是否需要启动空调。我们重新举一个例子来给大家说明为什么边界值的地方容易出错。我们知道在Python语言中队列的分片时,第一个元素的下标是从0开始的,而-1表示倒数第一个元素,且分片时不包含右边界,如下队列:
① queue_test = [‘a’, ’b’, ’c’, ’d’, ’e’, ’f’];
② 队列中第一个元素应该是queue_test[0] = [‘a’];
③ 下标1表示的却是队列中的第2个元素即queue_test[1] = [‘b’];
④ 直接表示倒数第一个元素时为queue_test[-1] = [‘f’];
⑤ 而表示第1个至第3个元素时,右边界不是到2而是3,即queue_test[0:3] = [‘a’, ’b’, ’c’]。
通过这个例子我们就可以发现,在对类似的情况进行测试时,下标使用的选取测试我们需要对边界值进行严格测试,因为开发人员稍不注意就可能因为队列下标的使用失误,而造成队列中元素的操作出现缺陷。
2.2 隐藏的边界条件
上面示例中的等价类划分明确边界值比较明显,通常在功能的需求规格说明书中也会有明确的范围定义,然而还有一些边界值在一般的设计文档或者产品说明中不会明确表述出,但是软件测试时依然很有必要进行检查,这样的边界条件称为次边界条件或者内部边界条件。
如温度空调示例中,我们选取极限测试温度值用来做测试时,依据了通常情况下的常用温度值,即-30和40。当然也可以根据温度传感器的上下限进行取值,即温度传感器肯定有最低和最高设备探测温度极限值,也可以用来作为测试设计依据。
同样代码测试中对于变量取值的范围,我们可以从变量对应的实际数据含义设计范围取值,如温度,高度等,不能明确获知这些隐藏范围时,可以从定义数据类型取极限值,如无符号的int,有符号int等等。
2.3 边界值设计原则
使用边界值分析来设计测试用例时,需要遵循一些基本原则,我们引用全国计算机技术与软件专业技术资格软件评测师教程描述大体如下:
对边界值设计测试用例,应遵循以下几条原则:
① 如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据。
② 如果输入条件规定了值的个数,则用最大个数、最小个数、比最小个数少1、比最大个数多1的数作为测试数据。
③ 根据规格说明的每个输出条件,使用前面的原则①。
④ 根据规格说明的每个输出条件,应用前面的原则②。
⑤ 如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例。
⑥ 如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构边界上的值作为测试用例。
⑦ 选取边界值时每个边界上选取的值个数和选取的步进等信息要看实际项目要求。
⑧ 分析规格说明,找出其他可能的边界条件。
03
单元测试中的使用
边界值在代码测试中相对比较简单,根据形成对应的设计内容取边界值即可。
我们继续使用前一篇中的温度空调控制示例代码,如下:
代码定义了vehicle_temperature_inside 为车内的温度,实际中该值通常是调用温度传感器读值,本示例中简单将温度传感器接口读值写成了全局变量Sensor_temperature ;AC_switch 空调压缩机开关,0为关,1为开;Fan_swtch 风扇开关,0为关,1为开;Fan_speed 1为微风档,2为中风档,3为高风档;Fan_temp 风扇冷热0为冷风,1为热风。
代码要实现的逻辑是根据获得的传感器温度,在车内温度超过25摄氏度时打开空调,此时风扇启动吹冷风,空调压缩机启动,风扇中档风,返回“空调制冷启动”;在车内温度低于15摄氏度时打开空调,此时风扇启动吹热风,空调压缩机不启动,风扇中档风,返回“空调加热启动”。
分析代码得知有效等价类集合是(25,+∞)、(-∞,15),无效等价类为[15,25]。我们根据前文基本边界值设计vehicle_temperature_inside 参数输入值有效的边界值对应选取为26、14,测试用例如下:
vehicle_temperature_inside边界值设计无效等价类边界值设计为15、25,测试用例如下:
测试完成后检查控制流图如下,所有路径均已设计测试用例覆盖。
04
测试小结
在执行代码的测试设计中使用边界值分析方法有如下建议:
1. 白盒代码测试中参数边界值的取值可以其对应的设计数据内容要求中的实际取值范围,如设计温度、高度、速度等,无设计约束时可以参考常用取值的范围。
2. 使用等价类和边界值分析是代码测试和黑盒测试设计的基本要求。
3. 边界值分析法相对比较简单,边界值取值个数和中间值取值等根据实际情况需要取舍。
参考文献:
1. 全国计算机技术与软件专业技术资格考试指定用书 – 软件评测师教程.
审核编辑 黄宇
全部0条评论
快来发表一下你的评论吧 !