(2)如果沒有歷史數(shù)據(jù)可用,或者新項(xiàng)目與以前做過的項(xiàng)目差別較大,那么可以使用一個(gè)成熟的估算模型,如采用IBM模型、COCOMO模型或Putnam方法論,將軟件項(xiàng)目規(guī)模轉(zhuǎn)換成工作量。

這些模型通過對(duì)大量不同類型組織已完成項(xiàng)目進(jìn)行研究,得出的項(xiàng)目規(guī)模與工作量之間的關(guān)系和轉(zhuǎn)換方法。這些行業(yè)性的模型可能不如自己的歷史數(shù)據(jù)精確,但是非常有效。目前,還沒有一種估算模型能夠適用于所有的軟件類型和開發(fā)環(huán)境,在監(jiān)理活動(dòng)中,從這些模型得到的結(jié)果必須根據(jù)項(xiàng)目的實(shí)際情況慎重使用,或者采用多個(gè)模型進(jìn)行估算、掌握工作量的基本范圍并與實(shí)際的工作量計(jì)劃比較。

下面以IBM模型為例來進(jìn)行計(jì)算。 為了計(jì)算,我們應(yīng)當(dāng)利用逆向法將功能點(diǎn)轉(zhuǎn)化成一個(gè)等價(jià)的SLOC數(shù)值。這一步可以使用表4的語(yǔ)言等價(jià)表來完成:

 

1.jpg

所以,使用java 2完成上述項(xiàng)目(366功能點(diǎn))時(shí),將大約需要下列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頁(yè)

3、制定計(jì)劃

對(duì)軟件項(xiàng)目進(jìn)行估算的第三步是根據(jù)工作量制定項(xiàng)目計(jì)劃,包括人員安排、工作量分解、開始和完成時(shí)間等等?梢愿鶕(jù)自己的歷史數(shù)據(jù)或行業(yè)模型決定所需的資源并落實(shí)到項(xiàng)目計(jì)劃?梢圆捎蒙鲜龅腎BM模型或McConnell給出的方法粗略地給出項(xiàng)目持續(xù)時(shí)間(以IBM模型為例):

項(xiàng)目需要的人員S=0.54×E0.6 =0.54×660.6=7人

項(xiàng)目持續(xù)時(shí)間D=4.1×L0.36 =4.1×16.3860.36=11月

4、成本估算

項(xiàng)目的成本估算包括許多因素:人力成本、辦公費(fèi)用、管理費(fèi)用、設(shè)備和軟件等的購(gòu)置費(fèi)用、場(chǎng)地租金、旅差費(fèi)等等。對(duì)項(xiàng)目成本的估算取決于公司所采用的成本核算方法。有的公司某些費(fèi)用并沒有計(jì)入項(xiàng)目成本中,而是按管理費(fèi)用等分?jǐn)偂S械膹臍v史數(shù)據(jù)求出生產(chǎn)率度量和每行成本,即行/PM(人月)和元/行,則LOC的值與元/行相乘得到成本,用LOC 的值與行/PM相除得到工作量。具體可按公司的具體情況選擇。

注:本文作為示例給出的針對(duì)進(jìn)度等的定量監(jiān)理的估算方法只是眾多方法中的一種。筆者的目的是建議監(jiān)理單位在項(xiàng)目監(jiān)理過程中根據(jù)實(shí)際情況適當(dāng)采用定量的方法。更多的估算方法,可以參考有關(guān)軟件評(píng)估方面的書籍和其它資料。

幾種估算模型的介紹

1、IBM模型

  1977年,IBM的Walston和Felix提出了如下的估算公式:

  E = 5.2×L0.91,L是源代碼行數(shù)(以KLOC計(jì)),E是工作量(以PM計(jì))

  D = 4.1×L0.36,D是項(xiàng)目持續(xù)時(shí)間(以月計(jì))

  S = 0.54×E0.6,S是人員需要量(以人計(jì))

  DOC = 49×L1.01。DOC是文檔數(shù)量(以頁(yè)計(jì))

