软件构造代码覆盖率
#前言
由于在实验二的过程中间需要测试代码的覆盖率,本文将简要的介绍代码覆盖率的相关的知识。
定义
代码覆盖(code coverage).是软件测试中的一种度量,用来描述程序中源代码被测试的比例和程度。所得的比例称为代码覆盖率。在做单元测试的时候,代码覆盖率常常备用来作为衡量测试好坏的指标,甚至用代码覆盖率来考核测试任务的完成情况。
代码覆盖率= 代码覆盖程度,一种度量的方式
常见的代码覆盖方式:
语句覆盖:
语句覆盖即行覆盖,是一种最常见的覆盖的方式,就是度量被测试代码中是否每一个可执行的语句都被执行了。
但是这种语句覆盖也有着不少的弊端,比如单独一行的{ }也常常被统计进去。只考虑覆盖代码中的执行语句,却不考虑各种分支的组合。并且真正换来的测试效果不明晰,很难发现代码中存在的bug.
判定覆盖:
又称作分支覆盖,所有的边界进行覆盖,它**度量程序中间的每一个分支是否都被测试到。设计足够的测试用例,使得程序中间的每一个判定至少都获得一次真值或者假值。
条件覆盖:
度量判定中的每一个子表达式结果true 或者 false是否都被测试到了。通过构造一组测试用例,使得每一判定语句中每个逻辑条件的可能指至少满足一次。
条件覆盖和判定覆盖的区别则是条件覆盖不是讲判定中间的每一个条件表达式的结果进行排列组合,而是只要每个调节表达式的true和false都测试到了就可以了。**因此,完全的条件覆盖不能够保证完全的判定覆盖
条件判定组合覆盖:
多条件覆盖多条件覆盖也称条件组合覆盖,它的含义是:设计足够的测试用例,使得每个判定中条件的各种可能组合都至少出现一次。显然满足多条件覆盖的测试用例是一定满足判定覆盖、条件覆盖和条件判定组合覆盖的。
路径覆盖:
又称断言覆盖(PredicateCoverage)。它度量了是否函数的每一个分支都被执行了。 就是所有可能的分支都执行一遍,有多个分支嵌套时,需要对多个分支进行排列组合,可想而知,测试路径随着分支的数量指数级别增加。路径覆盖被很多人认为是“最强的覆盖”。
代码覆盖的意义
1.通过分析没有覆盖的代码,反推前期测试设计是否充分,从而对测试用例进行补充设计。
2.检测出程序中的无用代码,逆向反推在代码设计中间的思维混乱的点,从而有利于理清代码的逻辑关系,提升代码的质量。
3.代码覆盖率高不能说明代码的质量就高,同样,代码覆盖率低,代码的质量也不会太高。