什么时候,如果"代码行数"是一个有用的指标?

use*_*071 51 metrics

有些人声称代码最大的敌人是它的大小,我倾向于同意.然而,每天你都会听到类似的事情

  • 我在一天内写了一些代码.
  • 我拥有x行代码.
  • Windows是x百万行代码.

问题:"#lines of code"何时有用?

ps:请注意,在做出这样的陈述时,语气"越多越好".

war*_*ren 105

我会说当你删除代码以使项目运行得更好时.

说你删除"X行数"令人印象深刻.并且比添加代码行更有帮助.

  • 我曾经从2200线路模块中移除了2100条线路而没有任何功能变化.(整理一些*真正*马虎复制+粘贴程序员... grrrrr) (9认同)
  • 呸! 吞没了我的马车回程。我只是将两个声明放在一行中。 (2认同)
  • 删除的行数似乎仅比添加的行有用。它仍然微不足道,因此不是一个非常有用的指标。 (2认同)

Jes*_*erE 46

我很惊讶没人提到Dijkstra的名言,所以这里有:

我今天的观点是,如果我们希望计算代码行数,我们不应该将它们视为"产生的线条"而应视为"花费的线条":当前的传统智慧是如此愚蠢以至于指出错误的一面.总帐.

引用来自一篇名为" 关于真正教授计算科学的残酷 "的文章.


Mar*_*sey 35

这是一个糟糕的指标,但正如其他人所指出的那样,它可以让您(非常)粗略地了解系统的整体复杂性.如果您要比较两个项目,A和B,A是10,000行代码,B是20,000,这并不能说明多少 - 项目B可能过于冗长,或者A可能是超级压缩的.

另一方面,如果一个项目是10,000行代码,另一个是1,000,000行,那么第二个项目通常要复杂得多.

当该指标用于评估某个项目的生产率或贡献水平时,会出现此问题的问题.如果程序员"X"将行数写为程序员"Y"的2倍,他可能会或可能不会贡献更多 - 也许"Y"正在解决一个更难的问题......

  • 甚至比困难的问题更多,“ Y”可能为SAME问题编写了更好的代码,该问题更加干燥和易于维护。 (2认同)

ant*_*tik 27

吹牛的朋友们.

  • 如果你和朋友吹嘘代码行,你需要更多.哈哈:D,比你的代码库更有趣的事情要吹嘘 (13认同)

Pas*_*ent 20

至少,不是为了进步:

"通过代码行测量编程进度就像按重量衡量飞机制造进度." - 比尔盖茨


Tro*_*ard 18

它在加载行式打印机时非常有用,这样您就可以知道您要打印的代码将消耗多少页面.;)


dod*_*der 17

当我发现它非常宝贵时,有一个特例.当你在面试时他们告诉你,你的部分工作将是维护现有的C++/Perl/Java /等.遗产项目.向面试官询问遗留项目中涉及多少KLOC(大约)会让您更好地了解您是否想要他们的工作.


Ste*_*owe 8

像大多数指标一样,没有上下文,它们意味着很少.所以简短的回答是:从来没有(除了行式打印机,这很有趣!这些天谁打印出程序?)

一个例子:

想象一下,您正在对遗留代码进行单元测试和重构.它开始时有50,000行代码(50 KLOC)和1,000个可证明的错误(单元测试失败).该比率为1K/50KLOC =每50行代码1个错误.显然这是可怕的代码!

现在,经过几次迭代,您已经将已知的错误减少了一半(并且未知的错误超过最可能的错误),并且通过示例性重构将代码库减少了五倍.该比率现在为每20行代码500/10000 = 1个错误.这显然更糟糕!

根据您要制作的展示次数,可以将其显示为以下一项或多项:

  • 错误减少50%
  • 代码少五倍
  • 代码减少80%
  • 错误与代码比率恶化60%

所有的这些都是真的(假设我没有搞砸数学),他们都吸在总结,这样的重构工作,必须已经实现了巨大的进步.


小智 6

让我想起这个:

这封信很长,只是因为我没有闲暇让它缩短.
--Blaise Pascal.


Kev*_*ara 6

用25年前我读过的一句话来解释,

"使用代码行作为度量标准的问题是它衡量解决方案的复杂性,而不是问题的复杂性".

我相信引用来自David Parnas在ACM杂志的一篇文章中.


Hal*_*rim 5

有很多不同的软件指标。代码行是最常用的,也是最容易理解的。

我很惊讶代码行度量与其他度量相关的频率。我没有购买可以计算圈复杂度的工具来发现代码异味,我只是寻找行数多的方法,而且它们往往也具有很高的复杂度。

使用代码行的一个很好的例子是度量:每行代码的错误数。它可以让您直观地了解应该在项目中发现多少错误。在我的组织中,我们通常每 1000 行代码大约有 20 个错误。这意味着,如果我们准备发布具有 100,000 行代码的产品,并且我们的错误数据库显示我们发现了 50 个错误,那么我们可能应该进行更多测试。如果我们每 1000 行代码有 20 个错误,那么我们可能接近通常的质量。

一个不好的使用例子是衡量开发人员的生产力。如果您通过代码行来衡量开发人员的生产力,那么人们倾向于使用更多的代码行来交付更少的代码。