在汽车行业有一个比较重要的国际标准叫做ISO 26262(功能安全)。本文就从笔者所接触过的关于单元测试的相关内容,分享一些单元测试常用方法。
1.等价类划分 等价类划分一般比较常用,例如:
上述程序中,a的取值以5为界限,大于5的可以当作一个等价类,小于等于5的又可以当作一个等价类。
当然等价类的划分也是分有效和无效的,比如a的数据类型为int型,如果a取值为负数,那么这个取值就是无效等价类,在16位编译器中,如果a的取值超过2^17 - 1,这个取值也是无效等价类;那么相反的,在int正常取值范围内的可以被划分为有效等价类。
2.边界值
一般边界值都是要测试的,比较容易出问题。
3.测试用例编写方法
(1)决策表分析法
这种方法一般首先是罗列出所有可能的情况,然后可以根据实际情况删去重复项。例如:
(2)状态图分析法
这个方法就是把各个状态罗列出来,然后根据状态图状态跳转,画出下一个状态,一级一级画下去直到结束,画出来的图每个分支就是一个测试用例。
(3)MC/DC准则
MC/DC(修订的条件/判定覆盖)(Modified Condition/Decision Coverage),是一种常用的软件结构覆盖率测试准则,通俗来说就是,每个条件要取一次真一次假,每个条件要独立影响一次结果。由于文字表述不太好理解,下面举例子(以下所有例子都以1和0代表条件的真假):
上图中的分析是MC/DC准则的基础,有了上面两种情况,就可以写出任意条件组合的测试用例,下面例举一个稍微复杂的例子:
总结:
软件测试中,之所以用到这些方法,是因为实际情况是很复杂的,测试用例可能是无穷无尽的,怎么通过有限次的测试达到测试覆盖率的最大化,就需要用到上述方法。但是如果输入条件很多的话,人工去设计测试用例可能就很困难,需要借助到工具,笔者曾经在MBD开发中用过Matlab中Simulink Design Verifier工具可以自动生成测试覆盖率百分之百的测试用例(前提是代码设计没有缺陷,符合静态测试规则)。以上内容是笔者自己的理解,水平有限,如有错误欢迎指正。