齊 蓓,覃志東
(東華大學計算機科學與技術學院,上海 201620)
基于體系結構的軟件可靠性測評研究
齊 蓓,覃志東
(東華大學計算機科學與技術學院,上海 201620)
針對傳統高可靠性軟件測評方法存在的問題,在分析基于體系結構測評重要性的基礎上提出了基于軟件體系結構的可靠性測評方法.將軟件可靠性增長測試和軟件可靠性驗證測試有機統一起來,從模塊級對可靠性進行控制,并提供可靠性先驗信息.該方法有利于實現軟件可靠性快速增長,有效減少測試用例量.
軟件可靠性;可靠性測評;軟件體系結構;軟件測試
軟件可靠性測評是保障其可靠性的重要方法之一,對軟件可靠性測評的研究有著積極的現實意義[1-3].目前,科研人員對軟件可靠性測評的技術與方法已展開了廣泛而深入的研究,并取得了豐碩的理論成果和工程實踐經驗.例如,為在軟件測試過程中及早暴露軟件缺陷以達到盡快提高軟件可靠性的目的,以Musa為代表的軟件可靠性工程學派[4-5]和以Poore、Whittake為代表的凈室軟件工程學派[6]分別提出了基于軟件運行剖面和基于馬爾科夫鏈使用模型的軟件可靠性測試用例產生方法,以統計實驗的思想對軟件測試的輸入選擇進行研究,從而更快地促進軟件可靠性的增長;而就軟件可靠性的驗證測試,Laplace、Thayer等[7-9]提出連續性規則、生命期測試、概率率序慣測試的方法,這些方法能夠實現對軟件可靠性的驗證,但由于測試用例量過大,并不適用于高可靠性軟件的可靠性驗證;此外,Tal[10]提出的單風險序慣測試方法對概率率序慣測試方法有一定改進,但成效并不顯著.針對以上可靠性驗證測試方法在工程實踐中暴露出的測試用例開銷過大、測試持續期過長等問題,覃志東等[11]提出了基于經驗貝葉斯統計推斷的軟件可靠性驗證測試方法,通過對先驗信息的利用,在保證測評結果可信的前提下有效降低了測試用例量.
目前,隨著軟件規模的不斷擴大和復用技術的廣泛應用,為便于系統的開發、集成和擴展,現代高可信軟件正在向多任務、多模塊化的方向發展.然而,傳統的軟件可靠性測評的方法把軟件系統看成一個整體,不能通過對軟件模塊級可靠性的控制達到對整個軟件系統可靠性的把握.僅依靠系統級的軟件可靠性增長及驗證測試,將無法確保軟件可靠性的快速增長以及用少量測試代價對系統當前可靠性達到高可信的驗證[12].
基于此,本研究從軟件結構特點和開發的現狀著手,提出一種軟件可靠性測評方法,將軟件可靠性增長與驗證測試形成一個有機整體.該方法從軟件的模塊級實施有效的可靠性跟蹤與控制并實現可靠性快速增長,同時通過測試所得數據估計出軟件可靠性先驗信息值,從而有效減少測試用例量.最后,本研究以一個多模塊軟件系統為例,對此測評方法中的主要程序進行了說明.
上世紀70年代末,Littlewood提出了按結構化、模塊化的方式進行軟件可靠性建模的思想.若將此思想融入于軟件可靠性測評中,通過分析軟件系統可靠性對模塊可靠性的敏感性來識別出對系統可靠性影響較大的軟件模塊,并采取相應優化措施以確保系統的可靠性.本研究以圖1所示多模快的軟件系統進一步展開說明,其中,S表示軟件執行成功的狀態.

圖1 軟件系統結構示意圖
通過對圖1所示軟件系統的結構和模塊間控制傳遞概率的分析,由Cheung軟件可靠性模型[13]可得出軟件系統可靠性與各模塊可靠性的關系為,
rs=0.4r1r3+0.06r1r2r4+0.54r1r2r3r4(1)式中,rs表示軟件系統的可靠性,ri(i=1,2,3,4)表示各軟件模塊的可靠性.
對軟件系統中模塊可靠性敏感性分析時,可用軟件模塊的BM(Birnbaum Measure)值進行判斷,

式中,BM值越大,表示該模塊可靠性很小的增長會引起軟件系統可靠性相對較大的變化.
若模塊可靠性已知,則由式(1)、(2)可得到各模塊敏感性指標和對軟件系統可靠性影響的排序,結果如表1所示.

