我意識到這個問題沒有絕對「正確」的答案,但是當人們談論代碼行時,它們是什麼意思?例如,在C++中,你計算空白行嗎?註釋?只有一個打開或關閉大括號的線?什麼是代碼行?
我知道有些人使用LoC作爲生產力衡量標準,我想知道這裏是否有標準的約定。另外,我認爲有一種方法可以讓各種編譯器計算代碼行數 - 這裏是否有標準約定?
我意識到這個問題沒有絕對「正確」的答案,但是當人們談論代碼行時,它們是什麼意思?例如,在C++中,你計算空白行嗎?註釋?只有一個打開或關閉大括號的線?什麼是代碼行?
我知道有些人使用LoC作爲生產力衡量標準,我想知道這裏是否有標準的約定。另外,我認爲有一種方法可以讓各種編譯器計算代碼行數 - 這裏是否有標準約定?
沒有,沒有標準的慣例,每計數他們的工具會略有不同。
這可能會讓你問,「爲什麼我會使用LOC作爲生產力測量?」答案是,因爲你如何計算一行代碼並不重要,只要你一致地計算它們,你就可以瞭解項目的總體規模與其他人的關係。
無論「wc -l」返回的是我的號碼。
我想說
我還謙虛地認爲,這實際上依賴於控制線值的任何生產力的措施是雙層:)
很多有用的工具是給填充線等的百分比的信息。
你只需要看看它,但不只是指望它。
LOC是在一個項目開始大規模增長,其評論之後通常會降低;)
我認爲這是一個可處理的陳述。例如
(1行)
Dim obj as Object
(5行)
If _amount > 0 Then
_amount += 5
Else
_amount -= 5
End If
看一看的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條評論行
[...]
「的代碼行」 應該包括任何你需要維護。這包括評論,但不包括空格。
如果您將此用作生產力指標,請確保您進行合理的比較。一行C++與Ruby的一行不一樣。
至於APL的一行...... – 2008-12-09 17:14:32
Egads,我只是在維基百科上查看。這太糟糕了。 :) – 2008-12-09 17:26:55
如果使用LOC作爲生產力的措施,你會突然發現你的程序員在編寫更加冗長,以「遊戲系統」。這是一個愚蠢的舉措,只有愚蠢的人才用它來吹噓權利。
LOC是一個衆所周知的模糊度量。有關詳細比較,只有在比較由同一團隊編寫的具有相同語言和相同樣式的代碼時纔有效。
但是,它確實提供當在訂單數量級的想法看上去具有一定的複雜概念。一個10000行的程序比100行的程序複雜得多。
LOC的優點是WC -l返回它,並沒有真正的fancyness參與理解和計算的方法,與許多其它軟件度量。
沒有正確的答案。
對於非正式估計,我使用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來進行程序員補償。
您應該思考的「代碼線花」,而不是「代碼線生產」。
的東西都應該儘可能簡單,所以創建基於線的數量正在鼓勵壞的代碼了積極的標杆。此外,一些非常困難的事情最終只能通過很少的代碼解決,而且一些非常簡單的事情(例如getter和setter等樣板代碼)可以在很短的時間內添加很多行。
至於原來的問題,如果我要計算行,我會包括比連續空行等每一行。我也會收錄評論,因爲它們(希望)是有用的文檔。
我同意這樣一些帖子,稱它有多種報道方式,不是一個重要的指標。請參閱ever-hear-of-developers-getting-paid-per-line-of-code。
1行= 4秒的讀數。如果不僅僅是要弄清楚我在那條線上所說的話,這條線太長了。
我同意瓦特/克雷格小時接受的答案,但我想補充一點,在學校裏,我被教會空白,評論和聲明不應該在測量方面算作「行代碼」由程序員爲了生產力目的而產生的代碼行,即Ol'「每日15行」規則。
LOC的概念是嘗試量化代碼量。正如在其他答案中指出的那樣,只要你一致,你就專門調用一行代碼並不重要。直觀地看來,10行程序比100行程序小,小於1000行程序等等。您會希望創建,解除和維護100行程序所需的時間少於1000行程序。至少非正式地說,您可以使用LOC來粗略感受創建,調試和維護特定大小的程序所需的工作量。
當然,有些地方這不起作用。例如,用1000行渲染的複雜算法可能比開發2500線的簡單數據庫程序要困難得多。
因此,LOC是代碼量的粗粒度度量,可以讓管理人員合理地瞭解問題的大小。
任何一天我都可以用更少的代碼行結束,但是儘可能多或更多的工作功能......是美好的一天。能夠移除數百行代碼並結合功能更強大,更易維護的功能是一件美妙的事情。這就是說,除非你在團隊中有非常嚴格的編碼準則,否則實際的代碼行是無用的統計數據。邏輯代碼行仍然沒有用,但至少它沒有危險的誤導。
我使用wc -l
來快速評估工作區的複雜性。 然而,作爲生產力度量,LOC是最糟糕的。 我一般認爲這是一個非常高產的一天,如果我的LOC計數下降。
我知道有些人用控制線爲生產力的措施
你能告訴我他們是誰,所以我不意外地工作(或者更糟,爲)呢?
如果我可以在使用Haskell的1400行中實現我可以在2800行中使用C實現的功能,那麼我在C或Haskell中的工作效率會更高嗎?哪一個需要更長的時間?哪個會有更多的錯誤(提示:它在LOC計數中是線性的)?
程序員的價值是他的代碼改變了多少(包括從或到空字符串)增加了底線的數量。我知道沒有好的方法來衡量或近似。但是我知道任何合理衡量的指標都可以被玩弄,並不能反映你真正想要的。所以不要使用它。
這就是說,你如何計算LOCs?很簡單,使用wc -l
。爲什麼這是正確的工具?那麼,你可能不關心任何特定的數字,而是關於一般的總體趨勢(上升或下降,以及多少),關於個人趨勢(上升或下降,改變方向有多快,......)和關於幾乎除了82,763之外的任何東西。
這些工具度量之間的差異可能並不有趣。除非您有證據表明您的工具(和只有該工具)吐出的數字與某些有趣的東西相關,否則將其用作粗略的大球數字;除了單調之外,任何其他的東西都應該不僅僅是一粒穀物而是一桶鹽。
計算'\n'
發生的次數。其他有趣的字符數可能是3210,'{'
和'/'
。
在.NET世界似乎有一個全球協議,代碼(LOC)的行是調試序列點。序列點是調試的單位,它是放置斷點時以深紅色突出顯示的代碼部分。通過序列點,我們可以討論邏輯LoC,並且可以在各種.NET語言中比較此度量標準。大多數.NET工具都支持邏輯LoC代碼度量,包括VisualStudio代碼度量,NDepend或NCover。
A 8的LoC方法(起止括號序列點不採取帳戶):
相反物理LOC(意思只是計算在源文件中的行的數量)的邏輯控制線具有不依賴於編碼風格的巨大優勢。編碼風格,我們都同意,可以使物理LoC計數從一個開發人員到另一個開發人員的數量級變化。我寫了一篇關於該主題的更詳細的博客文章:How do you count your number of Lines Of Code (LOC) ?
使用LOC來衡量程序員的表現就像是根據其大小來判斷繪畫質量。就我而言,LOC唯一的「價值」就是給您的客戶留下深刻印象,並嚇跑您的競爭對手。
這就是說,我認爲編譯指令的數量是最不明確的。不過,糟糕的程序員的優勢在於他們傾向於編寫不必要的冗長代碼。我記得曾用28行代替800多行非常糟糕的代碼。這是否使我成爲一個懶鬼?
任何項目經理誰使用LOC作爲主要的績效指標是一個白癡誰值得不好的程序員。
一堆可憐的人物。但足夠的代碼!有你! – zaratustra 2008-12-09 16:36:35