在ISO 26262-6-2018 标准规范中给出了单元、集成、系统测试各阶段的建议测试使用方法,设计生成测试用例的建议方法包括需求分析、等价类的生成和分析、边界值分析、基于已有经验和知识的错误推测等等,从本篇开始我们对测试用例设计生成的方法进行介绍。
01开始于需求分析
无论使用哪种方法设计测试用例,首先都需要对需求进行分析,根据需求规格说明书逐条对需求进行分解,需求的分解必须要确保能够完整地覆盖整条需求被全面的测试,同时需求分解的粗细程度需要有恰当的颗粒度。
需求分解的步骤通常分为两步,首先对一条需求设计中的功能抽象,用功能抽象法把单条需求分解为多个功能单元,即把单条复杂的需求分解为多个子单元需求;其次针对已分解的子功能单元或子单元需求使用数据抽象方法,设计测试每个功能单元的数据。
功能抽象中程序需求被看成一种抽象的功能层次,每个层次可标识被测试的功能,层次结构中的某一功能有由其下一层功能定义。按照功能层次进行分解,可以得到众多的最低层次的子功能,以这些子功能为对象,进行测试用例设计。
数据抽象中,数据结构可以由抽象数据类型的层次图来描述,每个抽象数据类型有其取值集合。程序的每一个输入和输出量的取值集合用数据抽象来描述。
02等价类的分析和划分
等价类的分析和划分方法在很多文档中均可以查询到,我们引用全国计算机技术与软件专业技术资格软件评测师教程中的定义。等价类划分的办法是把程序的输入域划分成若干部分,然后从每个部分中选取少数代表性数据作为测试用例。每一类代表性数据在测试中的作用等价于这一类中的其他值。
使用等价类划分方法时,应同时包括有效等价类和无效等价类,有效等价类是设计中合理,正确或有效用的输入集,无效等价类是设计中不合理,不正确或失效的输入集。
根据遇到的使用场景不同,在不同的场景情况下通常等价类划分按照下面的情况进行:
(1)在输入条件规定了取值范围或值的个数的情况下,可以确立一个有效等价类和两个无效等价类。
(2)在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,可以确立一个有效等价类和一个无效等价类。
(3)在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类。
(4)在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类。
(5)在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。
(6)在确知已划分的等价类中,各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步地划分为更小的等价类。
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摄氏度时打开空调,此时风扇启动吹热风,空调压缩机不启动,风扇中档风,返回“空调加热启动”。
从功能需求描述和代码我们可以得知,空调控制的逻辑结果均是基于车内温度这个输入指标来得出的,参数vehicle_temperature_inside > 25时启动冷空调,vehicle_temperature_inside < 15时启动热空调。这里有两个有效的取值范围,根据上一章节我们可以得出适用于第4种情况,有2个有效等价类,和1个无效等价类。有效等价类集合是(25,+∞)、(-∞,15),无效等价类为[15,25]。
有效等价类中取vehicle_temperature_inside 参数输入值26时,测试用例如下:
有效等价类中取vehicle_temperature_inside 参数输入值0时,测试用例如下:
无效等价类取值25测试用例如下:
测试完成后检查控制流图如下,所有路径均已设计测试用例覆盖。
04测试小结
在执行代码的测试设计中使用等价类方法有如下建议:
1. 等价类生成与分析不仅仅在黑盒测试设计中使用,在白盒代码测试中也是常见的测试方法。
2. 代码测试用例设计时无效等价类取值的设计,取值通常跟有效等价类值是数据类型相同,但范围限定在无效范围内,即测试的形参是整数型,不管有效等价类或是无效等价类均是整数型,不存在有效等价类是整数型,无效等价类是浮点数型。
3. 代码设计的等价类和边界值可以结合使用,也推荐结合使用。
4. 功能安全等级的不同和测试设计时对等价类边界值取值数量的要求需要根据实际项目情况来,通常安全等级越高,要求取值测试数量就多。
作者 |李伟 上海控安安全测评部总监
来源 |鉴源实验室
参考文献:
1. 全国计算机技术与软件专业技术资格考试指定用书 – 软件评测师教程.