■ 白 光 張永軍 雍明遠
軍用軟件可靠性研究
■ 白 光張永軍雍明遠
我國在軍用軟件領(lǐng)域的起步較晚,在軍用軟件的可靠性研究和應(yīng)用方面起步更晚且投入的精力明顯不夠。在武器科技化、集成化日益明顯的今天,軟件可靠性方面的不足很容易成為制約我們裝備發(fā)展的瓶頸。對此,筆者在應(yīng)用開發(fā)方面進行了討論。
長期以來,在實際使用過程中暴露的軟件以及和軟件有關(guān)的問題逐漸增多,直接影響了整個武器系統(tǒng)的質(zhì)量。為了避免和消除錯誤,確保開發(fā)出的軟件系統(tǒng)工作正確,運行可靠,如何提高軟件裝備的可靠性,是軟件質(zhì)量管理的重點工作。
1983年美國IEEE計算機學(xué)會對“軟件可靠性”作出了明確定義,此后該定義被美國標(biāo)準(zhǔn)化研究所接受為國家標(biāo)準(zhǔn),1989年我國也接受該定義為國家標(biāo)準(zhǔn)。新版GJB/Z 102-97的定義包括兩方面的含義:
(1)在規(guī)定的條件下,在規(guī)定的時間內(nèi),軟件不引起系統(tǒng)失效的概率;
(2)在規(guī)定的時間周期內(nèi),在所述條件下程序執(zhí)行所要求的功能的能力;
其中的概率是系統(tǒng)輸入和系統(tǒng)使用的函數(shù),也是軟件中存在的故障的函數(shù),系統(tǒng)輸入將確定是否會遇到已存在的故障(如果故障存在的話)。
同時我們也都知道,第一,無論多么成熟的軟件都不會十全十美,幾乎所有投入使用的軟件仍含有嵌入的錯誤,由于軟件測試時間和費用上的限制,想用連續(xù)不斷的檢查來獲得100%正確的軟件是幾乎不可能的。第二,軟件一時的正確運行,不等于程序中已不存在任何差錯。因為和有相當(dāng)規(guī)模的軟件一般總有多條分支和多種功能。在不同的使用目的和輸入條件下,其故障的發(fā)生是隨機的。
軟件可靠性是關(guān)于軟件能夠滿足需求功能的性質(zhì),軟件不能滿足需求是因為軟件中的差錯引起了軟件故障。軟件中有哪些可能的差錯呢?
軟件差錯是軟件開發(fā)各階段潛入的人為錯誤:
1.需求分析定義錯誤。如用戶提出的需求不完整,用戶需求的變更未及時消化,軟件開發(fā)者和用戶對需求的理解不同等等。
2.設(shè)計錯誤。如處理的結(jié)構(gòu)和算法錯誤,缺乏對特殊情況和錯誤處理的考慮等。
3.編碼錯誤。如語法錯誤,變量初始化錯誤等。
4.測試錯誤。如數(shù)據(jù)準(zhǔn)備錯誤,測試用例錯誤等。
5.文檔錯誤。如文檔不齊全,文檔相關(guān)內(nèi)容不一致,文檔版本不一致,缺乏完整性等。
從上游到下游,錯誤的影響是發(fā)散的,所以要盡量把錯誤消除在開發(fā)前期階段。
根據(jù)上面對影響軟件可靠性的分析,造成軟件錯誤的因素貫穿于整個軟件開發(fā)的全過程,任何的事后彌補措施都是建立在已經(jīng)造成了錯誤后果的基礎(chǔ)上的。因此,將軟件錯誤盡可能地消滅在萌芽狀態(tài)是投入成本最小的,而通過采用科學(xué)的軟件工程化要求進行軟件系統(tǒng)的設(shè)計可以將軟件的潛在危險控制到盡可能小的范圍。
開發(fā)高可靠軟件必須采用軟件工程方法,搞好軟件開發(fā)工程化。當(dāng)前研制的軍用軟件裝備絕大部分擁有龐大的軟件體系結(jié)構(gòu):可重用或公用的功能模塊,多個分承包方的參與,決定了項目的開發(fā)必然是一個團隊協(xié)作開發(fā)過程。根據(jù)GJB 2786-96,需要從以下幾個方面督促研制方抓好軟件工程的實施:
(1)軟件開發(fā)方法
軟件開發(fā)方法對軟件的可靠性有重要影響。面向?qū)ο蟮姆椒ū阌谲浖?fù)雜性控制,有利于生產(chǎn)率的提高,符合人類的思維習(xí)慣,能自然地表達現(xiàn)實世界的實體和問題,具有一種自然的模型化能力,達到從問題空間到解空間的較為直接自然的映射。
在面向?qū)ο蟮姆椒ㄖ校捎诖罅渴褂镁哂懈呖煽啃缘膸?,其可靠性也就有了保證,用面向?qū)ο蟮姆椒ㄒ怖趯崿F(xiàn)軟件重用,所以一般應(yīng)采用面向?qū)ο蟮姆椒ā?/p>
(2)軟件工程環(huán)境
軟件工程環(huán)境應(yīng)該能夠集中支撐開發(fā)階段的操作。
(3)安全性分析
一定要重視軟件的容錯性設(shè)計,把執(zhí)行任務(wù)的潛在危險降到盡可能小。
(4)非開發(fā)軟件
非開發(fā)軟件應(yīng)當(dāng)結(jié)合到交付軟件中,非開發(fā)軟件的結(jié)合應(yīng)用應(yīng)經(jīng)過簽約機構(gòu)的批準(zhǔn)和遵守合同中的數(shù)據(jù)權(quán)限要求。
(5)計算機軟件組成
應(yīng)根據(jù)軟件開發(fā)計劃規(guī)定的開發(fā)方法,將軟件配置項進行分解并劃分成軟件部件和軟件單元。應(yīng)確保軟件配置項的需求已完全分配,并能進一步細化,以便更好地實施每個軟件部件和軟件單元的設(shè)計與測試。
(6)從需求到設(shè)計的可追蹤性
明確劃分各開發(fā)過程(需求分析過程、設(shè)計過程、測試過程、系統(tǒng)集成階段等),在各開發(fā)過程中實施進度管理,產(chǎn)生階段質(zhì)量評價報告,對不合要求的部件和單元及早采取對策。
(7)高級語言
選擇編程語言對開發(fā)和維護階段都是重要的。當(dāng)選擇編程語言時必須注意特殊的應(yīng)用要求及它對于軟件工程現(xiàn)代化的質(zhì)量保證原則是否支持,在滿足用戶需求的前提下,還要綜合考慮編譯和編程環(huán)境的有效性、語言的可移植性、編程人員的技術(shù)水平等。
(8)設(shè)計和編碼標(biāo)準(zhǔn)
必須大力推行標(biāo)準(zhǔn)化的實施。標(biāo)準(zhǔn)對于項目的互聯(lián)、互通、互操作,對于開放性、可維護性,是一個先決條件。標(biāo)準(zhǔn)的簡單或復(fù)雜,決定著系統(tǒng)的簡單與復(fù)雜。標(biāo)準(zhǔn)的可操作性,影響著系統(tǒng)的一致性和可維護性;標(biāo)準(zhǔn)的好壞,決定了系統(tǒng)性能。
為標(biāo)準(zhǔn)的實施相應(yīng)制定許多實施的細則與模板,使得標(biāo)準(zhǔn)的實施不但有章可循,而且可以操作,可以重復(fù)(重用),便于檢查。這些細則與模板包括需求分析、概要設(shè)計與詳細設(shè)計的細則;包括需求分析、概要設(shè)計與詳細設(shè)計的模板。
(9)軟件開發(fā)文件
軟件開發(fā)文件包括系統(tǒng)文檔、維護文檔和項目管理文檔等。開發(fā)文檔可以使人們對已經(jīng)執(zhí)行的開發(fā)過程有深入的了解,并對重要的階段成果進行初步和清晰的說明。
(10)處理資源和預(yù)留量
應(yīng)在合同期內(nèi)對處理資源的利用情況進行監(jiān)測,資源利用情況應(yīng)記載在各軟件配置的產(chǎn)品規(guī)格說明。
目前我國的軍品承制企業(yè)由于受到多種因素的影響和制約,軟件可靠性的要求都重視的不夠,在軟件的開發(fā)、設(shè)計階段分析不足,缺乏嚴格的評審;在軟件的調(diào)試、驗收階段也缺乏科學(xué)的測試手段,無法對代碼進行充分的測試;在使用、維護階段不能嚴格按照軟件配置進行管理,造成軟件在生存周期中存在更改隨意性大,質(zhì)量難控制的問題。
(1)軟件開發(fā)過程透明度差:現(xiàn)有的軟件承制單位依然存在軟件的開發(fā)過程由開發(fā)者“自編”“自導(dǎo)”“自演”的現(xiàn)象,一旦軟件出現(xiàn)問題只能由開發(fā)者本人去進行維護,其他人很難介入,而現(xiàn)在的企業(yè)人員流動比較大,一但發(fā)生人員變更,后繼者往往要將前任的工作推倒從頭再來,嚴重影響科研工作的進行。
(2)沒有嚴格執(zhí)行配置管理:未對軟件的更改標(biāo)識、更改控制、更改檢查等進行嚴格控制, 造成軟件的管理混亂, 產(chǎn)品的軟件錯誤較多,軟件質(zhì)量控制差。
(3)軟件測試不夠:軟件的測試軟件、測試工具缺乏, 測試標(biāo)準(zhǔn)、規(guī)范和管理制度不健全。目前絕大多數(shù)的軟件檢驗都與硬件一起進行。軟件驗收時所謂的測試也是對預(yù)先指定的幾個用例進行測試, 起不到軟件測試的應(yīng)有作用, 因而造成軟件的缺陷多、故障多。
(4)沒有明確的軟件可靠性指標(biāo)要求:在戰(zhàn)技指標(biāo)和研制任務(wù)書中沒有明確提出軟件的可靠性指標(biāo)要求??煽啃灾笜?biāo)通常被認為是硬件的可靠性指標(biāo), 在考核中沒有對軟件的可靠性進行單獨驗證, 對軟件的可靠性心中無數(shù)。
(5)尚未建立完善的檢驗體系:軟件沒有像硬件那樣建立嚴格的“三檢”制度, 軟件檢驗基本上是由軟件開發(fā)者完成的。而實踐證明僅僅依靠自檢不能保證軟件質(zhì)量, 因此交付部隊使用的產(chǎn)品軟件質(zhì)量問題較多。
針對以上問題,需要加強軟件質(zhì)量控制,嚴格按照軟件工程化的要求執(zhí)行,幫助企業(yè)建立高效可靠的軟件開發(fā)流程,提高軟件系統(tǒng)的可靠性水平。具體做法如下:
(1)實施軟件工程化管理:杜絕開發(fā)者集多重角色于一身,嚴格做到設(shè)計、生產(chǎn)、檢驗分開,形成三者相互制約的關(guān)系,由軟件設(shè)計工程師編制軟件的設(shè)計圖紙(即詳細設(shè)計報告) , 由合格的軟件編程人員按設(shè)計報告編程, 最后由軟件檢測人員檢查軟件的設(shè)計、編程是否符合要求。這樣才能有效提高軟件質(zhì)量和可靠性。
(2)按照GJB438B和GBJ2786的要求,對各階段形成的文檔進行審查,實行配置管理,確保軟件設(shè)計、生產(chǎn)、維護過程是受控的,可重復(fù)的。
(3)嚴格實行軟件配置管理,各階段工作完成后把階段成果送入軟件受控庫中,開發(fā)者只能使用,不得隨意修改,若要修改,需按照相應(yīng)的審批手續(xù)報備。當(dāng)軟件的集成和綜合測試階段結(jié)束時, 應(yīng)該匯總并修訂全部軟件文檔, 連同源程序清單和目標(biāo)代碼清單一起送入軟件產(chǎn)品庫。進入系統(tǒng)的運行和維護階段后, 若要對配置項進行修改, 必須依照有關(guān)程序修改, 產(chǎn)生新的軟件版本。
(4)必須對軟件進行充分的測試:對于軟件開發(fā)者來說, 開發(fā)出的軟件必須具備可測試性。軟件的缺陷是不可避免的, 不可測試的軟件,其缺陷將不易被發(fā)現(xiàn)和糾正。所謂軟件測試, 是通過對源程序及其實際執(zhí)行所產(chǎn)生的結(jié)果進行檢查分析, 以找出程序中可能隱藏的錯誤的過程, 即為了發(fā)現(xiàn)程序錯誤而執(zhí)行程序的過程。程序測試過程通常要反復(fù)進行多次, 直到滿足某種測試策略為止。
1.王江為,郭新河.武器裝備軟件可靠性研究,《電腦知識與技術(shù)》2011年32期;
2.楊英清.軟件工程技術(shù)發(fā)展思索,軟件學(xué)報,2005(1);
3.吳福全,蘇小桅.軟件質(zhì)量評估方法與探討,成都大學(xué)學(xué)報:自然科學(xué)版,2008(1);
(作者單位:空軍駐西北地區(qū)軍事代表室)