郝延剛
(海軍裝備部駐南京地區(qū)第二軍事代表室,南京 211153)
隨著現(xiàn)代軟件技術(shù)的發(fā)展,對(duì)軟件項(xiàng)目的需求日益復(fù)雜,變更頻繁發(fā)生。同時(shí),軟件工程的發(fā)展也要求軟件開(kāi)發(fā)從手工作坊上升到團(tuán)隊(duì)化、規(guī)?;拈_(kāi)發(fā)模式。當(dāng)開(kāi)發(fā)團(tuán)隊(duì)發(fā)展到一定規(guī)模時(shí)會(huì)越來(lái)越強(qiáng)調(diào)開(kāi)發(fā)過(guò)程的規(guī)范化和成熟度。[1]
針對(duì)軟件技術(shù)發(fā)展的趨勢(shì),2008 年頒布了《軍用軟件研制能力成熟度模型》(GJB 5000A-2008),規(guī)定了軍用軟件研制和維護(hù)活動(dòng)中的重要管理過(guò)程和工程過(guò)程實(shí)踐,以提高軍工企業(yè)軟件研制能力,其中軟件配置管理更是在軟件項(xiàng)目開(kāi)發(fā)過(guò)程中起著重要的作用。本文采用Spring、MyBatis以及Activiti技術(shù),定義軟件配置業(yè)務(wù)流程,設(shè)計(jì)滿(mǎn)足 GJB 5000A 的軟件配置管理系統(tǒng)。
軟件配置管理是指在開(kāi)發(fā)過(guò)程中各階段管理計(jì)算機(jī)程序演變的學(xué)科。作為軟件工程的關(guān)鍵元素,它己經(jīng)成為軟件開(kāi)發(fā)和維護(hù)的重要組成部分,提供了結(jié)構(gòu)化的、有序化的、產(chǎn)品化的管理軟件工程的方法。它涵蓋了軟件生命周期的所有領(lǐng)域并影響所有數(shù)據(jù)和過(guò)程。[2-3]
依據(jù)GJB 5000A,軟件配置管理過(guò)程域主要包括3個(gè)專(zhuān)用目標(biāo):建立基線(xiàn)、跟蹤和控制更改以及保證完整性。
在軟件項(xiàng)目的初期階段,配置管理組開(kāi)始策劃配置管理活動(dòng)并建立配置管理系統(tǒng),且隨著項(xiàng)目進(jìn)展建立并發(fā)布相關(guān)基線(xiàn)。通過(guò)配置管理的配置控制、變更管理和配置審核等功能,對(duì)配置管理系統(tǒng)中的工作產(chǎn)品的發(fā)布和基線(xiàn)的變更實(shí)施系統(tǒng)性的控制和監(jiān)督。
根據(jù)GJB 5000A-2008對(duì)配置管理的要求,配置管理系統(tǒng)應(yīng)滿(mǎn)足如圖1所示功能需求。
圖1 配置管理功能需求
配置項(xiàng)是軟件配置管理指定的實(shí)體。配置項(xiàng)的管理可以按多個(gè)粒度級(jí)實(shí)施。一般來(lái)說(shuō),配置項(xiàng)包括需求、設(shè)計(jì)、文檔、測(cè)試數(shù)據(jù)和代碼等。但是,在最極端的情況下配置項(xiàng)可以是一行代碼或是一行文檔。
項(xiàng)目管理計(jì)劃應(yīng)當(dāng)涵蓋以下內(nèi)容:
(1) 確定配置控制委員會(huì)(CCB)組長(zhǎng)、成員以及組內(nèi)分工;
(2) 標(biāo)識(shí)配置項(xiàng);
(3) 策劃各配置項(xiàng)的受控時(shí)機(jī);
(4) 定義基線(xiàn);
(5) 策劃項(xiàng)目產(chǎn)品入產(chǎn)品庫(kù)的時(shí)機(jī);
(6) 策劃配置審核、配置狀態(tài)報(bào)告活動(dòng),明確時(shí)機(jī)或頻度。
依據(jù)配置管理庫(kù)目錄結(jié)構(gòu),可以使用配置管理工具或資源管理器建立項(xiàng)目的開(kāi)發(fā)庫(kù)、受控庫(kù)、產(chǎn)品庫(kù),并設(shè)置訪(fǎng)問(wèn)權(quán)限。
對(duì)軟件配置管理庫(kù)的操作是軟件配置管理中的核心內(nèi)容,主要涵蓋檢入、檢出、分支、合并、版本比較和版本標(biāo)簽功能。[4]
基線(xiàn)是一組經(jīng)過(guò)驗(yàn)證或確認(rèn)并作為后續(xù)工作開(kāi)展依據(jù)的一個(gè)或一組工作產(chǎn)品。基線(xiàn)建立的條件是基線(xiàn)配置項(xiàng)均已納入受控庫(kù)受控,已通過(guò)相應(yīng)審批。
項(xiàng)目在開(kāi)發(fā)過(guò)程中需要建立的基線(xiàn)通常有功能基線(xiàn)、分配基線(xiàn)、設(shè)計(jì)基線(xiàn)、實(shí)現(xiàn)基線(xiàn)、產(chǎn)品基線(xiàn)等。軟件生命周期中每一條基線(xiàn)都應(yīng)具有唯一的標(biāo)識(shí),并且基線(xiàn)的建立應(yīng)該經(jīng)過(guò)相應(yīng)級(jí)別 CCB 批準(zhǔn)后由配置管理人員建立。
變更管理是在軟件研制和維護(hù)過(guò)程中,對(duì)發(fā)現(xiàn)的軟件問(wèn)題進(jìn)行確認(rèn),分析產(chǎn)生問(wèn)題的根源,確定受影響的應(yīng)更改的受控軟件配置項(xiàng),并實(shí)施軟件變更的過(guò)程。滿(mǎn)足 GJB 5000A 要求的軟件項(xiàng)目在開(kāi)發(fā)及維護(hù)過(guò)程中任何一個(gè)基線(xiàn)配置項(xiàng)的更改都應(yīng)在嚴(yán)格有效的變更控制下進(jìn)行。
配置審核分為針對(duì)基線(xiàn)的基線(xiàn)審計(jì)和定期審核。對(duì)于配置審核中發(fā)現(xiàn)的問(wèn)題應(yīng)根據(jù)具體的問(wèn)題處理規(guī)程進(jìn)行處理。[5]
配置狀態(tài)發(fā)布是建立與維護(hù)配置項(xiàng)的記錄,可為相關(guān)人員提供準(zhǔn)確的配置信息,通過(guò)記錄和報(bào)告變更請(qǐng)求的狀態(tài)為產(chǎn)品的質(zhì)量、進(jìn)度、趨勢(shì)等跟蹤提供數(shù)據(jù)。
隨著Internet技術(shù)的興起,瀏覽器已經(jīng)統(tǒng)一了客戶(hù)端。將系統(tǒng)功能實(shí)現(xiàn)的核心部分集中到服務(wù)器上,可簡(jiǎn)化系統(tǒng)的開(kāi)發(fā)、維護(hù)和使用。因此,本文配置管理系統(tǒng)采用B/S架構(gòu)進(jìn)行設(shè)計(jì)。
運(yùn)行時(shí)從界面到數(shù)據(jù)存儲(chǔ)經(jīng)歷多個(gè)功能層次的交互,依次進(jìn)行數(shù)據(jù)展現(xiàn)與輸入、數(shù)據(jù)傳輸與接入、服務(wù)請(qǐng)求派發(fā)、業(yè)務(wù)邏輯執(zhí)行和數(shù)據(jù)持久化操作等多個(gè)階段,形成如圖2所示的分層結(jié)構(gòu)。
圖2 配置管理系統(tǒng)分層架構(gòu)設(shè)計(jì)
(a) 展現(xiàn)層負(fù)責(zé)以文字、圖形、表格等可視化界面向用戶(hù)展示系統(tǒng)信息;
(b) 服務(wù)交互層提供用戶(hù)請(qǐng)求數(shù)據(jù)的格式化、傳輸、封包與解包、URL處理的派發(fā)等功能,系統(tǒng)內(nèi)部服務(wù)調(diào)用支持RESTful方式以JSON格式序列化,服務(wù)端采用Spring MVC中的DispatchServlet進(jìn)行請(qǐng)求派發(fā);
(c) 業(yè)務(wù)邏輯層進(jìn)行具體的系統(tǒng)功能實(shí)現(xiàn),系統(tǒng)邏輯組件包括Activiti框架組件,可實(shí)現(xiàn)工作流控制;
(d) 持久層采用MyBatis框架提供數(shù)據(jù)的持久化、數(shù)據(jù)訪(fǎng)問(wèn)能力。
軟件配置管理系統(tǒng)實(shí)現(xiàn)4大功能:配置管理、配置審核管理、報(bào)告管理、系統(tǒng)管理。功能架構(gòu)設(shè)計(jì)如圖3所示。
圖3 配置管理系統(tǒng)功能架構(gòu)
配置管理功能模塊包含配置項(xiàng)標(biāo)識(shí)、配置管理計(jì)劃制定、建立和維護(hù)配置管理環(huán)境、三庫(kù)管理、建立并發(fā)布基線(xiàn)、變更控制等功能,是配置管理的核心功能。
項(xiàng)目配置管理是根據(jù)項(xiàng)目配置管理計(jì)劃,對(duì)項(xiàng)目的配置管理活動(dòng)進(jìn)行配置審核。配置審核功能包括功能審核和物理審核功能。功能審核的目的是驗(yàn)證配置項(xiàng)功能特征是否已達(dá)到其基線(xiàn)文檔中所規(guī)定的需求,是否完備和正確。物理審核的目的是驗(yàn)證已構(gòu)造的配置項(xiàng)是否完備,版本是否一致。
報(bào)告功能主要由配置狀態(tài)報(bào)告、配置審核報(bào)告、基線(xiàn)狀態(tài)報(bào)告組成。
根據(jù)配置規(guī)程及項(xiàng)目定義,系統(tǒng)定義多種角色:系統(tǒng)管理員、配置管理員、審批人員、開(kāi)發(fā)人員。項(xiàng)目組成員根據(jù)自己的角色選擇相應(yīng)用戶(hù)進(jìn)行登錄。登入系統(tǒng)后,根據(jù)角色的不同系統(tǒng)所授予的權(quán)限及功能不同。
系統(tǒng)基于Activiti框架定義工作流程。Activiti采用BPMN2.0標(biāo)準(zhǔn)。該標(biāo)準(zhǔn)通過(guò)XML定義業(yè)務(wù)流程相關(guān)的節(jié)點(diǎn)。Activiti工作流程引擎配置如下所示:
在Activiti引擎支撐下,配置管理系統(tǒng)的流程控制可以基于數(shù)據(jù)庫(kù)實(shí)現(xiàn)流程節(jié)點(diǎn)的定義、修改與維護(hù)。
配置管理系統(tǒng)主流程涵蓋了配置過(guò)程的關(guān)鍵活動(dòng)。主流程設(shè)計(jì)如圖4所示。
基于分層架構(gòu),采用Spring+MyBatis架構(gòu)設(shè)計(jì)系統(tǒng)主要業(yè)務(wù)類(lèi)包圖,如圖5所示。
UI包為前臺(tái),Controller、Service、Dao包為后臺(tái),遵循MVC架構(gòu)設(shè)計(jì)。UI包主要負(fù)責(zé)前臺(tái)頁(yè)面的表示,通過(guò)RESTful接口與后臺(tái)Controller包進(jìn)行交互。
Controller包負(fù)責(zé)具體的業(yè)務(wù)模塊流程的控制。在此包里面調(diào)用Service包對(duì)應(yīng)的接口來(lái)控制業(yè)務(wù)流程。此包中主要包含配置管理相關(guān)的控制入口,如基線(xiàn)控制接口、配置項(xiàng)管理接口、變更控制接口、三庫(kù)管理接口等。
圖4 配置管理業(yè)務(wù)主流程設(shè)計(jì)
圖5 配置管理系統(tǒng)業(yè)務(wù)包設(shè)計(jì)
Service包主要負(fù)責(zé)業(yè)務(wù)模塊的邏輯應(yīng)用流程實(shí)現(xiàn)。如果需要進(jìn)行數(shù)據(jù)庫(kù)交互,則調(diào)用Dao包的接口。此包中主要包含配置管理相關(guān)的控制邏輯,如基線(xiàn)控制邏輯、配置項(xiàng)管理邏輯、變更控制邏輯、三庫(kù)管理邏輯等。
DAO層主要是做數(shù)據(jù)持久層的工作。本系統(tǒng)基于MyBatis架構(gòu)實(shí)現(xiàn)數(shù)據(jù)持久化。由MyBatis框架自動(dòng)實(shí)現(xiàn)Dao包與對(duì)應(yīng)的Mapper.xml文件的關(guān)聯(lián),并執(zhí)行Mapper文件中的數(shù)據(jù)操作語(yǔ)句,實(shí)現(xiàn)數(shù)據(jù)持久化與讀取。
配置管理在軟件開(kāi)發(fā)過(guò)程中占有重要的地位。本文基于GJB 5000A以及長(zhǎng)期的工作實(shí)踐,采用Spring+MyBatis實(shí)現(xiàn)B/S架構(gòu)的軟件配置管理系統(tǒng)。按照本文所述,能有效滿(mǎn)足GJB 5000A-2008中配置管理過(guò)程域二級(jí)的要求。結(jié)合良好的軟件配置管理系統(tǒng),可以提高軟件產(chǎn)品的質(zhì)量,提高工作效率,降低開(kāi)發(fā)成本,從而推動(dòng)軟件研制過(guò)程的標(biāo)準(zhǔn)化發(fā)展。