Halstead复杂度度量的应用程序是否有任何工作可用来确定软件质量?


14

1977年,莫里斯·霍华德·霍尔斯特德(Maurice Howard Halstead)推出了他的软件系统复杂性度量标准,其中包括对程序词汇量,程序长度,数量,难度,工作量以及模块中错误数量的估计。根据Wikipedia所说,困难与阅读或编写程序时理解程序的难度有关,可以将精力转化为​​编写应用程序所需的时间,其中Time =(Effort / 18)seconds。

除非数据和计算与软件开发的某些方面有关,否则测量是没有用的。但是,我还没有发现任何能够说明某个值或更高难度的缺陷会导致统计上的缺陷增加或难度与读取代码的时间之间的关系的工作(N的难度平均产生M个小时的花费)理解代码库)或在确定质量有用的事实之后进行任何能够计算时间的分析(尤其是因为应该将写入时间记录为度量)。我对Halstead的错误估计(维基百科上没有提及)特别感兴趣-应用程序中的错误数量可以通过Volume / 3000或Effort ^(2/3)/ 3000进行估计。

我在寻找两件事:

  • 是否有人在实际应用中使用Halstead的软件复杂性度量来评估软件质量?如果是这样,您如何应用它们,结果证明它们是有用,有效和/或可靠的度量?
  • 是否有任何调查,分析或案例研究形式的学术研究,讨论了Halstead复杂性度量应用于软件质量时的有效性(或无效性)?
  • 是否有任何调查,分析或案例研究形式的学术研究证明使用代码源代码行(SLOC)来计算类似于量,难度,工作量,时间和错误的Halstead度量标准?我怀疑“体积”可能仅对应于SLOC计数,“难度”可能对应于圈复杂度(可能还有其他度量)。我也很清楚,在SLOC中衡量工作量,生产率或时间可能会产生误导。

在过去的15年中,您将很难找到结果,因为Halstead的指标工作已经完成了30到40年前,并且几乎立即发现了与SLOC的强相关性。(这是根据记忆,来自于1977年在UT奥斯汀举行的新博士生演讲中。)
John R. Strohm

感谢那。我将更新问题,并将精力集中在较早的文章上。
Thomas Owens

Answers:


5

Microsoft Research在这方面做了一些工作。签出此页面:http : //research.microsoft.com/en-us/people/nachin/。尽管不是专门基于Halstead,Nachi和他的团队使用Halstead,圈复杂度,代码搅动和其他措施进行了一些调查,以评估在代码区域进行更改的相对风险和脆弱性。还有一篇有趣的文章介绍组织有效性如何发挥重要作用,但这不是主题。:)


我将不得不阅读其中一些内容。绝对是我感兴趣的东西,但我(至少现在是)对Halstead特别感兴趣,所以我将重点放在那里。我为该站点添加了书签,以便在我有更多时间时可以阅读它,但是暂时是+1。
Thomas Owens

在实际代码中,已证明McCabe的圈复杂性与原始SLOC紧密相关,以至于在计算它时没有任何增量值。
约翰·斯特罗姆

0

有很多这样的研究。Google是您的朋友。

当证明所有这些指标都与原始SLOC(代码源代码)紧密相关时,Halstead的指标就不受欢迎了。到那时,测量SLOC并进行测量变得更加容易。

这是Google图书的结果。


1
从我问这个问题开始,我就一直在谷歌搜索,但至今仍未找到任何发表的论文或其他知名来源。另外,我看不到与SLOC相关的指标如何差。SLOC /时间不能很好地衡量生产力,但是其他基于SLOC的指标通常被认为是有效的,例如缺陷/ SLOC。
汤玛斯·欧文斯

1
@Thomas:不是Halstead的指标与SLOC“相关”,而是它们之间有很强的相关性。统计数据102.说Y和X是高度相关的,这意味着对于所有数据集,Y / X之比基本上是恒定的。如果是这样的话,有测量Ÿ如果是比较容易测量X,因为Y的不是真的告诉你什么你不已经从X.知道有没有点
约翰·斯特罗姆

那讲得通。Halstead的度量标准基于不同的运算符和操作数的总数。通常,较长的程序将具有更多的运算符/操作数,并且更有可能具有更多不同的运算符/操作数。可以使用SLOC代替运算符/操作数来获得音量和难度的度量。但是,这不能解决“工作量”,“时间”和“错误”指标的有效性,应用程序和含义(或缺乏含义)。即使使用SLOC(而不是运算符/操作数)进行计算,这些指标是否对系统有意义?
Thomas Owens

SLOC更容易计数,可能更有用。SLOC的估计值由PSP和TSP中跟踪的几种成本估计技术使用,并且可以用于其他指标(例如缺陷密度)中。对我而言,这表示计算SLOC可能比计算操作员/操作数更好。其次,到目前为止,工作量,时间和错误的度量标准的有效性尚无定论,而与用于计算它们的度量无关。我同意使用SLOC进行计算可能会更好,但是即使我这样做了,它们也意味着什么?
托马斯·欧文斯

@ThomasOwens:可能不是。如果“工作量”,“时间”和“错误”都与SLOC密切相关,那么它将告诉您,给定大小的所有程序花费相同的时间和精力,并且具有相同数量的错误。前两个是基于SLOC的估算(例如COCOMO)所基于的,就像说水是湿的。第三个并没有真正帮助您。
约翰·R·斯特罗姆

0

Halstead Volume与SLOC相关联是有趣但有限的。基本统计数据:线性相关性不是传递性的。X与Y相关联,Y与Z相关联并不意味着X与Z相关联。


当X和Y仅相关,而Y和Z仅相关时,是的,由于前两个相关中的噪声水平较高,因此X和Z不必相关。当X和Y高度相关,而Y和Z高度相关时,所涉及的噪声非常非常小,在任何给定的情况下,X和Z都将很可能相关。
John R. Strohm
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.