什么可以作为代码覆盖的替代指标?

gue*_*rda 15 unit-testing code-coverage code-metrics

代码覆盖率可能是最具争议的代码度量标准.有人说,你必须达到80%的代码覆盖率,其他人说,它是肤浅的,并没有说明你的测试质量.(请参阅Jon Limjap关于"单元测试的合理代码覆盖率%(及其原因)是什么?"的完美答案.)

人们倾向于衡量一切.他们需要比较,基准等.
项目团队需要一个指针,他们的测试有多好.

那么什么是代码覆盖的替代品?什么是一个好的指标,而不是"我触及这行代码"?
有真正的替代品吗?

jri*_*sta 22

如果您正在寻找一些有用的指标来告诉您代码的质量(或缺少),您应该查看以下指标:

  1. 循环复杂性
    • 这是衡量方法复杂程度的指标.
    • 通常10和更低是好的,11-25是差,更高是可怕的.
  2. 嵌套深度
    • 这是衡量方法中嵌套范围的数量的度量.
    • 通常4和更低是好的,5-8是差,更高是可怕的.
  3. 关系凝聚力
    • 这是衡量包或装配中类型的相关程度的指标.
    • 关系凝聚力在某种程度上是一个相对指标,但也是有用的.
    • 可接受的水平取决于配方.鉴于以下内容:
      • R:包/程序集中的关系数
      • N:包/组件中的类型数
      • H:类型之间关系的凝聚力
    • 公式:H =(R + 1)/ N.
    • 鉴于上述公式,可接受的范围是1.5-4.0
  4. 缺乏方法的凝聚力(LCOM)
    • 这是衡量一个阶级凝聚力的标准.
    • 类的内聚力是每个方法引用的字段数的度量.
    • 很好地表明您的班级是否符合单一责任负责人.
    • 公式:LCOM = 1 - (总和(MF)/ M*F)
      • M:课堂上的方法数量
      • F:类中的实例字段数
      • MF:访问特定实例字段的类中的方法数
      • sum(MF):所有实例字段的MF之和
    • 一个完全凝聚的类将具有0的LCOM.
    • 完全无粘性的类将具有1的LCOM.
    • 你越接近0,你的班级就越有凝聚力和可维护性.

这些只是NDepend(.NET指标和依赖关系映射实用程序)可以为您提供的一些关键指标.我最近在代码指标方面做了很多工作,这4个指标是我们发现最有用的核心关键指标.NDepend还提供了其他一些有用的指标,包括传出和传入耦合以及抽象性和不稳定性,这些指标结合在一起可以很好地衡量代码的可维护性(以及您的NDepend是否称为疼痛区域或区域无用.)

即使您不使用.NET平台,我也建议您查看NDepend指标页面.您可以使用很多有用的信息在您开发的任何平台上计算这些指标.


mez*_*oid 7

Crap4j是我所知道的一个相当好的指标......

它是Change Risk Analysis and Predictions软件度量标准的Java实现,它结合了自动化测试中的圈复杂度和代码覆盖率.