劉 穎,楊蕓蕓
(天津科技大學人工智能學院,天津300457)
軟件可靠性分析是軟件可靠性工程的核心內容之一.軟件失效不僅會造成硬件系統癱瘓和經濟損失,還會引起重大事故,如美國長途電話業務曾因軟件故障引發系統癱瘓、火箭發動機控制系統軟件故障可能會造成飛行試驗失敗、飛機的飛行控制軟件的失效會危及人身安全等.因此,科學的軟件可靠性評估是非常必要的.軟件可靠性指在一定的條件下和時間內,軟件運行不會發生故障的概率[1].故障樹是常用的軟件可靠性評估方法,該方法適用于軟件生命周期的各階段.劉文紅等[2]針對軟件測試用例設計不充分問題,提出一種通過故障樹分析設計測試用例的新方法.以上文獻均采用傳統故障樹分析方法評估軟件的可靠性,即假設基本事件故障概率是常數或隨機變量,但概率假設只能用來評估隨機不確定性.
在軟件可靠性測試過程中,受到軟件內部結構的復雜性、人的認知水平等原因的影響,存在許多認知不確定性因素,因而無法采用傳統軟件可靠性評估. 針對不精確的信息,專家學者開始引入模糊理論[3]對其進行描述.蔡開元[4]提出了基于模糊理論的軟件可靠性增長模型,該模型不僅適用于測試階段,而且適用于確認階段.焦彥平等[5]針對軟件開發初期信息不完全的問題,基于模糊集理論建立軟件缺陷評估模型.譚海中[6]針對傳統通信軟件可靠性測試計算結果不精確的問題,提出了采用模糊故障樹的可靠性測試方法.但由于可能性測度不滿足自對偶性,導致評估結果經常產生相互矛盾的結論.
不確定理論[7]是基于規范性、自對偶性、次可加性和乘積公理體系的數學分支,主要用于對認知不確定性建模.近年來,不確定理論在許多領域已經有了廣泛應用,如系統可靠性建模[8]、結構可靠性評估[9]、圖論[10]、不確定統計[11]、時間序列模型[12]等.
本文在認知不確定性環境下,提出基于不確定故障樹的軟件可靠性分析方法,并用于實際裝備軟件的可靠性評估.
令Γ為非空集合,L是Γ上的子集構成的σ-代數,L中的每一個元素Λ稱為事件.每個事件Λ發生的信度記作 M{Λ},其中信度M需要滿足以下4條公理:
公理1(規范性)對于全集Γ,有

公理2(自對偶性)對任意事件Λ∈L,有

公理3(次可加性)對任意的可列可數事件列Λ1, Λ2,… ,有

公理4(乘積公理)令(Γk, Λk,Mk)為不確定空間,k=1,2,… ,則乘積不確定測度滿足

定義1若集函數滿足規范性、自對偶性、次可加性和乘積公理,則稱其為非空集合上的不確定測度.
定義2令Γ是一個非空集合,L是一個在Γ上的σ-代數,M是一個不確定測度,則稱三元組(Γ,L,M)為一個不確定空間.
定義3不確定變量是一個從不確定空間(Γ,L,M)到實數集的函數ξ,{ξ∈B}是一個在任意Borel集上的事件.
定義4對任意Borel集的實數 B1,B2,… ,Bn,若滿足

則不確定變量ξ1,ξ2,… ,ξn是相互獨立的.
定理1對任意Borel集實數 B1,B2,… ,Bn,若滿足

則不確定變量ξ1,ξ2,… ,ξn是相互獨立的.
定義5一個不確定集合是一個從不確定空間(Γ,L,M)映射到實數集合的函數ξ,{ B ?ξ}和{ξ? }B是對于任意Borel集的事件.
定理2令ξ和η為不確定集合,則

定理3令ξ,,ητ為不確定集合,則

定理4令ξ,,ητ為不確定集合,則

定理5令,ξη為不確定集合,則

故障樹可以用來對軟件風險或可靠性進行定量評估,并分析引起軟件產品發生故障的原因,包括軟件產品組成部分、軟件使用環境、人為因素等,適用于大型復雜系統.
故障樹分析法遵循自頂向下原則.分析系統的故障模式時,將故障模式作為輸出事件(頂事件),用“中間事件”表示導致該事件發生的原因,并用邏輯門(“與門”、“或門”)連接.以此類推,直到找到頂事件發生的根本原因,即輸入事件(基本事件).
定義6在故障樹中,若所有基本事件發生的信度均用不確定測度評估,則該故障樹稱為不確定故障樹.
定理6若輸入事件 Λ1,Λ2,… ,Λn相互獨立且由“與門”連接,則輸出事件Λ發生的信度為

若輸入事件 Λ1,Λ2,… ,Λn相互獨立且由“或門”連接,則輸出事件Λ發生的信度為其中:∨為最大值運算符,∧為最小值運算符.

