對于特定的人,在大緻時間段裡他所能寫的、确定品質的代碼基本上應該是個确定值。
這點似乎顯而易見,但事實上大多時候卻總是被忽視。
如果項目負責人總是認可上面的基本點,那麼任何項目的日程就應該以此為前提,而不是以此為變量。
假設說一個項目被估計為1萬行(SLOC),團隊平均每人每天可以寫100行代碼,如果團隊中有5個人,那麼就應該至少為編碼保留20整天。
說到這裡,為避免誤解,要區分一下編碼速度和生産率這兩個概念。
項目管理中常用的一個資料被稱為生産率,用代碼行計算時,會被表示為SLOC/MM。
這個值用于表示平均每人月的代碼産出。
其基本算法是規模除以項目所用的人月,而項目所用的人月中包含了設計、測試、修Bug等時間,至于包不包含需求、管理等的時間往往因人而異。
這個值有意義,但受項目時間配置設定比率影響較大,浮動空間也大。
而編碼速度單純指個人為編寫完成某個功能(經過自己的測試),而每天寫的代碼。
這時代碼中一定是有Bug的,是以這個值仍然有浮動空間,但已經可以收的很窄,并且在短期内不太可能發生太大的變化。
是以這個值應該更有意義。
我試圖調查編碼速度,但實在找不到什麼資料。眼下可以做到的是:
通過找到生産率的資料,假設編碼的時間為1/3,這樣可以概算出一份編碼速度的值。
找到一份不同語言間的比例值。
定性分析一下一般的情形。一般的情形是指:沒有太難的待研究課題,比如排序算法速度優化20%,大緻知道怎麼完成既定功能的情形。
下面是上述總結和分析的結果,希望有人願意分享更多資訊,也把這個資料做的更精确點。
按照生産率概算的編碼速度
(生産率資料來自《軟體估算--黑匣子揭秘》,概算的資料是我算的,我也找不到編碼的語言究竟是什麼,Sorry。)
代碼行/天 最低值-最高值(典型值)
軟體類型
10,000代碼行的項目
100,000代碼行的項目
250,000代碼行的項目
航空電子
15-150(30)
3-45(7)
3-30(6)
應用系統
120-2,700(450)
30-1050(90)
15-750(75)
指令與控制
30-450(75)
7-90(15)
6-75(12)
嵌入式系統
15-300(45)
4.5-75(11)
3-60(9)
公衆網際網路
系統
90-1500(225)
15-225(30)
内部内聯網
225-2700(600)
45-1050(120)
30-750(90)
微代碼
15-120(30)
3-30(6)
3-15(4)
過程控制
75-750(150)
15-150(45)
13-130(30)
實時系統
3-45(6)
科學系統/
工程研究
75-1125(150)
15-225(45)
12-150(30)
套裝軟體
60-750(150)
10-120(30)
系統軟體/
驅動程式
7-150(15)
6-120(13)
電信軟體
30-450(90)
6-75(7)
不同語言間的比例值
(這個比例值用來描述,不同語言的等價性,資料源同上)
語言
與C語言語句數量比
C
1
C++
2.5
Java
C#
假如這是真的,那麼用後面三種語言,編碼速度會提高2.5倍。我自身對此表示懷疑,至少C++,C#以及Java應該是不同的,但資料确實沒摘錄錯。
定性分析
為了做定性分析需要假設一些前提:
沒有特别的難題(比如:優化性能,API文檔不全,也要排除研究型項目)。
不用拷貝粘貼大法。
去除項目交流,會議等,每天有6個小時可以全身心寫程式。
假設主要語言是C/C++,C#,Java。
如果我們進一步假設,上限是1分鐘可以寫一行程式,那麼編碼速度的上限值是:360SLOC/天。
如果我們認為編碼速度有10倍差異,那麼下限值是36SLOC/天。
也就是說編碼速度的區間是36~360SLOC/天。
從我個人的角度看,我感覺這個範圍是可用的,360SLOC/天絕對是個上限值。是以我個人是不相信上述表中超過360部分的數字的,除非把html也算進來。
PS:幹這事的一個感覺:
這活太費勁,越做感覺要做的事越多。
我對上述摘錄的有些資料很是有些懷疑,但也找不大更合适的資料來反駁。比如:C#和C++的比例不應該是1:1啊。
這事實在應該科研機構或者大學幹,但又找不到國内那個機構或學校幹了這事,這是軟實力啊。
自己這個算抛磚引玉吧,有對第一個表格進行補充的資料的話,可以直接回下。
補充一點:
看了些評論,發現很多人在說代碼行不好的地方,這個反倒是不用講的。
因為代碼行不好的地方确實如大家所說,甚至更多。
任何一種度量方法必然有其限度,超過即是錯誤。
關鍵是當事人要把握資料究竟應該怎麼用。
好比說用代碼行度量個人不太行,但完全不度量同樣也是不行。