王艷軍 張海軍
(91404部隊(duì) 秦皇島 066001)
靶標(biāo)回收系統(tǒng)是某型水下試驗(yàn)靶的回收控制系統(tǒng),負(fù)責(zé)完成水下試驗(yàn)靶試驗(yàn)完成或意外情況下的靶體回收任務(wù),在整個(gè)靶標(biāo)系統(tǒng)中具有極其重要的作用。系統(tǒng)由嵌入式系統(tǒng)平臺(tái)、各類傳感器和控制軟件等多個(gè)組成[1],在水下工作過程中一旦出現(xiàn)失效,可能會(huì)導(dǎo)致靶標(biāo)丟失等情況,系統(tǒng)是否可靠會(huì)直接影響到一次任務(wù)的成敗。目前各有關(guān)工業(yè)部門、軍兵種越來越重視可靠性管理,可靠性技術(shù)已經(jīng)貫穿于產(chǎn)品的各個(gè)環(huán)節(jié)[2],針對(duì)嵌入式軟件系統(tǒng)進(jìn)行安全性分析已成為現(xiàn)代嵌入式系統(tǒng)安全性保障的重要方法和研究熱點(diǎn)[3]。針對(duì)靶標(biāo)回收系統(tǒng)各底事件及中間事件發(fā)生的概率無法確定的現(xiàn)狀,基于靶標(biāo)回收系統(tǒng)的系統(tǒng)設(shè)計(jì)方案,建立靶標(biāo)回收系統(tǒng)的故障樹模型,通過對(duì)故障樹進(jìn)行分析,幫助軟件測試人員快速判明會(huì)導(dǎo)致系統(tǒng)失效的潛在故障發(fā)生路徑,對(duì)系統(tǒng)的可靠性驗(yàn)證和軟件測試[4]用例設(shè)計(jì)提供有效指導(dǎo)[5]。
SEFT(State/Event Fault Tree),狀態(tài)/事件故障樹是Kaiser博士于2007年提出的一種安全性建模方法,將傳統(tǒng)的故障樹中的元素與基于狀態(tài)機(jī)的元素結(jié)合起來,區(qū)分了事件與狀態(tài),既能有效地建模軟件系統(tǒng)的行為又能表達(dá)系統(tǒng)失效因果鏈[3]。SEFT能夠通過系統(tǒng)行為有效地表達(dá)軟件系統(tǒng)中構(gòu)件的失效與系統(tǒng)危害發(fā)生之間的因果關(guān)系,適用于建模構(gòu)件化軟件系統(tǒng)的危害場景。SEFT能夠建模較低層次的系統(tǒng),且可以很好地填補(bǔ)安全性分析與形式化方法之間的空缺。故障樹分析法已被國內(nèi)外大量應(yīng)用于各個(gè)行業(yè),如裝甲裝備的故障診斷與定位[6],魚雷動(dòng)力系統(tǒng)故障樹診斷模式識(shí)別[7]等,是系統(tǒng)可靠性分析中最常見的方法之一,是一種自頂向下的分析方法,即從軟件系統(tǒng)不希望發(fā)生的事件(主事件或頂事件)[8],特別是對(duì)人員和設(shè)備的安全產(chǎn)生重大影響的事件開始,向下主保護(hù)追查導(dǎo)致主事件發(fā)生的原因,直至基本事件(底事件)[9]。
靶標(biāo)回收系統(tǒng)是一個(gè)典型的嵌入式系統(tǒng)平臺(tái)。軟件模塊包括遙控指令接收處理、深度判斷、電量判斷、距離判斷、事件判斷、回收操控指令生成處理。硬件模塊由遙控模塊、定時(shí)器、壓力傳感器、深度傳感器、電量傳感器、定位模塊,舵機(jī)控制模塊、氣泵等模塊組成。
按照系統(tǒng)設(shè)計(jì),在典型任務(wù)情況下,系統(tǒng)可以通過兩種方式進(jìn)行回收:
1)遙控回收:當(dāng)回收系統(tǒng)的遙控模塊接收到遙控回收命令,系統(tǒng)生成回收控制指令并執(zhí)行,控制舵機(jī)執(zhí)行靶體上浮動(dòng)作,當(dāng)檢測到靶體已出水(在水下深度小于5m)時(shí),控制氣泵放氣,拋出回收網(wǎng)?;厥談?dòng)作執(zhí)行完成。
2)自動(dòng)回收:當(dāng)系統(tǒng)工作超時(shí)(>4h)、靶體深度超限(>500m)、電池電量低(<20%),靶體距離指控點(diǎn)超出安全距離(大于5km)時(shí),系統(tǒng)自動(dòng)生成回收控制指令并執(zhí)行回收操作。
一個(gè)系統(tǒng),不同的應(yīng)用活動(dòng)包括不同的故障原因,將系統(tǒng)故障轉(zhuǎn)化為故障樹的結(jié)構(gòu),必須要考慮具體的應(yīng)用信息[10]。故障樹分析是把系統(tǒng)不希望發(fā)生的失效事件作為失效分析的目標(biāo),這一目標(biāo)在故障樹分析中定義為“主事件”。針對(duì)回收系統(tǒng),可以利用故障樹中故障現(xiàn)象和故障源之間的邏輯關(guān)系建立規(guī)則[11],將“回收系統(tǒng)失效”設(shè)置為主事件,將“回收系統(tǒng)失效”主事件分解,得到兩個(gè)中間事件:“回收控制指令生成失敗”和“回收控制指令執(zhí)行失敗”。通過對(duì)系統(tǒng)各個(gè)軟硬件模塊之間的安全性依賴關(guān)系進(jìn)行詳細(xì)地分析,將各個(gè)中間事件逐步向下分解,最終建立系統(tǒng)故障樹模型,見圖1。
圖中頂層事件F1表示回收系統(tǒng)失效:事件M1表示未能有效生成回收控制指令,M2表示未能有效執(zhí)行回收動(dòng)作。當(dāng)M1和M2之一出現(xiàn)失效就會(huì)導(dǎo)致F1失效事件發(fā)生。從圖1中可以看出,通過對(duì)頂事件和中間事件進(jìn)行分解最終得到會(huì)導(dǎo)致系統(tǒng)失效的基本事件共有14個(gè),其中軟件基本事件7個(gè),見表1。
表1 系統(tǒng)基本狀態(tài)/事件
根據(jù)圖1,可以列出全部的失效序列。
F1=M1∪M2;M1=M3∩M7;M2=X21∪X22∪M21;M3=X1∩M4∩M5∩M6;M4=X2∪X3;M5=X7∪X8;M6=X4∪X5∪X6;M7=X9∪X10;M21=X23∪X24。將各個(gè)中間事件用基本事件替換帶入,最終得到系統(tǒng)的失效序列:
F1=((X1∩(X2∪X3)∩(X7∪X8)∩(X4∪X5∪X6))∩(X9∪X10))∪(X21∪X22∪X23∪X24)。
最小割集是導(dǎo)致主事件發(fā)生的基本事件的集合,即全部發(fā)生時(shí)會(huì)導(dǎo)致系統(tǒng)失效。即當(dāng)任一個(gè)最小割集中全部基本事件為“失效”時(shí),主事件必然為“失效”。
七十年代以來,國內(nèi)外研究出多種求解故障樹最小割集的算法。這里采用下行法[12]進(jìn)行計(jì)算,從主事件開始,由上到下,順次把上一級(jí)事件置換為下一級(jí)事件,通過對(duì)上面的F1失效序列進(jìn)行化簡和計(jì)算,最終得到導(dǎo)致系統(tǒng)失效的最小割集,見表2。
表2 系統(tǒng)最小割集
從這些最小割集中可以看出引起系統(tǒng)失效的所有最小場景。此外,還可以看出X21(回收指令執(zhí)行失效)、X22(舵機(jī)上浮控制失效)、X23(氣泵控制失效)、X24(出水判斷失效)分別是系統(tǒng)的關(guān)鍵事件和關(guān)鍵狀態(tài)。這些關(guān)鍵事件和狀態(tài)在系統(tǒng)測試過程中應(yīng)重點(diǎn)關(guān)注,在系統(tǒng)設(shè)計(jì)和測試過程中,在測試用例生成[13]以及軟件模型檢驗(yàn)屬性的生成時(shí)充分考慮,從而進(jìn)一步提高軟件系統(tǒng)的可靠性。
最小徑集是指使主事件狀態(tài)為失效不發(fā)生的最低限度的基本事件的集合。即當(dāng)集合中的基本事件全部不發(fā)生(安全),則必然主事件不發(fā)生(安全)。將故障樹轉(zhuǎn)換為安全樹[14],然后計(jì)算該安全樹的最小割集,即為對(duì)應(yīng)故障樹的最小徑集。
通過對(duì)圖1中的故障樹進(jìn)行轉(zhuǎn)換計(jì)算,最終得到系統(tǒng)故障樹的最小徑集5個(gè),見表3。
表3 系統(tǒng)最小徑集
通過對(duì)故障樹中基本事件的結(jié)構(gòu)重要程度進(jìn)行分析,可以得到各個(gè)基本事件的重要度如下:
考慮到系統(tǒng)中硬件的可靠性普遍要高于軟件模塊,且軟件為新開發(fā)產(chǎn)品,因此單獨(dú)列出各個(gè)軟件模塊基本事件的重要度關(guān)系。
①(X21,X24)> ②(X10,X9,X8,X3)> ③(X6)
在對(duì)系統(tǒng)可靠性進(jìn)行測試用例設(shè)計(jì)時(shí),應(yīng)該考慮各個(gè)軟件模塊對(duì)系統(tǒng)失效影響的重要程度,必要時(shí)對(duì)關(guān)鍵軟件模塊進(jìn)行深入分析和重點(diǎn)測試。
按照表1中基本事件,每個(gè)基本事件有兩種狀態(tài)(失效/安全),則全部的狀態(tài)組合共有214=16384個(gè)。顯然這對(duì)于測試用例設(shè)計(jì)來說是一個(gè)天文數(shù)字,如想覆蓋全部基本事件狀態(tài),成本是不可承受的。
在測試過程中,針對(duì)系統(tǒng)軟件安全性分析的結(jié)果,將基本事件狀態(tài)作為用例輸入條件,根據(jù)系統(tǒng)輸出結(jié)果(系統(tǒng)最終狀態(tài)F1),我們可以根據(jù)最小割集設(shè)計(jì)得到基礎(chǔ)失效用例(當(dāng)測試用例中的輸入條件均為失效時(shí),系統(tǒng)必然失效,為避免影響其他基本事件,其他基本事件均應(yīng)設(shè)置為“安全”)28個(gè)。根據(jù)最小徑集設(shè)計(jì)基礎(chǔ)安全用例(當(dāng)測試用例中的輸入條件均為安全時(shí),系統(tǒng)必然安全,為避免其他基本事件的影響,其他基本事件均應(yīng)設(shè)置為“失效”)5個(gè)。
考慮到對(duì)各個(gè)最小割集內(nèi)基本事件的組合,可以設(shè)計(jì)補(bǔ)充安全用例,以割集(X1,X2,X4,X7,X9)為例:
由割集的定義可知,當(dāng)其他基本事件的狀態(tài)為“安全”時(shí),當(dāng)割集(X1,X2,X4,X7,X9)中任一事件為“安全”,最終系統(tǒng)狀態(tài)(F1)就不會(huì)為“失效”。由此可以設(shè)計(jì)補(bǔ)充安全用例25-1=31個(gè)。
表4為以割集(X1,X2,X4,X7,X9)為例設(shè)計(jì)的測試用例。
針對(duì)全部最小割集數(shù)量m,每個(gè)最小割集中基本事件數(shù)量n,得到補(bǔ)充安全用例數(shù)量a的計(jì)算公式
表4 割集(X1,X2,X4,X7,X9)測試用例設(shè)計(jì)
計(jì)算得到全部最小割集的補(bǔ)充安全用例數(shù)量a=24*31+4*0=744個(gè)。
同樣我們還可以對(duì)各個(gè)最小徑集內(nèi)基本事件的組合設(shè)計(jì)補(bǔ)充失效用例,以徑集(X1,X21,X22,X23,X24)為例:當(dāng)其他基本事件的狀態(tài)為“失效”時(shí),當(dāng)徑集(X1,X21,X22,X23,X24)中任一事件為“失效”,最終系統(tǒng)狀態(tài)(F1)就不會(huì)為“安全”。由此可以設(shè)計(jì)補(bǔ)充失效用例25-1=31個(gè)。針對(duì)全部最小徑集計(jì)算得到合計(jì)補(bǔ)充失效用例個(gè)數(shù)b=31+63*3+127=347個(gè)。
顯然通過故障樹分析方法可以高效指導(dǎo)系統(tǒng)軟件的安全性測試用例的設(shè)計(jì)工作,從上面的分析可以看出,通過故障樹的最小割集和最小徑集設(shè)計(jì)33個(gè)基礎(chǔ)用例,即可覆蓋系統(tǒng)軟件最小失效和安全關(guān)鍵路徑,考慮補(bǔ)充設(shè)計(jì)的測試用例,全部用例為1124個(gè),有效提高了軟件測試的效率。
故障樹分析方法在硬件系統(tǒng)的應(yīng)用已很廣泛[15],但在軟件測試過程中的應(yīng)用較少。通過建立回收系統(tǒng)故障樹,可以明確影響系統(tǒng)可靠性的各個(gè)軟硬件基本事件之間的邏輯關(guān)系,有助于測試人員對(duì)系統(tǒng)失效出現(xiàn)的原因進(jìn)行較為深入的分析研究,驗(yàn)證系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)的一致性。通過對(duì)系統(tǒng)失效樹的分析,可以幫助測試人員高效地設(shè)計(jì)測試用例,有針對(duì)性對(duì)關(guān)鍵的軟硬件模塊進(jìn)行重點(diǎn)分析驗(yàn)證。