韓 坤,吳 緯,何成銘,曹軍海
(1.裝甲兵工程學(xué)院 技術(shù)保障工程系,北京100072;2.北京特種車輛研究所,北京100072)
軟件可靠性模型在軟件可靠性評(píng)估和預(yù)計(jì)方面發(fā)揮著關(guān)鍵作用,但是,數(shù)量眾多的軟件可靠性模型給模型的應(yīng)用帶來了極大的困難,如何選擇合適的軟件可靠性模型成為急需解決的問題[1]。目前所提出的軟件可靠性模型選擇方法可分為兩類:基于模型評(píng)價(jià)準(zhǔn)則的方法和基于模型聚類的方法?;谀P驮u(píng)價(jià)準(zhǔn)則的軟件可靠性模型選擇方法首先將失效數(shù)據(jù)應(yīng)用于軟件可靠性模型,然后用模型評(píng)價(jià)準(zhǔn)則對(duì)模型輸出結(jié)果進(jìn)行評(píng)價(jià),評(píng)價(jià)結(jié)果作為進(jìn)行模型選擇的依據(jù)[2]。常用軟件可靠性模型評(píng)價(jià)準(zhǔn)則有模型擬合度、預(yù)計(jì)有效性、模型偏差、模型偏差趨勢(shì)和噪聲等?;谀P途垲惙椒ǖ乃悸肥?,具有相似特征的軟件失效數(shù)據(jù)適用于相同的軟件可靠性模型[3]。建立一個(gè)軟件可靠性模型選擇平臺(tái),包括多組基準(zhǔn)軟件失效數(shù)據(jù),以及每組數(shù)據(jù)所適用的軟件可靠性模型。通過將目標(biāo)數(shù)據(jù)與基準(zhǔn)數(shù)據(jù)進(jìn)行比照,如果兩組數(shù)據(jù)特征相同,則基準(zhǔn)數(shù)據(jù)對(duì)應(yīng)的模型同樣適用于目標(biāo)數(shù)據(jù),平臺(tái)中的基準(zhǔn)數(shù)據(jù)和模型可以動(dòng)態(tài)更新。以上兩種方法都被證明是可行的。但它們都各有缺陷,基于模型評(píng)價(jià)準(zhǔn)則的方法要求將全部候選模型應(yīng)用于失效數(shù)據(jù),并對(duì)模型結(jié)果進(jìn)行評(píng)價(jià),運(yùn)算量大,且沒有提供選擇候選模型的方法;基于模型聚類方法的使用要求積累大量具有典型特征的失效數(shù)據(jù)以及所適用的模型。這些約束條件都在一定程度上限制了這些方法的使用。針對(duì)這些問題,本文提出直接指導(dǎo)軟件可靠性模型選擇的若干準(zhǔn)則,并闡述基于這些準(zhǔn)則進(jìn)行軟件可靠性模型選擇的算法,以簡(jiǎn)化軟件可靠性模型選擇工作。
從1972年Jelinski-Moranda模型被提出至今,已經(jīng)有一百余種軟件可靠性模型公開發(fā)表[4]。這些模型可以歸為兩類:可靠性早期預(yù)計(jì)模型和基于運(yùn)行的可靠性模型。早期階段是指軟件在可運(yùn)行之前的階段,包括方案論證、系統(tǒng)定義、需求分析、設(shè)計(jì)、編碼和單元測(cè)試階段。軟件可靠性早期預(yù)計(jì)模型根據(jù)軟件生命周期的早期階段,特別是測(cè)試之前的需求分析和設(shè)計(jì)階段的評(píng)審結(jié)果,對(duì)后續(xù)階段的軟件潛在缺陷進(jìn)行預(yù)計(jì),為更早地采取預(yù)防和糾正措施,改進(jìn)軟件開發(fā)過程和提高軟件產(chǎn)品可靠性提供必要的信息。由于沒有軟件運(yùn)行失效數(shù)據(jù),早期階段的可靠性預(yù)計(jì)通常是根據(jù)軟件可靠性影響因素分析,影響因素有軟件的應(yīng)用類型 (機(jī)載、過程控制、開發(fā)等),固有特征 (應(yīng)用、任務(wù)、功能、接口等),開發(fā)特征 (避錯(cuò)、容錯(cuò)措施),開發(fā)方的能力成熟度等級(jí),軟件規(guī)模和復(fù)雜度等。這類模型有美國空軍Rome實(shí)驗(yàn)室開發(fā)的早期預(yù)計(jì)模型、Samuel Keene的開發(fā)過程模型 (DPPM)和Rayleigh早期預(yù)計(jì)模型等[5]。
從系統(tǒng)測(cè)試開始,軟件進(jìn)入可運(yùn)行階段,包括系統(tǒng)測(cè)試、確認(rèn)測(cè)試和使用階段?;谶\(yùn)行的軟件可靠性模型根據(jù)軟件系統(tǒng)運(yùn)行失效數(shù)據(jù),對(duì)軟件系統(tǒng)的失效率進(jìn)行評(píng)價(jià)和預(yù)計(jì)。這類模型以概率論和數(shù)理統(tǒng)計(jì)為基礎(chǔ),將軟件可靠性測(cè)試和使用中發(fā)生失效的過程看作隨機(jī)過程,使用各種分布函數(shù)來描述軟件失效過程。并將軟件失效數(shù)據(jù)視為隨機(jī)分布數(shù)據(jù),基于軟件失效數(shù)據(jù)對(duì)分布函數(shù)的參數(shù)進(jìn)行估計(jì),得到模型的具體表達(dá)式,從而評(píng)價(jià)和預(yù)計(jì)軟件的可靠性?;谶\(yùn)行的軟件可靠性模型一般對(duì)故障發(fā)現(xiàn)和排除過程做出諸多假設(shè),如軟件測(cè)試用例代表軟件實(shí)際使用剖面,軟件失效率與潛在故障數(shù)成正比等,這些假設(shè)決定模型的形式和模型參數(shù)的意義[6]?;谶\(yùn)行的軟件可靠性模型是最早應(yīng)用于軟件可靠性工程領(lǐng)域的傳統(tǒng)分析模型,具有堅(jiān)實(shí)的理論基礎(chǔ)和豐富的實(shí)踐經(jīng)驗(yàn),現(xiàn)有的軟件可靠性模型也大多屬于這類模型。目前市場(chǎng)上發(fā)行的軟件可靠性計(jì)算機(jī)輔助分析軟件,如計(jì)算機(jī)輔助軟件可靠性評(píng)估(CASRE)和軟件可靠性統(tǒng)計(jì)建模和評(píng)估 (SMERFS)等,都是應(yīng)用該類模型進(jìn)行軟件可靠性分析的[7]。通過對(duì)現(xiàn)有軟件可靠性模型進(jìn)行梳理分類,能夠幫助我們更快找到所需的模型。
基于使用需求和軟件可靠性模型的特點(diǎn),提出五項(xiàng)軟件可靠性模型選擇準(zhǔn)則,包括生命周期階段、模型輸入要求、模型輸出要求、模型假設(shè)吻合和失效數(shù)據(jù)趨勢(shì)準(zhǔn)則,其中,前三項(xiàng)為確定性準(zhǔn)則,所選的模型需要完全符合這些準(zhǔn),后兩項(xiàng)為不確定性準(zhǔn)則,所選模型不一定能夠完全符合,優(yōu)先選用符合程度較高的模型。
軟件可靠性模型被應(yīng)用在軟件生命周期的不同階段,因此,有必要確定哪些模型適用于某個(gè)特定階段。適用于各個(gè)生命周期階段的典型軟件可靠性模型如圖1所示[8]。
圖1 適用生命周期各階段的典型軟件可靠性模型
(1)在軟件論證和需求分析階段,只有軟件應(yīng)用類型和開發(fā)方能力成熟度等級(jí)等少量信息,可選用Rome實(shí)驗(yàn)室早期預(yù)計(jì)模型、DPPM模型等[9];
(2)在設(shè)計(jì)和編碼階段,根據(jù)階段審查和評(píng)審得出的錯(cuò)誤報(bào)告信息對(duì)可靠性進(jìn)行預(yù)計(jì),可選用Raleigh模型等;
(3)在測(cè)試階段,軟件中的錯(cuò)誤不斷被發(fā)現(xiàn)和排除,可選用軟件可靠性增長模型;
(4)在確認(rèn)階段,對(duì)發(fā)現(xiàn)的錯(cuò)誤不做更改,因此可以認(rèn)為軟件的失效率是固定的,可選用Nelson模型等。
不同的軟件可靠性模型對(duì)輸入數(shù)據(jù)的要求可能不同,根據(jù)收集到的數(shù)據(jù)類型,選用適合的模型。
(1)軟件可靠性早期預(yù)計(jì)模型的輸入要求為軟件可靠性影響因素,如軟件規(guī)模、復(fù)雜度、重用代碼比例、編程語言、開發(fā)方的能力成熟度等級(jí)等;
(2)基于失效時(shí)間序列的軟件可靠性模型輸入要求為軟件每次失效的時(shí)刻;
(3)基于失效時(shí)間間隔的軟件可靠性模型輸入要求為相鄰失效的時(shí)間間隔;
(4)基于失效計(jì)數(shù)的軟件可靠性模型輸入要求為單位時(shí)間內(nèi)的失效次數(shù)。
另外,有些軟件可靠性模型要求輸入基于日歷時(shí)間的失效數(shù)據(jù),其它一些模型則要求輸入基于CPU時(shí)間的失效數(shù)據(jù)等[10]。
不同的軟件可靠性模型用戶可能期望不同的輸出。
(1)在進(jìn)行軟件可靠性測(cè)試之前,希望得到軟件潛在故障數(shù),以便合理安排測(cè)試時(shí)間和測(cè)試所需資源;
(2)在軟件可靠性增長測(cè)試期間,希望得到達(dá)到某預(yù)期可靠性目標(biāo)所需的時(shí)間;
(3)在軟件可靠性驗(yàn)證測(cè)試期間,希望得到軟件失效率或平均故障間隔時(shí)間 (MTBF);
(4)對(duì)規(guī)定的時(shí)間內(nèi),不允許發(fā)生工作失效的重要系統(tǒng),即對(duì)可能因故障中止工作而造成人員傷亡或重大經(jīng)濟(jì)損失的軟件產(chǎn)品,要求失效率 ()數(shù)據(jù);
(5)對(duì)軟件發(fā)生故障時(shí),只影響系統(tǒng)部分非關(guān)鍵功能但系統(tǒng)不失效、且允許并預(yù)定要維修的軟件,輸出一般要求MTBF或可導(dǎo)出MTBF的數(shù)據(jù)。如果對(duì)模型輸出的要求為 MTBF,則不可選用 Goel Okumoto NHPP模型[11]。
軟件可靠性模型都是基于各種假設(shè)。然而,并不是所有假設(shè)都可以完全吻合。假設(shè)條件吻合程度高的模型應(yīng)優(yōu)先選擇?;诩僭O(shè)條件的不同,軟件可靠性模型可以劃分為以下四類[12]:
(1)馬爾科夫模型?;炯僭O(shè)是軟件失效服從馬爾科夫過程。這類模型的主要特征是,在某一特定時(shí)刻,軟件具有有限的多種狀態(tài),各狀態(tài)之間的轉(zhuǎn)移概率只與當(dāng)前狀態(tài)有關(guān)。軟件的失效率是基于當(dāng)前軟件狀態(tài)的離散函數(shù)。這類模型有Jelinski-Moranda模型和Schick-Wolverton模型等。
(2)非齊次泊松過程模型?;炯僭O(shè)是軟件失效過程為非齊次泊松過程。這類模型的主要特征是,均值函數(shù)被定義為在某給定時(shí)刻之前的期望失效數(shù),根據(jù)情況選擇適用的均值函數(shù)。這類模型有Goel-Okumoto模型和Schneidewind模型等。
(3)輸入域模型?;炯僭O(shè)是軟件測(cè)試用例能夠代表軟件實(shí)際使用剖面?;谲浖膶?shí)際使用剖面,隨機(jī)選擇輸入數(shù)據(jù),研究導(dǎo)致軟件失效的概率。根據(jù)一系列測(cè)試用例的輸入結(jié)果,計(jì)算軟件的可靠性。這類模型有Brown-Lipow模型和Nelson模型。
(4)基于軟件工程度量的模型?;炯僭O(shè)是規(guī)模越大、復(fù)雜度越高的軟件會(huì)具有更多的缺陷數(shù),且不同的軟件類型和開發(fā)特征會(huì)影響軟件產(chǎn)品的可靠性。軟件工程度量被用于預(yù)計(jì)軟件的缺陷數(shù)。這類模型有基于Halstead度量的模型和基于McCabe度量的模型。
將失效數(shù)據(jù)呈現(xiàn)的趨勢(shì)與軟件可靠性模型描述的趨勢(shì)相比較,如果兩者相似,則此模型的預(yù)計(jì)精度會(huì)相對(duì)較高。失效數(shù)據(jù)趨勢(shì)可以分為以下四類。
(1)失效數(shù)據(jù)趨勢(shì)為可靠性增長。軟件可靠性增長測(cè)試和系統(tǒng)使用期間,隨著軟件錯(cuò)誤的不斷排除,并且在不引進(jìn)新錯(cuò)誤的情況下,軟件可靠性呈逐漸增長趨勢(shì)。這種情況下,一般選用軟件可靠性增長模型,如Goel-Okumoto模型和Musa-Okumoto模型。
(2)失效數(shù)據(jù)趨勢(shì)為可靠性先下降后增長。在測(cè)試初期,軟件存在的錯(cuò)誤較多,但由于測(cè)試人員對(duì)軟件本身及測(cè)試環(huán)境不熟悉,導(dǎo)致發(fā)現(xiàn)的錯(cuò)誤較多,得以改正的錯(cuò)誤較少。因此,軟件可靠性呈下降趨勢(shì)。隨著測(cè)試人員熟練程度的提高,軟件錯(cuò)誤不斷得到更正,可靠性也隨之增長[13]。推薦選擇S型模型,如Yamada S型模型。
(3)失效數(shù)據(jù)趨勢(shì)為可靠性穩(wěn)定。這種情況一般發(fā)生在軟件生命周期的后期,隨著軟件故障的不斷排除,軟件缺陷不再頻繁引起系統(tǒng)失效,軟件失效發(fā)生的次數(shù)減少,軟件錯(cuò)誤排除周期變長,軟件可靠性呈現(xiàn)穩(wěn)定,可以選擇線性模型或泊松模型[14]。
(4)失效數(shù)據(jù)趨勢(shì)為可靠性不斷下降。這種情況一般是由于軟件錯(cuò)誤排除過程中,同時(shí)引入了新的錯(cuò)誤。此時(shí),已經(jīng)失去了應(yīng)用軟件可靠性模型的意義。應(yīng)該及時(shí)審查和調(diào)整軟件錯(cuò)誤的排除過程,保證不引入新的軟件錯(cuò)誤。
根據(jù)上述軟件可靠性模型選擇準(zhǔn)則,基于多準(zhǔn)則決策進(jìn)行軟件可靠性模型選擇的基本思路如圖2所示。
圖2 基于多準(zhǔn)決策的軟件可靠性模型選擇算法
首先,運(yùn)用確定性準(zhǔn)則對(duì)軟件可靠性模型進(jìn)行篩選。經(jīng)過運(yùn)用生命周期階段、模型輸入要求、模型輸出要求三項(xiàng)確定性選擇準(zhǔn)則,只有適用于特定生命周期階段,滿足模型輸入和輸出要求的模型被保留下來做為候選模型。
其次,對(duì)不確定性準(zhǔn)則賦予準(zhǔn)則權(quán)重。根據(jù)用戶需求和模型應(yīng)用特點(diǎn),按準(zhǔn)則的重要程度對(duì)模型假設(shè)吻合準(zhǔn)則和失效數(shù)據(jù)趨勢(shì)準(zhǔn)則分別賦予準(zhǔn)則權(quán)重,要求兩準(zhǔn)則權(quán)重相加等于1。
再次,對(duì)候選模型賦予準(zhǔn)則應(yīng)用權(quán)重。將模型假設(shè)吻合準(zhǔn)則和失效數(shù)據(jù)趨勢(shì)準(zhǔn)則分別應(yīng)用于各候選模型,根據(jù)軟件可靠性模型對(duì)準(zhǔn)則的滿足程度,賦予0和1之間的值作為應(yīng)用權(quán)重。
最后,將各候選模型的準(zhǔn)則權(quán)重和相應(yīng)的應(yīng)用權(quán)重相乘,選擇得分最高的軟件可靠性模型。
選用一組某型軟件系統(tǒng)測(cè)試期間的失效數(shù)據(jù),如表1所示,運(yùn)用所提出的方法進(jìn)行軟件可靠性模型選擇,用于評(píng)估軟件當(dāng)前的可靠性水平。
表1 軟件系統(tǒng)測(cè)試失效數(shù)據(jù)
(1)此失效數(shù)據(jù)產(chǎn)生于系統(tǒng)測(cè)試階段,根據(jù)軟件生命周期階段準(zhǔn)則,選擇適用于系統(tǒng)測(cè)試階段的軟件可靠性模型。系統(tǒng)測(cè)試階段常用的模型有:Jelinski-Moranda(JM)模型、Duane模型、Goel-Okumoto (GO)模 型、Musa-Okumoto(MO)模 型、Littlewood-Verall (LV)模 型、Yamada S-shaped (YS)模型等;
(2)此失效數(shù)據(jù)是軟件失效時(shí)間間隔數(shù)據(jù),但能夠轉(zhuǎn)化為軟件失效時(shí)刻數(shù)據(jù)和軟件失效計(jì)數(shù)數(shù)據(jù)。由于第一步所選模型都屬于基于運(yùn)行的軟件可靠模型,滿足模型輸入要求準(zhǔn)則;且皆可以輸出失效率數(shù)據(jù),適用于評(píng)估軟件系統(tǒng)當(dāng)前的可靠性,滿足模型輸出要求準(zhǔn)則。所以,保留所有第一步選擇的模型做為候選模型;
(3)候選模型皆是對(duì)軟件失效過程做出假設(shè),這種情況下失效數(shù)據(jù)趨勢(shì)準(zhǔn)則更為重要,因此,分別賦予模型假設(shè)吻合準(zhǔn)則和失效數(shù)據(jù)趨勢(shì)準(zhǔn)則的準(zhǔn)則權(quán)重為0.3和0.7。
(4)根據(jù)軟件失效過程與模型假設(shè)的吻合程度,各候選模型基于模型假設(shè)吻合準(zhǔn)則的應(yīng)用權(quán)重分別為:JM=0.25,Duane = 0.5,GO = 0.5,MO = 0.5,LV =0.25,YS=0.5。
根據(jù)失效數(shù)據(jù)趨勢(shì)和模型曲線趨勢(shì)的相似程度,各候選模型基于失效數(shù)據(jù)趨勢(shì)準(zhǔn)則的應(yīng)用權(quán)重分別為:JM=0.2,Duane=0.4,GO =0.4,MO =0.5,LV =0.3,YS=0.1。
各候選模型的最終得分分別為:JM =0.25*0.3+0.2*0.7=0.215,Duane=0.5*0.3+0.4*0.7=0.43,GO =0.5*0.3+0.4*0.7=0.43,MO=0.5*0.3+0.5*0.7=0.5,LV =0.25*0.3+0.3*0.7=0.285,YS=0.5*0.3+0.1*0.7=0.22。
Musa-Okumoto(MO)模型得分最高,所以最終選擇Musa-Okumoto (MO)模型。
本文分析了現(xiàn)有軟件可靠性模型選擇方法,指出它們存在運(yùn)算量大、應(yīng)用不方便等缺點(diǎn)。提出可以直接指導(dǎo)軟件可靠性模型選擇的若干準(zhǔn)則,闡述了基于這些準(zhǔn)則進(jìn)行軟件可靠性模型選擇的算法,并進(jìn)行了實(shí)例應(yīng)用。相對(duì)現(xiàn)有基于模型評(píng)價(jià)準(zhǔn)則和模型聚類的軟件可靠性模型選擇方法,本文所提出的方法計(jì)算簡(jiǎn)單,對(duì)經(jīng)驗(yàn)數(shù)據(jù)的積累要求較低,可以大大減少進(jìn)行軟件可靠性模型選擇的工作量。但也應(yīng)該看到基于模型選擇準(zhǔn)則方法的不足,基于此方法選擇出來的軟件可靠性模型,還需要用模型評(píng)價(jià)準(zhǔn)則對(duì)其應(yīng)用效果做出最終評(píng)價(jià)。進(jìn)一步研究的方向是將三種方法綜合起來,在沒有歷史數(shù)據(jù)的情況下,首先基于軟件可靠性模型選擇準(zhǔn)則,選出適量得分排名靠前的模型作為侯選模型;其次,將各侯選模型應(yīng)用于軟件失效數(shù)據(jù),并基于軟件可靠性模型評(píng)價(jià)準(zhǔn)則對(duì)各侯選模型的應(yīng)用效果進(jìn)行評(píng)價(jià),選擇評(píng)價(jià)結(jié)果最好的模型作為最終模型;最后,通過對(duì)軟件失效數(shù)據(jù)和適用模型的積累,建立利于工程化應(yīng)用的軟件可靠性選擇平臺(tái)。
:
[1]Karanta Ilkka.Methods and problems of software reliability estimation [R].Finland:VTT Technical Research Centre of Finland,2006:48-49.
[2]TENG Lingling,SHAO Dong,RONG Guoping.Reseach on software reliability model selection [J].Computer Applications and Software,2010,27 (6):128-131 (in Chinese).[騰靈靈,邵棟,榮國平.軟件可靠性模型選擇研究 [J].計(jì)算機(jī)應(yīng)用與軟件,2010,27 (6):128-131.]
[3]Kapil S,Rakesh G,Nagpal C K.Selection of optimal software reliability growth models using a distance based approach [J].IEEE Transactions on Reliability,2010,59 (2):266-276.
[4]ZHU Lei,YANG Dan,WU Yingbo.Selection of software reliability model based on BP neural network [J].Computer Engineering and Design,2007,28 (17):4091-4094 (in Chinese).[朱磊,楊丹,吳映波.基于BP神經(jīng)網(wǎng)絡(luò)的軟件可靠性模型選擇 [J].計(jì)算機(jī)工程與設(shè)計(jì),2007,28 (17):4091-4094.]
[5]IEEE Std 1633TM-2008,IEEE recommended practice on software reliability [S].
[6]SHI Zhu.Software reliability engineering [M].Beijing:Beijing University of Aeronautics and Astronautics Press,2009 (in Chinese).[石柱,軟件可靠性工程 [M].北京:北京航空航天大學(xué)出版社,2009.]
[7]Lyu M R.Software reliability engineering:A roadmap [C]//Proceedings of Future of Software engineering,2007:153-170.
[8]Pham H.System software reliability [M].London:Springer Publisher,2006:132-134.
[9]Wende Kong.Towards a formal and scalable approach for quantifying software reliability at early development stages [D].Maryland:University of Maryland,2009:12-15.
[10]Norman Schneidewind.Comparison of reliability and testing models [J].IEEE Transactions on reliability,2008,57 (4):607-615.
[11]WEI Ying,SHEN Xiangheng.Analysis and establishment of software reliability parameters of astronautics payload software[J].Computer Engineering and Design,2008,29 (10):2564-2566(in Chinese).[魏穎,沈湘衡.航天載荷應(yīng)用軟件可靠性參數(shù)的分析與確立 [J].計(jì)算機(jī)工程與設(shè)計(jì),2008,29(10):2564-2566.]
[12]CHAO Bing.The classiftcation of software reliability models and failure analysis of software reliability based on support vector machines [D].Wuhan:Wuhan University,2010:11-19(in Chinese).[晁冰.基于支持向量機(jī)的軟件可靠性模型分類及失效分析 [D].武漢:武漢大學(xué),2010:11-19.]
[13]WU Y P,HU Q P,XIE M.Modeling and analysis of software fault detection and correction process by considering time dependency [J].IEEE Transactions on Software Reliability,2007,56 (4):629-642.
[14]LU Minyan.Software reliability engineering [M].Beijing:National Defense Industry Press,2011 (in Chinese).[陸 民燕.軟件可靠性工程 [M].北京:國防工業(yè)出版社,2011.]