软件构造代码覆盖率

  • 定义
  • 常见的代码覆盖方式:
  • 代码覆盖的意义


#前言
由于在实验二的过程中间需要测试代码的覆盖率,本文将简要的介绍代码覆盖率的相关的知识。

定义

代码覆盖(code coverage).是软件测试中的一种度量,用来描述程序中源代码被测试的比例和程度。所得的比例称为代码覆盖率。在做单元测试的时候,代码覆盖率常常备用来作为衡量测试好坏的指标,甚至用代码覆盖率来考核测试任务的完成情况。
代码覆盖率= 代码覆盖程度,一种度量的方式

常见的代码覆盖方式:

语句覆盖:
语句覆盖即行覆盖,是一种最常见的覆盖的方式,就是度量被测试代码中是否每一个可执行的语句都被执行了。
但是这种语句覆盖也有着不少的弊端,比如单独一行的{ }也常常被统计进去。只考虑覆盖代码中的执行语句,却不考虑各种分支的组合。并且真正换来的测试效果不明晰,很难发现代码中存在的bug.
判定覆盖:
又称作分支覆盖,所有的边界进行覆盖,它**度量程序中间的每一个分支是否都被测试到。设计足够的测试用例,使得程序中间的每一个判定至少都获得一次真值或者假值。
条件覆盖:
度量判定中的每一个子表达式结果true 或者 false是否都被测试到了。通过构造一组测试用例,使得每一判定语句中每个逻辑条件的可能指至少满足一次。
条件覆盖和判定覆盖的区别则是
条件覆盖不是讲判定中间的每一个条件表达式的结果进行排列组合,而是只要每个调节表达式的true和false都测试到了就可以了。**因此,完全的条件覆盖不能够保证完全的判定覆盖
条件判定组合覆盖:
多条件覆盖多条件覆盖也称条件组合覆盖,它的含义是:设计足够的测试用例,使得每个判定中条件的各种可能组合都至少出现一次。显然满足多条件覆盖的测试用例是一定满足判定覆盖、条件覆盖和条件判定组合覆盖的。
路径覆盖:
又称断言覆盖(PredicateCoverage)。它度量了是否函数的每一个分支都被执行了。 就是所有可能的分支都执行一遍,有多个分支嵌套时,需要对多个分支进行排列组合,可想而知,测试路径随着分支的数量指数级别增加。路径覆盖被很多人认为是“最强的覆盖”。

代码覆盖的意义

1.通过分析没有覆盖的代码,反推前期测试设计是否充分,从而对测试用例进行补充设计。
2.检测出程序中的无用代码,逆向反推在代码设计中间的思维混乱的点,从而有利于理清代码的逻辑关系,提升代码的质量。
3.代码覆盖率高不能说明代码的质量就高,同样,代码覆盖率低,代码的质量也不会太高。