何斌
(91404部隊(duì), 河北 秦皇島 066000)
軟件故障樹分析(Software Fault Tree Analysis,SFTA)主要用于軟件的可靠性與安全性分析,也應(yīng)用于軟件測試的測試設(shè)計(jì)。軟件故障樹分析利用原因關(guān)系查找所有軟件可能的失效點(diǎn)并畫出故障樹圖,再定性、定量、重要度分析尋找可靠性安全性的薄弱環(huán)節(jié),是指導(dǎo)設(shè)計(jì)改進(jìn)、軟件測試、裝備維護(hù)的有效方法。故障樹分析的成敗取決于故障樹圖的完整性與準(zhǔn)確性。然而在實(shí)施過程中軟件故障樹分析往往依賴于個(gè)人經(jīng)驗(yàn),沒有一種全面定量的軟件失效點(diǎn)分析方法,這導(dǎo)致了對(duì)軟件系統(tǒng)進(jìn)行分析時(shí),會(huì)有很大的工作難度與強(qiáng)度,而結(jié)果卻不近人意。當(dāng)軟件測試人員使用SFTA來進(jìn)行測試設(shè)計(jì)時(shí)這一問題更加突顯,原因是軟件測試人員很難在測試周期內(nèi)對(duì)被系統(tǒng)的失效點(diǎn)有全面的掌握。
為解決SFTA這一問題,研究采用基于控制流分析結(jié)果的軟件故障樹自動(dòng)化分析技術(shù),實(shí)現(xiàn)SFTA基于客觀分析結(jié)果(控制流分析結(jié)果),并可達(dá)到分析過程短周期及計(jì)算機(jī)自動(dòng)化的目的。
故障樹分析(FTA)是產(chǎn)品(系統(tǒng))可靠性和安全性分析的工具之一,用來尋找導(dǎo)致不希望的系統(tǒng)故障或?yàn)?zāi)難性危險(xiǎn)事件(頂事件)發(fā)生的所在原因和原因組合,在具有基礎(chǔ)數(shù)據(jù)時(shí)求出頂事件發(fā)生的概率及其他定量指標(biāo)。FTA也是分析已經(jīng)發(fā)生的事故的一種基本方法,在裝備研發(fā)、維護(hù)等領(lǐng)域有廣泛的應(yīng)用。故障樹分析也用在軟件工程稱之這軟件故障樹分析(SFTA),在偵錯(cuò)時(shí)使用,和消除錯(cuò)誤原因的技術(shù)很有關(guān)系。
故障樹分析法是把系統(tǒng)不希望發(fā)生的故障狀態(tài)定義為“頂事件”,通過分析尋找出導(dǎo)致頂事件故障發(fā)生的所有可能的直接原因,這些原因稱之為“中間事件”。接著分析尋找一個(gè)中間事件發(fā)生的所在可能原因,經(jīng)此類推,直到追蹤到最后一級(jí)的原因事件,稱之為“底事件”。
故障樹分析就是從具體的故障出發(fā),由上往下逐層尋找失效原因,分析結(jié)果采用圖形化形式進(jìn)行表示。故障樹圖是一種邏輯因果關(guān)系圖,構(gòu)圖的元素是事件和邏輯門。事件用來描述系統(tǒng)和元、部件故障的狀態(tài),邏輯門把事件聯(lián)系起來,表示事件之間的邏輯關(guān)系。
故障樹圖的具體構(gòu)成,如圖1所示。
對(duì)于一個(gè)稍微復(fù)雜的系統(tǒng),將有數(shù)量較多的底事件,這不利于對(duì)系統(tǒng)可靠性、安全性定性、定量地分析。所以在確定故障樹圖后必須尋找最小割集。割集是故障樹中一些底事件的集合,當(dāng)這些同時(shí)發(fā)生時(shí),頂事必然發(fā)生;最小割集就是若將割集中的含的底事件含意去掉一個(gè)就不再成為割集了,這樣的割集就是最小算法。
圖1 串口通信故障樹圖
求最小割集的方法有行列法、結(jié)構(gòu)法、布爾代數(shù)法等,其中行列法最為常用。行列法是1972年福塞爾提出的方法,所以也稱其福塞爾法。其理論依據(jù)是:“與門”使割集容量增,而不增加割集的數(shù)量;“或門”使割集的數(shù)量增,而不增加割集的容量。這種方法是從頂上事件開,用下一層事件代替上一層事件,把“與門”連接事件,按行橫向排列;把“或門”連接的事件,按縱橫向擺開。這樣,逐層向下,直至各基本事件,出若干行,最后利用布爾代數(shù)化簡。化簡結(jié)果,就出若干最小割集。
軟件控制流分析是軟件靜態(tài)分析的主要內(nèi)容,分析結(jié)果以控制流圖表示。軟件控制流圖就是代碼邏輯的圖形化表示形式,圖形圓繪制的代碼,如圖2所示。
圖2 圖形圓繪制的代碼
圖形圓繪制控制流圖,如圖3所示。
控制流圖能表示一個(gè)過程內(nèi)所有基本塊執(zhí)行的可能流向,也能反映一個(gè)過程的實(shí)時(shí)執(zhí)行過程??刂屏鞣治鲈谲浖y試中有助于測試人員尋找程序中的控制邏輯錯(cuò)誤。有控制流圖以后,可定量地獲取程序的圈復(fù)雜度,而圈復(fù)雜度做一種為程序邏輯復(fù)雜性度量可有效指導(dǎo)進(jìn)行編程質(zhì)量改進(jìn),進(jìn)而降低軟件的故障風(fēng)險(xiǎn)。在軟件測試中控制流分析一般由軟件靜態(tài)測試工具自動(dòng)完成,常用測試工具有McCabe、Klocwork、LDRA_Testbed等。由于控制流圖是由測試工具自動(dòng)化完成,所以得到的控制圖可以完整、準(zhǔn)確地反應(yīng)程序的內(nèi)部邏輯結(jié)構(gòu)。
圖3 圖形圓繪制控制流圖
軟件的故障樹分析可沿軟件控制流圖的執(zhí)行邏輯進(jìn)行分析。軟件控制流圖中的執(zhí)行單元可認(rèn)為是一個(gè)中間事件,而引起這一的執(zhí)行單元失效的所有可能就是底事件,所有底事件由“或門”連接而成。整個(gè)故障樹的邏輯依從更高一層的控制流圖邏輯結(jié)構(gòu)。
依據(jù)控制流圖的故障樹圖對(duì)應(yīng)關(guān)系,如表1所示。
表1 故障樹圖與軟件控制流圖主要對(duì)應(yīng)關(guān)系
為進(jìn)一步詳述軟件控制流圖到故障樹的分析過程,同時(shí)也為證明這一方法的可行性,本文以“X型煙霧報(bào)警系統(tǒng)”為例演繹這一過程。
“X型煙霧報(bào)警系統(tǒng)”主要用于封閉環(huán)境火災(zāi)的自動(dòng)報(bào)警。系統(tǒng)通過溫感與煙霧傳感器對(duì)環(huán)境的溫度和煙霧濃度進(jìn)行實(shí)時(shí)監(jiān)測,以超過設(shè)置溫度、煙霧濃度判定是否發(fā)生火災(zāi)。當(dāng)系統(tǒng)監(jiān)測到超過預(yù)設(shè)溫度、煙霧濃度時(shí)發(fā)出聲光等形式的告警。開發(fā)方給出的系統(tǒng)流程圖,如圖4所示。
圖4 “X型煙霧報(bào)警系統(tǒng)”流程圖
很顯然僅憑這一流程圖進(jìn)行故障分析將十分困難?;诳刂屏鞣治龅能浖收蠘浞治龇椒ㄊ紫葘?duì)系統(tǒng)源碼進(jìn)行控制流分析,得控制流圖,如圖5所示。
圖5 “X型煙霧報(bào)警系統(tǒng)”控制流圖
依從控制流圖執(zhí)行邏輯進(jìn)行故障樹分析,以控制流圖邏輯結(jié)構(gòu)為故障樹圖的結(jié)構(gòu),并充分考慮控制流圖邏輯外的軟件失效可能作為故障樹的主要事件,具體步驟如下。
(1) 按流程圖的基本塊確定中間事件或底事件,同時(shí)根據(jù)軟件實(shí)際功能補(bǔ)充可能的事件;
(2) 根據(jù)流程圖的分支邏輯確定故障圖樹的邏輯門;
(3) 重復(fù)上述兩個(gè)步驟直到整個(gè)流程圖解讀完成。
通過以上步驟構(gòu)建“X型煙霧報(bào)警系統(tǒng)”的故障樹圖結(jié)構(gòu),如圖6所示。
通過演繹基于控制流分析的軟件故障樹分析是可行的??偨Y(jié)這一方法主要有以下幾個(gè)優(yōu)點(diǎn)。
(1) 故障樹分析依賴于由工具軟件獲得的控制流圖,分析過程更加客觀、全面、高效。
圖6 “X型煙霧報(bào)警系統(tǒng)”故障樹圖
(2) 基于控制流圖的故障樹分析不完全依賴于個(gè)人經(jīng)驗(yàn),有固定規(guī)律可循,工作難度將大大降低。
(3) 由于控制流圖由工具軟件自動(dòng)生成且到故障樹圖的轉(zhuǎn)換有模式可利于故障樹分析計(jì)算機(jī)自動(dòng)化的實(shí)現(xiàn)。
當(dāng)然這一方法也有不足之處,如方法適合較為簡小的嵌入式軟件,不適應(yīng)控制流圖龐繁的系統(tǒng)軟件;方法依賴代碼的正確性,對(duì)設(shè)計(jì)、軟件模式等故障無法觸及。雖然這一方法有諸多局限性,但應(yīng)用于周期要求短、覆蓋率要求高的嵌入式軟件測試的用例設(shè)計(jì)有較強(qiáng)的適用性。