代碼行, 是來源與英文line of code.那么代碼行分析方法是是對(duì)軟件產(chǎn)品的源代碼的行數(shù)進(jìn)行測(cè)量.但是仔細(xì)想想,可能會(huì)有以下疑問:
是計(jì)算物理行數(shù),還是程序的命令數(shù)量?
空行是否計(jì)算?
注釋是否計(jì)算?
預(yù)定義文件是否計(jì)算?
不同版本如何計(jì)算?
這里面是否設(shè)計(jì)到一系列的規(guī)則定義問題?
開發(fā)過程種的配置腳本,編譯腳本是否計(jì)算?
共享文件(例如共享的開發(fā)庫文件種的頭部文件)如何計(jì)算?
那么現(xiàn)在的一般規(guī)則是計(jì)算物理行數(shù),不計(jì)算空行,不計(jì)算注釋.對(duì)于其他選項(xiàng),一般為計(jì)算源文件根目錄下的所有文件.所以代碼行指的是指所有的可執(zhí)行的源代碼行數(shù),包括可交付的工作控制語言 (JCL : job control language) 語句、數(shù)據(jù)定義、數(shù)據(jù)類型聲明、等價(jià)聲明、輸入 / 輸出格式聲明等。常使用的單位有: SLOC(single line of code)、KLOC(thousand lines of code)、 LLOC(logical line of code)、PLOC(physical line of code)、NCLOC (non-commented line of code)、DSI(delivered source instruction)。其中SLOC和KLOC比較常用.
代碼行分析方法對(duì)技術(shù)人員是有意義的,因?yàn)樗拇_從某種程序上反映了軟件的規(guī)模,并且是物理上可測(cè)量的.但是這種方法也存在如下諸多問題.
在需求、計(jì)劃、設(shè)計(jì)階段因?yàn)楸旧頉]有代碼行,需要靠估算來解決?傮w上估算準(zhǔn)確度不高,除非有多年的類似項(xiàng)目經(jīng)驗(yàn)。估算的準(zhǔn)確程度取決于是否有同類項(xiàng)目的數(shù)據(jù)和估算人員的經(jīng)驗(yàn)。在編碼、測(cè)試、實(shí)施階段可以直接數(shù)出來。
在滿足客戶的要求以及反映進(jìn)度方面的能力差強(qiáng)人意,對(duì)于管理者意義不大.因此項(xiàng)目很難從整體上跟蹤代碼行數(shù)的指標(biāo)采取行動(dòng).
近來可視化編程工具的大量采用,以及模板庫,類庫的廣泛采用,在程序的結(jié)果中有大量自動(dòng)生成的代碼或者復(fù)雜的自動(dòng)配置腳本或資源文件設(shè)置,在采用這些工具的項(xiàng)目中,用代碼行分析方法得到數(shù)值的意義已經(jīng)大大降低.
對(duì)于不同的編程語言來說,代碼行也缺乏可信轉(zhuǎn)換方式.
盡管代碼行方法有很多缺點(diǎn),但是由于它容易使用,操作成本低(如果采用適當(dāng)?shù)闹С止ぞ?,還是推薦使用代碼行作為軟件項(xiàng)目管理的參考和補(bǔ)充手段.
(三) COCOMO模型
代碼行分析方法作為一種度量估計(jì)方法,在20世紀(jì)80和90年代得到非常廣泛的發(fā)展,在業(yè)界開發(fā)了又許多中估算工作量和進(jìn)度的參數(shù)模型,其中的COCOMO模型,它的新版本是COCOMO II模型.
COCOMO,英文全稱為constructive cost model,中文為構(gòu)造性成本模型.它是一種精確、易于使用的,基于模型的成本估算方法,早由勃姆 (Boehm) 于 1981 年提出。從本質(zhì)上說是一種參數(shù)化的項(xiàng)目估算方法,參數(shù)建模是把下那個(gè)目的某些特征作為參數(shù),通過建立一個(gè)數(shù)字模型預(yù)測(cè)項(xiàng)目成本(類似于居住面積作為參數(shù)計(jì)算的整體的住房成本).
在COCOMO模型中,工作量調(diào)整因子(Effort Adjustment Factor, EAF)代表多個(gè)參數(shù)的綜合效果,這些參數(shù)使得項(xiàng)目可以特征化和根據(jù)COCOMO數(shù)據(jù)庫中的項(xiàng)目規(guī)格化.每個(gè)參數(shù)可以定位很低,低,正常,高,很高.每個(gè)參數(shù)都作為乘數(shù),其值通常在0.5到1.5之間,這些參數(shù)的乘積作為成本方程中的系數(shù).
COCOMO用3個(gè)不同層次的模型來反映不同程度的復(fù)雜性,他們分別為
基本模型 (Basic Model). 是一個(gè)靜態(tài)單變量模型,它用一個(gè)以已估算出來的源代碼行數(shù) (LOC) 為自變量的函數(shù)來計(jì)算軟件開發(fā)工作量。
中間模型 (Intermediate Model). 則在用 LOC 為自變量的函數(shù)計(jì)算軟件開發(fā)工作量的基礎(chǔ)上,再用涉及產(chǎn)品、硬件、人員、項(xiàng)目等方面屬性的影響因素來調(diào)整工作量的估算。
詳細(xì)模型 (Detailed Model) 包括中間 COCOMO 模型的所有特性,但用上述各種影響因素調(diào)整工作量估算時(shí),還要考慮對(duì)軟件工程過程中分析、設(shè)計(jì)等各步驟的影響。
同時(shí)根據(jù)不同應(yīng)用軟件的不同應(yīng)用領(lǐng)域,COCOMO模型劃分為如下3種軟件應(yīng)用開發(fā)模式:
組織模式(Organic Mode).這種應(yīng)用開發(fā)模式的主要特點(diǎn)是在一個(gè)熟悉穩(wěn)定的環(huán)境種進(jìn)行項(xiàng)目開發(fā),蓋項(xiàng)目與近開發(fā)的其他項(xiàng)目有很多相似點(diǎn),項(xiàng)目相對(duì)較小,而且并不需要許多創(chuàng)新.
嵌入式應(yīng)用開發(fā)模式 (Embedded Mode).在這種應(yīng)用開發(fā)模式種,項(xiàng)目受到接口要求的限制.接口對(duì)整個(gè)應(yīng)用的開發(fā)要求非常搞,而且要求項(xiàng)目有很大的創(chuàng)新,例如開發(fā)一種全新的游戲.
中間應(yīng)用開發(fā)模式 (Semidetached Mode).這時(shí)介于組織模式和嵌入式應(yīng)用開發(fā)模式之間的類型.
COCOMO 模型具有估算精確、易于使用的特點(diǎn)。在該模型中使用的基本量有以下幾個(gè): (1)DSI( 源指令條數(shù) ) ,定義為代碼行數(shù),包括除注釋行以外的全部代碼。若一行有兩個(gè)語句,則算做一條指令。 (2)MM( 度量單位為人月 ) 表示開發(fā)工作量。 (3)TDEV( 度量單位為月 ) 表示開發(fā)進(jìn)度,由工作量決定。 (4)COCOMO 模型重點(diǎn)考慮 15 種影響軟件工作量的因素,并通過定義乘法因子,從而準(zhǔn)確、合理地估算軟件的工作量。
但是COCOMO也存在一些很嚴(yán)重的缺陷,例如分析時(shí)的輸入時(shí)優(yōu)先的,不能處理意外的環(huán)境變換,得到的數(shù)據(jù)往往不能直接使用,需要校準(zhǔn),只能得到過去的情況總結(jié),對(duì)于將來的情況無法進(jìn)行校準(zhǔn)等.
(四)功能點(diǎn)分析方法之一-原理篇
功能點(diǎn)分析法 (FPA:function point analysis) 是一種相對(duì)抽象的方法,是一種”人為設(shè)計(jì)”出的度量方式,主要解決如何客觀,公正,可重復(fù)地對(duì)軟件地規(guī)模進(jìn)行度量的問題.
FPA 法由 IBM 的工程師艾倫 · 艾爾布策 (Allan Albrech) 于 20 世紀(jì) 70 年代提出,隨后被國(guó)際功能點(diǎn)用戶協(xié)會(huì) (IFPUG:The International Function Point Users' Group) 提出的 IFPUG 方法繼承,從系統(tǒng)的復(fù)雜性和系統(tǒng)的特性這兩個(gè)角度來度量系統(tǒng)的規(guī)模,其特征是: “ 在外部式樣確定的情況下可以度量系統(tǒng)的規(guī)模 ” , “ 可以對(duì)從用戶角度把握的系統(tǒng)規(guī)模進(jìn)行度量 ” 。功能點(diǎn)可以用于 “ 需求文檔 ” 、 “ 設(shè)計(jì)文檔 ” 、 “ 源代碼 ” 、 “ 測(cè)試用例 ” 度量,根據(jù)具體方法和編程語言的不同,功能點(diǎn)可以轉(zhuǎn)換為代碼行。經(jīng)由 ISO 組織已經(jīng)有多種功能點(diǎn)估算方法成為國(guó)際標(biāo)準(zhǔn),如: ① 加拿大人艾倫 · 艾布恩 (Alain Abran) 等人提出的全面功能點(diǎn)法 (full function points) ; ② 英國(guó)軟件度量協(xié)會(huì) (UKSMA : United Kingdom Software Metrics Association) 提出的 IFPUG 功能點(diǎn)法 (IFPUG function points) ; ③ 英國(guó)軟件度量協(xié)會(huì)提出的 Mark II FPA 功能點(diǎn)法 (Mark II function points) ; ④ 荷蘭功能點(diǎn)用戶協(xié)會(huì) (NEFPUG:Netherlands Function Point Users Group) 提出的 NESMA 功能點(diǎn)法,以及軟件度量共同協(xié)會(huì) (COSMIC:the Common Software Metrics Consortium) 提出的 COSMIC-FFP 方法,這些方法都屬于艾爾布策功能點(diǎn)方法的發(fā)展和細(xì)化。
功能點(diǎn)分析方法具體包括兩部分,一部分是測(cè)量的具體步驟和方法,通常稱為功能點(diǎn)規(guī)模測(cè)量方法(Functional Size Measurement, FSM),另一部分則是功能點(diǎn)分析方法的具體應(yīng)用.除非特別說明,通常的情況下并不分開討論,而是統(tǒng)稱為功能點(diǎn)分析方法(Functional Point Analysis, FPA),包括對(duì)應(yīng)用軟件的規(guī)模測(cè)量活動(dòng)和后續(xù)應(yīng)用測(cè)量結(jié)果進(jìn)行適當(dāng)?shù)捻?xiàng)目管理活動(dòng).
功能點(diǎn)分析方法有一些相對(duì)完整的,自成體系的概念,主要包括基礎(chǔ)功能部件(Base Function Component, BFC), BFC類型,邊界,用戶,本地化,功能領(lǐng)域,功能規(guī)模,功能點(diǎn)規(guī)模測(cè)量的范圍,功能點(diǎn)規(guī)模測(cè)量過程,功能點(diǎn)規(guī)模測(cè)量方法,功能性需求,質(zhì)量需求,技術(shù)性需求,數(shù)值調(diào)整以及調(diào)整因子等15個(gè)關(guān)鍵概念.
功能點(diǎn)分析的基本計(jì)數(shù)是依據(jù)標(biāo)準(zhǔn)計(jì)算出的系統(tǒng) ( 或模塊 ) 中所含每一種元素的數(shù)目:
① 外部輸入數(shù) (EI : external input) :計(jì)算每個(gè)用戶輸入,它們向軟件提供面向應(yīng)用的數(shù)據(jù)。輸入應(yīng)該與查詢區(qū)分開來,分別計(jì)算。
② 外部輸出數(shù) (EO : external output) :計(jì)算每個(gè)用戶輸出,它們向軟件提供面向應(yīng)用的信息。這里,輸出是指報(bào)表、屏幕、出錯(cuò)信息,等等。一個(gè)報(bào)表中的單個(gè)數(shù)據(jù)項(xiàng)不單獨(dú)計(jì)算。
③ 外部查詢數(shù) (EQ : external query) :一個(gè)查詢被定義為一次聯(lián)機(jī)輸入,它導(dǎo)致軟件以聯(lián)機(jī)輸出的方式產(chǎn)生實(shí)時(shí)的響應(yīng)。每一個(gè)不同的查詢都要計(jì)算。
④ 內(nèi)部邏輯文件 (ILF : internal logical file) :計(jì)算每個(gè)邏輯的主文件,如數(shù)據(jù)的一個(gè)邏輯組合,它可能是某個(gè)大型數(shù)據(jù)庫的一部分或是一個(gè)獨(dú)立的文件。
⑤ 外部接口文件 (EIF : external interface file) :計(jì)算所有機(jī)器可讀的接口,如磁帶或磁盤上的數(shù)據(jù)文件,利用這些接口可以將信息從一個(gè)系統(tǒng)傳送到另一個(gè)系統(tǒng)。