修改条件/判断覆盖(Modified condition/decisioncoverage)简称MC/DC,是用在飞航安全软件文件DO-178B的白箱测试方式,可以判断A等级的软件是否有经过适当的软件测试。
简介
依照修改条件/判断覆盖的准则,测试过程中以下条件至少需成立一次。
每一个判断的所有可能结果都出现过;
每一个判断中所有条件的所有可能结果都出现过;
每一个进入点及结束点都执行过;
判断中每一个条件都可以独立的影响判断的结果。
DO-178B中指定会影响飞机起飞及降落安全性的软件(A等级软件),需满足修改条件/判断覆盖的
代码覆盖测试。
定义
说明
条件/判断覆盖
考虑以下的C++程式
修改条件/判断覆盖
修改条件/判断覆盖的准则比条件/判断覆盖要严格,除上述准则外,还需要证明每一个条件都可以独立影响判断的结果,是指当一判断中固定其他条件,只改变一条件时,结果会随之改变。
考虑以下的C++程式
使用以下的测试,第一个测试会使判断成立,第二个测试会使判断不成立,判断的所有可能结果都至少出现一次,判断的每一个条件的所有可能结果也至少出现一次,满足条件/判断覆盖的准则。
上述的第一个测试中,若将第三个数值由1改为0,判断由成立改为不成立,因此第三个数值的1可以独立影响判断的结果,但若将第一个数值改为0,判断仍然成立,因此第一个引数无法独立影响判断的结果,同理可证第二个数值也无法独立影响判断的结果。
而第二个测试中,无论哪一个数值由0改为1,判断都不成立,因此三个数值的0都无法独立影响判断的结果。上述的测试无法满足修改条件/判断覆盖的准则。
若要满足修改条件/判断覆盖的准则,需使用以下的测试:
测试中的粗体数值表示此数值会影响输出的结果,每一个数值(对应程式中的条件)都至少有二次机会影响输出的结果,而且其中至少有一次使条件成立,至少也有一次使条件不成立。
修改条件/判断覆盖的准则需证明每个条件都可以独立影响判断的结果,此测试方式会比条件/判断覆盖要严格,也可以找到较多的错误。但考虑测试数量,条件/判断覆盖只需二项测试,而修改条件/判断覆盖需要四项测试,后者的测试成本也比前者要高。