2.探尋假設
在探尋軟件開發以往的方法論背后的假設之前,首先要指出的是,這些假設很難被發現,不是說它們不存在,而是這些加上很少被看成是假設,往往作為理所當然的一部分,被排除在常規的思考范圍之外。讓我們來看幾段大家都很熟悉的文字吧。
“大多數大型軟件項目都沒有達到預期的目標,交付推遲,預算超支,功能不完善。許多軟件項目徹底失敗了。”
——FDD
“當前,軟件開發的情況并不理想。很多系統最終不能交付,或者最終交付的系統經常性地發生延期或者超出預算;系統常常不能滿足用戶的需要,其結果是不得不一遍又一遍地開發。”
——AM
“許多軟件項目,或許應該說大部分軟件項目實際的開發周期比預期的要長,實際的花費比預期的要多,實現的功能比預期的要少。這造成了嚴重的質量問題。”
——某一本CMM的書籍
怎么樣,是不是似曾相識?我敢肯定,你不只在一本書的序言部分,看到過類似的文字。無論這本書寫于70年代、80年代、90年代還是21世紀。情況一直都是這么“糟糕”。有趣的是,這些書都會在“痛說軟件開發現狀”之后,轉而兜售自己的方案。當然,在Brooks的《沒有銀彈》之后,他們兜售的語氣謙虛了很多。作為一個文化現象來說,這非常值得細細品味。但是,我們需要追問的是:為什么?
難道軟件開發是全世界最難的事情嗎?為什么失敗率如此之高?如果我們在使用了層出不窮的手段之后,還是不能提高成功率,我們應該怎么辦?其實也很容易,當年我的一個老板就想出了一個絕妙的辦法,絕對簡單,就是將我自己的工作量估算乘2!我們的項目幾乎從不失敗,總是能夠在計劃時間內完成。于是我想,如果我們把全世界的軟件項目估算都乘以2的話。也許軟件開發這個行當,也能成為一個有尊嚴的職業。大家都會生活得更加幸福。
“這實在是太過分了!”也許有人會說:“你這是自欺欺人、掩耳盜鈴、移靶就箭!”但是且慢生氣,生氣的人應該冷靜下來反思:如果目標如此難以達到,會不會是目標有問題呢?當然,事情沒有這么簡單,如果把目標直接乘2來提高成功率,全世界的老板都會發瘋的!我們要做的,是提高估算的準確性。
“嘖嘖,還以為是什么了不得的結論呢!這個問題早就有人研究了,不就是IT度量嗎?”一定會有人站出來這么說。但是,IT度量的研究,提高了估算的準確度了嗎?思路在這里被卡住了。直到有一天,我看到了量子力學中的“測不準原理”!
“測不準原理”告訴我們,在物理學中存在著很多對變量,當我們想要精確測量其中一個變量時,對另一個變量的測量誤差就會越來越大。但是,在軟件開發里,我們是進行估算,而不是進行測量,而且也不存在一個和工作量相對的變量,當工作量估算準確時,它會變得模糊。簡單地套用物理定律是行不通的,思路又卡住了。
突然有一天,我問自己:“假設工作量已經估算精確到了99.9999%會出現什么情況?”“不可能!”“如果真的達到了這個精確度了呢?”我對自己窮追不舍。“那只有一種情況,就是項目已經接近完成了!”“我們估算完成時,項目接近完成,這意味著什么呢?”“這毫無意義,沒有一個項目會花這個多時間來估算,而且如果要這樣估算,估算本身要花多少時間都不知道。”停!我已經想通這個問題了。
估算工作量也是一種工作,同樣也需要工作量。對于大多數任務來說,估算所花費的工作量,相對與總的工作量來說,幾乎可以忽略不計,或者說:為了能夠得到一個有指導價值的估算值,所花費的工作量,幾乎可以忽略。但是,對于軟件開發來說,這只是一個假設。我們假設對于軟件開發的工作量估算,同樣只需要花費極少的工作量。但事實上,當我們花費三五天時間得出結論,這個項目需要20個人月時,我們估算的誤差,可能(甚至一定)會大于200%這就是我們這個行業顯得如此失敗的原因。
為什么這個行業與其它行業不同呢?在建筑行業,工程概預算的費用,不超過總費用的百分之一、甚至千分之一。為什么軟件項目的估算做不到這一點?因為兩個原因:
一是由于技術的復雜性,以及這個行業技術的飛速發展(也可說尚未定型),同樣的需求,采用不同的設計,不同的技術實現,工作量相差極大。僅僅根據需求,無法估算出工作量。而隨著概要設計、詳細設計的層層分解,工作量估算的精確度的確會提高,但是對于軟件開發來說,項目也越來越接近完成了。
二是由于需求的變動性以及不可預測性。早期的估算、設計甚至代碼,都有可能作廢。一個項目實際上重做了N遍,在軟件開發領域也是常有的事。估算的誤差,自然也就大到不可思議了。
然而,絕大多數人沒有想過這個問題,大家都自然而然的根據最初的工作量估算,來評價以后的工作。
工作量/人員效率=項目時間
工作量×單位成本=項目成本
缺陷總數/工作量=軟件質量
我們根據最初估算的工作量,來推出項目的時間、成本和質量目標,我們假設工作量估算只花費可以忽略不計的工作量,我們依據這些目標來衡量項目的成敗,然后我們發現大多數項目都失敗了,然后我們研究技術、改進過程、尋找銀彈!最終,我們發現自己還是這么失敗!
是到了徹底反省我們的假設的時候了。
(注:Brooks在《人月神話》中指出了另一個重要的假設:人與月是可以互換的。)
&referrer=)

文章來源:
http://spaces.msn.com/members/zbw25/Blog/cns!1pA6-3FOo9yNp_4lmEHxdDqA!683.entry
posted on 2005-11-07 23:24
讀書、思考、生活 閱讀(203)
評論(0) 編輯 收藏