可维护性指数

14

我看到了一些关于可维护性指数(MI)的建议值,如下:

  • 85及以上:可维护性良好
  • 65-85:可维护性一般
  • 65及以下:对于非常糟糕的代码(大型、没注释、没有结构化等),MI值甚至可能为负,难以维护

这些值是否与技术有关呢?例如,对于主机而言,70是不是很好,但对于Java来说却难以维护?

我们能够使用相同的标准跨技术范畴吗?

5个回答

14

这是关于可维护性指数值含义的解释

简而言之,这就是

MI = 171 - 5.2*ln(Halstead Volume) - 0.23*(Cyclomatic Complexity) - 16.2*ln(Lines of Code)

缩放在0到100之间。

可以看出,这个指标可用于任何过程性语言。


糟糕,链接已失效。我相信这是新链接 - https://blogs.msdn.microsoft.com/zainnab/2011/05/26/code-metrics-maintainability-index/ - RBT
实际上,这篇博客档案建议使用不同的公式来计算MI,即MAX(0,(171 – 5.2 * ln(Halstead Volume) – 0.23 * (Cyclomatic Complexity) – 16.2 * ln(Lines of Code))*100 / 171) - RBT
2
@RBT 这是相同的公式。你解开了“在0到100之间缩放”的句子。 - Anton K

9
65和85的阈值来自于1992/1994年介绍可维护性指数的原始论文。Visual Studio稍微调整了该度量标准(乘以100/171),使其适合于1-100的范围。Visual Studio使用10和20作为阈值。总的来说,我不会过分认真地对待这个指标及其阈值:请参见我的博客文章“在使用可维护性指数之前三思”。

3

可维护性指数是一种经验公式。它是基于观察和适应性构建的模型。如果您想了解更多详细信息,将会发现方程式必须针对特定语言进行校准。SEI版本是针对Pascal和C进行校准的,并使用了许多程序,平均50KLOC,由惠普公司维护。

Visual Studio版本的校准与SEI版本相同,但已标准化以限制域从0到100。


如果您正在寻找更多详细信息,最好在您的答案中包含详细信息或链接。 - James McMahon

2

我认为,对于开发人员来说,一段代码有多易于维护是没有一个具体数字可以给出的。

不同的人会根据其经验、文化、阅读理解等方面,以自己独特的方式来看待同一份代码。

尽管如此,对于各种技术而言,指标肯定是不同的。因为你需要考虑完全不同的语法、约定和术语等等。你怎么能量化低级别的主机代码和高级语言比如Java或C#之间的难度差异呢?

我认为指标只适用于一件事情,也只有一件事情:作为指南。在代码质量方面,它们不应该被用于除了描述代码库之外的其他任何东西。它们不应该被用作难度或可理解性的决定性因素。


0

这取决于“可维护性指数”是如何计算的。对我来说,这似乎不像是一种可以跨语言工作的东西,因为语言之间差异太大。

简单比较“每个函数的行数”可能看起来合理,但当您尝试比较充满指针的C代码、充满模板的C++代码、带有LINQ查询的C#或带有泛型的Java时会发生什么呢?
所有这些都会影响可维护性,但无法以任何有意义的跨语言方式进行衡量,那么您如何在两种语言之间进行比较呢?


2
特别是Lambda表达式并没有被度量所处理。每个Lambda函数都会增加一定的复杂度,尽管实际上它简化了代码。我们放弃了使用度量。 - MichaelGG
1
我可以理解为什么Lambda表达式会增加复杂度评分,对于初级开发人员来说,这实际上是一个合理的问题,因为它实质上集中了复杂性。然而,对于高级开发人员可能需要不同的复杂度衡量标准... - Brian Knoblauch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接