pymetrics的输出告诉我什么?

时间:2012-11-13 18:03:12

标签: python metrics

python指标代码pymetrics可用于分析代码文件的复杂性。他们创建了两个不同的指标:

  1. McCabe Complexity Metric用于函数和类
  2. 整个文件的COCOMO 2's SLOC Metric
  3. 我想知道这些指标的数值意味着什么,而不是它们的定义。 “1”的值是什么意思?一些'5'?一些'10'?更高还是更低?什么数值是指好的代码,什么是真正糟糕的代码?搜索互联网会提供一些hints,但我不确定分类是指公制(1)还是公制(2)。我想对这两个数字都有意义。

1 个答案:

答案 0 :(得分:3)

我认为在您的问题中存在一个有问题的假设,即良好代码对某个指标具有一定的价值。您无法使用单个指标来衡量代码的质量,它是事物的组合,也高度依赖于上下文。真的非常高效的代码通常有点难以理解,这是否会使代码变坏?

IBM决定通过他们生成的代码行(SLOC)来衡量他们在70年代的程序员的质量。毋庸置疑,这导致了一些非常冗长和愚蠢的代码。

如果您想了解代码的质量,那么您需要的是其他开发人员所需要的内容。最好是比你更有经验的开发人员。友好的代码审查非常适合学习,它还会强迫您思考为什么您按照自己的方式做某事,而不是以其他方式完成它。幸运的是,stackexchange提供了that

来自维基百科

Cyclomatic complexity

  

循环复杂性(或条件复杂性)是一种软件度量   (测量)。它由Thomas J. McCabe,Sr。于1976年开发   用于表示程序的复杂性。它直接衡量   通过程序源的线性独立路径的数量   码。这个概念虽然不是方法,但有点类似于   由Flesch-Kincaid测量的一般文本复杂性   可读性测试。   ...   源代码部分的圈复杂度是通过源代码的线性独立路径数量的计数。例如,如果源代码不包含IF语句或FOR循环等决策点,那么的复杂性将为1 ,因为代码中只有一条路径。如果代码具有包含单个条件的单个IF语句,则代码中将有两条路径,一条路径将IF语句评估为TRUE,另一条路径将IF语句评估为FALSE。

你不能说1优于2,这取决于上下文(你在写什么语言,谁在编写代码等等)。您应该将圈复杂度值视为给出一个理解代码的控制流是多么容易的提示。许多嵌套的if语句将导致高CC。因此,理想情况下,你的CC为1(可能是每个函数),这是一个函数以一种方式做一件事,而不是别的,但很明显,这并不总是可行的。您必须评估在上下文中为度量标准获得的任何值。

在其他用同一种语言编写的库中,您倾向于看到什么样的值?我不能给你一个数字(抱歉)。我可以说15的CC值可能有点超过顶部,代码应该重构。这是执行脚本/功能的15种不同方式。在您的测试中需要考虑15个不同的条件,并且不要忘记所有可能使这15个不起作用的事情。你需要对它们进行另一次单元测试,以及值的组合(你明白了)。

Source Lines of Code

  

源代码行(SLOC)是用于衡量的代码   通过计算文本中的行数来计算机程序的大小   该程序的源代码。 SLOC通常用于预测   开发计划所需的努力量也是如此   一旦估计编程生产力或可维护性   软件生产。

COCOMO

  

构造成本模型(COCOMO)是算法软件成本   由Barry W. Boehm开发的估算模型。该模型使用基本的   回归公式,其参数来自历史   项目数据和当前项目特征。

另一方面,COCOMO并不真正衡量代码的质量,它是一种软件项目的成本模型(COCOMO II),是对最近(90年代后)软件项目的更新

Softwaresystems.com有这个说法

  

COCOMO II实际上是三种不同的模式:

     

•应用程序组合模型 - 适用于使用现代GUI构建器工具构建的项目。基于新的对象点。

     

•早期设计模型 - 在您确定项目的整个架构之前,您可以使用此模型粗略估算项目的成本和持续时间。它使用一小组新的成本动因和新的估算方程。基于 未调整的功能点 KSLOC

     

•后架构模型 - 这是最详细的COCOMO II模型。在您开发了项目的整体架构之后,您将使用它。它有新的成本   驱动程序,新行计数规则和新方程式。

功能点是一个功能单元, KSLOC 是数千行代码。因此,COCOMO模型用于估算软件项目的成本,时间,所需资源等,而不是评估代码质量。