2008-12-09 285 views
12

我意识到这个问题没有绝对“正确”的答案,但是当人们谈论代码行时,它们是什么意思?例如,在C++中,你计算空白行吗?注释?只有一个打开或关闭大括号的线?什么是代码行?

我知道有些人使用LoC作为生产力衡量标准,我想知道这里是否有标准的约定。另外,我认为有一种方法可以让各种编译器计算代码行数 - 这里是否有标准约定?

+0

一堆可怜的人物。但足够的代码!有你! – zaratustra 2008-12-09 16:36:35

回答

22

没有,没有标准的惯例,每计数他们的工具会略有不同。

这可能会让你问,“为什么我会使用LOC作为生产力测量?”答案是,因为你如何计算一行代码并不重要,只要你一致地计算它们,你就可以了解项目的总体规模与其他人的关系。

3

无论“wc -l”返回的是我的号码。

8

我想说

  • 评论数
  • 空行数,因为他们对可读性重要,但不超过一个连续
  • 线与牙套算过,但应用相同的规则为空行 - 即5个嵌套花括号,它们之间没有代码计为一行。

我还谦虚地认为,这实际上依赖于控制线值的任何生产力的措施是双层:)

0
  1. LOCphy:物理线路
  2. LOCbl: Blanklines Kommentarblocks werden阿尔斯Kommentarzeilegezählt
  3. LOCpro:程序行(声明,定义,指令&代码)
  4. LOCcom:线的评论

很多有用的工具是给填充线等的百分比的信息。

你只需要看看它,但不只是指望它。

LOC是在一个项目开始大规模增长,其评论之后通常会降低;)

0

我认为这是一个可处理的陈述。例如

(1行)

Dim obj as Object 

(5行)

If _amount > 0 Then 
    _amount += 5 
Else 
    _amount -= 5 
End If 
11

看一看的Wikipedia Article,特别是 “Measuring SLOC” 部分:

有两种主要类型的SLOC 措施:物理SLOC和逻辑 SLOC。这些 两个措施的具体定义有所不同,但最常见的物理SLOC的定义是 ,其中 的源代码文本中包含注释行。 空白行也包含在内,除非 部分中的代码行由超过25%的空白行组成。 在这种情况下,不超过25%的空白行不计入 代码行。

逻辑SLOC措施试图 措施“声明”, 但其具体定义的数量 绑定到特定的计算机语言 (一个简单的逻辑SLOC度量 类C语言是 数语句 - 终止 分号)。创建测量物理实体 SLOC的工具要容易得多,物理SLOC定义 更容易解释。但是, 物理SLOC度量对逻辑无关格式和 样式约定敏感 ,而逻辑SLOC 对格式设置和 样式约定不太敏感。不幸的是,SLOC 措施经常表述为 给出了它们的定义,并且逻辑 SLOC通常可能与物理SLOC有很大不同 。

考虑的C代码这个片断作为歧义的 示例遇到 确定SLOC时:

for (i=0; i<100; ++i) printf("hello"); /* How many lines of code is this? */ 

在这个例子中,我们有:

  • 1代码LOC物理线路
  • 2代码lLOC的逻辑行(用于语句和printf语句)
  • 1条评论行

[...]

2

“的代码行” 应该包括任何你需要维护。这包括评论,但不包括空格。

如果您将此用作生产力指标,请确保您进行合理的比较。一行C++与Ruby的一行不一样。

+1

至于APL的一行...... – 2008-12-09 17:14:32

+1

Egads,我只是在维基百科上查看。这太糟糕了。 :) – 2008-12-09 17:26:55

3

如果使用LOC作为生产力的措施,你会突然发现你的程序员在编写更加冗长,以“游戏系统”。这是一个愚蠢的举措,只有愚蠢的人才用它来吹嘘权利。

1

LOC是一个众所周知的模糊度量。有关详细比较,只有在比较由同一团队编写的具有相同语言和相同样​​式的代码时才有效。

但是,它确实提供当在订单数量级的想法看上去具有一定的复杂概念。一个10000行的程序比100行的程序复杂得多。

LOC的优点是WC -l返回它,并没有真正的fancyness参与理解和计算的方法,与许多其它软件度量。

1

没有正确的答案。

对于非正式估计,我使用wc -l。

如果我需要严格测量某些东西,我会测量可执行语句。非常多,任何带有语句终止符(通常是分号)或以块结尾的东西。对于复合语句,我会计算每个子语句。

所以:

int i = 7;     # one statement terminator; one (1) statement 
if (r == 9)    # count the if as one (1) statement 
    output("Yes");  # one statement terminator; one (1) statement; total (2) for the if 
while (n <= 14) { # count the while as one (1) statement 
    output("n = ", n); # one statement terminator; one (1) statement 
    do_something(); # one statement terminator; one (1) statement 
    n++      # count this one, one statement (1), even though it doesn't need a statement terminator in some languages 
}        # brace doesn't count; total (4) for the while 

