在 WinAMS 中,C0、C1、MC 和 DC 是代码覆盖率的不同标准,用于衡量测试用例对代码的执行覆盖程度。它们的主要区别在于覆盖的深度和细致程度。

 

1. C0(语句覆盖,Statement Coverage)

    •    定义:测试用例执行代码中所有可执行语句的覆盖程度。

    •    要求:确保每一行代码至少被执行一次。

    •    特点:

    •    最简单的覆盖标准。

    •    不关心逻辑条件和分支,只看语句是否被执行。

    •    适用场景:初步验证代码运行是否正常。

    •    示例:

 

if (a > 0) {

    b = 1;

} else {

    b = 2;

}

 

    •    如果只执行了 a > 0 的情况,C0 覆盖是达标的,即代码每行都被执行了。

 

2. C1(分支覆盖,Branch Coverage)

    •    定义:测试用例对代码中的每个分支(if、else 等)的覆盖程度。

    •    要求:确保每个分支条件的 true 和 false 情况都至少被验证一次。

    •    特点:

    •    比 C0 更严格。

    •    能发现一些条件未被覆盖的逻辑问题。

    •    适用场景:验证逻辑分支的正确性。

    •    示例:

 

if (a > 0) {

    b = 1;

} else {

    b = 2;

}

 

    •    需要测试两种情况:a > 0 和 a <= 0,确保 if 和 else 块都被执行。

 

3. MC(条件覆盖,Condition Coverage)

    •    定义:测试用例对逻辑表达式中每个条件(子表达式)的覆盖程度。

    •    要求:确保每个条件都单独测试 true 和 false。

    •    特点:

    •    针对复杂逻辑条件的覆盖。

    •    不要求覆盖条件组合的所有情况。

    •    适用场景:检查复杂条件中的每个部分是否单独影响结果。

    •    示例:

 

if (a > 0 && b < 0) {

    c = 1;

}

 

    •    需要测试:

    1.    a > 0 为 true 和 false。

    2.    b < 0 为 true 和 false。

    •    无需考虑条件组合,例如 a > 0 和 b < 0 同时为 true。

 

4. DC(判定覆盖,Decision Coverage)

    •    定义:测试用例对决策点(如 if 或 while 的整个逻辑条件表达式)的覆盖程度。

    •    要求:确保逻辑表达式的结果(true 和 false)都被验证。

    •    特点:

    •    比 MC 要求低,因为它不关注每个条件的独立性。

    •    只看决策结果,而不关注条件的具体贡献。

    •    适用场景:验证整个逻辑表达式的最终结果。

    •    示例:

 

if (a > 0 && b < 0) {

    c = 1;

}

 

    •    需要测试:

    1.    整体表达式为 true。

    2.    整体表达式为 false。

    •    不关心 a > 0 和 b < 0 的独立情况。

 

区别总结

 

933ca33c574640e599f98659f592e81e.png 

 

如何选择覆盖标准

    •    C0:适合基础验证,确认代码路径是否被执行。

    •    C1:适合验证逻辑分支,推荐作为代码测试的基本标准。

    •    MC:适合复杂条件逻辑,确保每个条件都被单独验证。

    •    DC:适合整体逻辑判断,不关心条件的细节。

 

在实际测试中,可以根据项目的需求选择合适的覆盖率标准。对于高可靠性系统(如航空、医疗等),通常需要 MC/DC(修正条件/判定覆盖)。

 

 

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