王 偉,吳麗媛,謝劍斌,陸志肖
(中國直升機設(shè)計研究所,江西 景德鎮(zhèn) 333001)
隨著社會的不斷進(jìn)步和計算機技術(shù)的飛速發(fā)展,計算機及軟件在社會生活和國民經(jīng)濟等方面的應(yīng)用越來越廣泛和深入,在航空航天領(lǐng)域同樣也起著舉足輕重的作用。而軟件失效可能引起巨大損失,例如美國航天局火星登陸事故,歐洲航天局火箭發(fā)射失敗等事件[1,2]。為進(jìn)一步改善傳統(tǒng)的機電子系統(tǒng)龐雜的結(jié)構(gòu),逐步減輕直升機的重量,減少機體體積、裝機設(shè)備數(shù)量和降低連線的復(fù)雜性,機電綜合管理系統(tǒng)綜合化、整體化,處理機多余度,成為直升機機電管理專業(yè)致力的重要內(nèi)容,是機電綜合管理的必然發(fā)展方向。圖1為符合直升機發(fā)展要求的一種機電綜合管理系統(tǒng)架構(gòu)。直升機機電綜合管理系統(tǒng)的發(fā)展勢必會使系統(tǒng)軟件相應(yīng)地復(fù)雜??紤]軟件失效的問題,我們設(shè)計了適合的軟件測試方法來解決。
軟件測試的目標(biāo)是提供信息改進(jìn)被測軟件的質(zhì)量,改善開發(fā)和測試的過程能為項目管理者和軟件開發(fā)者提供信息并預(yù)防軟件缺陷。
圖1 直升機機電綜合管理系統(tǒng)未來架構(gòu)
軟件測試是貫穿軟件開發(fā)全過程的關(guān)鍵步驟。開發(fā)階段的測試,主要目的是盡可能發(fā)現(xiàn)失效,從而識別和修正盡可能多的缺陷;驗收階段的測試,主要目的是確認(rèn)系統(tǒng)是否能夠按照預(yù)期工作,是否符合需求;維護(hù)階段的測試,主要目的是為了驗證在開發(fā)過程中的軟件變更是否引入新的缺陷;運行階段的測試,主要目的是為了評估系統(tǒng)的特征,比如可靠性或者可用性等。有些情況下,測試的主要目標(biāo)是對軟件的質(zhì)量進(jìn)行評估,而不是為了修復(fù)缺陷。大量統(tǒng)計表明,軟件測試占總工作量的40%以上,在極端情況下,甚至可能高達(dá)軟件工程其他步驟成本總和的三到五倍。
軟件測試技術(shù)分類如圖2所示,現(xiàn)有的軟件測試技術(shù)通常分為靜態(tài)測試和動態(tài)測試。測試階段基本上分為單元測試、部件測試、配置項測試以及驗收測試。其中,單元測試中靜態(tài)和動態(tài)測試技術(shù)同等重要,各占50%;部件測試與配置項測試以動態(tài)測試為主,靜態(tài)測試為輔。測試階段的信息流程如圖3。
圖2 軟件測試技術(shù)的分類
圖3 測試階段的信息流程
輸入流分軟件配置和測試配置兩項。軟件配置由需求說明書、設(shè)計說明書和源代碼組成;測試配置中包含測試計劃、測試工具、測試用例和期望結(jié)果,有時測試配置也作為軟件配置的一個組成部分。測試人員根據(jù)上述輸入信息測試程序并評價測試結(jié)果,當(dāng)測試結(jié)果與期望結(jié)果存在差異時,往往程序有錯。此時可采用排錯技術(shù)定位錯誤并改正。經(jīng)過測試的軟件失效率會降低,生命周期得到延長。
直升機機電綜合管理系統(tǒng)軟件是根據(jù)直升機各機電系統(tǒng)的監(jiān)控需求以及航電要求開發(fā)的,是一個多任務(wù)機載實時嵌入式軟件,它的模塊按功能劃分,各個任務(wù)的優(yōu)先級按事件的重要程度來定義。軟件分為周期任務(wù)和非周期任務(wù),一般定義在初始化、模式控制、機電系統(tǒng)周期監(jiān)控、航電命令處理、串口通訊、維護(hù)、啟動檢測、硬件自檢、例外和公用等幾個模塊中。
直升機機電綜合管理系統(tǒng)軟件是實時的嵌入式軟件。嵌入式實時軟件的測試是軟件界公認(rèn)的難點,其原因之一在于系統(tǒng)中有存在軟硬件的緊密結(jié)合,在編寫應(yīng)用軟件時要考慮硬件資源的管理和使用,因為這將決定系統(tǒng)的質(zhì)量和效率;另外,很多嵌入式系統(tǒng)需要長時間自主運行,并擔(dān)負(fù)某些任務(wù) ,運行后不再需要人工干預(yù)和交互,所以難以進(jìn)行手工測試;而且,實時嵌入式系統(tǒng)與外界的信息交換具有嚴(yán)格的定時要求,某些行為僅在某種特定的系統(tǒng)狀態(tài)之下和某些特定的事件序列到達(dá)時才會發(fā)生。為了避免軟件缺陷,需要精心地設(shè)計測試用例并保證足夠的測試覆蓋率。
直升機機電綜合管理系統(tǒng)的軟件開發(fā)是軟件設(shè)計員的工作內(nèi)容,人的工作和交流不可能毫無缺陷,出現(xiàn)錯誤是難免的。而且,隨著機電綜合管理系統(tǒng)應(yīng)用軟件功能的不斷強大和所監(jiān)控的子系統(tǒng)復(fù)雜程度的不斷提高,應(yīng)用軟件的規(guī)模也在不斷增大,這些因素都使得出現(xiàn)錯誤的可能性增加。而軟件測試正是保證軟件質(zhì)量和可靠性的重要手段,它能夠發(fā)現(xiàn)軟件中隱藏的許多缺陷。例如英國海軍SHOLIS項目中,單元測試發(fā)現(xiàn)了整個軟件開發(fā)過程15.75%的缺陷,避免了很多損失[1]。 在找到錯誤后,通過分析錯誤產(chǎn)生的原因和錯誤的分布特征,還可以幫助機電系統(tǒng)項目管理者和軟件開發(fā)者發(fā)現(xiàn)當(dāng)前所采用的軟件過程的缺陷,以便改進(jìn)。沒有發(fā)現(xiàn)錯誤的測試也是有價值的,測試并不僅僅是以查找錯誤為中心,演示機電綜合管理系統(tǒng)軟件的正確功能也很重要。軟件的正常功能能得到確保。
2.3.1 測試模型
基本遵從軟件的全生命周期的測試模型,對應(yīng)軟件開發(fā)的過程,測試過程依次為編碼后對代碼進(jìn)行代碼靜態(tài)分析,然后對照軟件詳細(xì)設(shè)計進(jìn)行動態(tài)單元測試;對測試后的單元對照軟件概要設(shè)計進(jìn)行部件測試;測試后的部件對照軟件需求分析進(jìn)行配置項測試;最后對測試后的配置項對照系統(tǒng)的需求進(jìn)行系統(tǒng)測試,最終交付。
2.3.2 測試階段
結(jié)合我國直升機現(xiàn)狀,目前直升機機電綜合管理系統(tǒng)采用的軟件測試技術(shù)有靜態(tài)測試中的文檔審查、代碼審查技術(shù)和動態(tài)測試的黑盒、白盒測試技術(shù);進(jìn)行的測試階段主要是單元測試和配置項測試,也有部件測試和系統(tǒng)測試,其中單元測試采用同等工作量的靜態(tài)測試和動態(tài)測試,配置項測試以動態(tài)測試為主。
1) 單元測試
采用功能測試、接口測試、結(jié)構(gòu)覆蓋等測試類型。機電管理計算機軟件進(jìn)行單元測試是針對代碼中能單獨測試的最小單位(可獨立編譯的程序模塊)進(jìn)行的正確性檢驗的測試,如涉及到其他單元的函數(shù),則采用打樁(在本單元內(nèi)編寫需要調(diào)用的函數(shù))的方式確保單元測試環(huán)境的建立,從而保證被測軟件單元能夠獨立地運行。
硬件準(zhǔn)備包括主控計算機(帶有操作系統(tǒng)windows xp和開發(fā)環(huán)境Tornado 2.0)、機電系統(tǒng)模擬綜合裝置USI(模擬機電系統(tǒng)的工作狀態(tài)和數(shù)據(jù)邏輯)、航電系統(tǒng)模擬裝置UICD(模擬航電系統(tǒng)和機電管理計算機的接口和邏輯)以及機電管理計算機(應(yīng)用軟件加載和運行的目標(biāo)機);軟件準(zhǔn)備包括文檔機電管理計算機的《應(yīng)用軟件設(shè)計報告》(含接口設(shè)計說明);通過編譯的被測軟件單元源程序。
測試的內(nèi)容包括:
① 代碼檢查:軟件代碼命名規(guī)則檢查、編碼格式檢查、寄存器使用檢查、程序邏輯檢查、算法檢查、變量使用檢查及標(biāo)準(zhǔn)化檢查等;
② 模塊接口測試:對通過被測模塊的數(shù)據(jù)流進(jìn)行測試,對模塊接口,包括參數(shù)表、調(diào)用子模塊的參數(shù)、全程數(shù)據(jù)、文件輸入/輸出操作都必須檢查;
③ 局部數(shù)據(jù)結(jié)構(gòu)檢查:設(shè)計測試用例檢查數(shù)據(jù)類型、初始化、缺省值等方面的問題,還要查清全程數(shù)據(jù)對模塊的影響;
④ 路徑測試:選擇測試用例,對模塊中重要的執(zhí)行路徑進(jìn)行測試;
⑤ 錯誤處理測試:檢查模塊的錯誤處理功能是否包含有錯誤或者缺陷;
⑥ 邊界測試:檢查數(shù)據(jù)流、控制流中剛好等于、大于或者小于確定的比較值時出錯的可能性;
⑦ 時間性測試:如果模塊運行時間有要求的話,還要專門進(jìn)行關(guān)鍵路徑測試,以確定各種情況下模塊運行的時間。
2)部件測試
采用功能測試、接口測試、結(jié)構(gòu)覆蓋等測試類型。依據(jù)軟件概要設(shè)計,測試概要設(shè)計中的功能模塊,測試計劃注明包含測試部件哪些單元,用例的設(shè)計編寫比較接近單元測試。
硬件準(zhǔn)備同單元測試;軟件準(zhǔn)備包括文檔機電管理計算機《應(yīng)用軟件需求規(guī)格說明》(含接口需求說明)、《應(yīng)用軟件設(shè)計報告》,被集成的通過單元測試的軟件單元源程序,并提供軟部件程序和可執(zhí)行代碼。
測試的內(nèi)容包括:
① 功能測試:軟部件(或者單元)間參數(shù)傳遞與返回結(jié)果的正確性;軟部件(或者單元)集成后,被測實現(xiàn)功能的正確性;全局?jǐn)?shù)據(jù)結(jié)構(gòu)的正確性。
② 性能測試:運行時間;嵌入式軟件實時性能。
③ 接口測試:軟部件(或者單元)間接口數(shù)據(jù)流的正確性;軟部件(或者單元)間的數(shù)據(jù)交換是否存在不良影響。
④ 結(jié)構(gòu)覆蓋測試:軟部件(或者單元)間調(diào)用關(guān)系上的覆蓋測試,要求覆蓋率達(dá)到100%。
⑤ 指針與泄漏錯誤測試。
3)配置項測試
采用功能測試、接口測試、結(jié)構(gòu)覆蓋等測試類型。測試機電管理監(jiān)控項是否能正常告警顯示。配置項測試是目前機電綜合管理系統(tǒng)軟件測試的重要測試階段。
硬件準(zhǔn)備同單元測試;軟件準(zhǔn)備包括文檔機電管理計算機《應(yīng)用軟件需求規(guī)格說明》、《應(yīng)用軟件設(shè)計報告》,已通過測試的軟件單元、軟部件以及測試問題報告單、源程序、可執(zhí)行代碼。
測試的內(nèi)容包括:
① 功能測試:對軟件需求規(guī)格說明中所規(guī)定的軟件合格性項進(jìn)行逐項測試,以驗證其功能是否滿足需求規(guī)格說明的要求;對軟件配置項的控制流程的正確性、合理性等進(jìn)行驗證。
② 性能測試:軟件配置項在獲得定量結(jié)果時計算的精確性;有時間要求的軟件配置項,應(yīng)測試其時間特性及實際運行時間;軟件配置項完成其功能所能處理的數(shù)據(jù)量;軟件配置項各部分的協(xié)調(diào)性;軟件需求規(guī)格說明中所要求的其它性能指標(biāo)。
③ 接口測試:內(nèi)部接口的正確性和協(xié)調(diào)性;外部接口的正確性和協(xié)調(diào)性。
④ 人機界面測試:操作和顯示界面與軟件需求規(guī)格說明的要求的一致性和符合性;人機界面在非常規(guī)操作、誤操作、快速操作下的可靠性;對錯誤命令或者非法數(shù)據(jù)輸入的檢查能力與提示情況;人機界面對所要求界面風(fēng)格的一致性。
⑤ 安全性測試:異常條件下的測試;安全關(guān)鍵操作錯誤的測試;軟件配置項在輸入域(或輸出域)、數(shù)據(jù)結(jié)構(gòu)、狀態(tài)轉(zhuǎn)換、過程參數(shù)、功能界限等的邊界或端點情況下的運行狀態(tài)。
⑥ 可安裝性測試:不同配置下的安裝或卸載測試;安裝測試用例驗證。
4)系統(tǒng)測試
選用常見的測試類型中的功能測試、性能測試、接口測試和結(jié)構(gòu)覆蓋,測試邊界和異常的狀態(tài)下軟件的功能和性能,測試軟件配置項之間以及配置項與硬件之間的接口,測試人機交互操作(包括正常操作、誤操作時軟件的反應(yīng)和排錯性、可靠性的處理能力)。
硬件準(zhǔn)備同單元測試;軟件準(zhǔn)備包括文檔機電管理計算機《應(yīng)用軟件需求規(guī)格說明》、《應(yīng)用軟件設(shè)計報告》,已通過測試的軟件單元、軟部件、配置項以及測試問題報告單、源程序、可執(zhí)行代碼。
測試的內(nèi)容包括:
① 功能測試,對系統(tǒng)設(shè)計文件中規(guī)定的各項軟件功能進(jìn)行以下測試,以驗證系統(tǒng)是否達(dá)到所規(guī)定的要求:正常值的等價類輸入數(shù)據(jù)檢測;非正常值的等價類輸入數(shù)據(jù)檢測;邊界值的輸入數(shù)據(jù)檢測。
② 性能測試:軟件在獲得定量結(jié)果時計算的精確性;有速度要求時,計算完成功能的時間;軟/硬件運行環(huán)境中的因素是否限制了軟件的性能;系統(tǒng)的負(fù)載能力;系統(tǒng)運行時軟件占用的空間;系統(tǒng)對并發(fā)事務(wù)和并發(fā)用戶訪問的處理能力。
③ 接口測試:系統(tǒng)內(nèi)部接口的正確性和一致性;系統(tǒng)外部接口的正確性和一致性。
④ 人機界面測試:人機交互界面字符、文字、GUI元素的正確性;人機交互界面的有效性;人機交互界面的健壯性;人機交互界面與用戶手冊或操作手冊的一致性。
⑤ 安全性測試:硬件或軟件出現(xiàn)故障情況下的處理和保護(hù)能力;容錯操作的能力;用戶數(shù)據(jù)抗非法訪問的能力;用戶和權(quán)限管理。
⑥ 可安裝性測試:不同配置下的安裝或卸載測試;驗證安裝參數(shù)裝訂、安裝規(guī)程的正確性及安裝規(guī)程與安裝手冊描述的一致性。
⑦ 文檔審查:文檔完整性;文檔內(nèi)容的直觀性和易于理解性;文檔描述的一致性。
隨著直升機機電綜合管理系統(tǒng)功能的日益強大,對機電綜合管理系統(tǒng)軟件提出了更高的要求:除了完成相應(yīng)的功能以外,還應(yīng)能夠盡力地避免軟件的缺陷。本文在此背景下,以嵌入式軟件測試?yán)碚撆c技術(shù)為指導(dǎo),結(jié)合實際需求,提出機電綜合管理系統(tǒng)軟件的測試工作內(nèi)容。在初步的使用操作中,比較全面地涵蓋了所有需要測試的方面。這種系統(tǒng)全面的測試節(jié)省了測試環(huán)境的開發(fā)和準(zhǔn)備時間,同時提高了測試的效率。
測試工作的質(zhì)量直接影響機電管理計算機產(chǎn)品的生命力。隨著機電一體化的逐漸發(fā)展,應(yīng)對機電綜合管理系統(tǒng)的軟件測試進(jìn)行更深入的研究,使其更大限度地發(fā)揮保障機電綜合管理系統(tǒng)運行質(zhì)量的作用。
參考文獻(xiàn):
[1] 聶長海.關(guān)于軟件測試的幾點思考[J].計算機科學(xué),2001,38(2):1-3.
[2] 陸志肖,聶永昱,謝劍斌,等.軟件可靠性設(shè)計在機電綜合管理系統(tǒng)軟件中的應(yīng)用[J].直升機技術(shù),2010(3):53-57.
[3] 羅海明,謝劍斌,陸志肖.機電系統(tǒng)綜合化控制和管理[J].直升機技術(shù),2010,(1):62-67.
[4] 單錦輝,姜 瑛,孫 萍.軟件測試研究進(jìn)展[J].北京大學(xué)學(xué)報(自然科學(xué)版),2005,41(1):134-145.
[5] 黎連業(yè),王 華,李淑春.軟件測試與測試技術(shù)[M].北京:清華大學(xué)出版社,2009.
[6] 王 璞,張臻鑒,王玉璽,等.面向?qū)崟r嵌入式機載軟件的測試技術(shù)研究[J].計算機工程,1998,24(2):12-15