鄧 緋,王 凱
(1.四川職業(yè)技術學院,四川 遂寧 629000;2.西南大學,重慶 北碚 400715)
基于靜態(tài)分析方法的軟件可靠性模型研究
鄧 緋1,王 凱2
(1.四川職業(yè)技術學院,四川 遂寧 629000;2.西南大學,重慶 北碚 400715)
隨著網(wǎng)絡通訊與計算機應用的不斷發(fā)展,軟件可靠性問題日益受到關注。針對更新COTS或開源組建,提供了一種定量評估軟件可靠性的方法模型。該模型結合了靜態(tài)分析源代碼方法,對執(zhí)行路徑進行有限測試,并建立貝葉斯信任網(wǎng)絡,構建一個綜合的軟件可靠性度量模型。最后使用STREW[1]工具對3個開源程序進行實驗驗證,得到了實驗結果,證明模型有效。
軟件可靠性;靜態(tài)分析;貝葉斯信任網(wǎng)絡
隨著網(wǎng)絡通訊與計算機技術的不斷發(fā)展,軟件已滲透到國民經(jīng)濟和國防建設的各個領域。隨著軟件系統(tǒng)功能的不斷增加,其規(guī)模和復雜程度也越來越大,軟件可靠性日益受到人們的關注,尤其是在航空航天、銀行等領域。如果軟件可靠性得不到保證,軟件系統(tǒng)存在缺陷和漏洞,就會造成許多問題和故障,必然會對國民生活帶來不利的影響,甚至造成巨大的損失。
1983年美國IEEE[2]計算機學會對“軟件可靠性”作出了定義:(1)在規(guī)定條件及時間內(nèi),軟件不引起系統(tǒng)失效的概率;(2)在規(guī)定的時間周期內(nèi),在所述條件下程序執(zhí)行所要求的功能的能力。傳統(tǒng)的軟件可靠性模型需要在開發(fā)和測試期間進行數(shù)據(jù)收集,包括可靠度R(t),平均故障前時間MTTF、平均修復時間MTTR、平均故障間隔時間MTBF,失效率,失效強度,容錯性等。但錯誤數(shù)據(jù)不一定能被充分收集,因此檢測軟件可靠性有一定難度。
源代碼的靜態(tài)分析是復查軟件錯誤中的一種常用技術,是對代碼的機械性的、程式化的特性分析方法。靜態(tài)分析可以進行緩沖區(qū)檢查[2],發(fā)現(xiàn)緩沖區(qū)溢出和安全漏洞、內(nèi)存泄露[3]、定時異常等等其他常見的編程錯誤。
靜態(tài)分析一般采用軟件工具進行分析,包括控制流分析、數(shù)據(jù)流分析、接口分析等。該方法常用于任務關鍵代碼的開發(fā),如航天和交通領域。
Nagappan[1]等人指出,自動檢測的故障和實際錯誤數(shù)目有密切關系。在本文中,需要使用Java靜態(tài)分析工具估計Java程序的可靠性。有研究者使用Findbugs,JLint,PMD等等靜態(tài)分析工具來分析Java源代碼,并對源代碼的結果進行比較。本文使用9種不同的分析工具對程序進行分析,以提高評估有效性。
本模型的基本前提是:軟件可靠性與源代碼中靜態(tài)檢測故障數(shù)、靜態(tài)檢測故障數(shù)的路徑以及代碼塊的覆蓋率相關。
首先將源代碼分成一系列方法(函數(shù)),將每一方法(函數(shù))劃分為語句塊,語句塊由連續(xù)的代碼指令組成,靜態(tài)分析檢測被分配到適當?shù)拇a塊中。一旦源代碼被分解成語句塊,靜態(tài)分析工具有效地鏈接到分解的源代碼,并輸出結果。為了預測可靠性,必須確定執(zhí)行每個分支的概率。在完成該程序的靜態(tài)分析后,結合理論與實際,對程序的路徑進行跟蹤觀察,實施測試。測試包括一系列的黑盒測試和功能測試。對每個方法,每個代碼塊的可靠性是基于貝葉斯信念網(wǎng)絡(BBN)的靜態(tài)檢測故障與可靠性的輸出,并對程序代碼結構達到80%代碼覆蓋率的基礎上進行有限測試。
為了準確評估靜態(tài)分析檢測到得故障以及有效性,建立BBNs來評估單一的靜態(tài)檢測故障的失敗風險。如圖1所示,BBNS結合靜態(tài)檢測錯誤以及有限測試中的代碼覆蓋率,得到軟件可靠性。該BBNs結合歷史數(shù)據(jù)以及程序執(zhí)行路徑,預測一個給定的靜態(tài)檢測故障,以及會導致程序出現(xiàn)故障的概率。這個網(wǎng)絡有效地分為三個主要部分,左上方用來處理靜態(tài)檢測到相關故障的風險,右上方用來評估程序執(zhí)行中出現(xiàn)錯誤的概率,底部結合以上數(shù)據(jù),提供總體靜態(tài)檢測故障的可靠性估計。
圖1 靜態(tài)檢測軟件可靠性模型
依靠代碼塊進行單一的靜態(tài)檢測錯誤,僅僅可以確定一個代碼塊綜合可靠性。該情況下,通過BBN中“校準網(wǎng)可靠性”的結點輸出確定代碼塊的可靠性。但在具有多個靜態(tài)檢測錯誤存在的情況下,需要進一步處理代碼塊的可靠性。
在傳統(tǒng)的可靠性模型中,存在兩個故障,如果一個獨立錯誤導致整個系統(tǒng)失敗,那么一個系統(tǒng)的失敗概率可以表示為
Pf(F1)是在執(zhí)行中任何可能會導致失敗的概率。Pf(F2)也一樣,在這種情況下
但是,如果各個故障并不互相獨立,那么
為了解決這個問題,必須依靠相關依賴對故障分組。因此,如果兩個靜態(tài)檢測故障的屬于同一分類,則假定它們是同一故障的不同實例;如果該故障不是同一分類,則必須估算它們的組合效應取得可靠性。在傳統(tǒng)的可靠性模型中,使用乘其可靠性得到。在本模型中,需要建立另一個BBNs,如圖2所示。
圖2 結合兩個靜態(tài)檢測錯誤的BBN
建立圖2以連接網(wǎng)絡實例,根據(jù)每一個代碼塊的可靠性,由該圖組合得到總體的可靠性。
為了結合每個方法得到的可靠性,從而得到整個系統(tǒng)的可靠性。創(chuàng)建BBNs用于結合每個方法的可靠性,如圖3所示。
圖3 綜合可靠性BBNs
本文中選用3個程序進行試驗來驗證模型的可靠性,對程序進行可靠性計算,用STREW軟件測試與可靠性預警度量方法進行可靠性分析相比較,并得到實驗數(shù)據(jù)。其中STREW指標體系是一套有效使用于軟件可靠性估計度量的工具。
本文選用俄羅斯方塊游戲,五子棋程序和黑白棋程序進行實驗。首先,為了簡化可靠性模型,以上3個程序都是5千行代碼以下,并使用SoSART(Software Static Analysis Reliability Toolkit)軟件靜態(tài)分析可靠性工具包進行分析。SoSART工具包旨在幫助開發(fā)人員通過使用靜態(tài)分析評估現(xiàn)有的Java源代碼的可靠性。其次,需要一套JUnit測試腳本來應用STREW模型。STREW度量通過工具度量和測試度量與軟件可靠性關聯(lián)。最后,用程序文檔估計程序需求以估計軟件可靠性結果。
度量的發(fā)展指標定義組由Nagappan等人使用,該度量能夠有效地估計軟件可靠性。該估量參數(shù)包括測試用例的數(shù)量,SLOC源代碼行,TLOC測試代碼行,需求數(shù)目,源類,條件數(shù),測試類等等,通過測試以上參數(shù),并進行組合以估計軟件可靠性。
STREW工具通過測量組合參數(shù)來估計軟件的可靠性。而STREW度量由GERT(Graphical Evalution and Review Technique圖表評審技術)工具箱支持,GERT可以對網(wǎng)絡邏輯關系和歷時估算進行概率處理。PERT(Program Evaluation and Review Technique)利用網(wǎng)絡順序邏輯關系和加權歷時來估算項目歷時的重要技術。STREW方法在PERT的基礎上,增加決策節(jié)點,不僅將活動的各參數(shù)如時間和費用設為隨機性分布,而且其各個活動及相互之間的影響關系也具有隨機性,即活動按一定概率可能發(fā)生或不發(fā)生,相應地反映在活動開始或結束的節(jié)點或分支發(fā)生或不發(fā)生。在網(wǎng)絡的表現(xiàn)形式上,增加決策節(jié)點,并且節(jié)點之間具有回路和環(huán)存在。
對3個測試程序的軟件可信性評估主要發(fā)生在四個步驟上,即使用STREW度量評估可信性,然后使用靜態(tài)分析工具分析代碼,再對范例進行功能測試,最后使用SoSART工具對結果進行綜合評定。
為了提供軟件程序的可靠性估計邊界,首先,在Eclipse編譯環(huán)境中使用GERT分析工具。
在使用GERT工具分析進行評估后后,使用SoSART工具支持的八個獨立靜態(tài)分析工具對源代碼進行分析。通過使用ANT(Another Neat Tool)編譯工具,靜態(tài)分析工具完全自動執(zhí)行,以便消除人為錯誤??傮w而言,采用靜態(tài)分析工具分析三個方案,靜態(tài)檢測故障檢測到1157個故障,其中259被認為是有效的故障。
完成后靜態(tài)分析階段之后,獲得軟件模塊的執(zhí)行配置文件。在源代碼內(nèi)執(zhí)行功能測試或驗收測試,通過運行驗收測試或功能測試獲得執(zhí)行配置文件。
一旦得到執(zhí)行配置文件,使用SoSART工具,并獲得適當?shù)目煽啃源胧┑撵o態(tài)檢測到的故障和執(zhí)行的文件進行了分析。對于每一個程序,首先將源代碼導入工具。隨著源代碼導入后,得到靜態(tài)分析工具的輸出,放進SoSART,得到有效性評估。在這一點上,產(chǎn)生了初步的可靠性報告評估的可靠性(假設每一個和每一個程序被執(zhí)行的均勻分布)。產(chǎn)生該評估后,將獲得源代碼的執(zhí)行概況可靠性報告。該過程在提供的三個方案中被重復執(zhí)行。
表1提供這一系列的實驗結果。表的上段給出了STREW指標的選定項目的可靠性評估的結果,該表下部分提供使用模型的可靠性評估。在提供的例子中,最大的差異為0.015。
表1 實驗結果
本文在針對更新COTS或開源組建,結合靜態(tài)分析方法、有限測試、以及構建2個貝葉斯網(wǎng)絡,提出了一個綜合的軟件可靠性模型。其中,靜態(tài)分析方法用來檢測在源代碼中有可能導致的執(zhí)行錯誤,使用代碼覆蓋率檢測源代碼中可執(zhí)行的路徑以及執(zhí)行率,建立第一個BBNs用于結合各個參數(shù)并估計每種方法的可靠性,并建立第二個BBNs用來結合各個模塊可靠性并估計網(wǎng)絡軟件的可靠性。該模型通過3個程序測試了其有效性。但是,在貝葉斯網(wǎng)絡上,實驗的網(wǎng)絡是簡化了的,若要在實際運用中,則需要進一步探討改進其準確性和額外附加參數(shù)的給定的參數(shù)可能。
[1] Nachiappan Nagappan.A Software Testing and Reliability Early Warning(STREW)Metric Suite[M].PhD Thsis,2005.
[2] John D.Musa.韓柯譯.軟件可靠性工程[M].北京:機械工業(yè)出版社,2003.
[3] 戈戟,史洪,徐良華.Shellcode靜態(tài)檢測技術研究[J].計算機應用與軟件,2010,27(2):47-49.
[4] 李倩,潘學敏,李宣東.內(nèi)存泄露檢測工具與評估方法[J].計算機科學與探索,2010(1):33-39.
Research on Software Reliability Model Based on Static Analysis
DENG Fei1,WANG Kai2
(1.Sichuan Vocational and Technological College,Suining 629000,China;2.Southwest University,Beibei 400715,China)
Along with the network communication and the continuous development of computer applications,software reliability has attracted increasing attention.This paper proposes a methodology model for quantitative evaluation of software reliability in updated COTS or open source components.Combining with the static analysis of the source code,the model tests the execution paths limitedly,as well as sets up Bayesian Belief Networks to provide a comprehensive software reliability measurement model.Finally it uses STREW[1]to give the three open source programs experimental verification and the experiment results are attained.The model is proved to be effective.
software reliability;static analysis;Bayesian Belief Networks
TN915.1
A
1009-3907(2012)08-0937-04
2012-05-20
鄧緋(1975-),女,重慶江津人,副教授,碩士,主要從事計算機應用方面的研究。
責任編輯:吳旭云