劉國棟 王 艷 龐 瀾 范鵬程 徐曉楓 賈子慶
(西安應(yīng)用光學(xué)研究所 陜西 西安 710065)
隨著GJB5000A[1]在軍事裝備軟件開發(fā)中的推廣,軍事軟件開發(fā)過程逐漸趨于正式,軟件質(zhì)量得到了提高。但是國內(nèi)軍工單位在制定本地標(biāo)準(zhǔn)時,是以大多數(shù)項目的模式定義的標(biāo)準(zhǔn)過程,在某些類型的項目上應(yīng)用會出現(xiàn)開發(fā)流程繁瑣、管理成本較高、效率低下、流于形式等情況。隨著國防建設(shè)的發(fā)展和投入的增加,軍事裝備的科研任務(wù)有所增加,一些較新、較快的項目也有所增加,其特點是需求不明確、開發(fā)周期較短[2],傳統(tǒng)的開發(fā)方法在這些項目中表現(xiàn)出局限性。為了保質(zhì)保量、高效及時地完成任務(wù),必須引入新的開發(fā)方法,在保證滿足國軍標(biāo)的要求的前提下,使裝備承研單位能迅速響應(yīng)需求變化而不失大規(guī)模規(guī)范化開發(fā)。
光電系統(tǒng)在軍事應(yīng)用中發(fā)揮著重要的作用,廣泛應(yīng)用在偵察感知、瞄準(zhǔn)指示、預(yù)警對抗等領(lǐng)域[3],并且隨著信息化、智能化發(fā)展的需求,其軟件規(guī)模逐步增大、可靠性要求也逐步提高,在國防領(lǐng)域?qū)l(fā)揮越來越重要的作用,因此很有必要對其研制過程進(jìn)行改進(jìn)。軍用光電系統(tǒng)軟件各配置項多為嵌入式軟件,軟件規(guī)模以中小型為主,目前多為以單個軟件配置項為主劃分生命周期模型進(jìn)行開發(fā),各軟件配置項從軟件負(fù)責(zé)人、軟件主管到各級開發(fā)、測試、支撐角色一應(yīng)俱全,機(jī)構(gòu)龐雜,流程繁瑣,引入集成化的開發(fā)方法將各配置項統(tǒng)一管理很有必要。針對需求不固定、研制周期短的項目,可以引入敏捷開發(fā)的思想應(yīng)用到研制過程中。
為了提高設(shè)備軟件的質(zhì)量,提高設(shè)備軟件承包商的軟件開發(fā)能力,總裝電子信息基礎(chǔ)部提出了GJB5000A-2008《軍用軟件研制能力成熟度模型》。它由5個成熟度級別、22個過程域、48個專用目標(biāo)、165個專用實踐、2個共享目標(biāo)和12個共用實踐組成。成熟度等級向組織提供了測量其軟件過程能改進(jìn)得多好的方法,可用于基準(zhǔn)對比、供方選擇、合同項目監(jiān)督、評估和評價活動。軍用軟件開發(fā)單位按照GJB5000A的要求進(jìn)行落地,形成符合單位實際情況的運行改進(jìn)系統(tǒng),自發(fā)布以來效果顯著[4-5]。
在軟件管理和研發(fā)人員的努力下,軍用光電系統(tǒng)軟件的開發(fā)過程按照GJB5000A的要求有序進(jìn)行,完成了從“小作坊”到“正規(guī)軍”的轉(zhuǎn)變,提高了研發(fā)效率,管理成本降低,軟件可靠性顯著提高。但是隨著企業(yè)改制、組織機(jī)構(gòu)調(diào)整和具有新特點項目的出現(xiàn),原有的研制過程中有些做法已不太適應(yīng)這些變化,需要做出針對性的改進(jìn)。
1.2.1開發(fā)過程以單配置項為主
光電系統(tǒng)軟件根據(jù)功能和部署位置通常劃分為多個配置項,配置項組成示意如圖1所示,基本信息示意如表1所示。

圖1 光電系統(tǒng)軟件組成

表1 各配置項基本信息

續(xù)表1
可以看出,各軟件配置項編程語言雖然以C語言為主,但涉及的專業(yè)性較強,且多為嵌入式軟件,硬件針對性也比較強。基于以上特點,傳統(tǒng)研制過程中主要以配置項為主體指定各類角色和選擇生命周期模型,如圖2所示。主要人員角色見表2。

圖2 傳統(tǒng)的光電系統(tǒng)軟件開發(fā)過程