表1 軟件模塊敏感度表
根據表1中數據,模塊3的BM值最大,表明加強對模塊3的測試可為系統帶來快速的可靠性增長,其他模塊依此類推.
由此可見,根據具體軟件體系結構,識別出對系統可靠性影響較大的模塊,按敏感度的排序分配可靠性測試資源,有利于實現軟件系統可靠性的快速增長.
為更好地說明問題,在圖1所示軟件系統基礎上新加入軟件模塊5.假設軟件模塊1,2,3,4已達到很高可靠性,軟件系統的失效主要由模塊5引起,且某一模塊的錯誤會引起整個軟件系統的失效.新的軟件系統結構如圖2所示.

圖2 新增模塊后的軟件系統結構示意圖
假設軟件系統對應的輸入域為D,能夠觸發相應軟件模塊i運行的輸入域為Di,且允許Di∩Dj≠Φ(i,j=1,2,3,4,5,且 i≠j).將 D 劃分為多個輸入子域,Di包含其中一個或幾個輸入子域,軟件模塊與其輸入域對應關系如圖3所示.

圖3 輸入域和軟件模塊對應圖
在進行可靠性測試時,從系統輸入域D選取測試用例量為n,其中屬于Di的測試用例量為di.令,ki=di/n,表示所選取測試用例中能夠觸發模塊i運行的測試用例比例.由G-O模型[15],軟件系統累積發現錯誤個數的期望值為,

式中,a表示軟件系統中潛在的錯誤總數,b表示單位時間錯誤被發現的概率.
對于圖2所示軟件系統,設模塊i(i=1,2,3,4,5)中潛在錯誤數量為ai,單位時間錯誤被發現的概率為bi.由于任一模塊中的錯誤會引起系統的失效,且各軟件模塊錯誤被發現的概率與其被觸發運行的概率成正比,所以有,

又由對系統的假設,可得到,a1=a2=a3=a4=0,b1=b2=b3=b4=0.將其代入式(4),得到a=a5,b=k5b5,代入式(3)便得到圖2所示軟件系統的累積發現錯誤個數的期望值,

由此,軟件系統的可靠性可表示為,

式中,q表示激活某一錯誤所對應的平均輸入量,N表示系統輸入空間D所對應總的輸入量.
假設測試用例n=500,平均運行時間為1 h/個,則可靠性增長測試總時間為500 h.令a5=20,b5=0.01,q=1,N=1 000,則當 k 分別為 0.05、0.1、0.5、1時,軟件系統可靠度隨測試時間的增長曲線如圖4所示.

圖4 系統可靠性增長曲線
由圖4可見,當k=0.05時,只有5%的測試用例觸發了模塊5的執行,這使得軟件中的錯誤發現率很低,導致系統可靠性增長十分緩慢;隨著k值的增大,當 k=0.1,0.5時,模塊5被觸發執行的概率變高,軟件錯誤發現率也隨之增長,因此,軟件系統的可靠性增長速度加快;當k=1時,n個測試用例全都能夠觸發模塊5的運行,這使得軟件系統中的錯誤更快地被發現并更正,相比前3條曲線,軟件系統可靠性增長最快.
以上結果表明,在軟件可靠性增長測試過程中,通過對重點模塊有針對性的選取測試用例進行可靠性增長測試,可實現軟件系統可靠性的快速增長,縮短測試持續期,從而有效減少測試代價.
本研究提出的基于體系結構的軟件可靠性測評方法如圖5所示.基于此方法開展軟件可靠性測評工作的具體步驟為:
1)將系統可靠性驗證指標轉化為可靠性設計指標,作為系統設計和增長測試的指標要求.
2)將可靠性設計指標分配于各軟件模塊,作為模塊級設計和可靠性增長測試指標.
3)模塊集成后,若系統的可靠性尚未達到要求,則需對軟件開展系統級的可靠性增長測試.
4)當軟件達到可靠性設計指標后,進行系統級的可靠性驗證測試.

圖5 軟件可靠性測評方法流程圖
本研究以一個簡單的多模塊軟件的可靠性測評為例說明基于體系結構的軟件可靠性測評方法的應用.某系統要求實現數字篩選功能,其程序流程如圖6所示,對此系統進行測評,要求其可靠性驗證指標達到(p0,c)=(0.001,0.99),即失效率不高于0.001的置信度達到0.99.

圖6 程序流程圖
該示例的軟件系統體系結構及模塊間控制傳遞概率如圖7所示.

圖7 示例軟件系統體系結構示意圖
設軟件系統的可靠性驗證指標為(p0,c),軟件系統的可靠性設計指標為pp.其中,p0、pp表示軟件系統的可靠性驗證失效率和可靠性設計失效率,c為軟件可靠性置信度,0<c<1,且有,r0=1-p0,rp=1-pp.
從軟件可靠性驗證指標的定義出發[5],允許軟件至多失效一次所需運行的軟件測試用例個數應滿足下式n的最小值,

