李建軍 ,邵培南 ,段曉峰 ,晏新晃 ,趙 輝
(1.華東計算技術(shù)研究所,上海 200233;2.國家工程軟件產(chǎn)品質(zhì)量監(jiān)督檢驗中心,上海 200233)
隨著軟件核心地位日益突出,軟件越來越影響著整個系統(tǒng)裝備的可用性,軟件失效造成的故障已成為新的焦點,軟件的質(zhì)量和可靠性已成為制約裝備質(zhì)量和性能的瓶頸。軟件可靠性是指軟件在規(guī)定的條件和時間內(nèi)正確完成規(guī)定功能的能力。開展軟件可靠性的測試和評估工作對于提高武器裝備的軟件質(zhì)量具有重大意義。軟件可靠性的度量和預(yù)測一般是通過軟件可靠性模型來進行的,軟件可靠性模型的應(yīng)用又是一個很復(fù)雜的過程,如果完全用手工來實現(xiàn)這一過程要花費大量的人力物力,還不能保證準確性。我國軟件可靠性測試和評價工作仍處于起步階段,參考文獻[1]、[2]主要分析了關(guān)于軟件可靠性測試的研究,大多數(shù)還停留在理論上,與國際先進水平相比,還存在很大的差距,因此,迫切需要一個集成的工具來輔助軟件可靠性測試和可靠性模型的應(yīng)用。
為此,本文分析了軟件可靠性測試技術(shù),設(shè)計并實現(xiàn)了軟件可靠性測試和評估平臺,通過基于UML順序圖的軟件可靠性測試用例生成技術(shù)生成測試用例,在執(zhí)行過程中自動收集軟件可靠性數(shù)據(jù),結(jié)合軟件可靠性模型進行評估,并通過將評估結(jié)果與SMERFS工具相對照,證明了該平臺的有效性,最終為軟件可靠性測試、評價提供了相應(yīng)的手段。
建立軟件可靠性測試與評估平臺,首先要了解軟件可靠性測試的涵義、測試方法和測試過程等,而進行軟件可靠性評估則需選取合適的可靠性指標體系和評估模型。
軟件可靠性測試是指在軟件的預(yù)期使用環(huán)境中,為進行軟件可靠性評價而對軟件實施的一種測試。參考文獻[3]指出:為了滿足用戶對軟件的可靠性要求、評價軟件可靠性水平及驗證軟件產(chǎn)品是否達到可靠性要求,開展軟件可靠性測試是一個比較有效的方法。
當前軟件可靠性測試方法主要有兩種。(1)基于應(yīng)用場景模型的統(tǒng)計測試方法,其通過定義系統(tǒng)所有的典型應(yīng)用場景及其發(fā)生的概率,然后由該模型生成測試用例;(2)基于操作剖面的可靠性測試方法,其建立由操作集合和所對應(yīng)的概率組成的操作剖面。由于在目前裝備軟件開發(fā)過程中大量使用Rational Rhapsody進行軟件需求建模和軟件設(shè)計建模,而且使用UML模型比采用軟件運行剖面更容易獲得。Musa指出,開發(fā)一個由任務(wù)操作集合和任務(wù)操作所對應(yīng)的概率組成的運行剖面在實際測試工作中不現(xiàn)實。而使用軟件應(yīng)用場景模型來建立系統(tǒng)的測試模型,可較容易確定軟件所處的狀態(tài)和該狀態(tài)可能出現(xiàn)的輸入,通過提取等價的輸入序列,可容易歸納出系統(tǒng)中有限的輸入組合[4]。統(tǒng)計測試被稱為最成功的基于模型的軟件測試[5]。本文采用了基于擴展的UML順序圖的應(yīng)用場景模型測試方法進行可靠性測試。
軟件可靠性測試與評估的一般過程主要包括:構(gòu)造測試模型、選取測試用例、測試運行、可靠性測試執(zhí)行、可靠性故障數(shù)據(jù)收集、軟件可靠性評估與可靠性增長測試等。
軟件可靠性測試和評價工作需要根據(jù)可靠性指標體系選取合適的軟件可靠性參數(shù),業(yè)界提出的較常用的軟件可靠性參數(shù)主要包括:估計潛在的缺陷密度、已發(fā)現(xiàn)的失效密度、已發(fā)現(xiàn)的缺陷密度、平均失效時間(MTBF)、測試覆蓋率、防止失效能力、防止不正確操作能力、特定時間可用性、平均恢復(fù)時間及可恢復(fù)能力等。
軟件可靠性測試和評估平臺由軟件可靠性測試控制臺和軟件可靠性測試運行支撐環(huán)境組成[6],如圖1所示。
圖1 軟件可靠性測試與評估平臺
其中,軟件可靠性測試控制臺主要提供軟件可靠性使用模型建模,基于UML順序圖的可靠性測試用例生成,在根據(jù)測試用例生成測試腳本后,由集成的可靠性測試流程協(xié)同服務(wù)驅(qū)動下發(fā)給框架代理執(zhí)行引擎執(zhí)行,在可靠性測試用例執(zhí)行過程中,部署在可靠性測試支撐環(huán)境中的代理會自動對測試執(zhí)行結(jié)果進行數(shù)據(jù)收集工作。測試用例執(zhí)行完畢后對所收集的軟件可靠性數(shù)據(jù)進行可靠性評估,目前該框架支撐5種類型的軟件可靠性評估模型。另外,測試控制臺提供了軟件失效數(shù)據(jù)庫和可靠性模型參數(shù)庫的功能。
軟件可靠性測試運行支撐環(huán)境主要通過代理(Agent)集合實現(xiàn)在不同的運行平臺(Windows、UNIX和Linux)對可靠性測試用例腳本的執(zhí)行。
下面針對主要功能模塊進行說明。
(1)軟件使用模型建模
本文平臺采用基于UML2.0規(guī)范擴展的UML順序圖結(jié)合OCL語言來描述軟件應(yīng)用場景模型,使用警戒條件表示發(fā)生的概率。
(2)可靠性測試用例生成模塊
軟件可靠性測試用例生成模塊實現(xiàn)從使用模型自動或人工生成測試用例,其主要功能如下。
①可靠性測試用例自動化生成。其主要根據(jù)基于UML順序圖的測試用例生成技術(shù)[7],由軟件使用場景模型自動生成可靠性測試用例。
②人工生成測試用例。在根據(jù)軟件使用模型自動化生成的測試用例不足時,作為一種補充手段,提供用例設(shè)計界面輔助測試人員人工設(shè)計測試用例。
(3)可靠性測試執(zhí)行引擎
可靠性測試執(zhí)行引擎主要包括一系列服務(wù)。其中,腳本服務(wù)主要基于測試工具對腳本的錄制和回放。時統(tǒng)服務(wù)主要是為確保在可靠性測試活動中,各節(jié)點所獲取、記錄的測量數(shù)據(jù)和事件都有嚴格統(tǒng)一的時間標準,這樣采集的數(shù)據(jù)才具有使用價值;框架代理執(zhí)行引擎服務(wù)根據(jù)測試場景動態(tài)部署相應(yīng)的代理(Agent),針對已有的測試運行環(huán)境啟動代理的執(zhí)行。測試流程協(xié)同服務(wù)根據(jù)可靠性測試流程,在分布式環(huán)境中協(xié)調(diào)和同步各個測試用例腳本的執(zhí)行。
(4)軟件可靠性數(shù)據(jù)采集
對于基于失效時間間隔可靠性評估模型數(shù)據(jù)收集主要包括:故障發(fā)生時刻、故障間隔時間、各間隔時間內(nèi)程序中的殘留錯誤數(shù)及故障等級。
對于基于缺陷計數(shù)可靠性評估模型需要收集:在每一測試區(qū)間的故障統(tǒng)計數(shù)、每個測試區(qū)間的完成時間及故障等級。
基于輸入域評估模型需要收集如下數(shù)據(jù):每個輸入被選取的概率,輸入集中被隨機選中的輸入總數(shù),所有被選中的輸入導(dǎo)致程序失效的個數(shù)及故障等級。
(5)軟件可靠性評估
軟件可靠性評估模塊主要完成軟件可靠性數(shù)據(jù)選擇、數(shù)據(jù)變換、模型選擇與應(yīng)用、模型結(jié)果的圖形顯示和模型評估等功能。
軟件可靠性模型的應(yīng)用涉及到模型選擇、參數(shù)估計、可靠性評估及預(yù)測和模型評價。實現(xiàn)時首先采用MATLAB根據(jù)軟件可靠性模型算法進行相關(guān)方程的求解,封裝成相關(guān)的API接口,再編譯成DLL文件供調(diào)用。
該模塊主要包括以下部分。
(1)模型選擇??蓪Ξ斍肮收蠑?shù)據(jù)選擇應(yīng)用一個或多個可靠性模型。
(2)參數(shù)估計。提供最大似然估計方法(默認參數(shù)估計)或最小二乘法兩種參數(shù)估計方法。
(3)可靠性評估及預(yù)測。利用所選擇的模型和故障數(shù)據(jù)對軟件未來的可靠性進行預(yù)測。軟件可靠性模型評估采用了5類模型,其中,基于失效時間間隔可靠性評估模型采用 Jelinski-Moranda、Schick-Wolverton和 L-V的貝葉斯模型;基于缺陷計數(shù)的軟件可靠性評估模型采用 Goel-Okumoto的 NHPP模型、Schneidewind模型和 FC型J-M模型;基于輸入域可靠性評估模型采用Nelson模型和Brown-Lipow模型;基于錯誤植入可靠性評估采用Mills-Basin模型;基于測試覆蓋軟件可靠性評估模型采用NHPP模型[8]。預(yù)測指標如下。
①TBF預(yù)測。橫座標:故障號(Failure Number),縱座標:TBF 值(Time Between Failures-時間單位)。
②累計故障數(shù)預(yù)測。橫座標:累計故障間隔時間(Cumulative Time Between Failures-時間單位),縱座標:總的故障數(shù)(Total Failures)。
③故障強度預(yù)測。橫座標:累計故障間隔時間(Cumulative Time Between Failures-時間單位),縱座標:每時間單位故障數(shù)(Failures Per TimeUnit)。
④可靠性預(yù)測。橫座標:累計故障間隔時間(Cumulative Time Between Failures-時間單位),縱座標:可靠性(Reliability)。
(4)模型評價。模型評價為故障數(shù)據(jù)選擇最合適的可靠性模型,主要通過模型排名(Ranking)方式,即根據(jù)模型的匹配程度,選擇匹配程度最高的模型進行可靠性評估和預(yù)測。排名指標包括:預(yù)測準確性(基于PLR),偏移程度(Biasedness,基于 U-Plot),走向(Trend,基于 YPlot),預(yù)測噪聲(Noisiness of Prediction)[9]。
在某型號軟件測評中,通過使用本平臺進行測試,自動生成可靠性測試用例,并通過測試運行平臺驅(qū)動執(zhí)行后采集到一組軟件故障數(shù)據(jù),數(shù)據(jù)為TBF類型的,如表1所示。
使用Jelinski-Moranda模型的最小二乘法進行計算,與美軍可靠性評估軟件SMERFS的計算結(jié)果進行對比的具體情況如表2所示。
圖2是采用本平臺與SMERFS預(yù)測平均失效前時間間隔的曲線圖,可看到兩條預(yù)測曲線非常接近(標準偏差為0.138 9),圖中離散點為原始數(shù)據(jù)。
本文實現(xiàn)了軟件可靠性測試和評估平臺,并結(jié)合一個實例與美國SMERFS工具預(yù)測結(jié)果相對照,證明本平臺對開展軟件可靠性測試和評估工作的有效性和實用性。本研究成果已被用于某國家級軟件質(zhì)量監(jiān)督檢驗中心的可靠性測試工作中,取得了良好的效果。
表1 故障數(shù)據(jù)
表2 平均失效前時間間隔預(yù)測值對比
圖2 MTTF預(yù)測曲線對比
[1]陳春秀,馬力.軟件可靠性測試技術(shù)研究[J].計算機工程與設(shè)計,2010,31(21):4628-4631.
[2]劉志方,鐘德明,曾福萍,等.軟件可靠性測試的理論分析[J].測控技術(shù),2008,27(10):62-64.
[3]LYU MICHAELR.軟件可靠性工程手冊[M].劉喜成,譯.北京:電子工業(yè)出版社,1996.
[4]MUSA J D.Software reliability engineering:more reliable software, faster development and testing[M].New York:The McGraw-Hill,1999.
[5]顏炯,王戟,陳火旺.基于模型的軟件測試綜述[J].計算機科學(xué),2004,31(2):184-186.
[6]朱敏,李建軍,王莉華,等.分布式系統(tǒng)綜合集成測試技術(shù)[J].計算機工程,2008,34(S1):57-59.
[7]李建軍,朱敏,劉曉娟,等.基于 UML順序圖測試用例的生成[J].計算機工程,2008,34(21):73-75.
[8]袁春如,廖泰安,賀紅衛(wèi).基于測試覆蓋的嵌入式軟件可靠性評估[J].計算機工程與設(shè)計,2009,30(9):2198-2200.
[9]騰靈靈,邵棟,榮國平.軟件可靠性模型選擇研究[J].計算機應(yīng)用與軟件,2010,27(6):128-130.