什么是一行代码?

时间:2008-12-09 16:33:45

标签: lines-of-code

我意识到这个问题没有明确的“正确”答案,但当人们谈论代码行时,他们的意思是什么?例如,在C ++中,您是否算空行?评论?只有一个开放或紧密的支撑线?

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

21 个答案:

答案 0 :(得分:23)

不,没有标准惯例,每个计算它们的工具都会略有不同。

这可能会让你问:“为什么我会用LOC作为生产力衡量指标?”答案是,因为你如何计算一行代码并不重要,只要你一直统计它们就可以了解一个项目与其他项目相关的一般规模。

答案 1 :(得分:13)

查看Wikipedia Article,尤其是“Measuring SLOC”部分:

  

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

     

逻辑SLOC措施尝试   衡量“陈述”的数量,   但他们的具体定义是   绑定到特定的计算机语言   (一个简单的逻辑SLOC措施   类似C语言的编程语言就是   语句终止的数量   分号)。它要容易得多   创建测量物理的工具   SLOC和物理SLOC定义   更容易解释。然而,   物理SLOC措施是敏感的   逻辑上不相关的格式和   样式约定,而逻辑SLOC   对格式化不太敏感   风格约定。不幸的是,SLOC   通常没有说明措施   给出他们的定义和逻辑   SLOC通常可以显着   与物理SLOC不同。

     

将此代码片段视为一个   遇到歧义的例子   在确定SLOC时:

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

在这个例子中我们有:

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

[...]

答案 2 :(得分:8)

我会说

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

我还谦虚地建议任何实际上依赖于LoC值的生产力测量都是铺位:)

答案 3 :(得分:4)

任何一天,我可以用更少的代码行结束,但是功能更多或更多......是美好的一天。能够移除数百行代码并使用功能强大且易于维护的东西,这是一件很棒的事情。

话虽如此,除非您的团队中有非常严格的编码指南,否则物理代码行是无用的统计数据。逻辑代码行仍然没用,但至少它没有危险的误导性。

答案 4 :(得分:3)

如果你使用LOC作为生产力的衡量标准,你会突然发现你的程序员更加冗长地写“游戏系统”。这是一个愚蠢的措施,只有愚蠢的人才会将它用于吹嘘权利之外的任何事情。

答案 5 :(得分:3)

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

答案 6 :(得分:2)

“代码行”应包含您必须维护的任何内容。这包括评论,但不包括空格。

如果您将此作为生产率指标,请确保进行合理的比较。一行C ++与Ruby系列不同。

答案 7 :(得分:2)

1行= 4秒读数。如果需要更多的东西来弄清楚我在那条线上说的话,这条线太长了。

答案 8 :(得分:1)

您应该考虑“代码行花费”,而不是“代码行生成”。

事情应该尽可能简单,因此根据线条数量创建积极的基准是鼓励糟糕的代码。

此外,一些非常困难的事情最终只能通过非常少的代码来解决,而且一些非常简单的事情(例如getter和setter之类的样板代码)可以在很短的时间内添加很多行。

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

答案 9 :(得分:1)

LOC的概念是尝试量化代码量。正如在其他答案中所指出的那样,只要您保持一致,您专门称之为一行代码并不重要。直观地说,似乎10线程序小于100线程序,小于1000线程序,依此类推。您可能希望创建,删除和维护100行程序所需的时间少于1000行程序。至少,非正式地,您可以使用LOC来粗略地了解创建,调试和维护特定大小的程序所需的工作量。

当然,有些地方没有这个问题。例如,以1000行渲染的复杂算法可能比使用2500行的简单数据库程序更难开发。

因此,LOC是一种粗粒度的代码量度量,使管理者能够合理地理解问题的大小。

答案 10 :(得分: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

如果我在Scheme或Lisp中这样做,我会计算表达式。

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

答案 11 :(得分:1)

LOC是一个众所周知的模糊指标。对于详细比较,它仅在比较同一团队使用相同语言编写的代码时才有效。

但是,当按照数量级的想法进行研究时,它确实提供了一定的复杂性概念。 10000线程序比100线程序复杂得多。

LOC的优势在于wc -l返回它,与其他许多软件指标不同,理解或计算它并没有真正的幻想。

答案 12 :(得分:0)

我同意这些帖子说它报告的方式很多,并不是一个重要的指标。请参阅此ever-hear-of-developers-getting-paid-per-line-of-code

答案 13 :(得分:0)

我同意克雷格H接受的答案,但我想补充一点,在学校我被告知,在测量时,空格,评论和声明不应被视为“代码行”。程序员为了生产力目的而产生的代码行 - 即Ol'“每天15行”规则。

答案 14 :(得分:0)

我认为它是一个单一的可处理语句。例如

(1行)

Dim obj as Object

(5行)

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

答案 15 :(得分:0)

  1. LOCphy:物理线
  2. LOCbl: Blanklines Kommentarblocks werden alsKommentarzeilegezählt
  3. LOCpro:编程行(声明,定义,指令和代码)
  4. LOCcom:评论行
  5. 许多可用的工具都提供了填充线的百分比等信息。

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

    LOC在项目开始时会大量增加,并且经过审核后会逐渐减少;)

答案 16 :(得分:0)

我使用wc -l来快速估算工作空间的复杂性。 但是,由于生产力指标LOC THE WORST 。 如果我的LOC计数变为DOWN,我通常认为这是非常有成效的一天。

答案 17 :(得分:0)

  

我知道有些人使用LoC作为生产力衡量指标

你能否告诉我他们是谁,所以我不小心与他们合作(或者更糟糕的是 )?

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

程序员的价值在于他的代码更改了多少(包括从空字符串中删除)增加了底线上的数字。我知道没有好的方法来测量或近似。但我知道,任何合理可衡量的指标都可以被游戏,并不能反映出你真正想要的东西。所以不要使用它。

话虽如此,你如何计算LOC?很简单,使用wc -l。为什么这是正确的工具?好吧,你可能不关心任何特定的数字,但关于一般总趋势(上升或下降,以及多少),关于个别趋势(上升或下降,改变方向的速度,......)和关于几乎所有东西,除了82,763号。

工具测量之间的差异可能并不有趣。除非您有证据表明您的工具吐出的数字(以及该工具)与有趣的东西相关,否则请将其用作粗略的球形图;除了单调性以外的任何东西不仅应该是谷物,还应该是一桶盐。

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

答案 18 :(得分:0)

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

8 LoC方法(不考虑开头和结尾括号序列点):

alt text

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

答案 19 :(得分:0)

使用LOC来衡量程序员的表现就像根据大小判断绘画的质量一样。仅限LOC&#34;价值&#34;就我而言,关注的是给客户留下深刻印象并吓跑你的竞争对手。

那就是说,我认为编译指令的数量最不明确。然而,糟糕的程序员的优势在于他们倾向于编写不必要的冗长代码。我记得曾经用28行代替800多行非常糟糕的代码。这会让我变得懒散吗?

任何使用LOC作为主要绩效指标的项目经理都是一个值得追求糟糕程序员的白痴。

答案 20 :(得分:0)

我强烈推荐 cloc 工具来完成这项工作。它计算多种语言的行数。

https://github.com/AlDanial/cloc#quick-start-

我在我们公司使用过并且喜欢这个工具。我将从输出中分享一个 ss;

output from cloc