低質(zhì)量軟件編程產(chǎn)生的成本價格細目表
注意:下面這個清單里描述的事情并不是你絕對不能做的,它只是用量化的方法來讓你知道編程上的這些做法將會產(chǎn)生的負面代價。
這些費用是在代碼審查時你將要付出的。
不遵守編碼風(fēng)格
費用: $0.02
代碼庫中的程序編碼風(fēng)格一致雖然不是很重要,但值得你去遵守。
在提交代碼的說明信息上偷懶
費用: $0.50
這主要是為了以后的查找。請細讀這篇代碼提交說明信息指導(dǎo)(英文)。
使用局部變量
費用: $1.00
大多數(shù)的局部變量都最好使用方法代替。注意:代碼塊參數(shù)除外。
多于一行的方法
費用: $1.50
對多于一行代碼的方法要保持高度警惕。
超過5行的方法
費用: $3.00
一個方法應(yīng)該只做一個事情。一個事情應(yīng)該用不了5行代碼就能完成。
很長的類
費用: $5.00
根據(jù)童子軍(Boy Scout)法則:同性戀應(yīng)該被禁止。哦,不,是另外一條:盡量只留下你會用到的代碼。當你遇到一個比較長的類時,花點功夫精簡它們。
使用魔幻數(shù)字
費用: $7.00
在代碼中你只可以使用兩個數(shù)字:0和1。其它的都應(yīng)該用具有名字的常量代替。
在條件判斷中使用`||` 或 `&&`
費用: $7.00
當你發(fā)現(xiàn)有 `if foo && bar` 時,把它提取到一個方法里,用來說明`foo && bar` 究竟是什么意思。
使用 case 或 switch 語句
費用: $15
一個swith語句基本上不是只做一個事情。它通常還會牽涉到其它類。
傳遞布爾參數(shù)
費用: $15
依賴布爾參數(shù)的程序流轉(zhuǎn)叫做控制耦合,這是一種完全不應(yīng)該的高耦合。
類名用Manager結(jié)尾
費用: $30
“Manager”是一個很含糊的詞,傳達不了任何意思。使用它,很有可能你的類承擔(dān)了過多的責(zé)任。
過度使用附加支持
費用: $10/object created
盡量簡化你測試時需要的附加支持工具。如果能用臨時對象代替,就避免使用數(shù)據(jù)庫。
測試中屏蔽某些功能
費用: $10/屏蔽的方法
如果你在測試Foo類,你就不應(yīng)該屏蔽或短路Foo中的任何方法。你越想這樣做,越說明你需要從Foo中把這些功能提煉出來放到其它地方。
在數(shù)據(jù)庫中觀察集成測試效果
費用: $20
集成測試應(yīng)該通過UI來驗證。不要去窺探數(shù)據(jù)庫。
注釋
費用: $200/行
一千個注釋中頂多只有一條有合理存在的理由。其它的你應(yīng)該改進代碼,直到不需要注釋。
注釋中包含 TODO 或 FIXME
費用: $500/行
我不在意代碼分支中存在不多的TODO注釋,但絕對不要把它們合并的代碼庫中。“FIXME”實際上是“fuck you”你的同事。
無意義的命名
費用: $50/代碼審查者的疑惑
一定要努力努力好好給代碼命名。當系統(tǒng)有變化時及時修改、改進你的命名。當發(fā)現(xiàn)有更好的名稱時,不要等待,立即換掉。
靜態(tài)方法或類方法
費用: $50/個
Ruby里的類方法具有可變?nèi)譅顟B(tài)。想辦法重構(gòu)它們。
不必要的屬性狀態(tài)變化
費用: $100/變化
與其修改一個現(xiàn)有的記錄,不如創(chuàng)建一個新的,或return一個。與其刪除,不如做標記。Rich Hickey 對此有一些你值得一讀的思考。
一個類有多個職責(zé)
費用: $200/額外職責(zé)
一個類應(yīng)該只有一個職責(zé)或目的。幾乎沒有人因為使得類太小而出錯。鑒于此,你的類很可能太大。
重復(fù)的代碼
費用: $500
編程中幾乎沒有任何原則你必須遵守的,但避免代碼重復(fù)是個例外。代碼復(fù)制給維護造成困難,嚴重影響代碼質(zhì)量。
重復(fù)的測試代碼
費用: $500
測試代碼并不是產(chǎn)品代碼的次要附屬物。它們的質(zhì)量同等重要。更嚴重的:維護一個糟糕的測試套件代碼可能會讓你欲哭無淚。
未經(jīng)測試的代碼
費用: $1,000/行
未經(jīng)測試的代碼自誕生之時起就成了負擔(dān)。這樣做很不專業(yè)。
感謝Paul Graham先生的“On Lisp”,本文是受他的在某些函數(shù)上收稅的想法而啟發(fā)。
原文鏈接:http://codeulate.com/2013/08/how-much-should-global-variables-cost/
譯文鏈接:http://www.aqee.net/how-much-should-global-variables-cost/