表2 人員角色
此方法的優(yōu)點:能完美符合GJB5000A的要求,保證評價及年審的正常通過;管理細(xì)致,細(xì)化到每個配置項,保證了每個技術(shù)環(huán)節(jié)及管理環(huán)節(jié)都有相應(yīng)角色,可靠性較高。缺點:需要配備的人員隊伍龐大,各類角色培訓(xùn)成本及人工成本較高;不管軟件規(guī)模及重要程度的大小,所需要的角色基本一樣,靈活性較差;頂層策劃較弱,各配置項之間的集成較弱,各配置項之間獨立性較強,軟件負(fù)責(zé)人之間缺少策劃的充分交流,各配置項之間進(jìn)度策劃參差不齊,不利于系統(tǒng)集成進(jìn)度的策劃,缺少專業(yè)技能方面的交流,對設(shè)計規(guī)范、編碼規(guī)范的應(yīng)用及軟件可靠性設(shè)計方面各專業(yè)有各專業(yè)的特色,水平也不一。
1.2.2生命周期模型以瀑布模型為主
生命周期過程模型自誕生之日起發(fā)揮了重要作用,它的發(fā)展起始自1970年W.Royce發(fā)表的瀑布模型,隨著軟件開發(fā)活動的不斷變化,出現(xiàn)了各種模型,如原型模型、增量模型和螺旋模型[6]。瀑布模型的示意圖如圖3所示。

圖3 瀑布模型示意圖
瀑布模型在高透明、高可控性、高可靠性的同時也有各種局限性:
(1) 在項目初期就要求分析出全部需求,不能有遺漏和理解上的錯誤,后續(xù)以此為基礎(chǔ)進(jìn)行詳盡的策劃。但往往項目執(zhí)行時,一方面用戶由于缺乏軟件開發(fā)的知識很難準(zhǔn)確地說清楚軟件到底要干什么;一方面隨著硬件平臺和外部環(huán)境的變化,組織機(jī)構(gòu)、工作任務(wù)的變化,用戶的潛在需求是不停變化的。另外對于技術(shù)較新的項目,需求在前期是無法完全明確的,需要在研制過程中逐步明確。
(2) 階段之間具有順序性和依賴性。在瀑布模型下,后階段工作依賴前階段工作完成,且產(chǎn)品和活動需通過評審后才能進(jìn)入下階段,對于進(jìn)度要緊的項目,可能會導(dǎo)致進(jìn)度推后,因此軟件開發(fā)人員接到任務(wù)后往往急于求成而提前進(jìn)行了編碼,導(dǎo)致大量返工。
(3) 軟件實現(xiàn)節(jié)點延遲,在需求分析和設(shè)計階段的工作完成并通過評審后才能進(jìn)入實現(xiàn)階段。由于其特殊用途,軍用軟件對軟件可靠性有很高的要求。就軍用光電系統(tǒng)軟件研制而言,其主要是嵌入式軟件,以往的開發(fā)具有需求相對簡明、軟件規(guī)模小、開發(fā)周期長等特征,結(jié)合可靠性、安全性的高要求,因此主要采用的是瀑布型模型。雖然根據(jù)不同項目類型增加了增量、原型、迭代等要素,甚至精簡合并了研制階段,但本質(zhì)還是瀑布模型的理論。
為了解決研制過程以配置項為主體帶來的問題,擬采用集成管理的方法。中心思想是將光電系統(tǒng)軟件當(dāng)成一個配置項,各軟件配置項作為一個模塊來管理。具體做法如下:
軟件配置項的軟件負(fù)責(zé)人被撤銷,并且只為整個項目設(shè)置一個軟件負(fù)責(zé)人。擔(dān)任項目軟件負(fù)責(zé)人角色的人員應(yīng)具有豐富的開發(fā)經(jīng)驗,對各個專業(yè)的技術(shù)特點及研制過程都有一定的了解,掌握其技術(shù)難點及關(guān)鍵點,包括所使用的工具、開發(fā)語言、測試方法、所適用的規(guī)范、標(biāo)準(zhǔn)等。此方法對項目軟件負(fù)責(zé)人的要求較高,需具備從頂層把握各軟件配置項的研制進(jìn)度,具有掌握各配置項研制過程的共同點和不同點的能力。
整個項目的所有軟件統(tǒng)一項目的定義過程,選擇統(tǒng)一的生命周期模型,并選擇定制過程和活動。
項目軟件負(fù)責(zé)人統(tǒng)一做整個項目軟件的策劃、監(jiān)督、風(fēng)險分析、測量分析,在重大事項出現(xiàn)時負(fù)責(zé)決策。
單元測試人員可以由其他軟件配置項的開發(fā)人員承擔(dān),各配置項之間進(jìn)行角色交叉。這使得測試人員數(shù)量得到了減少,各配置項之間的技術(shù)交流有所增加。
改進(jìn)后的研制過程如圖4所示。各角色之間職責(zé)及數(shù)量的變化見表3。

