劉國(guó)棟 王 艷 龐 瀾 范鵬程 徐曉楓 賈子慶
(西安應(yīng)用光學(xué)研究所 陜西 西安 710065)
隨著GJB5000A[1]在軍事裝備軟件開(kāi)發(fā)中的推廣,軍事軟件開(kāi)發(fā)過(guò)程逐漸趨于正式,軟件質(zhì)量得到了提高。但是國(guó)內(nèi)軍工單位在制定本地標(biāo)準(zhǔn)時(shí),是以大多數(shù)項(xiàng)目的模式定義的標(biāo)準(zhǔn)過(guò)程,在某些類型的項(xiàng)目上應(yīng)用會(huì)出現(xiàn)開(kāi)發(fā)流程繁瑣、管理成本較高、效率低下、流于形式等情況。隨著國(guó)防建設(shè)的發(fā)展和投入的增加,軍事裝備的科研任務(wù)有所增加,一些較新、較快的項(xiàng)目也有所增加,其特點(diǎn)是需求不明確、開(kāi)發(fā)周期較短[2],傳統(tǒng)的開(kāi)發(fā)方法在這些項(xiàng)目中表現(xiàn)出局限性。為了保質(zhì)保量、高效及時(shí)地完成任務(wù),必須引入新的開(kāi)發(fā)方法,在保證滿足國(guó)軍標(biāo)的要求的前提下,使裝備承研單位能迅速響應(yīng)需求變化而不失大規(guī)模規(guī)范化開(kāi)發(fā)。
光電系統(tǒng)在軍事應(yīng)用中發(fā)揮著重要的作用,廣泛應(yīng)用在偵察感知、瞄準(zhǔn)指示、預(yù)警對(duì)抗等領(lǐng)域[3],并且隨著信息化、智能化發(fā)展的需求,其軟件規(guī)模逐步增大、可靠性要求也逐步提高,在國(guó)防領(lǐng)域?qū)?huì)發(fā)揮越來(lái)越重要的作用,因此很有必要對(duì)其研制過(guò)程進(jìn)行改進(jìn)。軍用光電系統(tǒng)軟件各配置項(xiàng)多為嵌入式軟件,軟件規(guī)模以中小型為主,目前多為以單個(gè)軟件配置項(xiàng)為主劃分生命周期模型進(jìn)行開(kāi)發(fā),各軟件配置項(xiàng)從軟件負(fù)責(zé)人、軟件主管到各級(jí)開(kāi)發(fā)、測(cè)試、支撐角色一應(yīng)俱全,機(jī)構(gòu)龐雜,流程繁瑣,引入集成化的開(kāi)發(fā)方法將各配置項(xiàng)統(tǒng)一管理很有必要。針對(duì)需求不固定、研制周期短的項(xiàng)目,可以引入敏捷開(kāi)發(fā)的思想應(yīng)用到研制過(guò)程中。
為了提高設(shè)備軟件的質(zhì)量,提高設(shè)備軟件承包商的軟件開(kāi)發(fā)能力,總裝電子信息基礎(chǔ)部提出了GJB5000A-2008《軍用軟件研制能力成熟度模型》。它由5個(gè)成熟度級(jí)別、22個(gè)過(guò)程域、48個(gè)專用目標(biāo)、165個(gè)專用實(shí)踐、2個(gè)共享目標(biāo)和12個(gè)共用實(shí)踐組成。成熟度等級(jí)向組織提供了測(cè)量其軟件過(guò)程能改進(jìn)得多好的方法,可用于基準(zhǔn)對(duì)比、供方選擇、合同項(xiàng)目監(jiān)督、評(píng)估和評(píng)價(jià)活動(dòng)。軍用軟件開(kāi)發(fā)單位按照GJB5000A的要求進(jìn)行落地,形成符合單位實(shí)際情況的運(yùn)行改進(jìn)系統(tǒng),自發(fā)布以來(lái)效果顯著[4-5]。
在軟件管理和研發(fā)人員的努力下,軍用光電系統(tǒng)軟件的開(kāi)發(fā)過(guò)程按照GJB5000A的要求有序進(jìn)行,完成了從“小作坊”到“正規(guī)軍”的轉(zhuǎn)變,提高了研發(fā)效率,管理成本降低,軟件可靠性顯著提高。但是隨著企業(yè)改制、組織機(jī)構(gòu)調(diào)整和具有新特點(diǎn)項(xiàng)目的出現(xiàn),原有的研制過(guò)程中有些做法已不太適應(yīng)這些變化,需要做出針對(duì)性的改進(jìn)。
1.2.1開(kāi)發(fā)過(guò)程以單配置項(xiàng)為主
光電系統(tǒng)軟件根據(jù)功能和部署位置通常劃分為多個(gè)配置項(xiàng),配置項(xiàng)組成示意如圖1所示,基本信息示意如表1所示。
圖1 光電系統(tǒng)軟件組成
表1 各配置項(xiàng)基本信息
續(xù)表1
可以看出,各軟件配置項(xiàng)編程語(yǔ)言雖然以C語(yǔ)言為主,但涉及的專業(yè)性較強(qiáng),且多為嵌入式軟件,硬件針對(duì)性也比較強(qiáng)?;谝陨咸攸c(diǎn),傳統(tǒng)研制過(guò)程中主要以配置項(xiàng)為主體指定各類角色和選擇生命周期模型,如圖2所示。主要人員角色見(jiàn)表2。
圖2 傳統(tǒng)的光電系統(tǒng)軟件開(kāi)發(fā)過(guò)程
表2 人員角色
此方法的優(yōu)點(diǎn):能完美符合GJB5000A的要求,保證評(píng)價(jià)及年審的正常通過(guò);管理細(xì)致,細(xì)化到每個(gè)配置項(xiàng),保證了每個(gè)技術(shù)環(huán)節(jié)及管理環(huán)節(jié)都有相應(yīng)角色,可靠性較高。缺點(diǎn):需要配備的人員隊(duì)伍龐大,各類角色培訓(xùn)成本及人工成本較高;不管軟件規(guī)模及重要程度的大小,所需要的角色基本一樣,靈活性較差;頂層策劃較弱,各配置項(xiàng)之間的集成較弱,各配置項(xiàng)之間獨(dú)立性較強(qiáng),軟件負(fù)責(zé)人之間缺少策劃的充分交流,各配置項(xiàng)之間進(jìn)度策劃參差不齊,不利于系統(tǒng)集成進(jìn)度的策劃,缺少專業(yè)技能方面的交流,對(duì)設(shè)計(jì)規(guī)范、編碼規(guī)范的應(yīng)用及軟件可靠性設(shè)計(jì)方面各專業(yè)有各專業(yè)的特色,水平也不一。
1.2.2生命周期模型以瀑布模型為主
生命周期過(guò)程模型自誕生之日起發(fā)揮了重要作用,它的發(fā)展起始自1970年W.Royce發(fā)表的瀑布模型,隨著軟件開(kāi)發(fā)活動(dòng)的不斷變化,出現(xiàn)了各種模型,如原型模型、增量模型和螺旋模型[6]。瀑布模型的示意圖如圖3所示。
圖3 瀑布模型示意圖
瀑布模型在高透明、高可控性、高可靠性的同時(shí)也有各種局限性:
(1) 在項(xiàng)目初期就要求分析出全部需求,不能有遺漏和理解上的錯(cuò)誤,后續(xù)以此為基礎(chǔ)進(jìn)行詳盡的策劃。但往往項(xiàng)目執(zhí)行時(shí),一方面用戶由于缺乏軟件開(kāi)發(fā)的知識(shí)很難準(zhǔn)確地說(shuō)清楚軟件到底要干什么;一方面隨著硬件平臺(tái)和外部環(huán)境的變化,組織機(jī)構(gòu)、工作任務(wù)的變化,用戶的潛在需求是不停變化的。另外對(duì)于技術(shù)較新的項(xiàng)目,需求在前期是無(wú)法完全明確的,需要在研制過(guò)程中逐步明確。
(2) 階段之間具有順序性和依賴性。在瀑布模型下,后階段工作依賴前階段工作完成,且產(chǎn)品和活動(dòng)需通過(guò)評(píng)審后才能進(jìn)入下階段,對(duì)于進(jìn)度要緊的項(xiàng)目,可能會(huì)導(dǎo)致進(jìn)度推后,因此軟件開(kāi)發(fā)人員接到任務(wù)后往往急于求成而提前進(jìn)行了編碼,導(dǎo)致大量返工。
(3) 軟件實(shí)現(xiàn)節(jié)點(diǎn)延遲,在需求分析和設(shè)計(jì)階段的工作完成并通過(guò)評(píng)審后才能進(jìn)入實(shí)現(xiàn)階段。由于其特殊用途,軍用軟件對(duì)軟件可靠性有很高的要求。就軍用光電系統(tǒng)軟件研制而言,其主要是嵌入式軟件,以往的開(kāi)發(fā)具有需求相對(duì)簡(jiǎn)明、軟件規(guī)模小、開(kāi)發(fā)周期長(zhǎng)等特征,結(jié)合可靠性、安全性的高要求,因此主要采用的是瀑布型模型。雖然根據(jù)不同項(xiàng)目類型增加了增量、原型、迭代等要素,甚至精簡(jiǎn)合并了研制階段,但本質(zhì)還是瀑布模型的理論。
為了解決研制過(guò)程以配置項(xiàng)為主體帶來(lái)的問(wèn)題,擬采用集成管理的方法。中心思想是將光電系統(tǒng)軟件當(dāng)成一個(gè)配置項(xiàng),各軟件配置項(xiàng)作為一個(gè)模塊來(lái)管理。具體做法如下:
軟件配置項(xiàng)的軟件負(fù)責(zé)人被撤銷,并且只為整個(gè)項(xiàng)目設(shè)置一個(gè)軟件負(fù)責(zé)人。擔(dān)任項(xiàng)目軟件負(fù)責(zé)人角色的人員應(yīng)具有豐富的開(kāi)發(fā)經(jīng)驗(yàn),對(duì)各個(gè)專業(yè)的技術(shù)特點(diǎn)及研制過(guò)程都有一定的了解,掌握其技術(shù)難點(diǎn)及關(guān)鍵點(diǎn),包括所使用的工具、開(kāi)發(fā)語(yǔ)言、測(cè)試方法、所適用的規(guī)范、標(biāo)準(zhǔn)等。此方法對(duì)項(xiàng)目軟件負(fù)責(zé)人的要求較高,需具備從頂層把握各軟件配置項(xiàng)的研制進(jìn)度,具有掌握各配置項(xiàng)研制過(guò)程的共同點(diǎn)和不同點(diǎn)的能力。
整個(gè)項(xiàng)目的所有軟件統(tǒng)一項(xiàng)目的定義過(guò)程,選擇統(tǒng)一的生命周期模型,并選擇定制過(guò)程和活動(dòng)。
項(xiàng)目軟件負(fù)責(zé)人統(tǒng)一做整個(gè)項(xiàng)目軟件的策劃、監(jiān)督、風(fēng)險(xiǎn)分析、測(cè)量分析,在重大事項(xiàng)出現(xiàn)時(shí)負(fù)責(zé)決策。
單元測(cè)試人員可以由其他軟件配置項(xiàng)的開(kāi)發(fā)人員承擔(dān),各配置項(xiàng)之間進(jìn)行角色交叉。這使得測(cè)試人員數(shù)量得到了減少,各配置項(xiàng)之間的技術(shù)交流有所增加。
改進(jìn)后的研制過(guò)程如圖4所示。各角色之間職責(zé)及數(shù)量的變化見(jiàn)表3。
圖4 集成后的光電系統(tǒng)軟件研制過(guò)程
表3 改進(jìn)后項(xiàng)目人員角色的職責(zé)及數(shù)量
續(xù)表3
2.2.1敏捷方法簡(jiǎn)介
采用了集成化的方法后,生命周期模型得到了改進(jìn),研制過(guò)程中的管理流程和角色數(shù)量得到了精簡(jiǎn),角色職能得到了優(yōu)化,可以在大部分項(xiàng)目的研制過(guò)程中進(jìn)行推廣,在保證質(zhì)量的前提下提升管理及研發(fā)效率。但其還是以瀑布模型為主,對(duì)需求變動(dòng)頻繁、開(kāi)發(fā)周期短的項(xiàng)目缺乏適應(yīng)性。針對(duì)此類項(xiàng)目可以在集成化改進(jìn)的基礎(chǔ)上引入敏捷開(kāi)發(fā)方法。
敏捷開(kāi)發(fā)就是針對(duì)軟件研制過(guò)程中遇到的需求頻繁變動(dòng)、任務(wù)節(jié)點(diǎn)較緊的問(wèn)題。2001年一批軟件專家成立了敏捷聯(lián)盟,總結(jié)出了能快速高效研發(fā)并能輕松應(yīng)對(duì)需求變更頻繁的價(jià)值觀和原則。敏捷開(kāi)發(fā)宣言的內(nèi)容:個(gè)人與溝通勝過(guò)過(guò)程和工具;可工作的軟件勝過(guò)面面俱到的文檔;客戶協(xié)作勝過(guò)合同談判;相應(yīng)變化勝過(guò)遵循計(jì)劃。
敏捷開(kāi)發(fā)方法注重人與人之間的交流,強(qiáng)調(diào)以人為核心,與以往傳統(tǒng)的講究編制詳細(xì)的計(jì)劃和技術(shù)資料的文檔驅(qū)動(dòng)方法不同[7]。目前使用的基本敏捷方法有很多,例如極限編程(XP)、Scrum、特征驅(qū)動(dòng)開(kāi)發(fā)(FDD)等[8],每種方法都有不同的實(shí)踐,但基礎(chǔ)都是基于增量和迭代的過(guò)程[9]。
敏捷開(kāi)發(fā)在國(guó)外已經(jīng)流行多年,像微軟、IBM、谷歌、雅虎等知名公司應(yīng)用此方法取得了相當(dāng)不錯(cuò)的效率,同時(shí)開(kāi)發(fā)了大量的項(xiàng)目管理軟件如ScrumWorks、VersionOne、Rally等來(lái)支撐敏捷開(kāi)發(fā),開(kāi)源工具有XPlanner、XPWeb、Trac等。國(guó)內(nèi)目前仍然停留在技術(shù)采納生命周期的初期試用階段,在國(guó)內(nèi)流行較慢的原因?yàn)閲?guó)內(nèi)習(xí)慣于制定詳細(xì)的標(biāo)準(zhǔn)和計(jì)劃,所有項(xiàng)目都要按照標(biāo)準(zhǔn)和計(jì)劃執(zhí)行。敏捷開(kāi)發(fā)方法與國(guó)內(nèi)特別是軍用軟件開(kāi)發(fā)主要特點(diǎn)比較見(jiàn)表4。
表4 敏捷方法與國(guó)內(nèi)軍用軟件傳統(tǒng)方法主要特點(diǎn)比較
2.2.2敏捷方法應(yīng)用
眾多文獻(xiàn)資料分析了敏捷開(kāi)發(fā)與GJB5000A或CMMI結(jié)合的方法和思想[10-12],本文主要介紹了在項(xiàng)目管理和工程技術(shù)活動(dòng)兩個(gè)過(guò)程領(lǐng)域的敏捷開(kāi)發(fā)。其思想如下:
(1) 快速交付中間版本,供競(jìng)標(biāo)、試驗(yàn)、大系統(tǒng)聯(lián)調(diào)使用。將軟件需求分析、軟件設(shè)計(jì)、軟件實(shí)現(xiàn)、單元和集成測(cè)試迭代為一個(gè)階段。迭代周期中,只需要有相應(yīng)文檔的相應(yīng)內(nèi)容,例如需求規(guī)格說(shuō)明、設(shè)計(jì)描述、測(cè)試文檔等。交付代碼后再按照模板和標(biāo)準(zhǔn)編寫文檔和實(shí)行評(píng)審。這樣做的優(yōu)勢(shì)一是能快速交付軟件產(chǎn)品,解決了前面提到的按照階段一步步執(zhí)行影響進(jìn)度的問(wèn)題,保證了產(chǎn)品按時(shí)交付;二是以用戶為核心,根據(jù)用戶的要求及時(shí)更改軟件產(chǎn)品,轉(zhuǎn)變觀念不怕變更,解決以往不敢變更和變更難的現(xiàn)象。缺點(diǎn)是對(duì)軟件開(kāi)發(fā)人員要求較高,如果在編碼完成階段才暴露問(wèn)題,返工的成本會(huì)比較大。
(2) 項(xiàng)目總師/系統(tǒng)總體組成員作為軟件項(xiàng)目組的用戶,參與每次迭代過(guò)程的討論溝通。一是光電系統(tǒng)軟件均為嵌入式軟件,與硬件系統(tǒng)結(jié)合緊密,二是嵌入式軟件很難直接面對(duì)顧客或使用者,因此由熟悉軟件需求和開(kāi)發(fā)管理的系統(tǒng)總體組成員擔(dān)任此角色,參與每次迭代前需求的選擇和迭代后的確認(rèn),以及迭代過(guò)程中的管理過(guò)程。這樣能降低上面提到的問(wèn)題暴露過(guò)晚造成的風(fēng)險(xiǎn)。
(3) 單元測(cè)試和實(shí)現(xiàn)同時(shí)進(jìn)行。往常按照瀑布模型開(kāi)發(fā)時(shí)要先設(shè)計(jì)編碼再進(jìn)行測(cè)試,敏捷開(kāi)發(fā)講求用測(cè)試來(lái)驅(qū)動(dòng)設(shè)計(jì)編碼,根據(jù)用戶需求先進(jìn)行測(cè)試的策劃、需求分析和實(shí)現(xiàn),再寫代碼,這樣能確保測(cè)試的覆蓋率,也能避免冗余的設(shè)計(jì)實(shí)現(xiàn)。這種方法需要測(cè)試工具和經(jīng)驗(yàn)豐富的測(cè)試角色的支撐,前期可采取測(cè)試和實(shí)現(xiàn)同步進(jìn)行的方法進(jìn)行過(guò)度,待工具配套和開(kāi)發(fā)人員的水平提升后再改為測(cè)試驅(qū)動(dòng)實(shí)現(xiàn)的方法。
結(jié)合上述想法,我們提出了生命周期過(guò)程的主要過(guò)程,如圖5所示。
圖5 生命周期主要流程圖
本生命周期模型有以下特點(diǎn):
(1) 系統(tǒng)需求分析和設(shè)計(jì)階段確定整個(gè)光電系統(tǒng)軟件的要求,編制、評(píng)審系統(tǒng)需求規(guī)格說(shuō)明和系統(tǒng)設(shè)計(jì)說(shuō)明。各軟件配置項(xiàng)的軟件研制任務(wù)書都放在后面進(jìn)行編制和評(píng)審。原因是光電系統(tǒng)的主要軟件是嵌入式軟件,它與硬件緊密集成,一些功能和性能的界限不太清楚,如坐標(biāo)系轉(zhuǎn)化功能可由光電管理計(jì)算機(jī)軟件實(shí)現(xiàn),也可由光電伺服控制軟件實(shí)現(xiàn),光電軸位存儲(chǔ)功能可由光電管理計(jì)算機(jī)軟件實(shí)現(xiàn)也可由視頻跟蹤器實(shí)現(xiàn),最終可在多次迭代后選擇最優(yōu)化的實(shí)現(xiàn)方式。用戶關(guān)注的是光電系統(tǒng)整體呈現(xiàn)的功能,各配置項(xiàng)之間的功能分配要靈活得多,這樣做可以減少以往項(xiàng)目在研制階段無(wú)謂的需求變更和配置管理手續(xù),提高效率。
(2) 每次迭代以提供可運(yùn)行的代碼為主,將設(shè)計(jì)、實(shí)現(xiàn)和單元測(cè)試同步進(jìn)行,保存中間數(shù)據(jù),保證聯(lián)試試驗(yàn)后再進(jìn)行數(shù)據(jù)整理形成最終文檔。這樣會(huì)存在風(fēng)險(xiǎn)。因?yàn)樾枨蠓治鋈藛T和開(kāi)發(fā)人員的能力導(dǎo)致問(wèn)題發(fā)現(xiàn)不及時(shí),從而增加返工的難度和成本。因此需要系統(tǒng)組成員參與每次迭代的需求分析、需求選擇和管理過(guò)程的全程參與。
(3) 以系統(tǒng)軟件為主線進(jìn)行策劃,各配置項(xiàng)不再單獨(dú)管理,改為統(tǒng)一策劃、研制和管理。前面已經(jīng)進(jìn)行了詳細(xì)分析。
本文緊密結(jié)合GJB5000A的要求和敏捷開(kāi)發(fā)方法以及集成管理的思路,提出了適用于中小型軟件規(guī)模、開(kāi)發(fā)周期較短的軍用光電系統(tǒng)軟件研制的生命周期模型主要流程。采取集成管理的方法,將光電系統(tǒng)軟件當(dāng)成一個(gè)配置項(xiàng),各軟件配置項(xiàng)作為一個(gè)模塊來(lái)管理,整個(gè)項(xiàng)目的所有軟件制定一個(gè)項(xiàng)目定義過(guò)程和生命周期模型,精簡(jiǎn)了管理流程和人員角色。吸取敏捷管理的思想,先交付產(chǎn)品再統(tǒng)一整理文檔,保證系統(tǒng)試驗(yàn)、聯(lián)試的順利進(jìn)行。為了保證需求不出現(xiàn)偏差,選擇項(xiàng)目總師/系統(tǒng)總體組成員作為軟件項(xiàng)目組的用戶,參與每次迭代過(guò)程的討論溝通。為了保證產(chǎn)品質(zhì)量,采取了單元測(cè)試和實(shí)現(xiàn)同時(shí)進(jìn)行。在軟件質(zhì)量、可靠性不降低的前提下快速交付軟件產(chǎn)品不拖延進(jìn)度。后續(xù)隨著開(kāi)發(fā)、管理人員水平提高以及配套工具逐漸到位,可以進(jìn)一步優(yōu)化此過(guò)程,進(jìn)一步提高開(kāi)發(fā)效率。