式中,f(p|1,n,a,b)表示失效概率 p的共軛先驗分布.設軟件在整個運行過程中平均的失效個數符合貝努力分布,在沒有先驗的情況下,a=b=1,則有,

將式(8)代入式(7)中,可得到,

由此,軟件可靠性設計失效率為,

利用式(10),可將軟件可靠性驗證指標轉化為軟件可靠性設計指標.對于圖7所示系統,將(p0,c)=(0.001,0.99)代入式(10),得到此軟件系統的設計指標,pp=0.00022.
軟件可靠性指標分配是在權衡軟件開發成本、現有開發技術等限制條件下,對軟件各模塊進行合理的可靠性指標分配,即通過分析各模塊可靠性對軟件系統可靠性的敏感性的不同,識別出對系統可靠性影響較大的模塊,并在模塊間合理分配可靠性設計指標.
在對可靠性敏感性分析時,可利用式(2)結論.本研究從各模塊在軟件系統運行中所占的時間比例著手,進行可靠性指標的分配.設πi為系統運行時間內模塊i所占的運行時間比例.πi有如下約束,

式中,ti表示模塊單獨運行一次的時間,可由軟件編譯工具直接獲得,Xi表示運行過程中模塊執行的平均次數,可由軟件系統的DTMC模型求得[14];t表示系統運行一次各模塊運行的時間總和,若模塊間的控制傳遞時間忽略不計,則 t=∑ni=1ti×Xi.對于圖7所示軟件系統,由式(11)可計算得到各模塊的πi值如表2所示.

表2 模塊 πi值
根據軟件可靠性定義[5],可將軟件可靠性指標轉化為軟件失效密度指標,

其中x為常數.在任一時刻,軟件系統的失效密度又可表示為各模塊失效密度的線性和,

由式(13)便可得到軟件系統可靠性對于軟件模塊i的可靠性的敏感度,

對軟件系統進行可靠性指標分配時,可按式(14)所示可靠性敏感度,將軟件系統的失效密度值按比例分配到各軟件模塊中.將pp=0.00022代入式(12)得到系統失效密度指標,λp=4.345×10-6(設x=50),再按式(14)可靠性敏感度將軟件系統的失效密度值按比例分配到各軟件模塊中,則由表2中πi值得到各模塊可靠性設計指標為,

在模塊可靠性設計指標指導下,合理調配測試資源,對軟件模塊級進行可靠性增長測試,直到其達到可靠性設計指標.
軟件模塊集成后,利用已有失效數據可獲得系統當前可靠性值,并由最大熵原則獲得先驗參數值a、b.根據基于貝葉斯的可靠性評價方法[16],系統執行n個測試用例,其中有r個用例運行失敗,則系統失效概率的先驗分布為,

如果當前可靠性尚未達到指標要求,則需進行系統級的可靠性增長測試,測試后的軟件系統失效概率的后驗期望值為,


軟件測試達到指標要求后,就可對軟件開展驗證測試.若想系統滿足可靠性驗證指標(p0,c),則系統的失效概率p需滿足,

將式(15)代入式(17),便得到驗證測試時,失效測試用例個數r和總共需要運行的測試用例個數n的函數關系,

若由軟件失效數的經驗樣本值求得的先驗參數為,a=1,b=1 067,再將可靠性驗證指標,(p0,c)=(0.001,0.99),代入式(18),可得到 r和n的關系如表3所示.

表3 驗證測試用例表
根據表3可知,若軟件無失效的執行3536個測試用例,則說明軟件達到可靠性驗證指標;但如果在執行過程中出現一次失效,如在運行到第3021個測試用例時失敗,則還需運行5 573-3 021=2 552個測試用例,且其中不能有失效,才能證明軟件達到驗證指標;若已發現一個運行失效的測試用例,在運行到第5500個測試用例時又失敗,則還需無失效的運行6 269-5 500=869個測試用例,才能達到可靠性驗證指標.依此類推.
本研究在分析基于體系結構測評重要性的基礎上提出了基于軟件系統體系結構的可靠性測評方法,本方法將軟件可靠性增長測試和軟件可靠性驗證測試有機統一起來,并對此方法中的主要工作展開分析.這種方法可以更好地適應現有多模塊、多任務軟件的可靠性測評工作,有利于可靠性快速增長,并通過利用先驗信息有效減少測試用例量.需要說明的是,本研究僅為軟件系統可靠性測評提出了一種解決方案,相關研究還需進一步展開.
:
[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]覃志東,雷航,桑楠,等.安全關鍵軟件可靠性驗證測試方法研究[J].航空學報,2005,26(3):334-339.
[12]Butler R W,Finelli 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.
國家自然科學基金(50973014)、中央高校基本科研業務費專項基金(11D11209)資助項目.
齊 蓓(1987—),女,碩士研究生,從事軟件可靠性測評技術研究.