在此模型中,一般指一條機(jī)器指令為一行源代碼。一個(gè)軟件的源代碼行數(shù)不包括程序注釋、作業(yè)命令、調(diào)試程序在內(nèi)。對(duì)于非機(jī)器指令編寫的源程序,如匯編語(yǔ)言或高級(jí)語(yǔ)言程序,應(yīng)轉(zhuǎn)換成機(jī)器指令源代碼行數(shù)來考慮。

2、Putnam模型

這是1978年P(guān)utnam提出的模型,是一種動(dòng)態(tài)多變量模型。它是假定在軟件開發(fā)的整個(gè)生存期中工作量有特定的分布。這種模型是依據(jù)在一些大型項(xiàng)目(總工作量達(dá)到或超過30個(gè)人年)中收集到的工作量分布情況而推導(dǎo)出來的,但也可以應(yīng)用在一些較小的軟件項(xiàng)目中。

Putnam模型可以導(dǎo)出一個(gè)“軟件方程”,把已交付的源代碼(源語(yǔ)句)行數(shù)與工作量和開發(fā)時(shí)間聯(lián)系起來。其中,td是開發(fā)持續(xù)時(shí)間(以年計(jì)),K是軟件開發(fā)與維護(hù)在內(nèi)的整個(gè)生存期所花費(fèi)的工作量(以人年計(jì)),L是源代碼行數(shù)(以LOC計(jì)),Ck是技術(shù)狀態(tài)常數(shù),它反映出“妨礙程序員進(jìn)展的限制”,并因開發(fā)環(huán)境而異。其典型值的選取如下表所示。

 

2.jpg

3、COCOMO模型(COnstructive COst MOdel)

這是由TRW公司開發(fā)。Boehm提出的結(jié)構(gòu)型成本估算模型,是一種精確、易于使用的成本估算方法。在該模型中使用的基本量有以下幾個(gè):DSI(源指令條數(shù))定義為代碼或卡片形式的源程序行數(shù)。若一行有兩個(gè)語(yǔ)句,則算做一條指令。它包括作業(yè)控制語(yǔ)句和格式語(yǔ)句,但不包括注釋語(yǔ)句。KDSI=1000DSI。MM(度量單位為人月)表示開發(fā)工作量。TDEV(度量單位為月)表示開發(fā)進(jìn)度。它由工作量決定。

 

3.jpg

(1)軟件開發(fā)項(xiàng)目的分類

在COCOMO模型中,考慮開發(fā)環(huán)境,軟件開發(fā)項(xiàng)目的總體類型可分為三種:組織型(Organic)、嵌入型(Embedded)和介于上述兩種軟件之間的半獨(dú)立型(Semidetached)。

(2)COCOMO模型的分類

COCOMO模型按其詳細(xì)程度分成三級(jí):即基本COCOMO模型、中間COCOMO模型、詳細(xì)COCOMO模型;綜OCOMO模型是一個(gè)靜態(tài)單變量模型,它用一個(gè)以已估算出來的源代碼行數(shù)(LOC)為自變量的(經(jīng)驗(yàn))函數(shù)來計(jì)算軟件開發(fā)工作量。中間COCOMO模型則在用LOC為自變量的函數(shù)計(jì)算軟件開發(fā)工作量(此時(shí)稱為名義工作量)的基礎(chǔ)上,再用涉及產(chǎn)品、硬件、人員、項(xiàng)目等方面屬性的影響因素來調(diào)整工作量的估算。詳細(xì)COCOMO模型包括中間COCOMO模型的所有特性,但用上述各種影響因素調(diào)整工作量估算時(shí),還要考慮對(duì)軟件工程過程中每一步驟(分析、設(shè)計(jì)等)的影響。

信息工程監(jiān)理的中心任務(wù)是對(duì)信息工程項(xiàng)目的進(jìn)度目標(biāo)、質(zhì)量目標(biāo)和風(fēng)險(xiǎn)防范,實(shí)施有效的監(jiān)督、協(xié)調(diào)與控制。為了監(jiān)督、控制軟件項(xiàng)目開發(fā)過程的性能等,引入定量監(jiān)理十分必要。為此,本期將首先介紹進(jìn)度的定量監(jiān)理過程,在下一期將介紹質(zhì)量和風(fēng)險(xiǎn)的定量監(jiān)理。


