一、概述

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

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

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

  二、軟件可靠性評(píng)測(cè)技術(shù)

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

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

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

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

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

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

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

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