何为 MC-DC 测试 ?
相信你肯定经常在很多高大上的会议或者培训中听说过,XXX说我们的软件都是经过100%MC/DC测试覆盖的?但是你是否真正的知道MC/DC到底是什么测试?它有什么好处?为什么我们对于它越来越看重?今天我们来一起看一看。
MC/DC 测试
MC/DC 是 Modified Condition/Decision Coverage (MC/DC) 的缩写,含义是修正条件判定覆盖.对它的定义为:
Condition —— a Boolean expression containing no Boolean operators:Decision —— a Boolean expression composed of conditions and zero or more Boolean operators:Modified Condition/Decision Coverage —— every point of entry and exit in the program has been invoked at least once,every condition in the program has taken all possible outcomes at least once,and each condition in a decision has been shown to independently affect a decision S outcome by varying just that condition while holding fixed all other possible conditions.
在MC/DC这种测试方法中,条件表示不含有布尔操作符号的布尔表达式;判定表示由条件和零或者很多布尔操作符号所组成的一个布尔表达式;而修正条件判定覆盖方法要求在一个程序中每一种输入输出至少得出现一次,在程序中的每一个条件必须产生所有可能的输出结果至少一次,并且每一个判定中的每一个条件必须能够独立影响一个判定的输出,即在其他条件不变的前提下仅改变这个条件的值,而使判定结果改变。
MC/DC是条件组合覆盖的子集。条件组合覆盖要求覆盖判定中所有条件取值的所有可能组合,需要大量的测试用例,实用性较差。MC/DC具有条件组合覆盖的优势,同时大幅减少用例数。满足MC/DC的用例数下界为条件数+1,上界为条件数的两倍,例如,判定中有三个条件,条件组合覆盖需要8个用例,而MC/DC需要的用例数为4至6个。如果判定中条件很多,用例数的差别将非常大,例如,判定中有10个条件,条件组合覆盖需要1024个用例,而MC/DC只需要11至20个用例。举个例子,如下代码,对于A&&(B||C)的MC/DC测试CASE如下:
1 int func(BOOL A, BOOL B, BOOL C)
2 {
3 if(A && (B || C))
4 return 1;
5 return 0;
6 }

MC-DC测试用例
对于条件A,用例1和用例2,A取值相反,B和C相同,判定结果分别为1和0;
对于条件B,用例1和用例3,B取值相反,A和C相同,判定结果分别为1和0;
对于条件C,用例3和用例4,C取值相反,A和B相同,判定结果分别为0和1。
由于MC/DC在寻找测试集时的要求比C/DC要严格,所以相比较下在测试时为了寻找出测试集合所花费的时间多,由此而引起的人力、物力、财力三重开销也会直接攀升,但是MC/DC测试错误的准确率却是特别地高,因此MC/DC适合那些大型的并且要求测试非常精确的软件测试。好在现在已经有很多的第三方工具可以帮助我们自动生成测试用例,比如Mathworks的Simulink design Verifier等。近年来MC/DC方法主要应用于大型的航空航天软件程序的测试上。不仅如此,在汽车行业中MC/DC也有着越来越广泛的运用。在功能安全ISO26262中对软件测试的方法中,强烈推荐使用MC/DC来对软件进行测试。
9.4.5 为了评估测试案例的完整性并证明没有非预期的功能,应确定在软件单元层面的要求覆盖率,同时应按照表 12 列出的度量对结构覆盖率进行测定。如果认为已实现的结构覆盖率不充分,应定义额外的测试案例或提供接受理由。

公众号:QCECUSJ

氨气“ 携手进步 共同成长 ”
测试 · 目录
上一篇 下一篇
白盒测试覆盖率 HIL测试介绍