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