應(yīng)用軟件系統(tǒng)開發(fā)過程中,不僅存在著信息不對(duì)稱的風(fēng)險(xiǎn),還存在著各方信息處理能力不對(duì)稱引起的風(fēng)險(xiǎn);不但有項(xiàng)目的特殊風(fēng)險(xiǎn),還有項(xiàng)目管理風(fēng)險(xiǎn);不但有經(jīng)濟(jì)風(fēng)險(xiǎn),還有時(shí)間風(fēng)險(xiǎn)、心理風(fēng)險(xiǎn)等。

定量過程監(jiān)理的目的是定量監(jiān)督、控制軟件項(xiàng)目的開發(fā)過程性能,軟件開發(fā)過程性能決定了實(shí)施軟件過程所獲得的實(shí)際結(jié)果。

應(yīng)用軟件開發(fā)是非常專業(yè)的,而且是講究分工的。需求分析、總體設(shè)計(jì)、概要和詳細(xì)設(shè)計(jì)、編碼、測(cè)試、安裝及維護(hù)等,每一個(gè)過程都有自己的精深之處,涉及的專業(yè)面廣、業(yè)務(wù)和技術(shù)性強(qiáng)、可見性差、風(fēng)險(xiǎn)大、可預(yù)見性小。即使應(yīng)用軟件承建方按規(guī)范開發(fā)模式的要求一步步進(jìn)行,也會(huì)遇到許多不可預(yù)見的問題,更不用說承建方可能有不規(guī)范行為的情況。信息化系統(tǒng)的核心是軟件,由于難以對(duì)軟件工程的質(zhì)量和進(jìn)度等進(jìn)行有效的監(jiān)控,因此,若承建方不按規(guī)范進(jìn)行設(shè)計(jì)、實(shí)施、測(cè)試,也不易察覺。

凡此種種,造成許多信息化系統(tǒng)工程項(xiàng)目不成功,不完善,長(zhǎng)期收不了口,“豆腐渣”工程層出不窮,嚴(yán)重地影響了信息化系統(tǒng)工程的質(zhì)量和進(jìn)度,不僅損害了合同雙方的利益,還給國(guó)家和社會(huì)造成了許多不應(yīng)有的損失。因此,在軟件開發(fā)監(jiān)理過程中,引入定量的方法、手段對(duì)應(yīng)用軟件開發(fā)過程的某些方面進(jìn)行定量計(jì)算、分析和驗(yàn)證,或通過定量的方法對(duì)可能出現(xiàn)的故障、風(fēng)險(xiǎn)進(jìn)行分析判斷,或?yàn)閳?zhí)行者提供數(shù)據(jù)進(jìn)行核實(shí),從而降低工程建設(shè)的風(fēng)險(xiǎn),使投資的信息化系統(tǒng)發(fā)揮應(yīng)有的作用是非常必要的。

軟件開發(fā)定量監(jiān)理的兩個(gè)基本“點(diǎn)”

通過中國(guó)軟件評(píng)測(cè)中心大量的監(jiān)理實(shí)踐,我們體會(huì)到應(yīng)用軟件開發(fā)過程的定量監(jiān)理可以從以下三個(gè)方面展開,即:軟件開發(fā)進(jìn)度的監(jiān)理、軟件開發(fā)的質(zhì)量監(jiān)理和軟件開發(fā)的風(fēng)險(xiǎn)監(jiān)理。在進(jìn)度、質(zhì)量和風(fēng)險(xiǎn)的定量監(jiān)理中,又分別按照度量、估算兩個(gè)步驟進(jìn)行定量分析、監(jiān)理。

度量:根據(jù)一定的度量標(biāo)準(zhǔn)對(duì)軟件開發(fā)過程中所產(chǎn)生的數(shù)據(jù)進(jìn)行收集和整理,如代碼行(LOC)和功能點(diǎn)(FP)的數(shù)量。它為估計(jì)不準(zhǔn)、進(jìn)度緩慢、可見性差等普遍問題提供了矯正的方法。

軟件度量的主要作用有兩個(gè),一是使用軟件度量建立項(xiàng)目基線;二是收集項(xiàng)目當(dāng)前的生產(chǎn)率和質(zhì)量狀態(tài),利用基線對(duì)項(xiàng)目當(dāng)前狀態(tài)進(jìn)行評(píng)價(jià),并確定軟件工程過程的改進(jìn)目標(biāo)。

