救,最后是項(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蛢纱箢?lèi)。目前基于技術(shù)分解模型的方法有:功能點(diǎn)估算法、LOC估算法、MARK II等;基于經(jīng)驗(yàn)?zāi)P偷姆椒ㄓ校篒BM模型、普特南模型、COCOMO模型等。目前基于技術(shù)分解的常用方法是FP功能點(diǎn)估算法和LOC代碼行估算法。本文重點(diǎn)介紹這兩種方法。
?、貴P功能點(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ù)雜度等。
?、贚OC代碼行估算法
衡量軟件項(xiàng)目規(guī)模的最常用方法還有代碼行LOC(Line of Code) 估算法。LOC是指所有的可執(zhí)行的源代碼行數(shù),包括可交付的工作控制語(yǔ)言語(yǔ)句、數(shù)據(jù)定義、數(shù)據(jù)類(lèi)型聲明、等價(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ù)的含糊