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

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