齊 蓓,覃志東
(東華大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,上海 201620)
基于體系結(jié)構(gòu)的軟件可靠性測評(píng)研究
齊 蓓,覃志東
(東華大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,上海 201620)
針對(duì)傳統(tǒng)高可靠性軟件測評(píng)方法存在的問題,在分析基于體系結(jié)構(gòu)測評(píng)重要性的基礎(chǔ)上提出了基于軟件體系結(jié)構(gòu)的可靠性測評(píng)方法.將軟件可靠性增長測試和軟件可靠性驗(yàn)證測試有機(jī)統(tǒng)一起來,從模塊級(jí)對(duì)可靠性進(jìn)行控制,并提供可靠性先驗(yàn)信息.該方法有利于實(shí)現(xiàn)軟件可靠性快速增長,有效減少測試用例量.
軟件可靠性;可靠性測評(píng);軟件體系結(jié)構(gòu);軟件測試
軟件可靠性測評(píng)是保障其可靠性的重要方法之一,對(duì)軟件可靠性測評(píng)的研究有著積極的現(xiàn)實(shí)意義[1-3].目前,科研人員對(duì)軟件可靠性測評(píng)的技術(shù)與方法已展開了廣泛而深入的研究,并取得了豐碩的理論成果和工程實(shí)踐經(jīng)驗(yàn).例如,為在軟件測試過程中及早暴露軟件缺陷以達(dá)到盡快提高軟件可靠性的目的,以Musa為代表的軟件可靠性工程學(xué)派[4-5]和以Poore、Whittake為代表的凈室軟件工程學(xué)派[6]分別提出了基于軟件運(yùn)行剖面和基于馬爾科夫鏈?zhǔn)褂媚P偷能浖煽啃詼y試用例產(chǎn)生方法,以統(tǒng)計(jì)實(shí)驗(yàn)的思想對(duì)軟件測試的輸入選擇進(jìn)行研究,從而更快地促進(jìn)軟件可靠性的增長;而就軟件可靠性的驗(yàn)證測試,Laplace、Thayer等[7-9]提出連續(xù)性規(guī)則、生命期測試、概率率序慣測試的方法,這些方法能夠?qū)崿F(xiàn)對(duì)軟件可靠性的驗(yàn)證,但由于測試用例量過大,并不適用于高可靠性軟件的可靠性驗(yàn)證;此外,Tal[10]提出的單風(fēng)險(xiǎn)序慣測試方法對(duì)概率率序慣測試方法有一定改進(jìn),但成效并不顯著.針對(duì)以上可靠性驗(yàn)證測試方法在工程實(shí)踐中暴露出的測試用例開銷過大、測試持續(xù)期過長等問題,覃志東等[11]提出了基于經(jīng)驗(yàn)貝葉斯統(tǒng)計(jì)推斷的軟件可靠性驗(yàn)證測試方法,通過對(duì)先驗(yàn)信息的利用,在保證測評(píng)結(jié)果可信的前提下有效降低了測試用例量.
目前,隨著軟件規(guī)模的不斷擴(kuò)大和復(fù)用技術(shù)的廣泛應(yīng)用,為便于系統(tǒng)的開發(fā)、集成和擴(kuò)展,現(xiàn)代高可信軟件正在向多任務(wù)、多模塊化的方向發(fā)展.然而,傳統(tǒng)的軟件可靠性測評(píng)的方法把軟件系統(tǒng)看成一個(gè)整體,不能通過對(duì)軟件模塊級(jí)可靠性的控制達(dá)到對(duì)整個(gè)軟件系統(tǒng)可靠性的把握.僅依靠系統(tǒng)級(jí)的軟件可靠性增長及驗(yàn)證測試,將無法確保軟件可靠性的快速增長以及用少量測試代價(jià)對(duì)系統(tǒng)當(dāng)前可靠性達(dá)到高可信的驗(yàn)證[12].
基于此,本研究從軟件結(jié)構(gòu)特點(diǎn)和開發(fā)的現(xiàn)狀著手,提出一種軟件可靠性測評(píng)方法,將軟件可靠性增長與驗(yàn)證測試形成一個(gè)有機(jī)整體.該方法從軟件的模塊級(jí)實(shí)施有效的可靠性跟蹤與控制并實(shí)現(xiàn)可靠性快速增長,同時(shí)通過測試所得數(shù)據(jù)估計(jì)出軟件可靠性先驗(yàn)信息值,從而有效減少測試用例量.最后,本研究以一個(gè)多模塊軟件系統(tǒng)為例,對(duì)此測評(píng)方法中的主要程序進(jìn)行了說明.
上世紀(jì)70年代末,Littlewood提出了按結(jié)構(gòu)化、模塊化的方式進(jìn)行軟件可靠性建模的思想.若將此思想融入于軟件可靠性測評(píng)中,通過分析軟件系統(tǒng)可靠性對(duì)模塊可靠性的敏感性來識(shí)別出對(duì)系統(tǒng)可靠性影響較大的軟件模塊,并采取相應(yīng)優(yōu)化措施以確保系統(tǒng)的可靠性.本研究以圖1所示多??斓能浖到y(tǒng)進(jìn)一步展開說明,其中,S表示軟件執(zhí)行成功的狀態(tài).
圖1 軟件系統(tǒng)結(jié)構(gòu)示意圖
通過對(duì)圖1所示軟件系統(tǒng)的結(jié)構(gòu)和模塊間控制傳遞概率的分析,由Cheung軟件可靠性模型[13]可得出軟件系統(tǒng)可靠性與各模塊可靠性的關(guān)系為,
rs=0.4r1r3+0.06r1r2r4+0.54r1r2r3r4(1)式中,rs表示軟件系統(tǒng)的可靠性,ri(i=1,2,3,4)表示各軟件模塊的可靠性.
對(duì)軟件系統(tǒng)中模塊可靠性敏感性分析時(shí),可用軟件模塊的BM(Birnbaum Measure)值進(jìn)行判斷,
式中,BM值越大,表示該模塊可靠性很小的增長會(huì)引起軟件系統(tǒng)可靠性相對(duì)較大的變化.
若模塊可靠性已知,則由式(1)、(2)可得到各模塊敏感性指標(biāo)和對(duì)軟件系統(tǒng)可靠性影響的排序,結(jié)果如表1所示.
表1 軟件模塊敏感度表
根據(jù)表1中數(shù)據(jù),模塊3的BM值最大,表明加強(qiáng)對(duì)模塊3的測試可為系統(tǒng)帶來快速的可靠性增長,其他模塊依此類推.
由此可見,根據(jù)具體軟件體系結(jié)構(gòu),識(shí)別出對(duì)系統(tǒng)可靠性影響較大的模塊,按敏感度的排序分配可靠性測試資源,有利于實(shí)現(xiàn)軟件系統(tǒng)可靠性的快速增長.
為更好地說明問題,在圖1所示軟件系統(tǒng)基礎(chǔ)上新加入軟件模塊5.假設(shè)軟件模塊1,2,3,4已達(dá)到很高可靠性,軟件系統(tǒng)的失效主要由模塊5引起,且某一模塊的錯(cuò)誤會(huì)引起整個(gè)軟件系統(tǒng)的失效.新的軟件系統(tǒng)結(jié)構(gòu)如圖2所示.
圖2 新增模塊后的軟件系統(tǒng)結(jié)構(gòu)示意圖
假設(shè)軟件系統(tǒng)對(duì)應(yīng)的輸入域?yàn)镈,能夠觸發(fā)相應(yīng)軟件模塊i運(yùn)行的輸入域?yàn)镈i,且允許Di∩Dj≠Φ(i,j=1,2,3,4,5,且 i≠j).將 D 劃分為多個(gè)輸入子域,Di包含其中一個(gè)或幾個(gè)輸入子域,軟件模塊與其輸入域?qū)?yīng)關(guān)系如圖3所示.
圖3 輸入域和軟件模塊對(duì)應(yīng)圖
在進(jìn)行可靠性測試時(shí),從系統(tǒng)輸入域D選取測試用例量為n,其中屬于Di的測試用例量為di.令,ki=di/n,表示所選取測試用例中能夠觸發(fā)模塊i運(yùn)行的測試用例比例.由G-O模型[15],軟件系統(tǒng)累積發(fā)現(xiàn)錯(cuò)誤個(gè)數(shù)的期望值為,
式中,a表示軟件系統(tǒng)中潛在的錯(cuò)誤總數(shù),b表示單位時(shí)間錯(cuò)誤被發(fā)現(xiàn)的概率.
對(duì)于圖2所示軟件系統(tǒng),設(shè)模塊i(i=1,2,3,4,5)中潛在錯(cuò)誤數(shù)量為ai,單位時(shí)間錯(cuò)誤被發(fā)現(xiàn)的概率為bi.由于任一模塊中的錯(cuò)誤會(huì)引起系統(tǒng)的失效,且各軟件模塊錯(cuò)誤被發(fā)現(xiàn)的概率與其被觸發(fā)運(yùn)行的概率成正比,所以有,
又由對(duì)系統(tǒng)的假設(shè),可得到,a1=a2=a3=a4=0,b1=b2=b3=b4=0.將其代入式(4),得到a=a5,b=k5b5,代入式(3)便得到圖2所示軟件系統(tǒng)的累積發(fā)現(xiàn)錯(cuò)誤個(gè)數(shù)的期望值,
由此,軟件系統(tǒng)的可靠性可表示為,
式中,q表示激活某一錯(cuò)誤所對(duì)應(yīng)的平均輸入量,N表示系統(tǒng)輸入空間D所對(duì)應(yīng)總的輸入量.
假設(shè)測試用例n=500,平均運(yùn)行時(shí)間為1 h/個(gè),則可靠性增長測試總時(shí)間為500 h.令a5=20,b5=0.01,q=1,N=1 000,則當(dāng) k 分別為 0.05、0.1、0.5、1時(shí),軟件系統(tǒng)可靠度隨測試時(shí)間的增長曲線如圖4所示.
圖4 系統(tǒng)可靠性增長曲線
由圖4可見,當(dāng)k=0.05時(shí),只有5%的測試用例觸發(fā)了模塊5的執(zhí)行,這使得軟件中的錯(cuò)誤發(fā)現(xiàn)率很低,導(dǎo)致系統(tǒng)可靠性增長十分緩慢;隨著k值的增大,當(dāng) k=0.1,0.5時(shí),模塊5被觸發(fā)執(zhí)行的概率變高,軟件錯(cuò)誤發(fā)現(xiàn)率也隨之增長,因此,軟件系統(tǒng)的可靠性增長速度加快;當(dāng)k=1時(shí),n個(gè)測試用例全都能夠觸發(fā)模塊5的運(yùn)行,這使得軟件系統(tǒng)中的錯(cuò)誤更快地被發(fā)現(xiàn)并更正,相比前3條曲線,軟件系統(tǒng)可靠性增長最快.
以上結(jié)果表明,在軟件可靠性增長測試過程中,通過對(duì)重點(diǎn)模塊有針對(duì)性的選取測試用例進(jìn)行可靠性增長測試,可實(shí)現(xiàn)軟件系統(tǒng)可靠性的快速增長,縮短測試持續(xù)期,從而有效減少測試代價(jià).
本研究提出的基于體系結(jié)構(gòu)的軟件可靠性測評(píng)方法如圖5所示.基于此方法開展軟件可靠性測評(píng)工作的具體步驟為:
1)將系統(tǒng)可靠性驗(yàn)證指標(biāo)轉(zhuǎn)化為可靠性設(shè)計(jì)指標(biāo),作為系統(tǒng)設(shè)計(jì)和增長測試的指標(biāo)要求.
2)將可靠性設(shè)計(jì)指標(biāo)分配于各軟件模塊,作為模塊級(jí)設(shè)計(jì)和可靠性增長測試指標(biāo).
3)模塊集成后,若系統(tǒng)的可靠性尚未達(dá)到要求,則需對(duì)軟件開展系統(tǒng)級(jí)的可靠性增長測試.
4)當(dāng)軟件達(dá)到可靠性設(shè)計(jì)指標(biāo)后,進(jìn)行系統(tǒng)級(jí)的可靠性驗(yàn)證測試.
圖5 軟件可靠性測評(píng)方法流程圖
本研究以一個(gè)簡單的多模塊軟件的可靠性測評(píng)為例說明基于體系結(jié)構(gòu)的軟件可靠性測評(píng)方法的應(yīng)用.某系統(tǒng)要求實(shí)現(xiàn)數(shù)字篩選功能,其程序流程如圖6所示,對(duì)此系統(tǒng)進(jìn)行測評(píng),要求其可靠性驗(yàn)證指標(biāo)達(dá)到(p0,c)=(0.001,0.99),即失效率不高于0.001的置信度達(dá)到0.99.
圖6 程序流程圖
該示例的軟件系統(tǒng)體系結(jié)構(gòu)及模塊間控制傳遞概率如圖7所示.
圖7 示例軟件系統(tǒng)體系結(jié)構(gòu)示意圖
設(shè)軟件系統(tǒng)的可靠性驗(yàn)證指標(biāo)為(p0,c),軟件系統(tǒng)的可靠性設(shè)計(jì)指標(biāo)為pp.其中,p0、pp表示軟件系統(tǒng)的可靠性驗(yàn)證失效率和可靠性設(shè)計(jì)失效率,c為軟件可靠性置信度,0<c<1,且有,r0=1-p0,rp=1-pp.
從軟件可靠性驗(yàn)證指標(biāo)的定義出發(fā)[5],允許軟件至多失效一次所需運(yùn)行的軟件測試用例個(gè)數(shù)應(yīng)滿足下式n的最小值,
式中,f(p|1,n,a,b)表示失效概率 p的共軛先驗(yàn)分布.設(shè)軟件在整個(gè)運(yùn)行過程中平均的失效個(gè)數(shù)符合貝努力分布,在沒有先驗(yàn)的情況下,a=b=1,則有,
將式(8)代入式(7)中,可得到,
由此,軟件可靠性設(shè)計(jì)失效率為,
利用式(10),可將軟件可靠性驗(yàn)證指標(biāo)轉(zhuǎn)化為軟件可靠性設(shè)計(jì)指標(biāo).對(duì)于圖7所示系統(tǒng),將(p0,c)=(0.001,0.99)代入式(10),得到此軟件系統(tǒng)的設(shè)計(jì)指標(biāo),pp=0.00022.
軟件可靠性指標(biāo)分配是在權(quán)衡軟件開發(fā)成本、現(xiàn)有開發(fā)技術(shù)等限制條件下,對(duì)軟件各模塊進(jìn)行合理的可靠性指標(biāo)分配,即通過分析各模塊可靠性對(duì)軟件系統(tǒng)可靠性的敏感性的不同,識(shí)別出對(duì)系統(tǒng)可靠性影響較大的模塊,并在模塊間合理分配可靠性設(shè)計(jì)指標(biāo).
在對(duì)可靠性敏感性分析時(shí),可利用式(2)結(jié)論.本研究從各模塊在軟件系統(tǒng)運(yùn)行中所占的時(shí)間比例著手,進(jìn)行可靠性指標(biāo)的分配.設(shè)πi為系統(tǒng)運(yùn)行時(shí)間內(nèi)模塊i所占的運(yùn)行時(shí)間比例.πi有如下約束,
式中,ti表示模塊單獨(dú)運(yùn)行一次的時(shí)間,可由軟件編譯工具直接獲得,Xi表示運(yùn)行過程中模塊執(zhí)行的平均次數(shù),可由軟件系統(tǒng)的DTMC模型求得[14];t表示系統(tǒng)運(yùn)行一次各模塊運(yùn)行的時(shí)間總和,若模塊間的控制傳遞時(shí)間忽略不計(jì),則 t=∑ni=1ti×Xi.對(duì)于圖7所示軟件系統(tǒng),由式(11)可計(jì)算得到各模塊的πi值如表2所示.
表2 模塊 πi值
根據(jù)軟件可靠性定義[5],可將軟件可靠性指標(biāo)轉(zhuǎn)化為軟件失效密度指標(biāo),
其中x為常數(shù).在任一時(shí)刻,軟件系統(tǒng)的失效密度又可表示為各模塊失效密度的線性和,
由式(13)便可得到軟件系統(tǒng)可靠性對(duì)于軟件模塊i的可靠性的敏感度,
對(duì)軟件系統(tǒng)進(jìn)行可靠性指標(biāo)分配時(shí),可按式(14)所示可靠性敏感度,將軟件系統(tǒng)的失效密度值按比例分配到各軟件模塊中.將pp=0.00022代入式(12)得到系統(tǒng)失效密度指標(biāo),λp=4.345×10-6(設(shè)x=50),再按式(14)可靠性敏感度將軟件系統(tǒng)的失效密度值按比例分配到各軟件模塊中,則由表2中πi值得到各模塊可靠性設(shè)計(jì)指標(biāo)為,
在模塊可靠性設(shè)計(jì)指標(biāo)指導(dǎo)下,合理調(diào)配測試資源,對(duì)軟件模塊級(jí)進(jìn)行可靠性增長測試,直到其達(dá)到可靠性設(shè)計(jì)指標(biāo).
軟件模塊集成后,利用已有失效數(shù)據(jù)可獲得系統(tǒng)當(dāng)前可靠性值,并由最大熵原則獲得先驗(yàn)參數(shù)值a、b.根據(jù)基于貝葉斯的可靠性評(píng)價(jià)方法[16],系統(tǒng)執(zhí)行n個(gè)測試用例,其中有r個(gè)用例運(yùn)行失敗,則系統(tǒng)失效概率的先驗(yàn)分布為,
如果當(dāng)前可靠性尚未達(dá)到指標(biāo)要求,則需進(jìn)行系統(tǒng)級(jí)的可靠性增長測試,測試后的軟件系統(tǒng)失效概率的后驗(yàn)期望值為,
軟件測試達(dá)到指標(biāo)要求后,就可對(duì)軟件開展驗(yàn)證測試.若想系統(tǒng)滿足可靠性驗(yàn)證指標(biāo)(p0,c),則系統(tǒng)的失效概率p需滿足,
將式(15)代入式(17),便得到驗(yàn)證測試時(shí),失效測試用例個(gè)數(shù)r和總共需要運(yùn)行的測試用例個(gè)數(shù)n的函數(shù)關(guān)系,
若由軟件失效數(shù)的經(jīng)驗(yàn)樣本值求得的先驗(yàn)參數(shù)為,a=1,b=1 067,再將可靠性驗(yàn)證指標(biāo),(p0,c)=(0.001,0.99),代入式(18),可得到 r和n的關(guān)系如表3所示.
表3 驗(yàn)證測試用例表
根據(jù)表3可知,若軟件無失效的執(zhí)行3536個(gè)測試用例,則說明軟件達(dá)到可靠性驗(yàn)證指標(biāo);但如果在執(zhí)行過程中出現(xiàn)一次失效,如在運(yùn)行到第3021個(gè)測試用例時(shí)失敗,則還需運(yùn)行5 573-3 021=2 552個(gè)測試用例,且其中不能有失效,才能證明軟件達(dá)到驗(yàn)證指標(biāo);若已發(fā)現(xiàn)一個(gè)運(yùn)行失效的測試用例,在運(yùn)行到第5500個(gè)測試用例時(shí)又失敗,則還需無失效的運(yùn)行6 269-5 500=869個(gè)測試用例,才能達(dá)到可靠性驗(yàn)證指標(biāo).依此類推.
本研究在分析基于體系結(jié)構(gòu)測評(píng)重要性的基礎(chǔ)上提出了基于軟件系統(tǒng)體系結(jié)構(gòu)的可靠性測評(píng)方法,本方法將軟件可靠性增長測試和軟件可靠性驗(yàn)證測試有機(jī)統(tǒng)一起來,并對(duì)此方法中的主要工作展開分析.這種方法可以更好地適應(yīng)現(xiàn)有多模塊、多任務(wù)軟件的可靠性測評(píng)工作,有利于可靠性快速增長,并通過利用先驗(yàn)信息有效減少測試用例量.需要說明的是,本研究僅為軟件系統(tǒng)可靠性測評(píng)提出了一種解決方案,相關(guān)研究還需進(jìn)一步展開.
:
[1]Knight J C.Safety Critical System:Challenges and Directions[C]//Proceedings of the24th International Conference on Software Engineering.Orlando:IEEE Xplore,2002:547-550.
[2]Cukic B.Combining Testing and Correctness Verification in Software Reliability Assessment[C]//High-Assurance Systems Engineering Workshop.Washington:High-Assurance Systems Engineering Workshop,1997.
[3]Lyu M R.Software Reliability Engineering:A Roadm ap[C]//Future ofSoftware Engineering.Washington:IEEEComputer Society,2007.
[4]Musa J D,Okumoto K.Software Reliability:Measurement,Prediction,and application[M].New York:McGraw-Hill,1987.
[5]Lyu M R.Handbook on Software Reliability Engineering[M].New York:McGraw-Hill,1996.
[6]Prowell J S ,Trammell J C ,Linger R.et al.Cleanroom Softw are Engineering:Technology and Process[M].New York:Addison-Wesley Professional,1999.
[7]Bastani F B,Pasquini A.Assessment of a Sampling Method for Measuring Safety-critical Software Reliability[C]//Proc ISSRE94.Monterey:IEEE Xplore,1994.
[8]Thayer T A,Lipow M,Nelson E C.Software Reliability[M].North Holland:Holanda Publisher,1978.
[9]Pstein B,Sobel M.Sequential Life Tests in the Exponential Case[J].Annals of Mathematical Statistics,1953,26(3):82-95.
[10]Tal O ,MoCollin C ,Bendell A.Reliability Demonstration for Safety-c ritical Systems[J].IEEE Transactions on Reliability Engineering,2001,50(2):194-203.
[11]覃志東,雷航,桑楠,等.安全關(guān)鍵軟件可靠性驗(yàn)證測試方法研究[J].航空學(xué)報(bào),2005,26(3):334-339.
[12]Butler R W,F(xiàn)inelli G B.The Infeasibility of Quantifying the Reliability of Life-critical Real-time Software[J].IEEE Transactions on Software Enginneering,1993,19(1):3-12.
[13]Cheung R C.A User-oriented Software Reliability Model[J].Software Engineering,1980 ,SE-6(2):118-125.
[14]Sharma V S,Trivedi K S.Quantifying Software Performance,Reliability and Security:An Architecture-based Approach[J].Journal of Systems and Software,2006,80(4):493-509.
[15]Goel A L,Okumoto K.Time-dependent Error-detection Rate Model for Software Reliability and Other Performance Measures[J].IEEE Transactions on Reliability Engineering,1979 ,R-28(3):206-211.
[16]Littlewood B,Wright D.Some Conservative Stopping Rules for the Operational Testing of Safety Critical Software[J].IEEE Transactionson Reliability Engineering ,1997,43(11):673-683.
Reliability Evaluation Research and Practice of Architecture-based Software
QI Bei,QIN Zhidong
(School of Computer Science and Technology,Donghua University,Shanghai 201620,China)
Abstract:As to the problems that the traditional high reliability evaluation methods exposed,an architec ture-based software reliability evaluation methodwas proposed,based on the analysis of importance of archi tecture-based software reliability testing.This method consolidates software growth testing with software demonstration testing,monitoring reliability from the modules'level and it can serve priori information of software reliability,which can realize the rapid growth of software reliability and effectively reduce the amount of test cases.
Key words:software reliability;reliability evaluation;software architecture;software testing
TP311.52
A
1004-5422(2012)04-0336-06
2012-10-16.
國家自然科學(xué)基金(50973014)、中央高校基本科研業(yè)務(wù)費(fèi)專項(xiàng)基金(11D11209)資助項(xiàng)目.
齊 蓓(1987—),女,碩士研究生,從事軟件可靠性測評(píng)技術(shù)研究.