2008-12-09 290 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作爲主要的績效指標是一個白癡誰值得不好的程序員。