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

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

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
           
          <2005年11月>
          303112345
          6789101112
          13141516171819
          20212223242526
          27282930123
          45678910

          常用鏈接

          留言簿(20)

          隨筆檔案

          友情BLOG

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 汾西县| 福建省| 丹江口市| 泽库县| 郸城县| 东莞市| 大竹县| 永和县| 肃宁县| 米泉市| 高雄县| 玛曲县| 平安县| 恩平市| 丹阳市| 鹤岗市| 九寨沟县| 延津县| 庆城县| 唐河县| 平顺县| 弋阳县| 平南县| 乌兰县| 黎城县| 兴城市| 浠水县| 赤水市| 萨嘎县| 藁城市| 奉贤区| 安陆市| 咸丰县| 信丰县| 逊克县| 临城县| 大竹县| 句容市| 遵义县| 柘荣县| 刚察县|