徐 彬,張凌東,李 華
(1.中國電子科技集團公司第58研究所江蘇無錫214072;2.中國運載火箭技術研究院211廠軍代室北京100076)
軟件測試的目的是為了找出軟件中的問題,分析哪些地方有可能隱藏問題。但在執(zhí)行過程中分析依據(jù)大部分是設計提供的文檔,依照文檔的思路進行分析,沒有成熟統(tǒng)一的方法,導致分析的結果具有很大的主觀性。SFMEA和SFTA是軟件可靠性分析領域常用的兩種分析方法,兩者對于失效故障的分析全面精準,邏輯清晰,為提高軟件可靠性發(fā)揮了重要的作用。將SFMEA和SFTA分析方法應用到軟件測試過程,借助SFMEA和SFTA的技術優(yōu)勢規(guī)范測試分析過程,從而使分析過程標準統(tǒng)一化,最終提高軟件測試的質量。
SFMEA即軟件失效模式與影響分析(SFMEA,Software Failure Modes and Effects Analysis),分析軟件系統(tǒng)中每一個模塊、組件所有可能產(chǎn)生的故障模式及其對軟件系統(tǒng)造成所有可能影響的一種歸納方法[1]。它是識別和評估潛在風險的系統(tǒng)方法,它提供了一種條理性準則減少甚至清除軟件失效的概率[2]。軟件測試是為了找出軟件中存在的問題,若是利用SFMEA,可以事先理清系統(tǒng)結構層次和關鍵變量的因果關系,分析出軟件隱藏的問題,使測試過程中更具有針對性,這將大大提高軟件測試的效率。
SFMEA執(zhí)行過程主要分為如下三步:
1)建立失效模式庫
SFMEA是軟件失效模式驅動的分析活動,確定失效模式是實施SFMEA的關鍵步驟之一[3-4]。由于軟件項目種類繁多,功能多樣,建立一致的失效模式庫是不可能的,建立通用功能的失效模式是可行的。例如:數(shù)據(jù)輸入失效模式庫(部分)見表1。具體項目實施過程中,以通用的失效模式為參考,需要增加符合項目特點的失效模式。
表1 通信失效模式庫(部分)舉例
2)確定軟件約定層次
約定層次實際是確定需要分析的軟件內容以及邏輯關系,即相關變量的一系列線索,SFMEA根據(jù)軟件中關鍵變量查找潛在故障,通常系統(tǒng)分析中找到的關鍵事件,往往受關鍵變量影響。約定層次從最初約定層,到分析的約定層,直至最低約定層。例如圖1所示,最初約定層為該通信系統(tǒng),分析約定層定為處理模塊,最低約定層可以是功能1-4中任意一個或幾個。
圖1 通信軟件系統(tǒng)層次舉例
3)建立SFMEA工作表
工作表是SFMEA分析內容具體體現(xiàn),文獻[5-6]分別給出應用實踐的工作表示例可作參考??紤]到軟件測試的特殊應用場景,總結出適用于軟件測試的工作表,主要內容包括約定層次、失效分類、失效模式、失效原因、失效影響,嚴酷度等。工作表中每一項對軟件測試過程中挖掘潛在問題都是至關重要的參考信息,嚴酷度更是軟件測試風險優(yōu)先級管理的重要評判依據(jù)。一般情況下,SFMEA工作表還應包含預防措施,考慮到軟件測試中不涉及,故此處刪除。
SFTA是軟件故障樹分析(SFTA,software fault tree analysis),用于表明軟件中哪些模塊的故障、外部事件或者他們的組合導致軟件發(fā)生故障的邏輯圖[1]。SFTA分析先確定軟件中一個不希望發(fā)生的事件,然后在一定的環(huán)境與工作條件下,對軟件進行分析,找出不希望發(fā)生事件發(fā)生的確切方式,即找出不希望事件發(fā)生的各種原因[7]。
文獻[8-9]分別闡述了SFTA應用于軟件測試和雷達故障診斷中,可見SFTA在軟件測試中的應用已得到認可。SFTA最終以一個框圖展現(xiàn)結果,其中頂事件是指要分析的軟件最頂層不希望發(fā)生的事件,中間事件是指一個邏輯門或多個輸入事件發(fā)生的故障事件,基本事件是指不能再進一步展開的或無需再進一步展開的基本初始故障事件,如圖2所示。
圖2 SFTA框圖舉例
SFTA是自頂向下的進行分析,其一般步驟為:
1)確定最頂事件
確定最不希望發(fā)生的事件,特別是對人身安全和設備安全產(chǎn)生重大影響的事件作為最頂事件。
2)分析邏輯關系
從最頂事件向下逐步分析導致頂事件發(fā)生的原因,一直到基本事件。
通過SFTA分析結果可以找到重大關鍵的隱藏問題,且對軟件層次分析透徹,便于發(fā)現(xiàn)根本原因。
SFMEA與SFTA兩種技術在單獨應用時各有不足:SFMEA是一種自底向上的單因素失效分析方法,其分析結果以表格方式列出,無法直接表現(xiàn)失效原因之間的邏輯關系。SFTA是一種自頂向下依照樹狀結構從上向下推導出故障原因的方法,在選取頂事件時,可能考慮不周全,存在遺漏的情況。另外,SFTA在分析故障原因時也會有所遺漏,這會影響底事件的嚴酷度排序,從而影響實施改進措施時對輕重緩急的判斷。文獻[10-11]闡述了SFMEA和SFTA綜合技術,文獻[12]介紹了二者綜合后應用于智能移動終端系統(tǒng)可靠性分析。兩種技術的結合,互相彌補不足,在可靠性分析領域發(fā)揮更大的優(yōu)勢。
SFMEA和SFTA技術綜合,最典型的有兩種方式,正向綜合分析和逆向綜合分析[13],正向綜合分析以分析結果為導向,對關鍵的、有重大影響的事件作為頂事件進行SFTA,從而對頂事件進行充分的分析。逆向綜合分析先進行SFTA,其著眼點是最低層的基本事件,依次向上追尋線索。軟件測試是從整個系統(tǒng)為出發(fā)點,以軟件的需求說明或設計文件為依據(jù),所以正向綜合分析方法更適合,將這種正向綜合分析方法應用到軟件測試整個流程中,如圖3所示。
圖3 SFMEA和SFTA應用于軟件測試框圖
從SFMEA開始,首先分析系統(tǒng)結構圖,確定約定層次;再從失效模式庫中選擇適應于項目的失效模式,失效模式對應SFTA的中間事件,中間事件的分析又可詳細的體現(xiàn)在集成測試和配置測試中。根據(jù)中間事件分別向下和向上追蹤線索,查找對應的基本事件和頂事件。反之,應用SFTA的基本事件,可以容易地確定SFMEA中的失效原因,基本事件又是單元測試的主要對象。SFTA的頂事件,可以明確SFMEA中的失效影響,且可作為系統(tǒng)測試中判斷失效的重要依據(jù)。當然,SFTA與軟件測試的每一階段的對應關系不是絕對的,SFTA在整個軟件測試流程中始終是貫通的,例如,系統(tǒng)測試過程中分析問題也是可以借鑒SFTA中的基本事件來定位最低層的問題。
SFMEA中的嚴酷度是根據(jù)失效影響和發(fā)生可能性來確定[14],GJB-Z 1391-2006故障模式影響及危害性分析指南給出明確的評分準則,評分等級10-1,10表示故障影響最嚴重,且最有可能發(fā)生的等級,1表示故障等級最輕。在測試管理過程中不同階段,根據(jù)嚴酷度來計劃和分配子任務的優(yōu)先級,將評分等級高的任務放到項目前期重點實施,保證測試過程中嚴酷度高的故障模式優(yōu)先被測試。
采用SFMEA和SFTA綜合技術的軟件測試,相比傳統(tǒng)方式,既將可靠性方法應用于測試過程,使測試策略合理化、綜合化[15];又將風險管理方法納入測試,確定測試的優(yōu)先級、測試重點,有效選擇、有效地配置測試資源[16]。既提高軟件的安全性,又降低軟件風險,一舉兩得。
以某嵌入式信息處理系統(tǒng)中存儲部分為分析對象,在系統(tǒng)測試中使用上述方法進行軟件測試前期分析,以驗證軟件測試實施過程更加有針對性和統(tǒng)一性。
某嵌入式信息處理系統(tǒng)共有三大主要模塊:時鐘模塊、控制模塊和數(shù)據(jù)傳輸模塊。數(shù)據(jù)傳輸模塊又包括CAN通信、網(wǎng)絡通信和SD存儲。我們主要以SD卡存儲部分中的初始化功能和枚舉功能作為實踐對象進行上述方法驗證。整個信息處理系統(tǒng)框圖如圖4所示。
圖4 某嵌入式信號處理系統(tǒng)框圖
首先確定分析約定層為SD卡存儲,最低約定層為 F1、F2、F3、F4,主要以 F1、F2為例,F(xiàn)3、F4只給出一個寬泛的例子。從通用失效模式庫中選擇失效模式,建立SFMEA工作表如表2所示。
表2 SD卡存儲的SFMEA工作表(部分)
以“SD卡不可訪問故障”作為故障頂事件進行故障樹分析,采用分層分析法,如圖5所示。分析完成后,可根據(jù)最低層的基本事件再來完善SFMEA中的失效原因。
圖5 SD卡不可訪問故障樹
根據(jù)SFMEA中的失效分類和失效模式,確定測試的功能點,根據(jù)嚴酷度,確定實施測試時的優(yōu)先級,級別高的先執(zhí)行,級別低的后執(zhí)行。根據(jù)SFTA的基事件,確定測試的子功能點,以及測試細節(jié)關注點。整理的測試說明綱要如表3所示。
通過SFMEA和SFTA來編寫測試說明大綱,相比以往方式,更加的快捷高效,且更統(tǒng)一化,不易遺漏。因為SFMEA每一個失效分類均為一個大的測試功能點,而SFTA的每一個基本事件均為一個小測試點,再參照嚴酷度來安排測試的優(yōu)先級,整個測試實施過程既兼顧整體,又不遺漏小測試點,高風險測試先執(zhí)行,優(yōu)先排查關鍵問題。
表3 SD卡測試說明大綱
軟件測試實施過程前期要針對需求、設計文檔做大量的分析工作,一般是遵循文檔的思路來設計測試方案,爾后再根據(jù)測試方案來實施測試。SFMEA和SFTA技術應用,是站在整體角度,分別從下而上,再從上而下進行全面分析,跟蹤提煉系統(tǒng)中的每一個線索,能夠查找到每一個故障存在的原因,使測試更加的有針對性。另外能夠辨別出一些重要的測試點,先進行測試,排查主要問題。
SFMEA和SFTA已是成熟的技術,但在軟件測試實施過程中應用不是很普遍,主要因為SFMEA和SFTA分析過程比較繁瑣,需要花費一定的精力,所以一般不需要對系統(tǒng)中所有功能點都進行遍歷式的分析,而是選擇一些關鍵且受硬件控制小的模塊作為分析對象,相信在軟件測試實施中不斷進行探索,一定會使三者融合達到最佳效果。