(1)根據軟件系統控制流程圖,建立故障樹.基本事件是軟件各最小模塊單元,各最小模塊單元分別具有對應的代碼塊,中間事件為控制流程中間子程序模塊,頂事件為軟件故障.在可靠性測試過程中,以最小模塊單元的代碼塊的失效數據為依據,進行可靠性評估.
(2)獲取基本事件發生的不確定測度.在沒有足夠測試數據的情況下,邀請軟件工程師給出基本事件發生的不確定測度.
(3)由樹形結構給出頂事件的表達式.將頂事件用基本事件表示,若存在不相互獨立的中間事件,利用不確定集合的運算法則化為相互獨立的基本事件.
(4)進行軟件可靠性評估.利用不確定理論的運算法則,結合故障樹,對軟件可靠性進行評估.
(5)進行敏感度分析.分析故障樹中基本事件的敏感度.在進行測試用例設計時,考慮各模塊單元對系統失效的影響程度,重點測試關鍵模塊.
利用不確定故障樹分析法的基本步驟,為軟件生命周期中的各個階段建立失效模型,計算軟件失效的可能性,通過分析結果提出保障意見,從而提高軟件安全性.
對某裝備軟件系統進行實例分析.該軟件的功能是實時監測某飛行控制系統的傳感器,在飛行控制系統的正常工作過程中有重要作用.由于軟件的使用環境等原因,沒有大量的故障測試數據,無法使用概率方法,因此利用本文的方法,為該裝備軟件進行可靠性評估.
(1)對某裝備軟件的控制流程進行分析,軟件故障是頂事件,控制流程中間的子程序模塊故障是中間事件,軟件各最小模塊單元是基本事件,各最小模塊單元分別具有對應的代碼塊.建立如圖1所示的不確定故障樹[12],其中,1,2,...,nΛ Λ Λ為相互獨立的基本事件,各最小模塊單元所包含的代碼塊行數見表1,為中間事件,Λ是頂事件.

表1 基本事件對應的代碼塊行數Tab. 1 Numbersof lines of code corresponding to the basic event

圖1 某裝備軟件的故障樹示意圖Fig. 1 Fault tree diagram of a certain equipment software
(2)由于軟件測試中的故障數據量較少,輸入事件(每個代碼塊中發生故障的信度)是由專家評估得出(表2).

表2 基本事件故障信度數據Tab. 2 Failure belief degrees data of the basic events
(3)由圖1中的樹形結構,結合定理2、定理3、定理4和定理5,從而得到輸出事件為


(4)根據定義4、定理1得出系統的故障信度為

故系統的可靠度為

(5)在對軟件系統進行可靠性評價時,由于基本事件 Λ1, Λ2,… ,Λ10對頂事件的影響程度不同,因此采用Sobol靈敏度分析方法對基本事件 Λ1, Λ2,… ,Λ10進行敏感度分析并進行評價,見表3.

表3 基本事件靈敏度對比表Tab. 3 Comparison table of basic event sensitivity
從表3可以看出,基于本文提出的方法得到的基本事件靈敏度值均高于基于傳統故障樹的基本事件靈敏度值,代碼塊行數分別為5525和2329的基本事件Λ2和Λ10的靈敏度值最大.因此,基本事件的高靈敏度證明了基于不確定故障樹的軟件可靠性評估方法可以對軟件可靠性進行精準測試.下面具體分析敏感參數對軟件系統可靠性的影響情況.
圖2為基本事件Λ2和Λ10的變化對軟件系統可靠度的影響情況示意圖.在(0,0.043)內,軟件產品可靠度隨著基本事件Λ2發生失效的不確定測度的增大而減小,之后產品失效的不確定測度不再變化.在(0,0.0343)內,系統可靠度隨Λ10的增大而減小;在0.0343以后,系統可靠度則不再變化.

圖2 基本事件Λ2和Λ10對產品影響情況示意圖Fig. 2 Schematic diagram of impact of basic events Λ2 and Λ10 on products
綜上所述,應該重點關注代碼塊行數為5525和2329的代碼塊所對應的最小模塊單元,因為這兩個最小模塊單元對產品可靠度影響較大,是測試的重點.
在軟件可靠性分析過程中,由于沒有充足的故障數據且存在大量的認知不確定性,基于傳統概率論的故障樹分析方法不再適用,故本文針對傳統故障樹對軟件可靠性分析不足,提出不確定故障樹軟件可靠性分析方法,主要創新內容:
(1)最小模塊單元的代碼塊中發生故障的信度用不確定測度評估.
(2)在不確定故障樹中,采用不確定集合運算法則,可將不相互獨立的中間事件轉化為相互獨立的基本事件.
(3)對基本事件進行敏感度分析,找出影響軟件可靠性的關鍵因素.