張 峰,李亞偉
1(91404部隊(duì),秦皇島 066001)
2(北京賽迪軟件測(cè)評(píng)工程技術(shù)中心有限公司,北京 100048)
隨著軟件在高可靠性領(lǐng)域產(chǎn)品中的比重逐步提升,因軟件缺陷導(dǎo)致的安全事故也層出不窮,例如1999年美國(guó)NASA制造的火星氣候軌道探測(cè)器因?yàn)閱挝皇褂缅e(cuò)誤缺陷導(dǎo)致探測(cè)器墜毀,2011年7·23中國(guó)高鐵甬溫線因信號(hào)設(shè)備設(shè)計(jì)缺陷引發(fā)追尾重大事故,2016年日本 X 射線天文衛(wèi)星因底層軟件飛行姿態(tài)失控狀態(tài)調(diào)整缺陷導(dǎo)致衛(wèi)星徹底失控等等.為防止因?yàn)檐浖毕輰?dǎo)致重大安全事故發(fā)生,人們做了大量的安全防護(hù)工作,包括研制階段安全性需求分析設(shè)計(jì)論證工作以及研制測(cè)試階段的安全性測(cè)試工作,很多問(wèn)題事后證明是軟件設(shè)計(jì)缺陷,但在測(cè)試階段仍存在被發(fā)現(xiàn)的可能.
目前在各類型軟件尤其航空航天、工業(yè)控制等高可靠性軟件研制過(guò)程中,軟件安全性測(cè)試工作越來(lái)越受重視,相關(guān)技術(shù)標(biāo)準(zhǔn)體系已經(jīng)非常成熟,安全性測(cè)試工作過(guò)程也受到了全過(guò)程監(jiān)督審查,可因?yàn)檐浖O(shè)計(jì)缺陷且測(cè)試不夠充分而引發(fā)的安全事故頻發(fā),損失慘重.
因此,一方面當(dāng)前社會(huì)要求加強(qiáng)軟件安全性需求分析和設(shè)計(jì)工作,另一方面也對(duì)軟件安全性測(cè)試工作提出了更高要求.本文旨在介紹一種新的安全性測(cè)試分析思路和方法,以提高軟件安全性測(cè)試質(zhì)量.
安全性測(cè)試是檢驗(yàn)軟件中已存在的安全性、安全保密性措施是否有效的測(cè)試,其一般包括內(nèi)容見(jiàn)表1[1].
表1 常規(guī)安全性測(cè)試內(nèi)容
安全性測(cè)試目的是驗(yàn)證軟件規(guī)定的安全性需求是否都實(shí)現(xiàn),安全保護(hù)措施是否有效,是否具備因某部件或者功能失效而不引起系統(tǒng)發(fā)生事故的能力.常規(guī)安全性測(cè)試方法在一定程度上可以對(duì)軟件安全性進(jìn)行檢測(cè),但是也存在部分不足之處,主要體現(xiàn)在以下幾個(gè)方面:
(1)一定程度上對(duì)軟件安全性需求和設(shè)計(jì)的質(zhì)量有很大依賴性;
(2)測(cè)試的覆蓋程度不能保證,測(cè)試的樣本有限,從而不能保證測(cè)試的深度和廣度;
(3)對(duì)測(cè)試人員個(gè)人經(jīng)驗(yàn)和能力要求很高,測(cè)試質(zhì)量不能保障;
(4)對(duì)測(cè)試工具質(zhì)量要求比較高,工具在一定程度上無(wú)法保證對(duì)運(yùn)行平臺(tái)和業(yè)務(wù)邏輯的通用性,因此不能保證測(cè)試充分性.
針對(duì)以上問(wèn)題可以看出,當(dāng)前的安全性測(cè)試工作已經(jīng)不能滿足安全性我們需要更完善的方法體系來(lái)保證安全性測(cè)試的充分性,以保障軟件安全可靠性.
軟件安全性測(cè)試僅是驗(yàn)證軟件安全性需求和設(shè)計(jì)措施有效的過(guò)程和手段,軟件的安全可靠性需要由軟件安全性設(shè)計(jì)來(lái)保障,安全可靠性需求的質(zhì)量一定程度上決定了軟件安全性測(cè)試的質(zhì)量.然而實(shí)際現(xiàn)狀是在很多高安全可靠性領(lǐng)域軟件工程化生產(chǎn)管理方面,對(duì)軟件安全性分析重視程度較低,普遍在需求和分析階段沒(méi)有進(jìn)行更深入安全性分析,因而在測(cè)試階段也就無(wú)法有更充分的依據(jù)來(lái)進(jìn)行安全性測(cè)試用例設(shè)計(jì).因此在當(dāng)前階段對(duì)軟件安全性測(cè)試提出了更高要求,在安全性需求無(wú)法保障情況下,有必要在測(cè)試階段,基于被測(cè)軟件的需求和設(shè)計(jì)進(jìn)行安全性分析工作并進(jìn)行安全性測(cè)試用例設(shè)計(jì),以提高軟件安全性測(cè)試質(zhì)量.
在軟件安全性測(cè)試過(guò)程中,引入SFMEA(軟件潛在失效模式及后果分析)技術(shù)進(jìn)行安全性測(cè)試需求分析,可以提高軟件安全性測(cè)試充分性.
FMEA全稱“Failure Mode and Effects Analysis”,即“潛在失效模式及后果分析”,FMEA方法主要應(yīng)用于一般工業(yè)產(chǎn)品過(guò)程設(shè)計(jì)階段,對(duì)產(chǎn)品構(gòu)成的部件或零件在過(guò)程階段的各個(gè)工序逐一進(jìn)行分析,找出所有可能的失效模式,并分析因?yàn)槭?lái)的后果,從而采取必要的預(yù)防措施,以保證產(chǎn)品的質(zhì)量和可靠性.SFMEA(軟件潛在失效模式及后果分析)安全性分析技術(shù)是FMEA的擴(kuò)展,用于軟件安全可靠性分析與設(shè)計(jì)的一種自底向上的分析方法,以失效模式為基礎(chǔ),以軟件失效對(duì)系統(tǒng)或者軟件的影響或后果為核心,分析系統(tǒng)或者軟件設(shè)計(jì)架構(gòu)層次,進(jìn)行因果關(guān)系推理和歸納總結(jié),以識(shí)別軟件設(shè)計(jì)的薄弱環(huán)節(jié),提出改進(jìn)措施和建議,以保障軟件產(chǎn)品的質(zhì)量[2-4].
目前SFMEA安全性分析方法廣泛應(yīng)用于高可靠性領(lǐng)域的軟件研發(fā)設(shè)計(jì)階段,也有學(xué)者提出在可靠性測(cè)試領(lǐng)域以SFMEA故障模型推動(dòng)軟件測(cè)試用例設(shè)計(jì).
SFMEA分析方法與一般產(chǎn)品設(shè)計(jì)FMEA基本相同,如圖1所示.
(1)首先確定系統(tǒng)分析對(duì)象級(jí)別和分范圍.通常根據(jù)軟件需求規(guī)格等相關(guān)文檔,分解系統(tǒng)或者軟件需求,確定分析級(jí)別和對(duì)象.
(2)確定分析對(duì)象的失效模式及其原因.針對(duì)分解后的分析對(duì)象,分析其所有可能的失效模式.軟件失效模式包括功能失效模式和性能失效模式,一般功能失效模式為主,找出關(guān)鍵軟件缺陷,形成軟件關(guān)鍵功能失效模式集合,并針對(duì)每一種失效模式分析其可能的失效原因.
(3)分析失效影響及其嚴(yán)重性.根據(jù)軟件失效可能帶來(lái)的風(fēng)險(xiǎn)進(jìn)行分析,并根據(jù)風(fēng)險(xiǎn)嚴(yán)重程度確定失效嚴(yán)重等級(jí).嚴(yán)重程度一般分為嚴(yán)重、一般和建議三個(gè)級(jí)別.
(4)提出預(yù)防措施建議.對(duì)每一個(gè)失效模式產(chǎn)生的影響和失效原因,提出相應(yīng)預(yù)防措施及修改建議,形成完整的SFMEA表[2-4],見(jiàn)圖1.
圖1 SFMEA分析流程
如對(duì)某制冷設(shè)備進(jìn)行SFMEA安全性分析結(jié)果如表2.
表2 SFMEA安全性分析結(jié)果表
依據(jù)軟件測(cè)試的常規(guī)測(cè)試流程,基于SFMEA安全性分析方法進(jìn)行軟件安全性測(cè)試工作流程如圖2所示.
(1)安全性測(cè)試需求分析.在軟件測(cè)試需求分析和策劃階段,依據(jù)SFMEA安全性分析方法,按照?qǐng)D1安全性分析流程進(jìn)行安全性測(cè)試需求分析,對(duì)被測(cè)系統(tǒng)和軟件安全關(guān)鍵業(yè)務(wù)和模塊生成FMEA失效模式表,明確安全性測(cè)試內(nèi)容;
(2)安全性測(cè)試用例設(shè)計(jì).基于安全性分析FMEA失效模式表進(jìn)行測(cè)試用例設(shè)計(jì);
(3)安全性測(cè)試執(zhí)行.依據(jù)安全性測(cè)試用例執(zhí)行測(cè)試,在測(cè)試過(guò)程中根據(jù)需要調(diào)整或者補(bǔ)充FMEA表及測(cè)試用例,對(duì)測(cè)試發(fā)現(xiàn)的安全性問(wèn)題分析原因并提出改進(jìn)建議,并進(jìn)行回歸測(cè)試;
(4)安全性測(cè)試總結(jié).在測(cè)試執(zhí)行完畢后對(duì)測(cè)試過(guò)程和測(cè)試結(jié)果進(jìn)行總結(jié),對(duì)安全性問(wèn)題進(jìn)行分析,對(duì)軟件安全性進(jìn)行評(píng)估[5].
圖2 基于SFMEA安全性分析技術(shù)進(jìn)行安全性測(cè)試步驟
測(cè)試重點(diǎn)關(guān)注內(nèi)容如表3.
表3 基于SFMEA分析方法的安全性測(cè)試重點(diǎn)關(guān)注內(nèi)容
據(jù)媒體報(bào)道: 2018年1月1號(hào)剛開通三天的北京有軌電車西郊線發(fā)生重大事故.事故原因是車輛發(fā)生故障后未按規(guī)定摘擋,動(dòng)力手柄未按規(guī)定回位,仍位于前進(jìn)動(dòng)力位置,導(dǎo)致故障恢復(fù)后,車輛突然竄出并脫軌.之后調(diào)了大型起重機(jī)到達(dá)現(xiàn)場(chǎng)把列車吊回了軌道.列車成功被吊回軌道.結(jié)果還是沒(méi)有人想到要摘擋,列車在車內(nèi)無(wú)司機(jī),手柄位于前進(jìn)動(dòng)力的情況下,直接從香山加速下山放飏,溜車6公里后,由于電流過(guò)大啟動(dòng)過(guò)熱保護(hù),車輛在隧道內(nèi)自動(dòng)停車.本文以此事故為例進(jìn)行安全性測(cè)試分析工作,分析基于SFMEA安全性分析方法進(jìn)行安全性測(cè)試可以檢測(cè)并發(fā)現(xiàn)哪些安全問(wèn)題,是否可以避免事故的發(fā)生.
根據(jù)案例分析,假設(shè)車輛控制系統(tǒng)在車輛動(dòng)力控制方面有如下需求(不考慮剎車控制):
(1)輸入:
1)動(dòng)力手柄信號(hào): 無(wú)動(dòng)力(00),前進(jìn)動(dòng)力(01),后退動(dòng)力(10),故障(11).
2)車輛運(yùn)行狀態(tài): 停止(00)、前進(jìn)(01)、后退(10)故障停車(11).
(2)輸出: “動(dòng)力控制電流”: 無(wú)輸出(0),有輸出(100).
(3)軟件處理需求:
1)“狀態(tài)字”=前進(jìn)狀態(tài)(01)或后退狀態(tài)(10),且“動(dòng)力手柄信號(hào)”=01時(shí),輸出“動(dòng)力控制電流”=100;車輛開始前進(jìn).
2)“狀態(tài)字”=前進(jìn)狀態(tài)(01)或后退狀態(tài)(10),且“動(dòng)力手柄信號(hào)”=10時(shí),輸出“動(dòng)力控制電流”=100;車輛開始后退.
3)“狀態(tài)字”=前進(jìn)狀態(tài)(01)或后退狀態(tài)(10),且“動(dòng)力手柄信號(hào)”=11時(shí),輸出“動(dòng)力控制電流”=0;車輛故障停車.
4)“狀態(tài)字”=故障停車(10)時(shí),輸出“動(dòng)力控制電流”=0;即車輛保持停止.
5)“狀態(tài)字”=停止?fàn)顟B(tài)(00),輸出“動(dòng)力控制電流”=0;即車輛保持停止.
根據(jù)以上需求,對(duì)軟件運(yùn)行狀態(tài)進(jìn)行分析,軟件運(yùn)行狀態(tài)轉(zhuǎn)換圖如圖3所示.
圖3 車輛運(yùn)行狀態(tài)轉(zhuǎn)換圖
根據(jù)車輛動(dòng)力控制部分需求和以上運(yùn)行狀態(tài)圖,按照SFMEA安全分析方法,對(duì)其在狀態(tài)轉(zhuǎn)換期間的可能存在的失效模式進(jìn)行分析,如表4所示.
以上僅分析在車輛動(dòng)力控制部分可能失效情況,讀者可以依據(jù)此方法進(jìn)行更深入分析.在實(shí)際情況中,根據(jù)系統(tǒng)復(fù)雜程度,可能存在的失效情況比該實(shí)例多很多.
根據(jù)表3安全性分析表,針對(duì)以上安全性分析設(shè)計(jì)相應(yīng)測(cè)試用例.以表4中第6、7種失效模式為例設(shè)計(jì)測(cè)試用例,設(shè)計(jì)安全性測(cè)試用例如表5.
同理,根據(jù)表3安全性分析結(jié)果可以設(shè)計(jì)其它8種失效模式的安全性測(cè)試用例,分別進(jìn)行相關(guān)安全性測(cè)試.
表4 車輛狀態(tài)控制失效模式分析表
表5 測(cè)試用例
執(zhí)行表5中2個(gè)測(cè)試用例結(jié)果可檢測(cè)并發(fā)現(xiàn)系統(tǒng)的一個(gè)重要安全問(wèn)題: 軟件上電初始化模塊設(shè)計(jì)存在重大缺陷,在車輛初始化時(shí),未檢測(cè)動(dòng)力手柄是否處于無(wú)動(dòng)力(=00)狀態(tài),當(dāng)動(dòng)力手柄處于前進(jìn)動(dòng)力(01)或者后退動(dòng)力(10)狀態(tài)時(shí)未提出告警并限制車輛啟動(dòng),存在車輛失控運(yùn)動(dòng)風(fēng)險(xiǎn).
同理設(shè)計(jì)并執(zhí)行其它8類失效模式安全性測(cè)試用例,也以檢測(cè)軟件是否存在其它的安全風(fēng)險(xiǎn),包括多種嚴(yán)重級(jí)別的安全隱患問(wèn)題.這其中部分問(wèn)題我們可以通過(guò)常規(guī)安全性測(cè)試方法進(jìn)行驗(yàn)證,但是不能保證常規(guī)安全性測(cè)試方法進(jìn)行的安全性測(cè)試用例能夠覆蓋表4中的各種失效風(fēng)險(xiǎn)問(wèn)題,這就是基于SFMEA技術(shù)進(jìn)行安全性測(cè)試分析與常規(guī)安全性測(cè)試的差異.
SFMEA與軟件產(chǎn)品正向設(shè)計(jì)流程不同,它是一個(gè)典型的思維發(fā)散過(guò)程,其核心是盡可能完整和正確地分析總結(jié)軟件的失效模式.其關(guān)注重點(diǎn)不在于產(chǎn)品“能干什么”,而是產(chǎn)品“可能怎么壞掉”.軟件安全性測(cè)試核心也是檢驗(yàn)軟件整體或者部分在“壞掉”情況下是否進(jìn)行了預(yù)期判定和有效處理.
本文僅是以此為例介紹一種在軟件安全性測(cè)試過(guò)程中進(jìn)行安全性測(cè)試需求分析的方法.在軟件設(shè)計(jì)開發(fā)已經(jīng)完成且不具備明顯的安全性需求情況下,與常規(guī)安全性測(cè)試采用的非法輸入操作、猜錯(cuò)法等方式不同,該方法采取的是一種逆向思維方法,以系統(tǒng)方法逆向分析系統(tǒng)各種失效的可能性及帶來(lái)的風(fēng)險(xiǎn)影響,從而推進(jìn)安全測(cè)試用例設(shè)計(jì),更大程度上保證了安全性測(cè)試充分性.
但SFMEA安全性分析方法在一定程度上存在工作量大、成本高、復(fù)雜程度高等特點(diǎn),所有在實(shí)際應(yīng)用中,應(yīng)根據(jù)項(xiàng)目進(jìn)度、規(guī)模等選擇性進(jìn)行,針對(duì)系統(tǒng)中安全關(guān)鍵業(yè)務(wù)及模塊進(jìn)行安全性分析和測(cè)試.同時(shí)也需要根據(jù)被測(cè)軟件特點(diǎn),結(jié)合其他安全性測(cè)試方法,綜合其優(yōu)缺點(diǎn)進(jìn)行測(cè)試方法選擇,以更好地保證被測(cè)軟件安全性測(cè)試工作的質(zhì)量、進(jìn)度以及成本等合理進(jìn)行.