代码覆盖率

(1 min to read)

定义

code coverage

测试过程中被执行的源代码占全部源代码的比例,用于评估代码质量。

可以基于此寻找代码中没有被测试覆盖的地方,并进一步添加测试以提升覆盖率。(属于白盒测试)

  • 函数覆盖:多少函数被调用
  • 语句覆盖:多少语句被执行
  • 分支覆盖:多少分支被执行(分支条件取真和假)
  • 条件覆盖:多少子布尔表达式被取值为真和假
  • 路径覆盖:覆盖程序中所有可能的路径组合
  • 行覆盖:多少行源代码被测试

C++工具

圈复杂度

用于评估代码的复杂度,在数量上表现为独立路径的条数。

圈复杂度越大,说明代码的判断逻辑复杂,难于理解、测试和维护。

圈复杂度在10以内是最合理的,在10-20之间属于可接受的范围。

鼓励大量小函数,而不是一个冗长的大函数。

计算方式有两种:

  1. 点边计算法:将程序表示为控制流图,节点表示一个顺序的基本块,边表示控制流转移关系;则$V(G) = E - N + 2$。

  2. 节点判断法:$V(G) = P + 1$,其中$P$是判定节点个数。

1
2
pip install lizard
lizard --exclude test/ -C 15 # exclude test dir and ignore code complexity that less than 15