python度量代码pymetrics可用于分析代码文件的复杂性。他们创建了两个不同的指标:
McCabe Complexity Metric
对于函数和类- A
COCOMO 2's SLOC Metric
代表整个文件
我想知道这些指标的数值是什么意思,而不是真正的定义。“1”的值是什么意思?数字“5”?数字“10”?更高更好还是更低?什么数值代表好代码,什么代表真正糟糕的代码?搜索互联网给出了一些提示,但我不确定分类是指指标(1)还是指标(2)。我想对这两个数字都有意义。
我认为您的问题中有一个有问题的假设,即好的代码对某个指标具有一定的价值。你不能用一个单一的指标来衡量代码的质量,它是事物的组合,并且高度依赖于上下文。真正超级高效的代码通常有点难以理解,这是否使它成为糟糕的代码?
IBM 决定在 70 年代通过他们产生的代码行数 (SLOC) 来衡量他们的程序员的质量。不用说,这导致了一些非常冗长和愚蠢的代码。
如果您想了解代码的质量,那么您需要其他开发人员来查看它。最好是比您更有经验的开发人员。友好的代码审查非常适合学习,它还会迫使你思考为什么你会按照自己的方式做某事,而不是其他本可以完成的方式。幸运的是,stackexchange 正好提供了.
来自维基百科
圈复杂度(或条件复杂度)是一种软件度量(度量)。它由 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 种事情不起作用的所有事情。你需要对它们进行另一个单元测试,以及值的组合(你明白了)。
源代码行数 (SLOC) 是一种软件度量标准,用于通过计算程序源代码文本中的行数来衡量计算机程序的大小。SLOC 通常用于预测开发程序所需的工作量,以及估计软件生产后的编程生产力或可维护性。
建设性成本模型 (COCOMO) 是由 Barry W. Boehm 开发的一种算法软件成本估算模型。该模型使用基本回归公式,其参数源自历史项目数据和当前项目特征。
另一方面,COCOMO 并不是真正衡量代码的质量,它是一种软件项目 (COCOMO II) 的成本计算模型,是对最近(90 年代之后)软件项目的更新。
COCOMO II 实际上是三种不同的模型:
• 应用程序组合模型 - 适用于使用现代 GUI 构建器工具构建的项目。基于新的对象点。
• 早期设计模型——在确定项目的整个架构之前,您可以使用此模型粗略估计项目的成本和持续时间。它使用一小组新的成本动因和新的估算方程。基于未调整的功能点或KSLOC。
• 后架构模型 - 这是最详细的 COCOMO II 模型。您将在开发项目的整体架构后使用它。它具有新的成本驱动因素、新的行计数规则和新的方程式。
一个功能点是一个功能单元,KSLOC是数千行代码。所以 COCOMO 模型是用于估计软件项目的成本、时间、所需资源等,而不是评估代码的质量。