深入浅出MC/DC

2022-01-11  本文已影响0人  迪捷软件

概述:

随着计算机行业的发展,嵌入式系统在通讯、网络、工控、医疗、电子等领域都发挥着越来越重要的作用。尤其是在一些安全关键领域,如航空航天等,软件一旦出现故障,可能会产生灾难性的后果。这就要求在软件投入使用前,必须对其进行严格的测试、确认和验证。

测试覆盖率是在嵌入式软件测试中非常重要的一部分。它是一种测试技术指标,用来表明我们的测试用例是否真正完全覆盖了程序执行的各种可能以及运行这些测试用例时执行了多少代码块。通过覆盖率统计分析,得出软件执行的覆盖情况,可以查看软件中有哪些函数未执行,函数中哪些分支未执行。通过调整测试用例使尽可能多的函数和函数分支得到测试,同时可以分析代码未执行的原因,以便及时更正代码,从而大大提高了软件的稳定性。

覆盖率可以分为函数覆盖率、语句覆盖率、分支覆盖率、MC/DC(Modified Condition/Decision Coverage,修正条件判定覆盖率)等。每一种覆盖率测试的力度和精确性都不一样。比如语句覆盖率达到100%,但是分支覆盖率可能会只有50%,也就意味着分支覆盖率能测出软件问题的概率会更大。在众多覆盖率种类中,MC/DC是最高效的覆盖率。它使用的测试用例最少,测试力度最大。所以在航空安全领域中,根据DO-178C(适航符合性方法)中描述:A级软件必须独立开展MC/DC测试。

▲DO-178C《机载系统合格审定过程中的软件考虑》对软件等级的描述

定义

接下来我们看一下MC/DC的定义。在讲MC/DC之前,我们首先要明确C(Condition)和D(Decision)的概念:

条件(Condition):除了一元运算符(NOT,“否”)之外,不含有任何布尔运算符(如&&、||)的布尔表达式。比如:a>0;b!=0等等,这些表达式不包含布尔运算符,但是他们属于布尔表达式(结果为true或false)。

判定(Decision):由条件和布尔运算符组成的布尔表达式。如果一个条件在一个判定中出现不止一次,则每次出现都是一个不同的条件。我们将A,B视为条件,那么A&&B或A||B就是所谓的判定。

根据DO-178(适航符合性方法)中对MC/DC的描述:要求在一个程序中每一种输入输出至少出现一次,每一个判定中的每一个条件必须产生所有输出结果至少一次,每一个判定必须产生所有可能的输出结果至少一次,并且每一个判定中的每一个条件必须能够独立影响一个判定的结果。一个条件可以通过以下方式独立地影响判定的结果:

(1)改变该条件,同时保持其他条件不变,

(2)改变该条件,同时保持其他影响结果的条件不变。

可能上述定义有点抽象,我们通过A||(B&&C)这个例子来明确概念:

▲A||(B&&C)判定所有的测试用例情况

每一种输入输出至少出现一次,也就意味A||(B&&C)这个判定必须测试用例执行到。

每一个判定中的每一个条件必须产生所有输出结果至少一次:A,B,C三个条件都必须产生true和false至少一次。如执行了测试用例1和8(A=F,B=F,C=F与A=T,B=T,C=T),那么这个条件就满足。

每一个判定必须产生所有可能的输出结果至少一次:A||(B&&C)这个判定最终的结果至少有一次true,至少有一次false。如执行了测试用例4和5(A=F,B=T,C=T与A=T,B=F,C=F),满足上一条件,但是这个两个测试用例的最终结果都是false,那么就不满足这个条件。

每一个判定中的每一个条件必须能够独立影响一个判定的结果:该描述中强调了条件需要独立影响,为了能找到某一个条件的独立影响性,必须要找到两个对应的测试用例,才算符合独立影响。如测试用例1和5(A=F,B=F,C=F与A=T,B=F,C=F),这两个测试用例只改变了条件A,同时保持其他条件不变,但是最终的结果不同,这就是独立影响的意思。

我们再深挖一下定义,MC/DC标准其实就是想要找到判定中每个条件的独立影响性,其实也就意味着我们需要每个条件都找到一对符合独立影响的测试用例对(Independent Pair)。以下是A||(B&&C)每个测试用例的独立影响对的全部情况。

▲A||(B&&C)独立影响对(Independent Pair)的全部情况

如上图,测试用例1和5组成了条件A的独立影响对;测试用例2和4组成了条件B的独立影响对。如果测试用例在构成独立影响对时可以重复使用,如测试用例4,既能与测试用例2构成条件B的独立影响对,又能与测试用例3构成条件C的独立影响对。那么,在理论上,最少只需要n+1(n为条件数),最多需要2n个测试用例即可满足MC/DC的标准。如测试用例2、3、4和7这四个测试用例就可以满足MC/DC标准。

计算公式

由于MC/DC是判定覆盖率的一个标准,所以计算MC/DC就是计算满足MC/DC标准的判定覆盖率。

并且在未满足MC/DC标准的判定(Decision)中,可以计算有多少条件的测试对是符合独立影响的:

总结

目前为止,我们已经了解了MC/DC的定义,MC/DC就是需要找出每个判定中每个条件的独立影响对。所以我们在编写测试用例时也需要多思考,怎么样的测试用例是会满足的MC/DC标准的。

由迪捷软件自主研发的SkyEye全数字实时仿真软件是基于可视化建模的硬件行为级仿真平台,支持MC/DC覆盖率统计功能。只需在SkyEye全数字实时仿真软件中导入需要被验证、分析的二进制程序,并在相应的虚拟硬件平台上运行,再使用MC/DC覆盖率统计功能,即可得到MC/DC覆盖率分析的结果。根据覆盖率分析结果对二进制程序进行分析、校正,进而提高程序的可靠性和稳定性。

上一篇下一篇

猜你喜欢

热点阅读