常見(jiàn)的項(xiàng)目規(guī)模估算失準(zhǔn)原因
一直以來(lái),軟件項(xiàng)目的規(guī)模估算(Size Estimation)是個(gè)爭(zhēng)論不休的問(wèn)題。不論是對(duì)軟件開(kāi)發(fā)團(tuán)隊(duì)還是對(duì)軟件用戶,軟件規(guī)模估算的重要性都是不容置疑的。因?yàn)樗軜O大的影響著甲方對(duì)發(fā)包軟件的成本估算,乙方對(duì)自身開(kāi)發(fā)成本的預(yù)測(cè),以及乙方對(duì)開(kāi)發(fā)過(guò)程的量化管理等諸多方面。而且,只有相對(duì)合理和相對(duì)準(zhǔn)確地估算軟件規(guī)模,才能對(duì)項(xiàng)目的進(jìn)度安排、資源分配等各個(gè)環(huán)節(jié)進(jìn)行合理的部署。所以,軟件項(xiàng)目的規(guī)模估算是軟件項(xiàng)目中相當(dāng)重要的一環(huán)。但是,以下的原因卻使到我在這次項(xiàng)目的實(shí)際操作中對(duì)項(xiàng)目規(guī)模估算失準(zhǔn)了:
(1)對(duì)項(xiàng)目規(guī)模估算認(rèn)識(shí)不足
項(xiàng)目規(guī)模估算一般分為兩種應(yīng)用場(chǎng)景:一是招投標(biāo)的時(shí)候用來(lái)估價(jià)、報(bào)價(jià);二是用來(lái)安排進(jìn)度計(jì)劃和指導(dǎo)項(xiàng)目具體工作的分配。因此,如果對(duì)規(guī)模估算認(rèn)識(shí)不足的話,將可能會(huì)在這兩種應(yīng)用場(chǎng)景中估算失準(zhǔn)。例如,如果項(xiàng)目規(guī)模低估的話就會(huì)造成人力估算低估、成本預(yù)算低估、日程過(guò)短,最終人力資源耗盡,成本超出預(yù)算。最后為了完成項(xiàng)目不得不趕工,不但會(huì)影響到項(xiàng)目質(zhì)量,甚至?xí)?dǎo)致項(xiàng)目失敗。而如果規(guī)模高估的話,就會(huì)因估價(jià)過(guò)高而降低了招投標(biāo)時(shí)的競(jìng)爭(zhēng)力,或在進(jìn)度安排時(shí)提高了開(kāi)發(fā)成本和浪費(fèi)資源。由于對(duì)規(guī)模估算的認(rèn)識(shí)不足,使到我在這次項(xiàng)目中就嘗到一個(gè)大苦果,就是低估項(xiàng)目規(guī)模導(dǎo)致項(xiàng)目需要多次的追加預(yù)算。我不但多次受到公司領(lǐng)導(dǎo)的批評(píng),而且還受到客戶的多次投訴。
(2)個(gè)人經(jīng)驗(yàn)估算法帶有一定的局限性
一般來(lái)說(shuō),依靠歷史或個(gè)人經(jīng)驗(yàn)的規(guī)模估算方法都有一定的局限性。原因是很難在項(xiàng)目分析和計(jì)劃階段就對(duì)軟件的規(guī)模進(jìn)行相對(duì)準(zhǔn)確的估算。因?yàn)楣浪闶且揽吭u(píng)估人員的經(jīng)驗(yàn),所以對(duì)評(píng)估人員的能力要求比較強(qiáng),并且難以由第三方對(duì)評(píng)估人員的工作偏差作出修正。在這次項(xiàng)目的初期,我片面的只是根據(jù)個(gè)人經(jīng)驗(yàn)進(jìn)行估算,結(jié)果是輕率的估算了項(xiàng)目規(guī)模。這是最后導(dǎo)致項(xiàng)目失利的原因之一。另外,不同軟件項(xiàng)目使用的技術(shù)不一樣,這一點(diǎn)也非常影響到軟件規(guī)模的估算。例如同一個(gè)功能,使用JAVA語(yǔ)言和使用Ruby語(yǔ)言所涉及的代碼行相差數(shù)十行,甚至數(shù)百行。即使同為JAVA語(yǔ)言,使用不用的框架所需要編寫(xiě)的代碼行也不一樣。
(3)對(duì)項(xiàng)目估算時(shí)缺乏數(shù)據(jù)支持
因?yàn)樵谲浖_(kāi)發(fā)初期時(shí)對(duì)規(guī)模估算都是很難準(zhǔn)確量化的,所以到底需要多少資源、多長(zhǎng)時(shí)間或者規(guī)模估算到什么的程度才算是合理的是沒(méi)有一個(gè)標(biāo)準(zhǔn)的。但一個(gè)好的項(xiàng)目估算,是離不開(kāi)一個(gè)準(zhǔn)確的、可信的、客觀的數(shù)據(jù)作為基礎(chǔ)。如果在項(xiàng)目規(guī)模估算時(shí)只憑項(xiàng)目管理人員的經(jīng)驗(yàn)進(jìn)行估算,而缺乏大量的數(shù)據(jù)支持,那么估算最終就會(huì)變成常見(jiàn)的"三拍"現(xiàn)象:"首先是項(xiàng)目經(jīng)理拍腦袋估算,然后是項(xiàng)目經(jīng)理估算失準(zhǔn)時(shí)拍馬屁的補(bǔ)救,最后是項(xiàng)目失敗時(shí)拍屁股走人"。當(dāng)然,這只是個(gè)玩笑。不過(guò)由此可見(jiàn)項(xiàng)目規(guī)模估算不能只依靠經(jīng)驗(yàn)來(lái)估算,而應(yīng)該是要有大量的數(shù)據(jù)來(lái)支持。
什么是軟件項(xiàng)目的規(guī)模估算?
軟件開(kāi)發(fā)項(xiàng)目管理中的一項(xiàng)重要任務(wù)是開(kāi)發(fā)項(xiàng)目的規(guī)模估算,這是極其重要但卻很容易被忽視的一項(xiàng)內(nèi)容。因?yàn)闆](méi)有正確的規(guī)模估算,項(xiàng)目計(jì)劃就會(huì)失去成功的基礎(chǔ)。可惜大部分的開(kāi)發(fā)團(tuán)隊(duì)都很難做到對(duì)項(xiàng)目規(guī)模進(jìn)行準(zhǔn)確的估算。
(1)什么是項(xiàng)目規(guī)模估算?
做好軟件項(xiàng)目管理的基礎(chǔ)是要做好項(xiàng)目的規(guī)劃工作,而做好項(xiàng)目規(guī)劃的前提是要做好軟件估算。也就是說(shuō),就是沒(méi)有好的軟件估算,項(xiàng)目的規(guī)劃、跟蹤和控制就根本無(wú)從談起。因此,軟件估算是項(xiàng)目計(jì)劃活動(dòng)的基礎(chǔ)之一。
軟件估算一般是通過(guò)主觀經(jīng)驗(yàn)和客觀分析兩種方法進(jìn)行,包括有四個(gè)重要方面:規(guī)模估算、工作量估算、進(jìn)度估算和成本估算。其中,對(duì)規(guī)模進(jìn)行估算是為了將項(xiàng)目范圍進(jìn)行量化。規(guī)模估算是整個(gè)軟件估算中最核心、最基礎(chǔ)的環(huán)節(jié),也是整個(gè)軟件估算的第一步。規(guī)模估算有兩個(gè)主要作用:一是通過(guò)規(guī)模估算建立項(xiàng)目基線;二是利用基線對(duì)項(xiàng)目生產(chǎn)率和狀態(tài)進(jìn)行評(píng)價(jià),并確定軟件過(guò)程的進(jìn)度目標(biāo)。也就是說(shuō),規(guī)模估算是一切估算的基礎(chǔ),是能直接決定和影響到其它三個(gè)估算的決策。
(2)常用的軟件規(guī)模估算方法
估算是建立在客觀事實(shí)上對(duì)未來(lái)可能發(fā)生的事情的一種合理性預(yù)測(cè)。估算本身的不確定性,決定了它不可能是百分之百準(zhǔn)確無(wú)誤的,但是依據(jù)某種方法進(jìn)行合理估計(jì)顯然比瞎猜好得多。軟件估算方法有很多,大致分為基于技術(shù)分解模型和基于經(jīng)驗(yàn)?zāi)P蛢纱箢?。目前基于技術(shù)分解模型的方法有:功能點(diǎn)估算法、LOC估算法、MARK II等;基于經(jīng)驗(yàn)?zāi)P偷姆椒ㄓ校篒BM模型、普特南模型、COCOMO模型等。目前基于技術(shù)分解的常用方法是FP功能點(diǎn)估算法和LOC代碼行估算法。本文重點(diǎn)介紹這兩種方法。
①FP功能點(diǎn)法
功能點(diǎn)分析法 (FPA:Function Point Analysis) 是一種相對(duì)抽象的方法,是一種人為設(shè)計(jì)的估算方式。它是從系統(tǒng)的復(fù)雜性和系統(tǒng)的特性這兩個(gè)角度來(lái)估算系統(tǒng)的規(guī)模,它的關(guān)注點(diǎn)在于程序的"功能性"和"實(shí)用性",是對(duì)軟件和軟件開(kāi)發(fā)過(guò)程的間接估算。最初是由 IBM 工程師艾倫艾爾布策提出的,隨后被IFPUG 方法繼承,是目前國(guó)際上主流的軟件規(guī)模估算方法。
功能點(diǎn)估算法的核心是利用軟件信息域中的一些計(jì)數(shù)估算和軟件復(fù)雜性估計(jì)的經(jīng)驗(yàn)關(guān)系式而導(dǎo)出功能點(diǎn)FP。因此,它是一種在需求分析階段基于系統(tǒng)功能的一種規(guī)模估計(jì)方法。主要是通過(guò)研究初始應(yīng)用需求來(lái)確定各種輸入、輸出、計(jì)算和數(shù)據(jù)庫(kù)需求的數(shù)量和特性。這種方法的計(jì)算公式是:功能點(diǎn)=信息處理規(guī)模X技術(shù)復(fù)雜度。其中,信息處理規(guī)模包括:各種輸入、輸出、查詢、內(nèi)部邏輯文件數(shù)、外部接口文件數(shù)等;技術(shù)復(fù)雜度則包括:性能復(fù)雜度、配置項(xiàng)目復(fù)雜度、數(shù)據(jù)通信復(fù)雜度、分布式處理復(fù)雜度、在線更新復(fù)雜度等。
②LOC代碼行估算法
衡量軟件項(xiàng)目規(guī)模的最常用方法還有代碼行LOC(Line of Code) 估算法。LOC是指所有的可執(zhí)行的源代碼行數(shù),包括可交付的工作控制語(yǔ)言語(yǔ)句、數(shù)據(jù)定義、數(shù)據(jù)類型聲明、等價(jià)聲明、輸入/輸出格式聲明等。這是一種從技術(shù)角度來(lái)估算的方法,是以代碼行(LOC)作為軟件工作量的估算單位。開(kāi)發(fā)團(tuán)隊(duì)可以根據(jù)對(duì)歷史項(xiàng)目的審計(jì)來(lái)核算開(kāi)發(fā)團(tuán)隊(duì)的單行代碼價(jià)值,一個(gè)代碼行的價(jià)值和人月均代碼行數(shù)可以體現(xiàn)一個(gè)軟件開(kāi)發(fā)團(tuán)隊(duì)的生產(chǎn)能力。LOC方法在早期的系統(tǒng)開(kāi)發(fā)中較為廣泛使用。優(yōu)點(diǎn)在于方便計(jì)算、容易監(jiān)控、能反映程序員的思維能力;缺點(diǎn)在于代碼行數(shù)的含糊不清,不能正確反映一項(xiàng)工作的難易程度以及代碼的效率。因此,在傳統(tǒng)的LOC方法上有許多改進(jìn)的方法。這些不斷演化的新方法有:PERT功能點(diǎn)估算法、類比估算法、系統(tǒng)分解法等。
除了以上介紹的兩種方法外,還有許多其它的估算方法。不同的方法適用于不同的具體環(huán)境,有些方法雖然很好但并不一定適合當(dāng)前的任務(wù)。因此,建議至少使用兩種方法進(jìn)行規(guī)模估算,不要依賴于任何一種方法。只有量體裁衣,具體問(wèn)題具體分析,才能得到盡量合理的規(guī)模估算。
準(zhǔn)確進(jìn)行項(xiàng)目規(guī)模估算的步驟
(1)規(guī)模估算前先制定良好的規(guī)劃
一個(gè)成功的軟件項(xiàng)目首先要有一個(gè)好的起點(diǎn),也就是一個(gè)合理的規(guī)劃。同樣道理,一個(gè)好的規(guī)模估算也需要有一個(gè)好的規(guī)劃。例如,當(dāng)我們的辦公室內(nèi)堆滿了雜亂無(wú)章的文件時(shí),恐怕是無(wú)法知道對(duì)于我們真正有用的文件在哪里。同樣道理,當(dāng)我們從軟件項(xiàng)目中收集了各種需求、意見(jiàn)和問(wèn)題時(shí),我們也很難從中估算出整個(gè)項(xiàng)目的規(guī)模、工作量以及成本。因此,在估算之前首先要對(duì)眾多信息進(jìn)行整理、歸類和分析,從而得到一個(gè)條理清晰的項(xiàng)目規(guī)劃。在這個(gè)規(guī)劃提供的框架內(nèi),才可能正確的估算。因?yàn)橛辛艘?guī)劃才能成竹在胸,才能給規(guī)模估算指出正確的方向。
(2)確定軟件項(xiàng)目的范圍
確定軟件項(xiàng)目的范圍,就是確定目標(biāo)軟件的數(shù)據(jù)和控制、功能、性能、約束、接口以及可靠性的要求。這項(xiàng)工作和需求分析是很類似的,如果之前已經(jīng)達(dá)成需求分析規(guī)約,那么可以直接從《需求分析說(shuō)明書(shū)》中把有用的部分拿來(lái)使用。如果還沒(méi)有開(kāi)始需求分析,就必須要使用需求分析技術(shù)從客戶處得到一個(gè)具體的軟件范圍。因?yàn)榇_定軟件項(xiàng)目的范圍,就能形成一個(gè)有界限的開(kāi)發(fā)框架。雖然這個(gè)開(kāi)發(fā)框架還不夠精確,但足以進(jìn)行規(guī)模的估算工作。
(3)制訂各級(jí)別的估算表框架和模板
在開(kāi)發(fā)框架明確后,我們下一步要做的是把公司內(nèi)部最有項(xiàng)目經(jīng)驗(yàn)、最有估算經(jīng)驗(yàn)的工程們召集在一起,制定各級(jí)別的估算表框架和估算表模板,并寫(xiě)上足夠清晰的指導(dǎo)。當(dāng)項(xiàng)目組用這些模板的時(shí)候,就相當(dāng)于用了估算精英們的腦袋來(lái)思考本項(xiàng)目的估算了。然后,再根據(jù)項(xiàng)目的實(shí)際情況列出具體的活動(dòng),最后是把這些活動(dòng)進(jìn)行細(xì)化估算。據(jù)我過(guò)往的經(jīng)驗(yàn),很多時(shí)候規(guī)模估算沒(méi)有做好的緣故是因?yàn)闆](méi)有估算好非直接生產(chǎn)編程的活動(dòng)的規(guī)模,例如管理類、支持類、維護(hù)類的活動(dòng),而根本的原因是沒(méi)有制定好估算表框架和有合適的模板可利用。
(4)根據(jù)合適的估算表模板進(jìn)行由底而上的估算
最后一步是項(xiàng)目組根據(jù)項(xiàng)目的特點(diǎn)利用合適的估算表模板繼續(xù)細(xì)化,例如進(jìn)行詳細(xì)的WBS分解,列出要完成這個(gè)項(xiàng)目所需要的全部工作。然后,把這些工作通過(guò)由底而上的方式進(jìn)行綜合,以估算出項(xiàng)目規(guī)模的大小。
最后,分享這次項(xiàng)目失敗給我的教訓(xùn):要客觀的利用和看待過(guò)去的經(jīng)驗(yàn)。因?yàn)橐酝墓浪憬?jīng)驗(yàn)雖然是寶貴的財(cái)富,但是如果財(cái)富用錯(cuò)了地方就會(huì)變成垃圾。在使用歷史經(jīng)驗(yàn)時(shí),要注意現(xiàn)在和參考經(jīng)驗(yàn)之間的差異。不要忘記,隨著時(shí)間的推移,軟件開(kāi)發(fā)領(lǐng)域的技術(shù)和方法都在發(fā)生著巨大的改變。
溫馨提示:因考試政策、內(nèi)容不斷變化與調(diào)整,信管網(wǎng)網(wǎng)站提供的以上信息僅供參考,如有異議,請(qǐng)以權(quán)威部門(mén)公布的內(nèi)容為準(zhǔn)!
信管網(wǎng)致力于為廣大信管從業(yè)人員、愛(ài)好者、大學(xué)生提供專業(yè)、高質(zhì)量的課程和服務(wù),解決其考試證書(shū)、技能提升和就業(yè)的需求。
信管網(wǎng)軟考課程由信管網(wǎng)依托10年專業(yè)軟考教研傾力打造,官方教材參編作者和資深講師坐鎮(zhèn),通過(guò)深研歷年考試出題規(guī)律與考試大綱,深挖核心知識(shí)與高頻考點(diǎn),為學(xué)員考試保駕護(hù)航。面授、直播&錄播,多種班型靈活學(xué)習(xí),滿足不同學(xué)員考證需求,降低課程學(xué)習(xí)難度,使學(xué)習(xí)效果事半功倍。
發(fā)表評(píng)論 查看完整評(píng)論 | |