在軟件開發中應用80:20原則

2013-11-21 08:54:02來源:InfoQ作者:

很多經理都不想陷入太多的思考當中,他們喜歡簡單的原則,快速且直接的審視問題的方式并能找準問題的方向。越簡單,越好。其中最為有效的一個原則就是80:20原則……

Jim Bird是一位經驗豐富的軟件開發經理、項目經理與CTO,專注于軟件開發與維護中疑難問題的解決、軟件質量管理與安全領域。在過去的15年間,Jim曾管理過團隊建設與高性能的財務系統。他的主要興趣在于如何幫助小團隊更有效地構建真正的軟件:高質量、安全、高性能且易使用。近日,Jim撰文談到了如何在軟件開發中應用流行的80:20原則,頗具代表意義。

很多經理都不想陷入太多的思考當中,他們喜歡簡單的原則,快速且直接的審視問題的方式并能找準問題的方向。越簡單,越好。其中最為有效的一個原則就是80:20原則:

80%的效果是由20%的原因導致的,或者是80%的結果來自于20%的努力。

這是收益遞減的另一方面:相對于做得越多,得到越少來說,你可以實現做得少但得到多的結果,方式就是通過更加聰明而非更加努力的工作。

不用太費力你就能發現在軟件開發中80:20原則的用武之地。比如說,80%的性能改進是通過優化20%的代碼實現的,雖然在性能優化這個領域實際的比率可能更加接近于90:10,甚至是99:1。不過,無論是80:20、90:10還是70:30,這個原則本質上沒什么差別。

80:20,誰使用什么,你需要交付的到底是什么

在軟件開發中,另一個眾所周知的80:20原則就是80%的用戶只使用了20%的特性。這來自于Standish Group在2002年的一項研究成果,他們發現:

  • 45%的特性是從來沒有被使用過的
  • 19%的特性很少為人使用
  • 16%的特性有時會被使用
  • 只有20%的特性是被頻繁使用的

這個發現對敏捷與精益開發產生了深遠的影響,它鼓勵人們將精力放在最小的特性集或是最小的產品上,即便在大規模的企業項目中亦如此。相對于設計與規劃大量的特性來說,定義重要且有用的特性才是正確之道:定義好特性的優先級,然后以穩健的步伐盡快交付。

Standish Group最新的研究成果表明縮小思考范圍,交付更少的特性是促使軟件項目成功的關鍵之所在。有超過70%的小項目是成功交付的,而很多大型項目在延遲交付、預算超支以及漏掉關鍵特性上的可能性要超出小項目的兩倍之多。

80:20,Bug與測試

代碼質量、Bug與測試是另一個適用于80:20原則的領域:

  • 80%的Bug是由20%的代碼造成的
  • 90%的停機是由10%(甚至更少)的缺陷造成的

Bug總是集中爆發在某幾部分代碼中,特別是嚴重的Bug;而大多數嚴重的問題都是由少數幾個Bug導致的。

Windows與Office中80%的錯誤與崩潰是由檢測出的20%的Bug造成的。

理解大多數嚴重的Bug發生在何處,為什么會在那里,該如何去做才能防止這些Bug的產生,你應該將時間花在這方面。還有些研究發現你所編寫的一半代碼是沒有Bug的,而大多數Bug都出現在10—20%的代碼中間,通常來說,這10—20%的代碼是經常被改動的代碼。每次發現代碼中的Bug時就表明還有更多Bug需要修復。你發現的Bug越多,剩下的Bug也就越多,這是一種惡性循環。每次碰到那些高風險代碼時,甚至在你嘗試修復一些問題時,那么很有可能你會將事情搞得越來越糟而不是越來越好:當開發者修復容易出錯的代碼中的一個Bug時,有20%的機會他會引入新的Bug,即所謂的副作用。

大多數容易出錯的模塊都是非常復雜的,也是很難理解的,因此也是難以修復的。有些Bug要比其他Bug更難以修復。有時是因為代碼質量很差、有時是因為問題難以重現和調試、有時是因為他們隱藏得更深。

80:20,哪些代碼被修改了,修改頻率是多少

Michael Feathers發現80:20原則也適用于代碼隨時間變化的頻率:

80%的修改發生在20%的代碼上

很多代碼一旦寫完之后就再也不會被修改了,比如說靜態與標準化的接口、基本的配置等等。還有些代碼一直都在發生著變化:20%的特性花了80%的時間,他們經常會根據需求的變化而發生變化;需要不斷優化的核心代碼、還有些代碼會經常發生變化是因為出現了太多的Bug。

向已有的方法添加代碼要比添加新方法容易,向已有的類添加新方法要比添加新的類容易。

這樣,很多系統最后都會有幾個非常龐大的類,包含了大量的方法,隨著代碼的不斷變更,這些類將會變得越來越大。

80:20與編程時間

前80%的代碼只花了20%的時間,而剩下的20%的代碼則花了其余的80%的時間。完成某個功能通常并不會花太多時間,特別是采用迭代與漸進的方式、頻繁且快速的交付的情況下。

不過在背后通常還會有大量工作等待你去完成,比如說處理邊界情況、處理錯誤,確保系統的性能與可伸縮性,尋找并修復各種Bug,部署前的各種調整等等。客戶通常并不理解為什么最后的20%工作要花費那么多的時間。程序員也經常忘記這一點,因此在估算時就會發生各種偏差。這也是開發者經常出現估算錯誤的原因所在。

80:20與軟件開發管理

時刻謹記80:20原則可以節省你大量的金錢與時間,將精力專注于重要的事情上可以不斷提升你成功的可能性。哪些事情是重要的呢?比如說重要的特性、大多數嚴重的Bug出現的代碼區域(需要花費最多時間去修復的Bug),經常會發生變化的代碼。你與你的團隊應該將注意力放在這些地方上才能確保最后的成功。

關鍵詞:軟件開發原則

贊助商鏈接:

168极速赛车24小时开奖