估算:通常的定義是,對(duì)未來事實(shí)非零可能性的最樂觀的預(yù)測(cè)。軟件項(xiàng)目估算是項(xiàng)目計(jì)劃活動(dòng)的基礎(chǔ),估算是一門科學(xué),也是一門藝術(shù),應(yīng)當(dāng)認(rèn)識(shí)到,軟件評(píng)估永遠(yuǎn)也不會(huì)是一門精確的科學(xué)。

對(duì)進(jìn)度定量監(jiān)理的四步法

軟件項(xiàng)目的規(guī)模、進(jìn)度估算歷來是比較復(fù)雜的事,因?yàn)檐浖旧淼膹?fù)雜性、歷史經(jīng)驗(yàn)的缺乏、估算工具缺乏以及一些人為錯(cuò)誤,導(dǎo)致軟件項(xiàng)目的規(guī)模估算往往和實(shí)際情況相差甚遠(yuǎn)。因此,是監(jiān)理工作的重點(diǎn)之一。

為了可靠地對(duì)軟件項(xiàng)目進(jìn)行估算,我們采取如下4個(gè)步驟:第一步是對(duì)軟件規(guī)模進(jìn)行估算。一般是通過計(jì)算LOC(源代碼行數(shù))或功能點(diǎn)數(shù)(FP)完成的,也可以基于過程進(jìn)行估算;第二步是估算軟件項(xiàng)目所需的工作量,以人月或人小時(shí)為單位;第三步是以自然月為單位,估算項(xiàng)目的進(jìn)度;第四步是估算項(xiàng)目成本。下面來具體介紹。

1、估算項(xiàng)目的規(guī)模

對(duì)軟件項(xiàng)目進(jìn)行有效的估算,取決于掌握多少有關(guān)項(xiàng)目范圍的原始資料。通常,應(yīng)當(dāng)根據(jù)正式的需求描述進(jìn)行估算。正式的需求描述可以是需求說明書、系統(tǒng)規(guī)格說明書或軟件需求說明書等。如果開始時(shí)缺乏一些正式的資料,也可以采用口頭描述或草稿的方式開始估算工作。在得到項(xiàng)目范圍的正式資料后,必須進(jìn)行再估算。估算的兩個(gè)主要方法是:

第一種方法是根據(jù)項(xiàng)目特征和算法進(jìn)行估算。

例如,根據(jù)軟件系統(tǒng)的輸入、輸出、查詢、文件及外部接口等信息,使用功能點(diǎn)法估算出系統(tǒng)的規(guī)模;诠δ茳c(diǎn)估算是按照用例(Use case)來做的,而不是軟件功能來做。通過研究初始應(yīng)用需求來確定各種輸入、輸出、計(jì)算和數(shù)據(jù)庫(kù)需求的數(shù)量和特性。通常的步驟是:

  A、計(jì)算輸入、輸出、查詢、主控文件和接口需求的數(shù)目。

  B、將這些數(shù)據(jù)進(jìn)行加權(quán)乘。下表為一個(gè)典型的權(quán)值表。

 

4.jpg

  C、估計(jì)者根據(jù)對(duì)復(fù)雜度的判斷,總數(shù)可以用樂觀值、可能值或悲觀值調(diào)整。

  D、采用下面的方式計(jì)算功能點(diǎn):

  FP=總計(jì)數(shù)值×[0.65+0.01×ΣFi]

  其中,“總計(jì)數(shù)值”是所有功能點(diǎn)條目的總和。

Fi(i=1到14)是基于對(duì)表2中問題的回答而得到的“復(fù)雜度調(diào)整值”(0~5)。等式中的常數(shù)和信息域值的加權(quán)因子是根據(jù)經(jīng)驗(yàn)確定的。

