关于代码度量的讨论相当多(例如:代码度量的魅力是什么?)。我(作为一名软件开发人员)对这些指标非常感兴趣,因为我认为它们可以帮助人们编写更好的代码。至少在查找需要重构的代码区域时,它们很有帮助。
但是,我想知道的是以下内容。是否有一些对这些源代码指标的评估证明它们确实与错误率或方法的可维护性相关。例如:圈复杂度非常高的方法真的会比复杂度低的方法引入更多的错误吗?或者高难度的方法(Halstead)真的需要比低难度的方法更多的量来维护它们吗?
也许有人知道这方面的一些可靠研究。
非常感谢!
关于代码度量的讨论相当多(例如:代码度量的魅力是什么?)。我(作为一名软件开发人员)对这些指标非常感兴趣,因为我认为它们可以帮助人们编写更好的代码。至少在查找需要重构的代码区域时,它们很有帮助。
但是,我想知道的是以下内容。是否有一些对这些源代码指标的评估证明它们确实与错误率或方法的可维护性相关。例如:圈复杂度非常高的方法真的会比复杂度低的方法引入更多的错误吗?或者高难度的方法(Halstead)真的需要比低难度的方法更多的量来维护它们吗?
也许有人知道这方面的一些可靠研究。
非常感谢!
好问题,没有直接答案。
有一些研究论文显示了例如圈复杂度和错误之间的关系。问题是大多数研究论文都不能免费获得。
我发现了以下内容:http ://www.pitt.edu/~ckemerer/CK%20research%20papers/CyclomaticComplexityDensity_GillKemerer91.pdf 。尽管它显示了圈复杂度和生产力之间的关系。然而,它有一些对其他论文的引用,值得尝试用谷歌搜索它们。
看看这篇来自微软研究的文章。总的来说,我对来自微软的开发智慧持怀疑态度,但他们确实拥有能够对大型产品进行长期研究的资源。引用的文章讨论了他们发现的各种指标和项目缺陷率之间的相关性。
最后,我确实找到了一些关于软件指标和错误率之间相关性的论文,但它们都不是我真正想要的。大多数论文都已过时(80 年代末或 90 年代初)。
我认为开始对当前软件进行分析是个好主意。在我看来,应该可以调查一些流行的开源系统。源代码是可用的(我认为更重要的是)许多项目使用问题跟踪器和某种版本控制系统。可能有可能在版本控制系统的日志和问题跟踪器之间找到一个强大的链接。这将导致分析某些软件指标与错误率之间的关系的非常有趣的可能性。
也许仍然有一个项目可以完全按照我上面的描述进行。有人知道这样的事情吗?
这里有一些:
研究耦合度量对面向对象系统中故障倾向的影响
我们对著名的 Chidamber 和 Kemerer 面向对象指标的错误预测能力进行了实证研究。事实证明,当我们应用适当的机器学习模型时,这些指标结合起来可以预测错误,准确率超过 80%。如果您有兴趣,可以在以下论文中准备完整的研究:
“用于故障预测的开源软件的面向对象指标的实证验证。在 IEEE 软件工程汇刊,第 31 卷,第 10 期,2005 年 10 月,第 897-910 页。”
我也曾经对用于衡量可能质量的代码指标的承诺着迷,并发现考虑到其设计复杂性,编写一段特定的代码需要多长时间。可悲的是,绝大多数关于指标的主张都是炒作,从未取得任何成果。
最大的问题是我们想知道的输出(质量、时间、美元等)取决于太多无法控制的因素。这里只是部分列表:
请参阅此处的博客,其中讨论了许多这些问题,并给出了我们迄今为止尝试过的事情在实践中没有奏效的合理理由。(博客不是我的。)
这个链接很好,因为它解构了 Visual Studio 中最明显的指标之一,即可维护性指数:
https://avandeursen.com/2014/08/29/think-twice-before-using-the-maintainability-index/
有关大量指标的良好概述,请参阅本文,表明它们与程序的可理解性(其本身应与可维护性相关)没有很好的相关性:“自动评估代码可理解性:我们有多远?”,由 Scalabrino 等人。