圖4 集成后的光電系統(tǒng)軟件研制過程

表3 改進(jìn)后項目人員角色的職責(zé)及數(shù)量

續(xù)表3
2.2.1敏捷方法簡介
采用了集成化的方法后,生命周期模型得到了改進(jìn),研制過程中的管理流程和角色數(shù)量得到了精簡,角色職能得到了優(yōu)化,可以在大部分項目的研制過程中進(jìn)行推廣,在保證質(zhì)量的前提下提升管理及研發(fā)效率。但其還是以瀑布模型為主,對需求變動頻繁、開發(fā)周期短的項目缺乏適應(yīng)性。針對此類項目可以在集成化改進(jìn)的基礎(chǔ)上引入敏捷開發(fā)方法。
敏捷開發(fā)就是針對軟件研制過程中遇到的需求頻繁變動、任務(wù)節(jié)點較緊的問題。2001年一批軟件專家成立了敏捷聯(lián)盟,總結(jié)出了能快速高效研發(fā)并能輕松應(yīng)對需求變更頻繁的價值觀和原則。敏捷開發(fā)宣言的內(nèi)容:個人與溝通勝過過程和工具;可工作的軟件勝過面面俱到的文檔;客戶協(xié)作勝過合同談判;相應(yīng)變化勝過遵循計劃。
敏捷開發(fā)方法注重人與人之間的交流,強調(diào)以人為核心,與以往傳統(tǒng)的講究編制詳細(xì)的計劃和技術(shù)資料的文檔驅(qū)動方法不同[7]。目前使用的基本敏捷方法有很多,例如極限編程(XP)、Scrum、特征驅(qū)動開發(fā)(FDD)等[8],每種方法都有不同的實踐,但基礎(chǔ)都是基于增量和迭代的過程[9]。
敏捷開發(fā)在國外已經(jīng)流行多年,像微軟、IBM、谷歌、雅虎等知名公司應(yīng)用此方法取得了相當(dāng)不錯的效率,同時開發(fā)了大量的項目管理軟件如ScrumWorks、VersionOne、Rally等來支撐敏捷開發(fā),開源工具有XPlanner、XPWeb、Trac等。國內(nèi)目前仍然停留在技術(shù)采納生命周期的初期試用階段,在國內(nèi)流行較慢的原因為國內(nèi)習(xí)慣于制定詳細(xì)的標(biāo)準(zhǔn)和計劃,所有項目都要按照標(biāo)準(zhǔn)和計劃執(zhí)行。敏捷開發(fā)方法與國內(nèi)特別是軍用軟件開發(fā)主要特點比較見表4。

表4 敏捷方法與國內(nèi)軍用軟件傳統(tǒng)方法主要特點比較
2.2.2敏捷方法應(yīng)用
眾多文獻(xiàn)資料分析了敏捷開發(fā)與GJB5000A或CMMI結(jié)合的方法和思想[10-12],本文主要介紹了在項目管理和工程技術(shù)活動兩個過程領(lǐng)域的敏捷開發(fā)。其思想如下:
(1) 快速交付中間版本,供競標(biāo)、試驗、大系統(tǒng)聯(lián)調(diào)使用。將軟件需求分析、軟件設(shè)計、軟件實現(xiàn)、單元和集成測試迭代為一個階段。迭代周期中,只需要有相應(yīng)文檔的相應(yīng)內(nèi)容,例如需求規(guī)格說明、設(shè)計描述、測試文檔等。交付代碼后再按照模板和標(biāo)準(zhǔn)編寫文檔和實行評審。這樣做的優(yōu)勢一是能快速交付軟件產(chǎn)品,解決了前面提到的按照階段一步步執(zhí)行影響進(jìn)度的問題,保證了產(chǎn)品按時交付;二是以用戶為核心,根據(jù)用戶的要求及時更改軟件產(chǎn)品,轉(zhuǎn)變觀念不怕變更,解決以往不敢變更和變更難的現(xiàn)象。缺點是對軟件開發(fā)人員要求較高,如果在編碼完成階段才暴露問題,返工的成本會比較大。
(2) 項目總師/系統(tǒng)總體組成員作為軟件項目組的用戶,參與每次迭代過程的討論溝通。一是光電系統(tǒng)軟件均為嵌入式軟件,與硬件系統(tǒng)結(jié)合緊密,二是嵌入式軟件很難直接面對顧客或使用者,因此由熟悉軟件需求和開發(fā)管理的系統(tǒng)總體組成員擔(dān)任此角色,參與每次迭代前需求的選擇和迭代后的確認(rèn),以及迭代過程中的管理過程。這樣能降低上面提到的問題暴露過晚造成的風(fēng)險。
(3) 單元測試和實現(xiàn)同時進(jìn)行。往常按照瀑布模型開發(fā)時要先設(shè)計編碼再進(jìn)行測試,敏捷開發(fā)講求用測試來驅(qū)動設(shè)計編碼,根據(jù)用戶需求先進(jìn)行測試的策劃、需求分析和實現(xiàn),再寫代碼,這樣能確保測試的覆蓋率,也能避免冗余的設(shè)計實現(xiàn)。這種方法需要測試工具和經(jīng)驗豐富的測試角色的支撐,前期可采取測試和實現(xiàn)同步進(jìn)行的方法進(jìn)行過度,待工具配套和開發(fā)人員的水平提升后再改為測試驅(qū)動實現(xiàn)的方法。
結(jié)合上述想法,我們提出了生命周期過程的主要過程,如圖5所示。