下面將以某個(gè)計(jì)算機(jī)輔助設(shè)計(jì)(CAD)應(yīng)用為例,估算開發(fā)的軟件包的輸入、輸出、查詢、文件及外部接口。為了達(dá)到這個(gè)估算目的,我們假設(shè)復(fù)雜度加權(quán)因子都是平均的。根據(jù)對(duì)軟件范圍的敘述,對(duì)軟件功能進(jìn)行分解,識(shí)別出主要的幾個(gè)功能:用戶界面和控制功能、二維幾何分析、三維幾何分析、數(shù)據(jù)庫(kù)管理、計(jì)算機(jī)圖形顯示功能、外設(shè)控制以及設(shè)計(jì)分析模塊。最后可得到如表2所示的估算表。

 

5.jpg

  由表2得到總計(jì)數(shù)值為318。



接著,估算14個(gè)復(fù)雜度加權(quán)因子(Fi,根據(jù)問題對(duì)項(xiàng)目的影響取值范圍是0~5),表3給出了因子值。

 

6.jpg

 FP=總計(jì)數(shù)值×[0.65+0.01×ΣFi]=366

第二種方法是采用類比的方法,根據(jù)歷史數(shù)據(jù)來進(jìn)行估算。

如果有一個(gè)以前做過的類似項(xiàng)目并且掌握它的規(guī)模,就可以把新項(xiàng)目的各個(gè)主要部分與原有項(xiàng)目的相應(yīng)部分進(jìn)行比較,得出一個(gè)比例關(guān)系,將各部分相對(duì)于原項(xiàng)目規(guī)模比例相加,計(jì)算出新項(xiàng)目的規(guī)模。如果估算者的經(jīng)驗(yàn)豐富并且新項(xiàng)目與老項(xiàng)目具有足夠的相似性,就能夠得到合理的估算值。

但是采用類比法,往往還要解決可重用代碼的估算問題。估計(jì)可重用代碼量的最好辦法就是由程序員或系統(tǒng)分析員詳細(xì)地考查已存在的代碼,估算出新項(xiàng)目可重用的代碼中需重新設(shè)計(jì)的代碼百分比、需重新編碼或修改的代碼百分比以及需重新測(cè)試的代碼百分比。根據(jù)這三個(gè)百分比,可用下面的計(jì)算公式計(jì)算等價(jià)新代碼行:

等價(jià)代碼行 = [(重新設(shè)計(jì)% +重新編碼% +重新測(cè)試%)/3]× 已有代碼行

比如:有10,000行代碼,假定35%需要重新設(shè)計(jì),55%需要重新編碼,75%需要重新測(cè)試,那么其等價(jià)的代碼行可以計(jì)算為:

[(30% + 50% + 70%)/3]×10,000= 5,500 等價(jià)代碼行。即:重用這10000代碼相當(dāng)于編寫5500代碼行的工作量。

2、工作量估算

估算出軟件規(guī)模并且對(duì)軟件的開發(fā)周期進(jìn)行定義后,開始估算軟件項(xiàng)目的工作量。軟件規(guī)模的估算結(jié)果是代碼量,但是軟件項(xiàng)目的開發(fā)、實(shí)施過程并不是只有編碼的工作,實(shí)際上編碼的工作量在這個(gè)過程中是最小的。編寫文檔、架構(gòu)設(shè)計(jì)、系統(tǒng)設(shè)計(jì)、測(cè)試以及實(shí)施發(fā)布等將占用大量的工作時(shí)間。因此,對(duì)軟件項(xiàng)目工作量的估算就是確定、估算這樣一個(gè)代碼量的項(xiàng)目所需的各種工作,相加得到項(xiàng)目的工作量。從軟件規(guī)模(代碼量)估算出項(xiàng)目工作量主要采用下述的兩個(gè)方法:

(1)最好的方法是利用歷史數(shù)據(jù),根據(jù)以前做過的類似項(xiàng)目規(guī)模與新項(xiàng)目規(guī)模的比例關(guān)系,對(duì)照以前項(xiàng)目的工作量求出新項(xiàng)目的工作量。

采用這個(gè)方法的前提是:a.對(duì)以前項(xiàng)目規(guī)模和工作量的計(jì)量是正確的;b.至少有一個(gè)以前的項(xiàng)目的規(guī)模和新項(xiàng)目類似;c.新項(xiàng)目的開發(fā)周期、使用的開發(fā)方法、開發(fā)工具與以前項(xiàng)目的類似,而且開發(fā)人員的技能和經(jīng)驗(yàn)也不能與原來的人員相差太大。