劉凱, 陳軍, 梁欣, 張俊萍, 鄭思廣
(1. 航天器在軌故障診斷與維修重點(diǎn)實(shí)驗(yàn)室, 西安 710043;2. 西安衛(wèi)星測(cè)控中心, 西安 710043; 3. 63871部隊(duì), 華陰 714200)
現(xiàn)代軟件行業(yè)的經(jīng)驗(yàn)表明:盡管軟件的可靠性已經(jīng)一再提高,但是軟件中的bug卻始終存在[1]??梢?,軟件維護(hù)(在軟件交付使用后,為了改正錯(cuò)誤或滿足新的需求而修改軟件的過程)是不可避免的。隨著軟件規(guī)模和復(fù)雜度的日益提高,軟件維護(hù)日益成為軟件生存周期中費(fèi)用最高、難度最大的一個(gè)階段。與此同時(shí),如何對(duì)軟件進(jìn)行維護(hù)性評(píng)估(對(duì)軟件維護(hù)性進(jìn)行定性或定量評(píng)價(jià))、及時(shí)發(fā)現(xiàn)并改正軟件的維護(hù)性設(shè)計(jì)缺陷從而優(yōu)化軟件維護(hù)性日益成為一個(gè)重要的研究課題。目前,由于國(guó)內(nèi)軟件維護(hù)領(lǐng)域的理論研究相對(duì)匱乏,大多軟件維護(hù)工作仍然依賴于維護(hù)人員對(duì)整個(gè)系統(tǒng)的熟悉程度,缺乏相關(guān)的標(biāo)準(zhǔn)來指導(dǎo)和約束軟件維護(hù)性評(píng)估[2]。為了保證軟件維護(hù)性評(píng)估的質(zhì)量,建立一個(gè)完善的軟件維護(hù)性評(píng)估指標(biāo)體系是非常必要的。
借鑒美國(guó)空軍軟件維護(hù)性評(píng)估手冊(cè),本文從軟件產(chǎn)品和開發(fā)過程兩個(gè)角度深入分析了軟件維護(hù)性的影響因素。在此基礎(chǔ)上,本文建立了一個(gè)相對(duì)完善的軟件維護(hù)性評(píng)估指標(biāo)體系,用于指導(dǎo)軟件維護(hù)性評(píng)估的實(shí)施。
對(duì)軟件維護(hù)性進(jìn)行評(píng)估是圍繞影響軟件維護(hù)性的諸多要素展開的,因此,實(shí)施軟件維護(hù)性評(píng)估的首要工作是明確軟件維護(hù)性的影響要素,確定軟件維護(hù)性評(píng)估指標(biāo)。尼德.查牝指出:“軟件維護(hù)費(fèi)用高昂的根本原因在于人們對(duì)當(dāng)前程序和系統(tǒng)文檔理解上的障礙。這些障礙的起因主要有以下幾個(gè):程序不可理解、對(duì)程序理解不準(zhǔn)確、系統(tǒng)文檔與程序的可用信息不充分、軟件的復(fù)雜性、程序理解上存在的混淆、誤解與遺忘?!盵3]由此可見,要想控制維護(hù)費(fèi)用,人們必須改善對(duì)程序源代碼和系統(tǒng)文檔的理解。因此,下面主要從文檔和源代碼兩個(gè)方面闡述其對(duì)軟件維護(hù)性的影響。
首先,軟件文檔資料的缺失或者文檔結(jié)構(gòu)的雜亂、文檔管理的無序均會(huì)影響軟件的維護(hù)性,引起軟件維護(hù)時(shí)間和費(fèi)用的增長(zhǎng)。這里,軟件文檔是指在軟件開發(fā)過程中生成的、陸續(xù)進(jìn)行需求、概要設(shè)計(jì)、詳細(xì)設(shè)計(jì)、測(cè)試等說明的一系列文檔。舉例來說,軟件文檔可能包括軟件系統(tǒng)/子系統(tǒng)規(guī)格說明、系統(tǒng)/子系統(tǒng)設(shè)計(jì)說明、軟件需求說明、接口需求說明、軟件設(shè)計(jì)說明、接口設(shè)計(jì)說明、軟件測(cè)試計(jì)劃、軟件產(chǎn)品說明、軟件測(cè)試說明、軟件測(cè)試報(bào)告等。除上述文檔外,作為需求分析和設(shè)計(jì)之間的橋梁的軟件體系結(jié)構(gòu)設(shè)計(jì)文檔也日益受到軟件開發(fā)和維護(hù)人員的重視??傊斜匾y(tǒng)一軟件文檔結(jié)構(gòu),改進(jìn)和補(bǔ)充不完善的軟件文檔,這將有助于維護(hù)人員對(duì)軟件結(jié)構(gòu)、界面功能和內(nèi)部流程的理解[4]。尤其是在人員變動(dòng)很快、跳槽率日益上升的軟件行業(yè)的今天,完備的軟件文檔成為實(shí)施軟件維護(hù)工作的重要參考依據(jù)。
其次,影響軟件維護(hù)性的另一個(gè)重要因素是程序的源代碼。由于用戶需求變更或者環(huán)境變化而對(duì)程序進(jìn)行部分修改時(shí),容易引起程序一系列其它部分的改動(dòng),這種現(xiàn)象在軟件維護(hù)領(lǐng)域被稱之為“波動(dòng)效應(yīng)”[5]。實(shí)際上,任何系統(tǒng)都存在潛在的波動(dòng)效應(yīng)。完全由沒有任何耦合關(guān)系的模塊組成的系統(tǒng)是不存在的。這種情況下,采用模塊低耦合、高內(nèi)聚、可控制等程序結(jié)構(gòu)化設(shè)計(jì),可減少與其它模塊的關(guān)聯(lián),大大提高程序模塊的獨(dú)立性,將波動(dòng)效應(yīng)的負(fù)面影響降至最小。這種結(jié)構(gòu)化設(shè)計(jì)模塊的優(yōu)勢(shì)體現(xiàn)在以下兩點(diǎn):其一,對(duì)該類結(jié)構(gòu)化模塊進(jìn)行增刪修改時(shí),僅需對(duì)該模塊進(jìn)行改動(dòng)即可,不致產(chǎn)生過大的波動(dòng)效應(yīng),從而簡(jiǎn)化維護(hù)工作[6];其二,對(duì)于模塊化的程序,可以應(yīng)用備用件(用一個(gè)新的結(jié)構(gòu)良好的模塊替換掉整個(gè)模塊),從而避免局部修改模塊而引入新錯(cuò)誤,大大提高軟件的維護(hù)性。另外,程序設(shè)計(jì)語言的選擇,對(duì)程序的維護(hù)性影響也很大[7]。舉例來說,查詢語言、圖形語言、報(bào)表生成器等第四代語言編制出的程序都很容易理解和修改,其指令條數(shù)可能要比COBOL等低級(jí)語言編制出的少一個(gè)數(shù)量級(jí),但開發(fā)速度快許多倍??梢哉f,新一代語言要比早期的語言更易于維護(hù)[8-9]。此外,程序風(fēng)格的一致性、程序的簡(jiǎn)潔性、數(shù)據(jù)完整性以及構(gòu)件的復(fù)用性也在一定程度上影響著軟件的維護(hù)性,不再贅述。
另外,隨著軟件二元性概念——“軟件包括軟件產(chǎn)品和軟件開發(fā)過程”的提出,僅從軟件產(chǎn)品(包括了文檔和源代碼)的角度查找軟件維護(hù)性的影響要素是很片面的。從過程角度上講,常見的維護(hù)性影響因素有軟件開發(fā)方法、軟件維護(hù)性分析與設(shè)計(jì)技術(shù)、軟件維護(hù)性審查方式以及復(fù)審技術(shù)等。有時(shí),軟件開發(fā)時(shí)間、費(fèi)用等軟件成本因素也會(huì)左右軟件維護(hù)性的設(shè)計(jì)標(biāo)準(zhǔn)。此外,軟件生命周期中軟件資源(包括軟件編程工具、計(jì)算機(jī)輔助軟件工程工具等)、硬件資源(包括軟件運(yùn)行環(huán)境、接口等)、軟件維護(hù)及糾錯(cuò)工具(維護(hù)性度量模型、方法、技術(shù)等)的可用性對(duì)軟件維護(hù)性也有很大影響。還有,軟件開發(fā)團(tuán)隊(duì)的規(guī)模與組織管理情況,程序員、需求分析師、文檔編制人員等人員的技能與素質(zhì)也間接影響著軟件的維護(hù)性??梢?,影響軟件維護(hù)性的過程因素眾多,但由于不易對(duì)其度量,本文尚未對(duì)該類過程因素進(jìn)行深入研究。
上述軟件維護(hù)性的影響要素繁多,有些要素可以量化度量,如模塊的耦合性,而有些要素則需要人憑借感官進(jìn)行定性評(píng)價(jià),如程序風(fēng)格的一致性,還有些要素很難進(jìn)行評(píng)價(jià),如人員素質(zhì)。因此,不可能對(duì)上面所列出的產(chǎn)品和過程方面的因素盡數(shù)進(jìn)行維護(hù)性評(píng)估,需要權(quán)衡要素的重要程度和可度量性進(jìn)行對(duì)象與指標(biāo)的選取。這里把握兩個(gè)原則:一是數(shù)量不宜過多,要能突出主要因素(如文檔和程序的易理解性)的影響;二是保證在可承受的度量成本范圍內(nèi)可通過主觀或客觀的手段進(jìn)行度量,數(shù)據(jù)收集方便,可度量。
考慮到維護(hù)性評(píng)估的目的是“檢驗(yàn)軟件產(chǎn)品(文檔、源代碼)是否達(dá)到維護(hù)性技術(shù)標(biāo)準(zhǔn)、是否需要采取措施提高軟件維護(hù)性”,這里將軟件產(chǎn)品中的文檔、源代碼以及軟件實(shí)現(xiàn)(同時(shí)檢查軟件文檔和源代碼,以全面評(píng)估軟件)作為本文維護(hù)性評(píng)估的研究對(duì)象,如表1所示。
表1 若干研究對(duì)象的軟件維護(hù)性評(píng)估指標(biāo)
本文借鑒美國(guó)空軍軟件維護(hù)性評(píng)估手冊(cè),選取可描述性、模塊化、可擴(kuò)展性、簡(jiǎn)易性、結(jié)構(gòu)化、可追溯性、一致性、可測(cè)試性和約定性這9項(xiàng)維護(hù)子特性作為對(duì)軟件文檔、源代碼(模塊源代碼和計(jì)算機(jī)軟件單元(CSU)源代碼)以及軟件實(shí)現(xiàn)進(jìn)行評(píng)估的指標(biāo),如表1所示。下面逐項(xiàng)對(duì)這些指標(biāo)進(jìn)行分析。
1) 可描述性:當(dāng)軟件文檔或源代碼中包含需求、假設(shè)、約束、輸入/輸出、組件及其關(guān)系、外部接口、修訂狀態(tài)等重要信息時(shí),可以說文檔或源代碼具有可描述性。
2) 可追溯性:可以在文檔之間、文檔與源代碼之間進(jìn)行特定信息的查找時(shí),稱軟件文檔具有可追溯性。
3) 結(jié)構(gòu)化:當(dāng)可以快捷、方便地定位信息時(shí),稱軟件文檔具有結(jié)構(gòu)化這一特性。
4) 簡(jiǎn)易性:源代碼的簡(jiǎn)易程度直接關(guān)系到程序的可理解性。源代碼采用的技術(shù)和結(jié)構(gòu)越簡(jiǎn)單,維護(hù)人員對(duì)其理解越容易,系統(tǒng)的維護(hù)性越好。因此,可以說簡(jiǎn)易性是軟件維護(hù)性的精髓。
5) 模塊化:由于小模塊(代碼塊)比大的或復(fù)雜的模塊更易于理解,因此對(duì)由大量獨(dú)立模塊組成的軟件進(jìn)行維護(hù)和管理要容易許多。
6) 一致性:當(dāng)軟件源代碼采用一致的注釋、術(shù)語和符號(hào)時(shí),可以說源代碼具有一致性,這將有助于維護(hù)人員對(duì)源代碼進(jìn)行不同抽象層次的理解。
7) 可測(cè)試性:如果源代碼中還有錯(cuò)誤識(shí)別和錯(cuò)誤處理的語句,稱源代碼具有可測(cè)試性。
8) 可擴(kuò)展性:指在一定時(shí)間段內(nèi),對(duì)軟件源代碼的數(shù)量、類型、方法進(jìn)行修改或者增刪的容易程度。
9) 約定性:采用工程化的約定有助于對(duì)軟件的理解。該特性要求軟件產(chǎn)品使用統(tǒng)一的標(biāo)記、術(shù)語和符號(hào),并保持這些約定符號(hào)在文檔和源代碼中的一致性。
對(duì)于不同的評(píng)估對(duì)象(軟件文檔、模塊源代碼、CSU源代碼、軟件實(shí)現(xiàn)),軟件維護(hù)性評(píng)估的側(cè)重點(diǎn)是不一樣的。舉例來說,對(duì)文檔進(jìn)行維護(hù)性評(píng)估側(cè)重于檢查文檔的可描述性,而對(duì)源代碼進(jìn)行評(píng)估則主要審查代碼的簡(jiǎn)易性[8-9]。相同的軟件維護(hù)性評(píng)估指標(biāo)反映在不同軟件對(duì)象上的評(píng)估準(zhǔn)則也是不一樣的。
1) 對(duì)軟件文檔進(jìn)行維護(hù)性評(píng)估時(shí),主要根據(jù)可描述性、可追溯性和結(jié)構(gòu)化三項(xiàng)指標(biāo)對(duì)文檔的格式和內(nèi)容進(jìn)行審核。理想情況下,軟件維護(hù)性評(píng)估是貫穿于軟件生命周期過程中的。不同階段(如需求分析、設(shè)計(jì)、編碼、測(cè)試、驗(yàn)收、交付使用等)所實(shí)施的軟件維護(hù)性評(píng)估的評(píng)審文檔對(duì)象是不一樣的,如需求分析階段根據(jù)系統(tǒng)/子系統(tǒng)規(guī)格說明、系統(tǒng)/子系統(tǒng)設(shè)計(jì)說明、軟件需求說明、接口需求說明等進(jìn)行維護(hù)性評(píng)估,而測(cè)試階段將軟件測(cè)試計(jì)劃、軟件測(cè)試說明、軟件測(cè)試報(bào)告等作為評(píng)估對(duì)象。通常將文檔印制成冊(cè)供維護(hù)性評(píng)估專家審核,有時(shí)也會(huì)采取網(wǎng)上評(píng)審的方式。
2) 對(duì)模塊源代碼進(jìn)行維護(hù)性評(píng)估時(shí),主要審查模塊源代碼的格式與內(nèi)容,以及模塊相關(guān)文檔和源代碼的一致性。模塊源代碼的維護(hù)性評(píng)估指標(biāo)主要有可描述性、可追溯性、簡(jiǎn)易性、模塊化、一致性、可測(cè)試性和可擴(kuò)展性。
3) 對(duì)CSU源代碼進(jìn)行評(píng)估時(shí),主要審查CSU源代碼的格式和內(nèi)容,以及評(píng)估CSU相關(guān)文檔和源代碼的一致性。CSU源代碼的維護(hù)性評(píng)估指標(biāo)主要包括可描述性、可追溯性、簡(jiǎn)易性、模塊化、一致性和可擴(kuò)展性。評(píng)估是按照由簡(jiǎn)單到復(fù)雜、由粗略到具體的原則展開的,例如,在評(píng)估人員審閱CSU內(nèi)部源代碼之前,應(yīng)事先評(píng)審CSU的注釋塊及其接口。另外,CSU相關(guān)參數(shù)、數(shù)據(jù)結(jié)構(gòu)等也是軟件維護(hù)性評(píng)估的對(duì)象。
4) 對(duì)軟件實(shí)現(xiàn)進(jìn)行軟件維護(hù)性評(píng)估用于發(fā)現(xiàn)那些只有同時(shí)檢查文檔和源代碼才能發(fā)現(xiàn)的軟件維護(hù)性問題,以保證軟件產(chǎn)品得到全面評(píng)估。軟件實(shí)現(xiàn)的維護(hù)性評(píng)估指標(biāo)包括簡(jiǎn)易性、模塊化、可擴(kuò)展性和約定性。有些維護(hù)性評(píng)估指標(biāo)準(zhǔn)則看似與源代碼中的評(píng)估準(zhǔn)則相同,但對(duì)象不同,這里是對(duì)整個(gè)系統(tǒng)提出的,而非單獨(dú)的模塊。
由于篇幅有限,僅列出了對(duì)模塊源代碼進(jìn)行軟件維護(hù)性評(píng)估的準(zhǔn)則,如表2所示。
按照表2中所列的模塊源代碼的軟件維護(hù)性評(píng)估準(zhǔn)則,評(píng)估人員可以根據(jù)軟件與指標(biāo)的符合程度通過定性專家打分或者定量人工/工具度量的方式給出軟件模塊源代碼可描述性、模塊化、可擴(kuò)展性、簡(jiǎn)易性、可追溯性、一致性、可測(cè)試性這七項(xiàng)維護(hù)性指標(biāo)的分?jǐn)?shù)。對(duì)于每個(gè)問題的特殊情況評(píng)估人員要進(jìn)行書面說明,并給出針對(duì)性的修改建議。然后,根據(jù)重要程度分別分配給模塊源代碼中可描述性、模塊化、可擴(kuò)展性、簡(jiǎn)易性、可追溯性、一致性、可測(cè)試性這七項(xiàng)維護(hù)性評(píng)估指標(biāo)其相應(yīng)的權(quán)重。最后,對(duì)各指標(biāo)的維護(hù)性分?jǐn)?shù)進(jìn)行加權(quán)處理,即可得出模塊源代碼的維護(hù)性分?jǐn)?shù)。采用同樣的方法可分別計(jì)算出軟件文檔、CSU源代碼和軟件實(shí)現(xiàn)的維護(hù)性分?jǐn)?shù)。對(duì)軟件文檔、模塊源代碼、CSU源代碼和軟件實(shí)現(xiàn)的維護(hù)性分?jǐn)?shù)進(jìn)行加權(quán)綜合,即可計(jì)算得出軟件的整體維護(hù)性水平。
表2 模塊源代碼的維護(hù)性評(píng)估準(zhǔn)則
指標(biāo)說明評(píng)估準(zhǔn)則可追溯性要求源代碼的描述文檔之間以及文檔和模塊源代碼之間都有可追溯性信息,以實(shí)現(xiàn)信息在頂層需求到底層詳細(xì)實(shí)現(xiàn)之間的追溯。1. 文檔中包含對(duì)源代碼的詳細(xì)描述,以方便模塊追溯2. 文檔中包含對(duì)數(shù)據(jù)項(xiàng)的可追溯性描述信息,以方便模塊追溯3. 數(shù)據(jù)庫文檔中包含對(duì)數(shù)據(jù)庫數(shù)據(jù)項(xiàng)的可追溯性描述信息,以方便模塊追溯簡(jiǎn)易性簡(jiǎn)單的模塊更易于理解。可從模塊規(guī)模、數(shù)據(jù)結(jié)構(gòu)復(fù)雜度、控制結(jié)構(gòu)復(fù)雜度、編碼復(fù)雜度等方面度量模塊的簡(jiǎn)單性。1. 模塊中可執(zhí)行語句的行數(shù)適當(dāng)2. 模塊中操作符的數(shù)量適當(dāng)3. 模塊包含大量的控制分支語句4. 模塊中使用的嵌套語句可以控制5. 模塊中使用的大量數(shù)據(jù)項(xiàng)易于處理6. 模塊中使用的大量復(fù)合數(shù)據(jù)結(jié)構(gòu)易于處理7. 模塊中使用的復(fù)雜公式易于處理8. 模塊內(nèi)不存在技巧性的程序設(shè)計(jì)9. 模塊不包含外來代碼10. 模塊運(yùn)用大量易處理的機(jī)器相關(guān)技術(shù)或語言進(jìn)行擴(kuò)展模塊化程序由大量相互獨(dú)立的簡(jiǎn)單模塊構(gòu)成,且模塊具備低耦合、結(jié)構(gòu)化、功能內(nèi)聚和可控制等特性。1. 模塊與其它模塊低耦合2. 模塊高內(nèi)聚3. 模塊內(nèi)功能上相關(guān)的數(shù)據(jù)元素被組織為邏輯數(shù)據(jù)結(jié)構(gòu)4. 模塊中未過多使用全局變量一致性要求源代碼文檔、代碼注釋塊和源代碼保持一致。1. 注釋塊信息與相關(guān)的源代碼一致2. 文檔的輸入/輸出信息與源代碼一致3. 文檔中模塊控制流、數(shù)據(jù)流和數(shù)據(jù)處理信息與源代碼一致可測(cè)試性源代碼具備錯(cuò)誤識(shí)別和錯(cuò)誤精確處理的邏輯。1. 對(duì)非法輸入進(jìn)行適當(dāng)處理2. 對(duì)模塊內(nèi)可能發(fā)生的錯(cuò)誤進(jìn)行適當(dāng)處理可擴(kuò)展性在一定時(shí)間內(nèi),能夠快捷、方便地對(duì)模塊源代碼的數(shù)量和類型等進(jìn)行增刪或者修改。1. 模塊內(nèi)常量和數(shù)據(jù)結(jié)構(gòu)的維數(shù)要參數(shù)化
在對(duì)軟件維護(hù)性影響要素進(jìn)行深入剖析的基礎(chǔ)上,文章把握突出重要因素的作用以及指標(biāo)可度量、可評(píng)估兩項(xiàng)原則,選取9項(xiàng)軟件維護(hù)特性評(píng)估指標(biāo)(可描述性、可追溯性、結(jié)構(gòu)化、簡(jiǎn)易性、模塊化、一致性、可測(cè)試性、可擴(kuò)展性和約定性)對(duì)軟件文檔、模塊源代碼、CSU源代碼和軟件實(shí)現(xiàn)進(jìn)行維護(hù)性評(píng)估,針對(duì)不同評(píng)估指標(biāo)分別提出了相應(yīng)的評(píng)估準(zhǔn)則,為進(jìn)一步的軟件維護(hù)性定性或定量評(píng)估指明了方向。今后,本課題還需在軟件維護(hù)性評(píng)估指標(biāo)權(quán)重的計(jì)算方法上進(jìn)行深入研究。