(2)如果沒有歷史數(shù)據(jù)可用,或者新項目與以前做過的項目差別較大,那么可以使用一個成熟的估算模型,如采用IBM模型、COCOMO模型或Putnam方法論,將軟件項目規(guī)模轉(zhuǎn)換成工作量。 信息工程監(jiān)理的中心任務(wù)是對信息工程項目的進(jìn)度目標(biāo)、質(zhì)量目標(biāo)和風(fēng)險防范,實施有效的監(jiān)督、協(xié)調(diào)與控制。為了監(jiān)督、控制軟件項目開發(fā)過程的性能等,引入定量監(jiān)理十分必要。為此,本期將首先介紹進(jìn)度的定量監(jiān)理過程,在下一期將介紹質(zhì)量和風(fēng)險的定量監(jiān)理。
這些模型通過對大量不同類型組織已完成項目進(jìn)行研究,得出的項目規(guī)模與工作量之間的關(guān)系和轉(zhuǎn)換方法。這些行業(yè)性的模型可能不如自己的歷史數(shù)據(jù)精確,但是非常有效。目前,還沒有一種估算模型能夠適用于所有的軟件類型和開發(fā)環(huán)境,在監(jiān)理活動中,從這些模型得到的結(jié)果必須根據(jù)項目的實際情況慎重使用,或者采用多個模型進(jìn)行估算、掌握工作量的基本范圍并與實際的工作量計劃比較。
下面以IBM模型為例來進(jìn)行計算。 為了計算,我們應(yīng)當(dāng)利用逆向法將功能點轉(zhuǎn)化成一個等價的SLOC數(shù)值。這一步可以使用表4的語言等價表來完成:
所以,使用java 2完成上述項目(366功能點)時,將大約需要下列SLOC數(shù):
L = 366×46 = 16386行 = 16.386KLOC
E = 5.2×L0.91 = 5.2×16.3860.91 = 66人/月
DOC = 49×L1.01 = 49×16.3861.01 = 826頁
3、制定計劃
對軟件項目進(jìn)行估算的第三步是根據(jù)工作量制定項目計劃,包括人員安排、工作量分解、開始和完成時間等等?梢愿鶕(jù)自己的歷史數(shù)據(jù)或行業(yè)模型決定所需的資源并落實到項目計劃?梢圆捎蒙鲜龅腎BM模型或McConnell給出的方法粗略地給出項目持續(xù)時間(以IBM模型為例):
項目需要的人員S=0.54×E0.6 =0.54×660.6=7人
項目持續(xù)時間D=4.1×L0.36 =4.1×16.3860.36=11月
4、成本估算
項目的成本估算包括許多因素:人力成本、辦公費(fèi)用、管理費(fèi)用、設(shè)備和軟件等的購置費(fèi)用、場地租金、旅差費(fèi)等等。對項目成本的估算取決于公司所采用的成本核算方法。有的公司某些費(fèi)用并沒有計入項目成本中,而是按管理費(fèi)用等分?jǐn)偂S械膹臍v史數(shù)據(jù)求出生產(chǎn)率度量和每行成本,即行/PM(人月)和元/行,則LOC的值與元/行相乘得到成本,用LOC 的值與行/PM相除得到工作量。具體可按公司的具體情況選擇。
注:本文作為示例給出的針對進(jìn)度等的定量監(jiān)理的估算方法只是眾多方法中的一種。筆者的目的是建議監(jiān)理單位在項目監(jiān)理過程中根據(jù)實際情況適當(dāng)采用定量的方法。更多的估算方法,可以參考有關(guān)軟件評估方面的書籍和其它資料。
幾種估算模型的介紹
1、IBM模型
1977年,IBM的Walston和Felix提出了如下的估算公式:
E = 5.2×L0.91,L是源代碼行數(shù)(以KLOC計),E是工作量(以PM計)
D = 4.1×L0.36,D是項目持續(xù)時間(以月計)
S = 0.54×E0.6,S是人員需要量(以人計)
DOC = 49×L1.01。DOC是文檔數(shù)量(以頁計)
在此模型中,一般指一條機(jī)器指令為一行源代碼。一個軟件的源代碼行數(shù)不包括程序注釋、作業(yè)命令、調(diào)試程序在內(nèi)。對于非機(jī)器指令編寫的源程序,如匯編語言或高級語言程序,應(yīng)轉(zhuǎn)換成機(jī)器指令源代碼行數(shù)來考慮。
2、Putnam模型
這是1978年P(guān)utnam提出的模型,是一種動態(tài)多變量模型。它是假定在軟件開發(fā)的整個生存期中工作量有特定的分布。這種模型是依據(jù)在一些大型項目(總工作量達(dá)到或超過30個人年)中收集到的工作量分布情況而推導(dǎo)出來的,但也可以應(yīng)用在一些較小的軟件項目中。
Putnam模型可以導(dǎo)出一個“軟件方程”,把已交付的源代碼(源語句)行數(shù)與工作量和開發(fā)時間聯(lián)系起來。其中,td是開發(fā)持續(xù)時間(以年計),K是軟件開發(fā)與維護(hù)在內(nèi)的整個生存期所花費(fèi)的工作量(以人年計),L是源代碼行數(shù)(以LOC計),Ck是技術(shù)狀態(tài)常數(shù),它反映出“妨礙程序員進(jìn)展的限制”,并因開發(fā)環(huán)境而異。其典型值的選取如下表所示。
3、COCOMO模型(COnstructive COst MOdel)
這是由TRW公司開發(fā)。Boehm提出的結(jié)構(gòu)型成本估算模型,是一種精確、易于使用的成本估算方法。在該模型中使用的基本量有以下幾個:DSI(源指令條數(shù))定義為代碼或卡片形式的源程序行數(shù)。若一行有兩個語句,則算做一條指令。它包括作業(yè)控制語句和格式語句,但不包括注釋語句。KDSI=1000DSI。MM(度量單位為人月)表示開發(fā)工作量。TDEV(度量單位為月)表示開發(fā)進(jìn)度。它由工作量決定。
(1)軟件開發(fā)項目的分類
在COCOMO模型中,考慮開發(fā)環(huán)境,軟件開發(fā)項目的總體類型可分為三種:組織型(Organic)、嵌入型(Embedded)和介于上述兩種軟件之間的半獨(dú)立型(Semidetached)。
(2)COCOMO模型的分類
COCOMO模型按其詳細(xì)程度分成三級:即基本COCOMO模型、中間COCOMO模型、詳細(xì)COCOMO模型;綜OCOMO模型是一個靜態(tài)單變量模型,它用一個以已估算出來的源代碼行數(shù)(LOC)為自變量的(經(jīng)驗)函數(shù)來計算軟件開發(fā)工作量。中間COCOMO模型則在用LOC為自變量的函數(shù)計算軟件開發(fā)工作量(此時稱為名義工作量)的基礎(chǔ)上,再用涉及產(chǎn)品、硬件、人員、項目等方面屬性的影響因素來調(diào)整工作量的估算。詳細(xì)COCOMO模型包括中間COCOMO模型的所有特性,但用上述各種影響因素調(diào)整工作量估算時,還要考慮對軟件工程過程中每一步驟(分析、設(shè)計等)的影響。
應(yīng)用軟件系統(tǒng)開發(fā)過程中,不僅存在著信息不對稱的風(fēng)險,還存在著各方信息處理能力不對稱引起的風(fēng)險;不但有項目的特殊風(fēng)險,還有項目管理風(fēng)險;不但有經(jīng)濟(jì)風(fēng)險,還有時間風(fēng)險、心理風(fēng)險等。
定量過程監(jiān)理的目的是定量監(jiān)督、控制軟件項目的開發(fā)過程性能,軟件開發(fā)過程性能決定了實施軟件過程所獲得的實際結(jié)果。
應(yīng)用軟件開發(fā)是非常專業(yè)的,而且是講究分工的。需求分析、總體設(shè)計、概要和詳細(xì)設(shè)計、編碼、測試、安裝及維護(hù)等,每一個過程都有自己的精深之處,涉及的專業(yè)面廣、業(yè)務(wù)和技術(shù)性強(qiáng)、可見性差、風(fēng)險大、可預(yù)見性小。即使應(yīng)用軟件承建方按規(guī)范開發(fā)模式的要求一步步進(jìn)行,也會遇到許多不可預(yù)見的問題,更不用說承建方可能有不規(guī)范行為的情況。信息化系統(tǒng)的核心是軟件,由于難以對軟件工程的質(zhì)量和進(jìn)度等進(jìn)行有效的監(jiān)控,因此,若承建方不按規(guī)范進(jìn)行設(shè)計、實施、測試,也不易察覺。
凡此種種,造成許多信息化系統(tǒng)工程項目不成功,不完善,長期收不了口,“豆腐渣”工程層出不窮,嚴(yán)重地影響了信息化系統(tǒng)工程的質(zhì)量和進(jìn)度,不僅損害了合同雙方的利益,還給國家和社會造成了許多不應(yīng)有的損失。因此,在軟件開發(fā)監(jiān)理過程中,引入定量的方法、手段對應(yīng)用軟件開發(fā)過程的某些方面進(jìn)行定量計算、分析和驗證,或通過定量的方法對可能出現(xiàn)的故障、風(fēng)險進(jìn)行分析判斷,或為執(zhí)行者提供數(shù)據(jù)進(jìn)行核實,從而降低工程建設(shè)的風(fēng)險,使投資的信息化系統(tǒng)發(fā)揮應(yīng)有的作用是非常必要的。
軟件開發(fā)定量監(jiān)理的兩個基本“點”
通過中國軟件評測中心大量的監(jiān)理實踐,我們體會到應(yīng)用軟件開發(fā)過程的定量監(jiān)理可以從以下三個方面展開,即:軟件開發(fā)進(jìn)度的監(jiān)理、軟件開發(fā)的質(zhì)量監(jiān)理和軟件開發(fā)的風(fēng)險監(jiān)理。在進(jìn)度、質(zhì)量和風(fēng)險的定量監(jiān)理中,又分別按照度量、估算兩個步驟進(jìn)行定量分析、監(jiān)理。
度量:根據(jù)一定的度量標(biāo)準(zhǔn)對軟件開發(fā)過程中所產(chǎn)生的數(shù)據(jù)進(jìn)行收集和整理,如代碼行(LOC)和功能點(FP)的數(shù)量。它為估計不準(zhǔn)、進(jìn)度緩慢、可見性差等普遍問題提供了矯正的方法。
軟件度量的主要作用有兩個,一是使用軟件度量建立項目基線;二是收集項目當(dāng)前的生產(chǎn)率和質(zhì)量狀態(tài),利用基線對項目當(dāng)前狀態(tài)進(jìn)行評價,并確定軟件工程過程的改進(jìn)目標(biāo)。
估算:通常的定義是,對未來事實非零可能性的最樂觀的預(yù)測。軟件項目估算是項目計劃活動的基礎(chǔ),估算是一門科學(xué),也是一門藝術(shù),應(yīng)當(dāng)認(rèn)識到,軟件評估永遠(yuǎn)也不會是一門精確的科學(xué)。
對進(jìn)度定量監(jiān)理的四步法
軟件項目的規(guī)模、進(jìn)度估算歷來是比較復(fù)雜的事,因為軟件本身的復(fù)雜性、歷史經(jīng)驗的缺乏、估算工具缺乏以及一些人為錯誤,導(dǎo)致軟件項目的規(guī)模估算往往和實際情況相差甚遠(yuǎn)。因此,是監(jiān)理工作的重點之一。
為了可靠地對軟件項目進(jìn)行估算,我們采取如下4個步驟:第一步是對軟件規(guī)模進(jìn)行估算。一般是通過計算LOC(源代碼行數(shù))或功能點數(shù)(FP)完成的,也可以基于過程進(jìn)行估算;第二步是估算軟件項目所需的工作量,以人月或人小時為單位;第三步是以自然月為單位,估算項目的進(jìn)度;第四步是估算項目成本。下面來具體介紹。
1、估算項目的規(guī)模
對軟件項目進(jìn)行有效的估算,取決于掌握多少有關(guān)項目范圍的原始資料。通常,應(yīng)當(dāng)根據(jù)正式的需求描述進(jìn)行估算。正式的需求描述可以是需求說明書、系統(tǒng)規(guī)格說明書或軟件需求說明書等。如果開始時缺乏一些正式的資料,也可以采用口頭描述或草稿的方式開始估算工作。在得到項目范圍的正式資料后,必須進(jìn)行再估算。估算的兩個主要方法是:
第一種方法是根據(jù)項目特征和算法進(jìn)行估算。
例如,根據(jù)軟件系統(tǒng)的輸入、輸出、查詢、文件及外部接口等信息,使用功能點法估算出系統(tǒng)的規(guī)模;诠δ茳c估算是按照用例(Use case)來做的,而不是軟件功能來做。通過研究初始應(yīng)用需求來確定各種輸入、輸出、計算和數(shù)據(jù)庫需求的數(shù)量和特性。通常的步驟是:
A、計算輸入、輸出、查詢、主控文件和接口需求的數(shù)目。
B、將這些數(shù)據(jù)進(jìn)行加權(quán)乘。下表為一個典型的權(quán)值表。
C、估計者根據(jù)對復(fù)雜度的判斷,總數(shù)可以用樂觀值、可能值或悲觀值調(diào)整。
D、采用下面的方式計算功能點:
FP=總計數(shù)值×[0.65+0.01×ΣFi]
其中,“總計數(shù)值”是所有功能點條目的總和。
Fi(i=1到14)是基于對表2中問題的回答而得到的“復(fù)雜度調(diào)整值”(0~5)。等式中的常數(shù)和信息域值的加權(quán)因子是根據(jù)經(jīng)驗確定的。
下面將以某個計算機(jī)輔助設(shè)計(CAD)應(yīng)用為例,估算開發(fā)的軟件包的輸入、輸出、查詢、文件及外部接口。為了達(dá)到這個估算目的,我們假設(shè)復(fù)雜度加權(quán)因子都是平均的。根據(jù)對軟件范圍的敘述,對軟件功能進(jìn)行分解,識別出主要的幾個功能:用戶界面和控制功能、二維幾何分析、三維幾何分析、數(shù)據(jù)庫管理、計算機(jī)圖形顯示功能、外設(shè)控制以及設(shè)計分析模塊。最后可得到如表2所示的估算表。
由表2得到總計數(shù)值為318。
接著,估算14個復(fù)雜度加權(quán)因子(Fi,根據(jù)問題對項目的影響取值范圍是0~5),表3給出了因子值。
FP=總計數(shù)值×[0.65+0.01×ΣFi]=366
第二種方法是采用類比的方法,根據(jù)歷史數(shù)據(jù)來進(jìn)行估算。
如果有一個以前做過的類似項目并且掌握它的規(guī)模,就可以把新項目的各個主要部分與原有項目的相應(yīng)部分進(jìn)行比較,得出一個比例關(guān)系,將各部分相對于原項目規(guī)模比例相加,計算出新項目的規(guī)模。如果估算者的經(jīng)驗豐富并且新項目與老項目具有足夠的相似性,就能夠得到合理的估算值。
但是采用類比法,往往還要解決可重用代碼的估算問題。估計可重用代碼量的最好辦法就是由程序員或系統(tǒng)分析員詳細(xì)地考查已存在的代碼,估算出新項目可重用的代碼中需重新設(shè)計的代碼百分比、需重新編碼或修改的代碼百分比以及需重新測試的代碼百分比。根據(jù)這三個百分比,可用下面的計算公式計算等價新代碼行:
等價代碼行 = [(重新設(shè)計% +重新編碼% +重新測試%)/3]× 已有代碼行
比如:有10,000行代碼,假定35%需要重新設(shè)計,55%需要重新編碼,75%需要重新測試,那么其等價的代碼行可以計算為:
[(30% + 50% + 70%)/3]×10,000= 5,500 等價代碼行。即:重用這10000代碼相當(dāng)于編寫5500代碼行的工作量。
2、工作量估算
估算出軟件規(guī)模并且對軟件的開發(fā)周期進(jìn)行定義后,開始估算軟件項目的工作量。軟件規(guī)模的估算結(jié)果是代碼量,但是軟件項目的開發(fā)、實施過程并不是只有編碼的工作,實際上編碼的工作量在這個過程中是最小的。編寫文檔、架構(gòu)設(shè)計、系統(tǒng)設(shè)計、測試以及實施發(fā)布等將占用大量的工作時間。因此,對軟件項目工作量的估算就是確定、估算這樣一個代碼量的項目所需的各種工作,相加得到項目的工作量。從軟件規(guī)模(代碼量)估算出項目工作量主要采用下述的兩個方法:
(1)最好的方法是利用歷史數(shù)據(jù),根據(jù)以前做過的類似項目規(guī)模與新項目規(guī)模的比例關(guān)系,對照以前項目的工作量求出新項目的工作量。
采用這個方法的前提是:a.對以前項目規(guī)模和工作量的計量是正確的;b.至少有一個以前的項目的規(guī)模和新項目類似;c.新項目的開發(fā)周期、使用的開發(fā)方法、開發(fā)工具與以前項目的類似,而且開發(fā)人員的技能和經(jīng)驗也不能與原來的人員相差太大。