功能點(diǎn)估算法的核心是利用軟件信息域中的一些計(jì)數(shù)估算和軟件復(fù)雜性估計(jì)的經(jīng)驗(yàn)關(guān)系式而導(dǎo)出功能點(diǎn)FP。因此,它是一種在需求分析階段基于系統(tǒng)功能的一種規(guī)模估計(jì)方法。主要是通過研究初始應(yīng)用需求來確定各種輸入、輸出、計(jì)算和數(shù)據(jù)庫需求的數(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ù),包括可交付的工作控制語言語句、數(shù)據(jù)定義、數(shù)據(jù)類型聲明、等價(jià)聲明、輸入/輸出格式聲明等。這是一種從技術(shù)角度來估算的方法,是以代碼行(LOC)作為軟件工作量的估算單位。開發(fā)團(tuán)隊(duì)可以根據(jù)對(duì)歷史項(xiàng)目的審計(jì)來核算開發(fā)團(tuán)隊(duì)的單行代碼價(jià)值,一個(gè)代碼行的價(jià)值和人月均代碼行數(shù)可以體現(xiàn)一個(gè)軟件開發(fā)團(tuán)隊(duì)的生產(chǎn)能力。LOC方法在早期的系統(tǒng)開發(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ī)模估算,不要依賴于任何一種方法。只有量體裁衣,具體問題具體分析,才能得到盡量合理的規(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)堆滿了雜亂無章的文件時(shí),恐怕是無法知道對(duì)于我們真正有用的文件在哪里。同樣道理,當(dāng)我們從軟件項(xiàng)目中收集了各種需求、意見和問題時(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ī)約,那么可以直接從《需求分析說明書》中把有用的部分拿來使用。如果還沒有開始需求分析,必須要使用需求分析技術(shù)從客戶處得到一個(gè)具體的軟件范圍。因?yàn)榇_定軟件項(xiàng)目的范圍,能形成一個(gè)有界限的開發(fā)框架。雖然這個(gè)開發(fā)框架還不夠精確,但足以進(jìn)行規(guī)模的估算工作。
(3)制訂各級(jí)別的估算表框架和模板
在開發(fā)框架明確后,我們下一步要做的是把公司內(nèi)部有項(xiàng)目經(jīng)驗(yàn)、有估算經(jīng)驗(yàn)的工程們召集在一起,制定各級(jí)別的估算表框架和估算表模板,并寫上足夠清晰的指導(dǎo)。當(dāng)項(xiàng)目組用這些模板的時(shí)候,相當(dāng)于用了估算精英們的腦袋來思考本項(xiàng)目的估算了。然后,再根據(jù)項(xiàng)目的實(shí)際情況列出具體的活動(dòng),后是把這些活動(dòng)進(jìn)行細(xì)化估算。據(jù)我過往的經(jīng)驗(yàn),很多時(shí)候規(guī)模估算沒有做好的緣故是因?yàn)闆]有估算好非直接生產(chǎn)編程的活動(dòng)的規(guī)模,例如管理類、支持類、維護(hù)類的活動(dòng),而根本的原因是沒有制定好估算表框架和有合適的模板可利用。
(4)根據(jù)合適的估算表模板進(jìn)行由底而上的估算
后一步是項(xiàng)目組根據(jù)項(xiàng)目的特點(diǎn)利用合適的估算表模板繼續(xù)細(xì)化,例如進(jìn)行詳細(xì)的WBS分解,列出要完成這個(gè)項(xiàng)目所需要的全部工作。然后,把這些工作通過由底而上的方式進(jìn)行綜合,以估算出項(xiàng)目規(guī)模的大小。
后,分享這次項(xiàng)目失敗給我的教訓(xùn):要客觀的利用和看待過去的經(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í)間的推移,軟件開發(fā)領(lǐng)域的技術(shù)和方法都在發(fā)生著巨大的改變。