如果我在计划或Lisp的做,我会计算表达式。

正如其他人所说,最重要的是您的数量是一致的。这也很重要你使用这个。如果您只是想让潜在的新员工知道您的项目有多大,请使用wc -l。如果你想做计划和估算,那么你可能想要更正式。在任何情况下,您都不应该使用LOC来进行程序员补偿。

1

您应该思考的“代码线花”,而不是“代码线生产”。

的东西都应该尽可能简单,所以创建基于线的数量正在鼓励坏的代码了积极的标杆。此外,一些非常困难的事情最终只能通过很少的代码解决,而且一些非常简单的事情(例如getter和setter等样板代码)可以在很短的时间内添加很多行。

至于原来的问题,如果我要计算行,我会包括比连续空行等每一行。我也会收录评论,因为它们(希望)是有用的文档。

2

1行= 4秒的读数。如果不仅仅是要弄清楚我在那条线上所说的话,这条线太长了。

0

我同意瓦特/克雷格小时接受的答案,但我想补充一点,在学校里,我被教会空白,评论和声明不应该在测量方面算作“行代码”由程序员为了生产力目的而产生的代码行,即Ol'“每日15行”规则。

1

LOC的概念是尝试量化代码量。正如在其他答案中指出的那样,只要你一致,你就专门调用一行代码并不重要。直观地看来,10行程序比100行程序小,小于1000行程序等等。您会希望创建,解除和维护100行程序所需的时间少于1000行程序。至少非正式地说,您可以使用LOC来粗略感受创建,调试和维护特定大小的程序所需的工作量。

当然,有些地方这不起作用。例如,用1000行渲染的复杂算法可能比开发2500线的简单数据库程序要困难得多。

因此,LOC是代码量的粗粒度度量,可以让管理人员合理地了解问题的大小。

4

任何一天我都可以用更少的代码行结束,但是尽可能多或更多的工作功能......是美好的一天。能够移除数百行代码并结合功能更强大,更易维护的功能是一件美妙的事情。这就是说,除非你在团队中有非常严格的编码准则,否则实际的代码行是无用的统计数据。逻辑代码行仍然没有用,但至少它没有危险的误导。

0

我使用wc -l来快速评估工作区的复杂性。 然而,作为生产力度量,LOC是最糟糕的。 我一般认为这是一个非常高产的一天,如果我的LOC计数下降。

0

我知道有些人用控制线为生产力的措施

你能告诉我他们是谁,所以我不意外地工作(或者更糟,)呢?

如果我可以在使用Haskell的1400行中实现我可以在2800行中使用C实现的功能,那么我在C或Haskell中的工作效率会更高吗?哪一个需要更长的时间?哪个会有更多的错误(提示:它在LOC计数中是线性的)?

程序员的价值是他的代码改变了多少(包括从或到空字符串)增加了底线的数量。我知道没有好的方法来衡量或近似。但是我知道任何合理衡量的指标都可以被玩弄,并不能反映你真正想要的。所以不要使用它。

这就是说,你如何计算LOCs?很简单,使用wc -l。为什么这是正确的工具?那么,你可能不关心任何特定的数字,而是关于一般的总体趋势(上升或下降,以及多少),关于个人趋势(上升或下降,改变方向有多快,......)和关于几乎除了82,763之外的任何东西。

这些工具度量之间的差异可能并不有趣。除非您有证据表明您的工具(和只有该工具)吐出的数字与某些有趣的东西相关,否则将其用作粗略的大球数字;除了单调之外,任何其他的东西都应该不仅仅是一粒谷物而是一桶盐。

计算'\n'发生的次数。其他有趣的字符数可能是​​3210,'{''/'

0

在.NET世界似乎有一个全球协议,代码(LOC)的行是调试序列点。序列点是调试的单位,它是放置断点时以深红色突出显示的代码部分。通过序列点,我们可以讨论逻辑LoC,并且可以在各种.NET语言中比较此度量标准。大多数.NET工具都支持逻辑LoC代码度量,包括VisualStudio代码度量,NDepend或NCover。

A 8的LoC方法(起止括号序列点不采取帐户):

alt text

相反物理LOC(意思只是计算在源文件中的行的数量)的逻辑控制线具有不依赖于编码风格的巨大优势。编码风格,我们都同意,可以使物理LoC计数从一个开发人员到另一个开发人员的数量级变化。我写了一篇关于该主题的更详细的博客文章:How do you count your number of Lines Of Code (LOC) ?

0

使用LOC来衡量程序员的表现就像是根据其大小来判断绘画质量。就我而言,LOC唯一的“价值”就是给您的客户留下深刻印象,并吓跑您的竞争对手。

这就是说,我认为编译指令的数量是最不明确的。不过,糟糕的程序员的优势在于他们倾向于编写不必要的冗长代码。我记得曾用28行代替800多行非常糟糕的代码。这是否使我成为一个懒鬼?

任何项目经理谁使用LOC作为主要的绩效指标是一个白痴谁值得不好的程序员。