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