什么是代码覆盖率?
代码覆盖率就是,统计仿真时代码的执行情况,哪些代码已经执行,哪些代码还未执行,以及已执行的代码是如何执行的。
代码覆盖率的度量方式:
语句覆盖,度量被测代码中每个可执行语句是否被执行到了。
判定覆盖,度量程序中每一个判定的分支是否都被测试到了。
注:整个布尔表达式被看成了一个单独的真假判定,不管它里面有没有” && || ! ”操作符。
条件覆盖,度量判定中的每一个子表达式结果true和false是否都被测试到了。即构造测试用例使得每个判定语句中每个逻辑条件的可能值至少满足一次。
注:条件覆盖不是将判定中的每个条件表达式的结果进行排列组合,而是只要每个条件表达式的结果true和false测试到了就OK了。
条件判定组合覆盖,设计用例使得判定中每个条件的所有可能(真/假)的值至少出现一次,并且每个判定本身的判定结果(真/假)也至少出现一次。
路径覆盖,度量是否函数的每个分支都被执行了,就是所有可能的分支都执行一遍,有多个分支嵌套时,需要对多个分支进行排列组合。
代码覆盖率的实现原理:
插桩获取代码覆盖率,插桩就是在代码中插入一段我们自己的代码,它是在保证被测程序原有的逻辑完整性的基础上在程序中插入一些探针,
由于我们插入的代码会一起被编译到可执行文件中,所以可执行文件在运行过程中必然会执行我们插入的自定义代码。通过探针的执行并抛
出程序运行的特征数据,并对这些数据进行分析,可以获得程序的控制流和数据流信息,进而得到逻辑覆盖等动态信息。
为什么要分析代码覆盖率:
- 排除未覆盖代码所带来的风险
- 识别冗余代码
- 为代码质量评估提供依据
注:代码被覆盖到了,只能证明代码被执行过了,不能证明代码被测试过了。