趙昶宇,劉云卿
?
淺談軟件失效模式與影響分析
趙昶宇,劉云卿
(天津津航計算技術(shù)研究所,天津 300308)
軟件失效模式與影響分析應(yīng)貫穿于軟件的整個研制周期,可以幫助設(shè)計者較早發(fā)現(xiàn)設(shè)計缺陷并提出改進措施和避錯容錯方案。按照軟件產(chǎn)品的生命周期,將軟件失效模式與影響分析分為系統(tǒng)級、功能級、接口級和詳細級4個層次,并對每個層次的分析方法進行了闡述。
SFMEA;影響分析;分析方法;故障診斷
軟件失效模式與影響分析(SFMEA)是提高系統(tǒng)可靠性的重要方法,它分析系統(tǒng)中每一產(chǎn)品可能發(fā)生的故障模式及其對系統(tǒng)可能造成的所有影響,是一種自下而上歸納的系統(tǒng)可靠性分析,最底層一級的影響逐級向上傳播,直到系統(tǒng)的最頂層。SFMEA關(guān)心的重點是“如果軟件的單元和部件運行不正確會帶來什么樣的影響”,它對軟件的單元和部件進行失效假設(shè),然后分析到系統(tǒng)一級,得出導(dǎo)致的后果。SFMEA的優(yōu)勢在于它從軟件的失效入手,能夠從反面角度提供更多的可靠性信息,并采取測試以外的方法來改善軟件的可靠性和安全性。本文在對SFMEA理論方法和實施過程研究的基礎(chǔ)上,根據(jù)產(chǎn)品的生命周期,將SFMEA分為4個層次:系統(tǒng)級SFMEA、功能級SFMEA、接口級SFMEA和詳細級SFMEA。層次之間的關(guān)系和模型如圖1所示。
圖1 SEMEA層次模型
系統(tǒng)級SFMEA主要用來評價軟件的體系結(jié)構(gòu),確保軟件結(jié)構(gòu)能夠抵御失效所帶來的影響,降低軟件風險。一般應(yīng)該在軟件項目開發(fā)中實施系統(tǒng)級SFMEA,它的分析結(jié)果能夠為功能級和接口級SFMEA提供指導(dǎo)依據(jù)。
在軟件的需求分析階段,通過仔細研究軟件的需求規(guī)格說明文檔,識別軟件需求規(guī)格說明中規(guī)定的任務(wù)關(guān)鍵要求和失效的關(guān)鍵因素,并對任務(wù)關(guān)鍵要求和失效的關(guān)鍵因素進行重點分析。通過系統(tǒng)級SFMEA分析來保證軟件體系結(jié)構(gòu)能夠抵御軟硬件失效所帶來的影響,降低軟件風險。需要值得注意的是,系統(tǒng)級SFMEA需要在開發(fā)階段的各個過程中不斷地重復(fù)進行,后期還需與詳細級SFMEA同步進行,在這個過程中一定要充分考慮到SFMEA分析的成本和軟件開發(fā)的成本。
當軟件的原型結(jié)構(gòu)設(shè)計完成并且每個軟件模塊的功能要求確定后,就可以開展系統(tǒng)級SFMEA分析工作。系統(tǒng)級SFMEA分析的目的是鑒定軟件結(jié)構(gòu)的安全性和魯棒性,重點是從系統(tǒng)的角度分析軟件各個子模塊的輸出和各個模塊之間匹配的協(xié)調(diào)性。
根據(jù)相應(yīng)的軟件可靠性國標和國軍標,將系統(tǒng)失效模式分為以下幾類:①輸入錯誤;②輸出錯誤;③錯誤的返回值(優(yōu)先順序、不能返回等);④優(yōu)先權(quán)錯誤;⑤資源沖突。
功能級SFMEA用于分析軟件中完成某一特定功能的模塊,它把潛在的軟件錯誤看成是軟件執(zhí)行上的失效。一個軟件具有多種功能,而每一種功能又可能具有多種失效模式,必須針對每一功能模塊分別找出全部可能的失效模式。功能級SFMEA的目的是幫助軟件設(shè)計者對影響軟件功能的各種故障都進行周密考慮,有助于找出對系統(tǒng)有重大影響的故障模式并分析其影響程度采取改進措施;也有助于設(shè)計者全面系統(tǒng)地了解各個軟件模塊之間的相互關(guān)聯(lián)關(guān)系。功能級SFMEA能夠發(fā)現(xiàn)潛在軟件內(nèi)部流程設(shè)計缺陷、模塊間配合和交互過程中的問題,能夠遍歷各種缺陷對系統(tǒng)的所有影響,并發(fā)現(xiàn)需求規(guī)格中沒有明確但又必須明確的可靠性問題。
在進行功能級SFMEA分析時,通??刹捎谩昂诤凶印狈椒?,將各個軟件模塊看作一個內(nèi)部代碼未知的“黑盒子”,“黑盒子”的功能是已知的,然后對軟件模塊的失效模式進行定義和分類。分析過程中不僅應(yīng)考慮軟件功能實現(xiàn)的問題及其導(dǎo)致的處理過程失效,還應(yīng)考慮其他環(huán)境因素導(dǎo)致的處理過程及輸出結(jié)果失效。比如數(shù)據(jù)或消息交互過程中的通信故障、軟件處理過程中的異常丟包、數(shù)據(jù)存儲過程中的存儲介質(zhì)失效、人為誤操作等。
對軟件功能進行SFMEA的對象可以是一項處理流程,也可以是一系列的處理流程;可以是純軟件過程,也可以是軟硬件結(jié)合的處理流程。選擇分析的重點在業(yè)務(wù)處理相關(guān)、狀態(tài)機復(fù)雜、處理過程復(fù)雜、多進程多模塊之間的交互等。在進行分析之前,應(yīng)先熟悉模塊的架構(gòu)、功能和處理流程,并對功能進行分解,劃分出模塊的功能流圖。對軟件流圖中的每一個步驟,應(yīng)列出其所有輸出條件(能夠執(zhí)行該功能或到達該狀態(tài)的所有先決條件),但不限于應(yīng)用場景、用戶操作、輸入?yún)?shù)和傳入的消息等。此外,還應(yīng)充分考慮軟件流圖中的每一個步驟的故障模式,判斷其發(fā)生的可能性,并對故障模式的全面性和正確性進行評審。
接口級SFMEA用于分析影響軟件模塊之間或者軟件和系統(tǒng)硬件之間的失效。對于軟件接口模型,可以利用基于行為的失效模式影響分析來找出失效模式和影響,為失效模式的影響分析提供定性和定量的信息和數(shù)據(jù)。
接口級SFMEA的分析方法和步驟具體為:①對所要分析的軟件接口模型的失效模型進行定義和分類;②對接口模型進行行為描述;③對軟件結(jié)構(gòu)分解后的接口級元素進行失效模式與影響分析,采用表1這樣的形式填表。
表1 接口級SFMEA分析表格
組件功能失效模式原因失效影響嚴重度 局部影響上層影響系統(tǒng)影響
軟件接口的失效模式可分為以下幾種:①模塊的參數(shù)單位與模塊接收的輸入變量單位不一致;②模塊的參數(shù)屬性與模塊接收的輸入變量屬性不一致;③模塊的參數(shù)個數(shù)與模塊接收的輸入變量數(shù)量不一致;④模塊的參數(shù)次序與模塊接收的輸入變量次序不一致;⑤傳遞給被調(diào)用模塊的變量單位與該模塊參數(shù)的單位不一致;⑥傳遞給被調(diào)用模塊的變量屬性與該模塊參數(shù)的屬性不匹配;⑦傳遞給被調(diào)用模塊的變量數(shù)量與該模塊參數(shù)的數(shù)量不相同;⑧傳遞給被調(diào)用模塊的變量次序與該模塊參數(shù)的次序不一致;⑨修改了只作為輸入值的變量;⑩全局變量在所有引用它們的模塊中有不相同的定義;?存在把常數(shù)作為變量傳送的情況。
詳細級SFMEA的工作是在軟件詳細設(shè)計階段后期進行,其主要依據(jù)是軟件詳細設(shè)計說明。詳細級SFMEA可以確定模塊設(shè)計是否達到軟件的安全性要求,識別具體的失效情況,確定失效的根本原因。詳細級SFMEA針對每個模塊推測每個變量和算法的失效模式,通過代碼跟蹤這些失效模式產(chǎn)生的影響,將得到的結(jié)果與軟件風險分析相比較從而識別出潛在的失效。
窮盡分析某模塊的所有變量是沒有必要也是不現(xiàn)實的,而且還使分析重點不夠突出。在軟件開發(fā)過程中,根據(jù)不同需要定義不同類型變量,所以不同類型的變量有著不同的作用以及重要性,SFMEA中重點關(guān)注以下類型變量:①有多個函數(shù)進行調(diào)用的全局變量發(fā)生失效,那么系統(tǒng)將會受到連鎖影響,需要對這部分全局變量進行深人分析。②外部的參數(shù)變量。人工設(shè)置的參數(shù)合適與否直接影響著系統(tǒng)的運行。③算法輸出變量。對于軟件,算法是重要組成部分,計算出的結(jié)果直接控制系統(tǒng)的動作,算法的失效模式轉(zhuǎn)化成計算出的相關(guān)變量的失效。④軟件接口變量,包括軟件和軟件之間(函數(shù)調(diào)用、進程通信等)、軟件和硬件之間(設(shè)置數(shù)模轉(zhuǎn)換端口到指定值)、硬件和軟件之間(軟件讀取溫度傳感器)、硬件和硬件之間的失效。硬件受到環(huán)境影響,其在傳輸過程中會出現(xiàn)差錯,硬件輸入的變量是在實際中常常出現(xiàn)問題的變量。
常用的詳細級SFMEA的分析方法有以下3種。
通過確定危險所對應(yīng)的輸入、輸出變量值的對應(yīng)范圍來標識、定位可能的軟件缺陷,并在軟件的可靠性和安全性設(shè)計中采取相應(yīng)的措施,可采用表2這樣的格式。
表2 危險-原因-關(guān)鍵軟件變量關(guān)系分析表
失效模式關(guān)鍵軟件變量 危險原因變量1變量2…變量n 危險1原因1對應(yīng)值范圍對應(yīng)值范圍…對應(yīng)值范圍 …………… 危險2原因1對應(yīng)值范圍對應(yīng)值范圍…對應(yīng)值范圍 原因2對應(yīng)值范圍對應(yīng)值范圍…對應(yīng)值范圍 ……………
矩陣分析法是以軟件的功能和邏輯為主要的分析對象,在軟件的概要設(shè)計完成后開始,在以后的各開發(fā)周期反復(fù)地進行,分析結(jié)論指導(dǎo)設(shè)計和測試,達到將軟件缺陷消滅在設(shè)計的測試階段,提高軟件的可靠性和安全性。矩陣分析法可采用表3這樣的格式。
詳細級SFMEA不僅要考慮軟件本身的失效模式比如賦值錯、變量調(diào)用錯誤等,還要考慮輸入數(shù)據(jù)的錯誤,并根據(jù)具體開發(fā)語言和編譯環(huán)境來確定其失效模式。變量失效模式分析可采用表4這樣的格式。
隨著艦載火控系統(tǒng)的不斷發(fā)展,測試性設(shè)計在艦載火控系統(tǒng)乃至整個武器系統(tǒng)總體性能設(shè)計中的地位和作用越來越突出,產(chǎn)品必須進行測試性設(shè)計。艦載火控系統(tǒng)設(shè)計性能中的高可靠性、高維修性和高測試性的結(jié)合,可達到提高艦載火控系統(tǒng)可用性和降低系統(tǒng)壽命周期費用的目的,這正是艦載火控系統(tǒng)追求的最終目標。
表3 矩陣分析表
失效模式關(guān)鍵軟件變量 輸出變量1輸出變量2…輸出變量n 輸出變量1失效模式1輸出值輸出值…輸出值 失效模式2………… 執(zhí)行邏輯失效模式1輸出值輸出值…輸出值 失效模式2………… ……………… ……………
表4 軟件變量失效模式分析表
變量類型失效模式代碼 布爾量False(本應(yīng)為True)F True(本應(yīng)為False)T 數(shù)值量太小L 太大H ………
[1]張仝偉,石柱.SFMEA方法在飛行控制軟件中的應(yīng)用[J].航天控制,2007,25(2):58-63.
[2]吳邦國,唐任仲.軟件FMEA技術(shù)研究[J].機電工程,2004,21(3):8-12.
[3]劉正高,王志梅.軟件FMEA技術(shù)的應(yīng)用策略[J].質(zhì)量與可靠,2005(6):36-38.
2095-6835(2018)21-0001-02
TP311.5
A
10.15913/j.cnki.kjycx.2018.21.001
趙昶宇(1982—),男,陜西漢中人,工學碩士,高級工程師,主要從事嵌入式系統(tǒng)軟件測試方面的研究。
〔編輯:嚴麗琴〕