一、概述

  在現(xiàn)代軍事和商用系統(tǒng)中,以軟件為核心的產(chǎn)品得到了廣泛的應(yīng)用。隨著系統(tǒng)中軟件成分的不斷增加,使得系統(tǒng)對于軟件的依賴性越來越強,對軟件質(zhì)量尤其是可靠性的要求也越來越高。

  軟件可靠性是指在規(guī)定的條件下和規(guī)定的時間內(nèi),軟件不引起系統(tǒng)故障的能力。軟件可靠性不但與軟件中存在的缺陷有關(guān),而且與系統(tǒng)輸入和系統(tǒng)使用有關(guān)。軟件可靠性是軟件質(zhì)量特性中重要的固有特性和關(guān)鍵因素。軟件可靠性反映了用戶的質(zhì)量觀點。

  軟件可靠性評價是軟件可靠性工作的重要組成部分。軟件可靠性評測是主要的軟件可靠性評價技術(shù),它包括測試與評價兩個方面的內(nèi)容,既適用于軟件開發(fā)過程,也可針對終軟件產(chǎn)品。在軟件開發(fā)過程中使用軟件可靠性評測技術(shù),除了可以更快速地找出對可靠性影響大的錯誤,還可以結(jié)合軟件可靠性增長模型,估計軟件當(dāng)前的可靠性,以確認(rèn)是否可以終止測試和發(fā)布軟件,同時還可以預(yù)計軟件要達(dá)到相應(yīng)的可靠性水平所需要的時間和測試量,論證在給定日期提交軟件可能給可靠性帶來的影響。對于終軟件產(chǎn)品,軟件可靠性評測是一種可行的評價技術(shù),可以對終產(chǎn)品進(jìn)行可靠性驗證測試,確認(rèn)軟件的執(zhí)行與需求的一致性,確定終軟件產(chǎn)品所達(dá)到的可靠性水平。

  二、軟件可靠性評測技術(shù)

  本文所述的軟件可靠性評測是指運用統(tǒng)計技術(shù)對軟件可靠性測試和系統(tǒng)運行期間采集的軟件失效數(shù)據(jù)進(jìn)行處理并評估軟件可靠性的過程。軟件可靠性評測的主要目的是測量和驗證軟件的可靠性,當(dāng)然實施軟件可靠性評測也是對軟件測試過程的一種完善,有助于軟件產(chǎn)品本身的可靠性增長。

  軟件測試者可以使用很多方法進(jìn)行軟件測試,如按行為或結(jié)構(gòu)來劃分輸入域的劃分測試,純粹隨機選擇輸入的隨機測試,基于功能、路徑、數(shù)據(jù)流或控制流的覆蓋測試,等等。對于給定的軟件,每種測試方法都局限于暴露一定數(shù)量和一些類別的錯誤。通過這些測試能夠查找、定位、改正和消除某些錯誤,實現(xiàn)一定意義上的軟件可靠性增長。但是,由于它們都是面向錯誤的測試,測試所得到的結(jié)果數(shù)據(jù)不宜用于軟件可靠性評估。

  軟件可靠性測試是指在軟件的預(yù)期使用環(huán)境中,為進(jìn)行軟件可靠性評估而對軟件實施的一種測試。軟件可靠性測試應(yīng)該是面向故障的測試,以用戶將要使用的方式來測試軟件,每一次測試代表用戶將要完成的一組操作,使測試成為終產(chǎn)品使用的預(yù)演。這使得所獲得的測試數(shù)據(jù)與軟件的實際運行數(shù)據(jù)比較接近,可用于軟件可靠性估計。

  軟件可靠性評測由可靠性目標(biāo)的確定、運行剖面的開發(fā)、測試的計劃與執(zhí)行和測試結(jié)果的分析與反饋等四個主要的活動組成。

  可靠性目標(biāo)是指客戶對軟件性能滿意程度的期望。通常用可靠度、故障強度、MTTF等指標(biāo)來描述,根據(jù)不同項目的不同需要而定。建立定量的可靠性指標(biāo)需要對可靠性、交付時間和成本進(jìn)行平衡。為了定義系統(tǒng)的可靠性指標(biāo),必須確定系統(tǒng)的運行模式,定義故障的嚴(yán)重性等級,確定故障強度目標(biāo)。

  為了對軟件可靠性進(jìn)行良好的預(yù)計,必須在軟件的運行域上對其進(jìn)行測試,首先定義一個相應(yīng)的剖面來鏡像運行域,然后使用這個剖面驅(qū)動測試,這樣可以使測試真實的反映軟件的使用情況。由于可能的輸入幾乎是無限的,測試必須從中選擇出一些樣本,即測試用例,測試用例要能反映實際的使用情況,反映系統(tǒng)的運行剖面。將統(tǒng)計方法應(yīng)用到運行剖面開發(fā)和測試用例生成,在運行剖面中的每個元素都被定量地賦予一個發(fā)生概率值和關(guān)鍵因子,然后根據(jù)這些因素分配測試資源、挑選和生成測試用例。在這種測試中, 優(yōu)先測試那些重要或頻繁使用的功能,釋放和緩解高級別的風(fēng)險,有助于盡早發(fā)現(xiàn)那些對可靠性有大影響的故障,以保證軟件的按期交付。一個產(chǎn)品有可能需要開發(fā)多個運行剖面,這取決于它所包含的運行模式和關(guān)鍵操作,通常需要為關(guān)鍵操作單獨定義運行剖面。

  在軟件的開發(fā)過程中使用軟件可靠性測試和利用軟件可靠性測試對終產(chǎn)品進(jìn)行評價,在測試計劃的制定上有所不同。用于設(shè)計過程的可靠性測試稱為可靠性增長測試,測試與故障的排除聯(lián)系在一起,一般安排在開發(fā)過程的系統(tǒng)測試階段執(zhí)行,將測試所確定的故障提交給開發(fā)者進(jìn)行修改,建立軟件的一個新的版本,再進(jìn)行下一次測試。在這種“測試?排錯?新版本”的迭代過程中,跟蹤故障強度的變化,確認(rèn)測試是否可以終止及軟件是否可以發(fā)布。可靠性增長測試的測試腳本將執(zhí)行多次。針對終產(chǎn)品的可靠性測試稱為可靠性驗證測試,通過驗證測試可確定軟件產(chǎn)品當(dāng)前的可靠性水平。單個軟件版本而言,可靠性驗證測試的測試腳本將僅執(zhí)行一次。軟件可靠性故障數(shù)據(jù)的收集是測試活動的一部分,在測試周期內(nèi),紀(jì)錄每個故障的資料,如與時間相關(guān)的故障頻度、類型、嚴(yán)重性和故障的根源等,并且應(yīng)區(qū)分設(shè)計階段和終產(chǎn)品的故障。

  可靠性增長測試和可靠性驗證測試將從不同的角度理解故障數(shù)據(jù)。在可靠性增長測試中,測試以迭代的方式進(jìn)行,根據(jù)測試期間跟蹤到的故障,使用基于軟件可靠性增長模型和統(tǒng)計推理的可靠性評估程序進(jìn)行故障強度的估計,并用于跟蹤測試的進(jìn)展情況?煽啃则炞C測試是軟件系統(tǒng)提交前進(jìn)行的后測試。它是終檢驗而不是調(diào)試。在驗證測試中,其目標(biāo)是確定一個軟件組件或系統(tǒng)在風(fēng)險限度內(nèi)是被接受還是被拒絕。驗證測試使用可靠性示圖,故障被繪制在圖上。根據(jù)它落入的區(qū)域,來決定被測軟件是被接受還是被拒絕,或者繼續(xù)進(jìn)行測試?梢愿鶕(jù)不同的客戶風(fēng)險(接受一個不良程序的風(fēng)險)和供應(yīng)商風(fēng)險(拒絕一個好程序的風(fēng)險)級別構(gòu)造圖表。