圖5 生命周期主要流程圖
本生命周期模型有以下特點:
(1) 系統(tǒng)需求分析和設(shè)計階段確定整個光電系統(tǒng)軟件的要求,編制、評審系統(tǒng)需求規(guī)格說明和系統(tǒng)設(shè)計說明。各軟件配置項的軟件研制任務(wù)書都放在后面進(jìn)行編制和評審。原因是光電系統(tǒng)的主要軟件是嵌入式軟件,它與硬件緊密集成,一些功能和性能的界限不太清楚,如坐標(biāo)系轉(zhuǎn)化功能可由光電管理計算機(jī)軟件實現(xiàn),也可由光電伺服控制軟件實現(xiàn),光電軸位存儲功能可由光電管理計算機(jī)軟件實現(xiàn)也可由視頻跟蹤器實現(xiàn),最終可在多次迭代后選擇最優(yōu)化的實現(xiàn)方式。用戶關(guān)注的是光電系統(tǒng)整體呈現(xiàn)的功能,各配置項之間的功能分配要靈活得多,這樣做可以減少以往項目在研制階段無謂的需求變更和配置管理手續(xù),提高效率。
(2) 每次迭代以提供可運行的代碼為主,將設(shè)計、實現(xiàn)和單元測試同步進(jìn)行,保存中間數(shù)據(jù),保證聯(lián)試試驗后再進(jìn)行數(shù)據(jù)整理形成最終文檔。這樣會存在風(fēng)險。因為需求分析人員和開發(fā)人員的能力導(dǎo)致問題發(fā)現(xiàn)不及時,從而增加返工的難度和成本。因此需要系統(tǒng)組成員參與每次迭代的需求分析、需求選擇和管理過程的全程參與。
(3) 以系統(tǒng)軟件為主線進(jìn)行策劃,各配置項不再單獨管理,改為統(tǒng)一策劃、研制和管理。前面已經(jīng)進(jìn)行了詳細(xì)分析。
本文緊密結(jié)合GJB5000A的要求和敏捷開發(fā)方法以及集成管理的思路,提出了適用于中小型軟件規(guī)模、開發(fā)周期較短的軍用光電系統(tǒng)軟件研制的生命周期模型主要流程。采取集成管理的方法,將光電系統(tǒng)軟件當(dāng)成一個配置項,各軟件配置項作為一個模塊來管理,整個項目的所有軟件制定一個項目定義過程和生命周期模型,精簡了管理流程和人員角色。吸取敏捷管理的思想,先交付產(chǎn)品再統(tǒng)一整理文檔,保證系統(tǒng)試驗、聯(lián)試的順利進(jìn)行。為了保證需求不出現(xiàn)偏差,選擇項目總師/系統(tǒng)總體組成員作為軟件項目組的用戶,參與每次迭代過程的討論溝通。為了保證產(chǎn)品質(zhì)量,采取了單元測試和實現(xiàn)同時進(jìn)行。在軟件質(zhì)量、可靠性不降低的前提下快速交付軟件產(chǎn)品不拖延進(jìn)度。后續(xù)隨著開發(fā)、管理人員水平提高以及配套工具逐漸到位,可以進(jìn)一步優(yōu)化此過程,進(jìn)一步提高開發(fā)效率。