我看到了一些关于可维护性指数(MI)的建议值,如下:
- 85及以上:可维护性良好
- 65-85:可维护性一般
- 65及以下:对于非常糟糕的代码(大型、没注释、没有结构化等),MI值甚至可能为负,难以维护
这些值是否与技术有关呢?例如,对于主机而言,70是不是很好,但对于Java来说却难以维护?
我们能够使用相同的标准跨技术范畴吗?
我看到了一些关于可维护性指数(MI)的建议值,如下:
这些值是否与技术有关呢?例如,对于主机而言,70是不是很好,但对于Java来说却难以维护?
我们能够使用相同的标准跨技术范畴吗?
这是关于可维护性指数值含义的解释。
简而言之,这就是
MI = 171 - 5.2*ln(Halstead Volume) - 0.23*(Cyclomatic Complexity) - 16.2*ln(Lines of Code)
缩放在0到100之间。
可以看出,这个指标可用于任何过程性语言。
可维护性指数是一种经验公式。它是基于观察和适应性构建的模型。如果您想了解更多详细信息,将会发现方程式必须针对特定语言进行校准。SEI版本是针对Pascal和C进行校准的,并使用了许多程序,平均50KLOC,由惠普公司维护。
Visual Studio版本的校准与SEI版本相同,但已标准化以限制域从0到100。
我认为,对于开发人员来说,一段代码有多易于维护是没有一个具体数字可以给出的。
不同的人会根据其经验、文化、阅读理解等方面,以自己独特的方式来看待同一份代码。
尽管如此,对于各种技术而言,指标肯定是不同的。因为你需要考虑完全不同的语法、约定和术语等等。你怎么能量化低级别的主机代码和高级语言比如Java或C#之间的难度差异呢?
我认为指标只适用于一件事情,也只有一件事情:作为指南。在代码质量方面,它们不应该被用于除了描述代码库之外的其他任何东西。它们不应该被用作难度或可理解性的决定性因素。
这取决于“可维护性指数”是如何计算的。对我来说,这似乎不像是一种可以跨语言工作的东西,因为语言之间差异太大。
简单比较“每个函数的行数”可能看起来合理,但当您尝试比较充满指针的C代码、充满模板的C++代码、带有LINQ查询的C#或带有泛型的Java时会发生什么呢?
所有这些都会影响可维护性,但无法以任何有意义的跨语言方式进行衡量,那么您如何在两种语言之间进行比较呢?
MAX(0,(171 – 5.2 * ln(Halstead Volume) – 0.23 * (Cyclomatic Complexity) – 16.2 * ln(Lines of Code))*100 / 171)
。 - RBT