隨著GJB5000A-2008《軍用軟件研制能力成熟度模型》在我國科研單位的逐步應(yīng)用推廣,軟件產(chǎn)品研制過程的工程化要求越來越科學(xué)和嚴(yán)格,。因此我們在某些重點項目上進(jìn)行了GJB5000A二級的首批實踐,。這次實踐有效地提高了軟件研制的工程化水平,,但是同時也發(fā)現(xiàn)了許多問題和和失誤,。通過管理人員和技術(shù)人員的分析和總結(jié),,得出結(jié)論:GJB5000A二級的應(yīng)用需要關(guān)注的兩方面工作重點,一是建立適應(yīng)于中小型嵌入式軟件的高效的項目管理體系,,二是利用軟件測試技術(shù)提高軟件的可靠性,,保證軟件的質(zhì)量,。
1 中小型嵌入式軟件的高效管理
1.1 軟件研制的現(xiàn)狀
在電子信息系統(tǒng)及相關(guān)產(chǎn)品中,,主要包含三類軟件:
(1)人機(jī)交互類軟件,,采集目標(biāo)狀態(tài)信息和各分系統(tǒng)狀態(tài)信息顯示于終端圖形界面上,,同時由操縱員進(jìn)行人工操作,;
(2)數(shù)據(jù)處理類軟件,,包括數(shù)據(jù)處理、信號處理,、數(shù)據(jù)融合,、數(shù)據(jù)交換等,;
(3)控制類軟件,,包括波束控制,機(jī)械裝置控制,,時序控制,,系統(tǒng)校準(zhǔn),,系統(tǒng)自檢等,。這三類軟件的功能模塊基本相同,包括系統(tǒng)初始化,、任務(wù)調(diào)度,、數(shù)據(jù)解算、時序控制,、I/O通信定時管理,、中斷管理、任務(wù)問的通信/同步/互斥管理及內(nèi)存管理等,。它們的研制特點如表1所示:
表1反映出三類軟件均存高實時性的嵌入式芯片或平臺上開發(fā)和運行,,三類軟件規(guī)模較小,研制周期短,,不同項目的軟件之間具有重復(fù)性,。在實際工作當(dāng)中,每個軟件項目組的人員配置上,,全部軟件研發(fā)人員人數(shù)一般不多于10人,,項目組成員同時分擔(dān)大量的硬件研制、系統(tǒng)組成,、系統(tǒng)聯(lián)調(diào),、試驗的工作。因此我們面對的主要是中小型軟件項目的嵌入式軟件,。
在軟件工程化的首次實踐中,,軟件研制過程反映出4類共性的問題:
(1)項目軟件研發(fā)時間緊,人員少,,人員投入度不足,,人員職責(zé)不明晰,造成部分執(zhí)行要求被人為簡化,,甚至隨意取消,;
(2)項目軟件的計劃性不強(qiáng),,經(jīng)常出現(xiàn)需求、人員,、資源的變動,,造成了進(jìn)度拖延,計劃無法得到保證,;
(3)項目軟件研發(fā)過程中會議和文檔較多,,但利益相關(guān)方的界定不明晰,造成不必要的“文山會海”現(xiàn)象,,降低管理效率,,影響軟件設(shè)計工作;
(4)管理人員和技術(shù)人員的工作過程缺乏足夠的監(jiān)管和測量分析,,造成了項目管理進(jìn)程缺乏統(tǒng)一性和技術(shù)可重復(fù)性,。
為了解決通過上述問題,我們在實踐過程中逐漸摸索和總結(jié)出一些適合中小型嵌入式軟件研制方法,。下面將從軟件項目管理體系和軟件項目研制過程兩方面進(jìn)行闡述,。
1.2 軟件項目管理體系
成功的軟件取決于科學(xué)的管理體系。GJB5000A二級的七個過程域中,,項目策劃(PP),、配置管理(CM)、過程和產(chǎn)品質(zhì)量保證(PPQA)這三個過程域是十分重要的管理過程域,。
項目策劃的目的是制定和維護(hù)定義項目活動的計劃,,具體分為四項工作:
(1)制定項目軟件研制計劃;
(2)適當(dāng)?shù)嘏c利益相關(guān)方交換意見,;
(3)獲得對計劃的承諾,;
(4)維護(hù)該計劃。
項目策劃可以理解為整個軟件研制過程的劇本,,其規(guī)定了“WWWHI0”——(When、Who,、Where,、How、Input,、Output)六個要素,,即規(guī)定時間內(nèi)安排項目人員及相關(guān)管理人員在一定環(huán)境下按照軟件工程化的方法,以項目的早期需求或軟件研制任務(wù)書為輸入,,依靠項目軟件經(jīng)理與所級主管領(lǐng)導(dǎo),、項目總師、科研開發(fā)部,、質(zhì)量管理部,、設(shè)計師、同行專家經(jīng)過多方協(xié)調(diào),在需求管理,、軟件生命周期,、代碼規(guī)模估計、文檔規(guī)模估計,、工作量估計,、進(jìn)度、風(fēng)險管理,、培訓(xùn)管理,、數(shù)據(jù)測量、數(shù)據(jù)管理等達(dá)成一致.輸出整個項目的軟件開發(fā)計劃,。
初期的計劃往往無法做到盡善盡美,,需求和承諾的更改,不準(zhǔn)確的前期估計都會影響計劃的實施,,導(dǎo)致項目計劃需要在過程中調(diào)整甚至重新制定,,因此對于研制周期較長、軟件模塊之間存在復(fù)雜依賴關(guān)系的項目,,需要分每一階段進(jìn)行更細(xì)化的項目策劃,。
配置管理緊緊依賴于軟件開發(fā)計劃,目的是利用配置標(biāo)識,、配置控制,、配置狀態(tài)紀(jì)文和配置審核建立和維護(hù)工作產(chǎn)品的完整性。整個軟件生命周期中,,配置管理起到“數(shù)據(jù)庫”和“錄像機(jī)”的作用,。首先組織級配置管理員規(guī)定三類基線:功能基線、分配基線,、產(chǎn)品基線,;規(guī)定三類文件存儲庫:開發(fā)庫、受控庫,、產(chǎn)品庫 然后項目級配置管理員規(guī)定基線下的工作產(chǎn)品,,如技術(shù)文檔、軟件源代碼及可執(zhí)行程序,、評審報告等,,根據(jù)軟件研制階段不同分別放置于對應(yīng)基線下的庫中。組織級和項目級配置管理員進(jìn)行合理計劃,,輸出配置管理計劃,。
配置管理工作不能誤認(rèn)為僅僅是檔案工作,作為組織級項目配置管理員,,其職責(zé)為:
(1)定制標(biāo)準(zhǔn)化的開發(fā)流程,;
(2)定制訪問控制,、變更控制的條例;
(3)監(jiān)督配置管理事件并驅(qū)動相應(yīng)的對策,;
(4)軟件配置管理工具的日常管理與維護(hù),。
作為項目級配置管理員,其職責(zé)為:
(1)提交配置管理汁劃,;
(2)各配置項的管理與維護(hù):
(3)執(zhí)行版本控制和變更控制方案,;
(4)完成配置管理階段工作報告。
過程與產(chǎn)品質(zhì)量保證是從制度和規(guī)范上嚴(yán)格保證了軟件工程化的實施,。質(zhì)量管理人員應(yīng)該具備軟件研制開發(fā)的經(jīng)驗,,熟悉各種軟件的研制流程。首先建立對研制過程,、工作產(chǎn)品的評價標(biāo)準(zhǔn),;其次通過檢查標(biāo)識并文檔化不符合項,追蹤不符合項的閉環(huán),;然后定期將軟件研制過程的質(zhì)量情況通報整個項目組和高層,,并做出階段總結(jié)報告。
項目軟件經(jīng)理,、組織級/項目級配置管理員,、質(zhì)量保證人員三者應(yīng)該及時溝通,從不同的角度管理軟件研制項目組成員,,包括相互之間的監(jiān)督,,促使軟件研制過程嚴(yán)格按照GJB5000A二級標(biāo)準(zhǔn)執(zhí)行。他們也需要按階段或定期向項目總師,、部門領(lǐng)導(dǎo)以及所領(lǐng)導(dǎo)匯報軟件工程化的實施情況以獲得上級對項目的支持,。
1.3 軟件項目研制過程
項目策劃和配置管理雖然已經(jīng)定義了流程化或模板式的操作方法,但大部分項目軟件人員會犯“先做事,,后補(bǔ)義檔”的錯誤,。因為對于總師、分系統(tǒng)負(fù)責(zé)人,、設(shè)計師等項目組技術(shù)人員來說,,他們更關(guān)注如何能夠促進(jìn)軟件研制過程又好又快的進(jìn)行。為了這個目的,,必須重視需求管理(REQM),、項曰監(jiān)控(PMC),、測量與分析(MA)這三個工程過程域,。
下面以一個瀑布模型的軟件研制過程為例說明如何進(jìn)行過程中的監(jiān)控。
項目監(jiān)控從圖1中的軟件需求分析階段開始直至項目結(jié)束,。項目監(jiān)控過程中,,設(shè)計師和管理人員需要提供個人工作周報,,記錄自己實際的工作完成情況;在雙周或整月時,,項目軟件經(jīng)理組織項目組成員交流項目情況并記錄,;階段結(jié)束后,組織針對階段工作產(chǎn)品的評審會,,然后輸出里程碑報告,。管理人員對照《軟件開發(fā)計劃》中的進(jìn)度計劃、風(fēng)險管理計劃,、數(shù)據(jù)管理計劃,、利益相關(guān)方參與計劃等文檔監(jiān)控進(jìn)度偏差、工作量偏差,、規(guī)模偏差,、風(fēng)險變化、培訓(xùn)情況,、評審狀況,、問題數(shù)量和回歸狀況。一旦出現(xiàn)偏差加大的趨勢,,就需要及時開會交流,,查明原因,迅速糾偏,。
測量與分析更加詳細(xì)地規(guī)定了對于能夠證明過程的文檔的采集和存儲方法,,而且需要對采集數(shù)據(jù)匯總后進(jìn)行統(tǒng)計分析,將分析結(jié)果,,如偏差,、趨勢、錯誤數(shù)目等展示給項目組成員和高層領(lǐng)導(dǎo),,由他們進(jìn)行項目開發(fā)的決策,。
項目監(jiān)控是手段,測量與分析為輔助,,需求管理則是最終目的,。結(jié)合圖1,需求在整個軟件研制周期內(nèi)不可能是一成不變的,,是逐步細(xì)化的,。用戶需求是第一步,隨后軟件研制任務(wù)書將用戶需求工程化,,需求規(guī)格說明對任務(wù)書的需求細(xì)化,,設(shè)計說明對需求規(guī)格說明的需求細(xì)化,軟件源代碼將設(shè)計說明對應(yīng)到代碼,。單元測試,、集成測試,、系統(tǒng)測試是對細(xì)化后的需求進(jìn)行回歸。根據(jù)GJB438B-2009中的《軟件需求規(guī)格說明》模板,,需求包括10類技術(shù)需求和4類非技術(shù)需求,。非技術(shù)類需求一般可以得到客觀保證,因此不會出現(xiàn)大的變動,,可以暫不納入需求跟蹤矩陣,。技術(shù)需求由于項目研制情況會出現(xiàn)變化,需要納入需求跟蹤矩陣進(jìn)行管理,,確保軟件工作產(chǎn)品巾需求能夠進(jìn)行雙向追溯,。一旦需求變更狀況時,及時記錄并且上報整個項目組,,獲得項目組的一致認(rèn)可,。
1.4 項目管理信息化手段的應(yīng)用
工欲善其事,必先利其器,。軟件工程化管理主要通過文檔來反映過程,。如果通過傳統(tǒng)的人工撰寫文檔和凡事開會溝通的方式進(jìn)行軟件項目管理的話,將會大大增加管理人員和設(shè)計師人員的工作量,,況且這種方式的效率是十分低下的,。因此有必要應(yīng)用先進(jìn)的項目管理信息化工具。
目前,,關(guān)鍵科技公司推出專門針對GJB5000A二級軟件工程化產(chǎn)品的解決方案,,包括KPFLOW、KRFLOW,、KCFLOW和KTFLOW四類工具:
(1)KPFLOW:對軟件項目的進(jìn)度,、成本、質(zhì)量,、資源等情況進(jìn)行集成管理的平臺,。其主要功能包括:任務(wù)分配與跟蹤、項目估計,、項目周報和個人周報記錄,、問題與風(fēng)險管理、項目度量分析,。該平臺支持系統(tǒng)建模,,即意味著可以針對不同項目設(shè)計對應(yīng)的模板和模塊。該平臺主要體現(xiàn)PP,、PMC,、MA和PPOA四個過程域的信息化管理;
(2)KRFLOW:需求管理工具,其主要功能包括:需求的獲取和編輯,、需求跟蹤和分析、變更建議系統(tǒng),、基線管理,。該軟件主要實現(xiàn)REQM過程域的信息化管理工作;
(3)KCFLOW:確保軟件項目生存周期內(nèi)產(chǎn)品的完整性,、一致性和可追溯性,。其主要功能包括:配置計劃管理、變更控制,、版本管理,、產(chǎn)品依賴關(guān)系和一致性管理、軟件問題跟蹤管理,、軟件配置狀態(tài)審計,。該軟件實現(xiàn)了CM過程域的信息化管理,同時也可以管理REQM和PPQA兩個過程域,;
(4)KTFLOW:測試過程的管理軟件,,其主要功能包括:梳理測試需求、制定測試計劃,、設(shè)計測試用例,、執(zhí)行測試過程、輸出測試報告,。該軟件幫助測試人員在短時間內(nèi),、大批量的完成多個項目的軟件測試。
這四類工具有兩個特色:一是它們相互之間可以進(jìn)行數(shù)據(jù)互聯(lián),,幫助管理人員從不同角度監(jiān)督研制過程,;二是工具支持文檔自動生成,項目組人員只需要按照GJB438B模板,,填寫部分軟件研制過程的信息,,即可輸出標(biāo)準(zhǔn)化的文檔。
盡管具有功能強(qiáng)大的工具,,但是在初期實踐階段,,由于丁具普及的程度參差不一,我們先使用KCFLOW配置管理工具,,先由組織級配置管理員負(fù)責(zé)使用,,然后逐步對項目級配置管理員以及項目相關(guān)成員進(jìn)行推廣。在這個過程中,,項目組成員需要不斷的實踐,,逐步提高勞動效率。
2 嵌入式軟件可靠性的提高
2.1 嵌入式軟件可靠性
軟件工程化的核心是為了實現(xiàn)好的軟件,,而評價軟件好壞的關(guān)鍵標(biāo)準(zhǔn)是軟件可靠性,。軟件可靠性(Software Reliability)指的是在給定時間和特定環(huán)境要求下,,軟件完成規(guī)定功能的能力。針對在雷達(dá)系統(tǒng)中使用的嵌入式軟件中,,可靠性指標(biāo)一般隸屬于分系統(tǒng)或整機(jī)的指標(biāo),,即在初始系統(tǒng)正常的條件下,在規(guī)定時間內(nèi),,軟件不引起系統(tǒng)故障的能力,。
由于嵌入式軟件與硬件結(jié)合相當(dāng)緊密,其可靠性指標(biāo)具有很大的隨機(jī)性,,如外界環(huán)境變化,、系統(tǒng)輸入出錯、使用不當(dāng)以及軟硬件設(shè)計的固有缺陷等原因都會導(dǎo)致軟件可靠性指標(biāo)降低,,但是不能因為這些困難,,使得嵌入式軟件可靠性的保證成為空談。軟件可靠性是可以通過軟件工程化的實踐來提高,。
2.2 軟件可靠性的提高
嚴(yán)格進(jìn)行軟件工程化管理是提高軟件可靠性的必經(jīng)之路,。按照軟件工程化要求,需要做好如下五方面工作:
(1)前期項目組針對軟件進(jìn)行充分的論證和分析,,爭取將軟件需求明確體現(xiàn)在軟件研制任務(wù)書中,;
(2)設(shè)計過程中,盡量提高軟件模塊或單元的高內(nèi)聚性,、低耦合性,。單元之間的接口盡量明晰,整個系統(tǒng)軟件的復(fù)雜度不易過高,,該拆分的就需要合理拆分為多個組成部分,;
(3)加強(qiáng)軟件文檔的健全性和準(zhǔn)確性,按照GJB438B-2009《武器系統(tǒng)軟件開發(fā)文檔》的要求,,軟件研制過程中的文檔不能有缺失,、描述不清、前后矛盾等情況出現(xiàn),。這些文檔必須經(jīng)過專業(yè)人士的評審認(rèn)可,,并且問題回歸后才能進(jìn)行歸檔;
(4)逐步建立軟件標(biāo)準(zhǔn)化工作,,包括文檔標(biāo)準(zhǔn)化和代碼模塊標(biāo)準(zhǔn)化,,這樣可以有利的縮短研制周期,降低研制風(fēng)險,,提高軟件產(chǎn)品的重用率,;
(5)切實加強(qiáng)嵌入式軟件的測試工作。
3 軟件測試
3.1 軟件測試的重要性
盡管軟件工程化管理工作對軟件質(zhì)量的保證起到至關(guān)重要的作用,但是技術(shù)人員依然心存質(zhì)疑,,是否好的管理就能夠確保高可靠性的軟件,。答案就在于軟件測試。軟件測試是將軟件可靠性指標(biāo)具體化的手段,。從廣義上講,,軟件測試是為了盡快盡早地、不斷地發(fā)現(xiàn)各種軟件缺陷而開展的對軟件及過程產(chǎn)品的驗證和確認(rèn)活動,。從狹義上講,軟件測試包括4類測試:
(1)針對軟件源代碼的靜態(tài)測試和代碼審查,,確保軟件源碼符合GJB5369《航天型號C語言安全子集》或其他開發(fā)語言標(biāo)準(zhǔn)的要求,;
(2)針對《軟件設(shè)計說明》對應(yīng)的軟件模塊的單元測試和動態(tài)測試,確保軟件模塊的代碼覆蓋率達(dá)到100%,;
(3)針對《需求規(guī)格說明》對應(yīng)的軟件功能性能的集成測試,,確保軟件功能、性能,、外部和內(nèi)部接口等符合要求,;
(4)針對《軟件研制任務(wù)書》對應(yīng)的軟件需求的系統(tǒng)測試或驗收測試,確保軟硬件各項指標(biāo)符合用戶的驗收要求,。
在這個測試過程中,,測試問題及問題數(shù)目、測試問題的歸零情況,、測試問題中文檔問題和軟件問題的比例,、階段測試的缺陷率、軟件故障等級,、軟件失效概率等度量數(shù)據(jù)可以直觀地反映出軟件的可靠性狀況,。因此軟件測試工作對于軟件研制起到關(guān)鍵的保障作用。
3.2 軟件測試工具的應(yīng)用
軟件測試是一項有難度的專業(yè)技術(shù)工作,,除了人工代碼走查,、問題記錄分析工作之外,大部分工作需要專業(yè)的軟件測試工具完成,。
英國LDRA公司的LDRA Testbed測試軟件是目前針對嵌入式軟件測試最有效的丁具之一,。該軟件主要可以實現(xiàn)代碼評審、質(zhì)量評審,、設(shè)計評審,、單元測試、測試確認(rèn)以及整個過程的測試管理功能,。代碼評審考察了軟件源代碼對編程規(guī)則的適應(yīng)以及代碼結(jié)構(gòu)的合理性,;質(zhì)量評審分析了代碼的圈復(fù)雜度、循環(huán)嵌套和不可達(dá)性,反映出代碼的清晰性,、可維護(hù)性和可測試性,;設(shè)計評審包含接口分析、數(shù)據(jù)流分析,、數(shù)據(jù)對象分析,,確保了代碼與《需求規(guī)格說明》的一致性;單元測試包含動態(tài)測試,,主要測試代碼的語句覆蓋和分支覆蓋程度,;測試確認(rèn)采用自動化的方法對于測試產(chǎn)生的問題進(jìn)行回歸和記錄,自動輸出測試用例集和軟件測試報告,。
對于該丁具的具體使用上,,需要注意兩點,一是該軟件還不能有針對性的自動生成測試用例,,也就意味著我們需要針對前文提到的三類軟件進(jìn)行人工設(shè)計和輸入測試用例,,并將這些測試用例標(biāo)準(zhǔn)化后存入測試庫中作為范例;二是該軟件主要面對的是軟件源碼,,因此如果遇到需要軟硬件結(jié)合測試的情況,,還需要使用實時在線測試工具,如RTInsight軟件或半實物仿真測試平臺等,。
軟件測試工具可以極大的解放開發(fā)和編碼人員,,我們必須建立專業(yè)化的測試標(biāo)準(zhǔn)、測試平臺,、測試隊伍,,這樣才可有效的保證軟件產(chǎn)品的質(zhì)量。
4 結(jié)束語
軟件工程化二級的實踐在整個軟件研制過程中是一個逐步深化,,不斷提升的過程,。因此不能抱有“一勞永逸”的麻痹思想,而是應(yīng)該加強(qiáng)實踐,,建立愈加完善的軟件項目管理體系,,同時切實做好軟件測試工作,確保軟件的高可靠性,。相信只要通過科研工作者和管理者的努力,,一定會使我們的軟件工程化水平得到很大的提高!