高 虎,封二強,王 寧
(中國航空綜合技術(shù)研究所,北京100028)
航空發(fā)動機在航空技術(shù)的發(fā)展中起著關(guān)鍵性作用,其狀態(tài)和性能直接影響飛行任務(wù)的完成和飛行安全,被稱為飛機的“心臟”。隨著全權(quán)限數(shù)字電子控制(FADEC)技術(shù)在國內(nèi)外新型發(fā)動機中的應(yīng)用,航空發(fā)動機控制軟件(以下簡稱“發(fā)控軟件”)成為航空發(fā)動機系統(tǒng)最核心的控制決策單元[1]。近年來,由軟件造成的航空發(fā)動機安全事故呈大幅度上升趨勢,發(fā)控軟件的質(zhì)量與安全性問題成為航空發(fā)動機發(fā)展中亟待解決的問題之一。該問題的解決目前主要依賴于軟件測試活動。
軟件測試是目前確保軟件可靠性和質(zhì)量的最成熟而有效的方法[2]。航空無線電委員會(RTCA)規(guī)定軟件測試目的在于證明軟件滿足其需求,并且以高置信度證明由系統(tǒng)安全性過程確定的失效狀態(tài)得到消除[3]。而目前在中國航空軟件測試工程實踐中,更多關(guān)注軟件實現(xiàn)對需求的符合性驗證,而對軟件安全性的驗證尚未給予足夠重視,缺乏系統(tǒng)性的理論基礎(chǔ),很大程度上依賴于測試人員的實踐經(jīng)驗,成為航空發(fā)動機安全運行的重大隱患[4]。因此,基于安全性分析的發(fā)控軟件測試技術(shù)成為保證我國發(fā)控軟件有效運行進而保證飛機整體安全的重要途徑。
軟件安全性是指軟件運行時不引起系統(tǒng)危害的能力[5]。軟件安全性分析就是識別可能導(dǎo)致系統(tǒng)危險和軟件自身失效的軟件因素,從而形成軟件安全性需求的過程。在軟件安全性分析領(lǐng)域,采用基于模型的軟件安全性分析與驗證方法[6-7]可以獲得軟件安全性分析結(jié)果,該結(jié)果精確描述了軟件行為導(dǎo)致的系統(tǒng)危險和軟件失效情況。基于此類安全性分析結(jié)果,在軟件測試過程中通過動態(tài)運行軟件將導(dǎo)致安全性事件的軟件行為進行復(fù)現(xiàn),便可驗證軟件安全性需求的落實情況。
本文提出了基于需求模型與安全性分析的發(fā)控軟件安全性測試技術(shù)方法,以實現(xiàn)對基于發(fā)控軟件安全性分析的軟件安全性需求的有效驗證。
基于安全性的發(fā)控軟件測試技術(shù)以軟件需求模型和安全性分析技術(shù)為基礎(chǔ),以測試技術(shù)為驗證手段,3項技術(shù)共同構(gòu)成了支撐發(fā)控軟件安全性的基本方法。
建立軟件需求模型是保證軟件安全性分析客觀、無歧義的有效手段,也是軟件安全性分析流程化、自動化的基礎(chǔ)。軟件安全性分析結(jié)果與軟件需求模型的不斷迭代,最終形成滿足安全性要求的軟件需求。同時在基于需求的軟件測試中,軟件需求模型能夠為程序化的軟件測試用例設(shè)計提供依據(jù)。
軟件安全性分析立足于軟件全生命周期,以安全性為視角,分析軟件的安全不確定性因素——軟件是否存在導(dǎo)致系統(tǒng)危險和軟件自身失效的可能性,從而在軟件層面上識別危險與失效、補充危險與失效的控制策略,最終實現(xiàn)系統(tǒng)級安全性要求,提高系統(tǒng)級安全性水平。
動態(tài)測試作為最直接有效的手段,驗證軟件安全性分析產(chǎn)生的軟件安全性需求在軟件代碼中能否得到準確而充分的落實。軟件安全性測試即驗證軟件安全性需求的動態(tài)測試過程,基于軟件需求模型將軟件安全性分析的因果關(guān)系進行實例化,形成安全性測試用例,在動態(tài)測試過程中執(zhí)行安全性測試用例,提供軟件安全性驗證結(jié)論。
軟件需求建模、安全性分析與測試的關(guān)系如圖1所示。
發(fā)控軟件實時性強,輸入輸出接口多,功能邏輯復(fù)雜且耦合性強,大量存在閉環(huán)控制功能,軟件具有明顯的任務(wù)特性和狀態(tài)特性[8-9]。因此發(fā)控軟件的需求模型一方面需要清晰客觀地描述發(fā)動機地面起動、運行、加力、停車以及空中起動等主要控制流程的軟件控制及故障處理要求,另一方面還應(yīng)對安全性分析所需的各類復(fù)雜邏輯信息,如狀態(tài)遷移、功能時序約束、機構(gòu)控制策略等進行描述。建立發(fā)控軟件需求模型包括:

圖1 軟件需求建模、安全性分析與安全性測試的關(guān)系
(1)外部交聯(lián)關(guān)系模型,描述發(fā)動機控制系統(tǒng)外部交聯(lián)設(shè)備、總線、接口的連接關(guān)系,信號的閉環(huán)反饋關(guān)系,以及信號間的耦合關(guān)系;
(2)狀態(tài)遷移模型,描述發(fā)動機控制系統(tǒng)的任務(wù)狀態(tài),狀態(tài)之間的遷移條件;
(3)狀態(tài)流程模型,描述各狀態(tài)內(nèi)部控制流程,各狀態(tài)控制律算法和輸出組合邏輯,以及狀態(tài)內(nèi)部異常處理邏輯;
(4)公共功能模型,描述發(fā)動機控制系統(tǒng)各任務(wù)狀態(tài)公共功能邏輯和時序,如發(fā)動機消喘、防冰、應(yīng)急放油等。
針對發(fā)控軟件特點,軟件安全性分析基于需求模型對狀態(tài)、流程、輸入、輸出的描述,重點關(guān)注發(fā)動機控制狀態(tài)遷移、動態(tài)處理流程以及功能和接口的耦合關(guān)聯(lián)關(guān)系等方面引起的危險和失效,分析其原因和影響,并提出改進措施,形成軟件安全性需求。
初步危險分析(PHA)[10]、失效模式與影響分析(FMEA)[11]、故障樹分析(FTA)[12-13]等方法,能夠有效地為發(fā)控軟件安全性分析提供幫助。
上述軟件安全性分析方法的出發(fā)點都來自于系統(tǒng)危險或軟件失效,且均通過對原因和影響的分析最終產(chǎn)生系統(tǒng)危險或軟件失效的因果關(guān)系鏈。
軟件安全性分析的目標是在軟件層面上識別危險與失效并補充危險與失效的控制策略。如果發(fā)控軟件在進入安全性分析前已經(jīng)正確實現(xiàn)了軟件需求,則系統(tǒng)危險或軟件失效的因果關(guān)系鏈的最頂層原因均能夠反映在軟件的外部輸入中。因此,系統(tǒng)危險或軟件失效的發(fā)生均可通過軟件的外部輸入激發(fā)產(chǎn)生。而軟件動態(tài)測試過程也是以軟件外部輸入為激勵,因此基于軟件安全性分析結(jié)果設(shè)計測試用例,并在測試環(huán)境中執(zhí)行測試用例,成為一種驗證軟件安全性需求的有效手段。
軟件安全性測試的目的是通過設(shè)計和執(zhí)行測試用例,復(fù)現(xiàn)軟件安全性分析過程中產(chǎn)生系統(tǒng)危險或軟件失效的場景,查看系統(tǒng)危險和軟件失效是否均得到有效的控制和處理,從而驗證軟件安全性需求的落實情況。
軟件安全性測試的輸入是軟件安全性分析過程產(chǎn)生的包含系統(tǒng)危險或軟件失效的因果關(guān)系鏈,以及系統(tǒng)的外部交聯(lián)關(guān)系模型;軟件安全性測試的過程形成軟件安全性測試用例,并根據(jù)軟件安全性測試用例的執(zhí)行結(jié)果,最終輸出軟件安全性需求的驗證結(jié)論。
發(fā)控軟件具有時序邏輯強、輸入輸出接口關(guān)系復(fù)雜的特點[14],發(fā)控軟件安全性分析生成的危險或失效原因一般描述為特定時間點和特定輸入接口的異常行為。而在發(fā)控軟件測試過程中,一般需要執(zhí)行完整的發(fā)動機運行流程,不但需要與危險或失效原因相對應(yīng)的相關(guān)輸入激勵,還要對與危險或失效原因耦合的其他輸入激勵進行實時調(diào)整,以保證發(fā)控軟件運行所必須的數(shù)據(jù)需求。由此可見,發(fā)控軟件安全性測試用例描述的是一個在完整的發(fā)動機控制系統(tǒng)運行場景下注入了危險和失效原因的實時性運行過程。
另外,發(fā)控軟件安全性分析結(jié)果多數(shù)來源于對發(fā)動機危險及軟件失效等異常情況的考慮,這些異常情況一旦在實際發(fā)動機系統(tǒng)中產(chǎn)生而未得到有效控制,將造成嚴重的后果。所以發(fā)控軟件的安全性測試如果在實物或半實物環(huán)境下執(zhí)行,將面臨較大的危險和成本,因此必須采用仿真測試技術(shù),通過建立交聯(lián)環(huán)境的全數(shù)字模型,模擬發(fā)動機運行數(shù)據(jù)以及各類異常情況來完成。在仿真測試環(huán)境中,交聯(lián)設(shè)備的危險和失效等行為改變在很多情況下體現(xiàn)為仿真模型的參數(shù)變化[15],因此在安全性測試用例設(shè)計中,可將危險和失效原因落實在仿真模型參數(shù)中,通過仿真模型的運行間接實現(xiàn)包含失效和危險狀態(tài)的測試激勵。
(1)將軟件的外部輸入接口劃分為被控對象輸入和操作輸入。被控對象輸入主要包括發(fā)動機系統(tǒng)的傳感器采集輸入,如轉(zhuǎn)速、溫度、壓力等信號;操作輸入主要包括飛機其他系統(tǒng)或駕駛員對發(fā)動機系統(tǒng)的輸入,如油門桿、各類按鈕等。
(2)建立從軟件控制指令輸出到被控對象輸入的全數(shù)字仿真模型,并根據(jù)正常的發(fā)動機操作流程確立軟件所有操作輸入的時序變化關(guān)系,實現(xiàn)對發(fā)動機正常使用場景的模擬。
(3)將軟件安全性分析獲得的危險或失效原因定位于軟件的外部輸入,或間接定位于仿真模型的參數(shù)輸入,然后依據(jù)軟件外部交聯(lián)關(guān)系對系統(tǒng)輸入范圍及時序的約束將相關(guān)的系統(tǒng)輸入進行實例化。
(4)依據(jù)危險或失效原因的產(chǎn)生時機,將實例化的系統(tǒng)輸入注入到已確定的描述發(fā)動機正常使用場景的輸入序列中,形成安全性測試用例。
(5)軟件安全性分析獲得的危險或失效原因可通過優(yōu)化算法(如故障樹最小割集算法)進行組合,以降低測試成本。
(6)發(fā)控軟件安全性測試用例可根據(jù)格式化的軟件需求模型和安全性分析結(jié)果通過自動化的手段生成。
軟件安全性分析產(chǎn)生系統(tǒng)危險或軟件失效的因果關(guān)系鏈,其最底層的危險和失效原因均可描述為軟件輸入的數(shù)值或時序行為;利用數(shù)字化的軟件交聯(lián)環(huán)境模型,可將這些軟件輸入的數(shù)值或時序行為實例化為具體的軟件輸入;將由危險和失效原因產(chǎn)生的軟件輸入注入到軟件運行場景中,形成軟件安全性測試用例。
定義發(fā)控軟件輸入向量

式中:pe為被控對象輸入;pf為操作輸入。
定義發(fā)控軟件輸出向量

式中:qe為仿真模型的輸入;qf為發(fā)控軟件的其他輸出。
發(fā)控軟件的行為可用矩陣S描述

建立發(fā)動機系統(tǒng)仿真模型M,則仿真模型運行可描述為

其中仿真模型存在可變參數(shù)b,定義該參數(shù)隨發(fā)動機運行時間序列為b(t)

同時,建立發(fā)動機正常操作流程為pf(t),因此,發(fā)動機的運行過程可描述為

根據(jù)式(6)可通過計算機遞推方法計算發(fā)控軟件輸入p(t)T,實現(xiàn)發(fā)動機正常操作流程的動態(tài)仿真運行。
安全性分析結(jié)果中的危險或失效原因可分解為某個變量(或模型參數(shù))在某中時序下的行為,可采用結(jié)構(gòu)化的方式描述為:“A狀態(tài)B操作中,C變量(或參數(shù)),產(chǎn)生D數(shù)值改變或E時序改變”。
根據(jù)軟件需求模型對狀態(tài)和操作的描述,可通過危險或失效原因在正常操作序列pf(t)中查找獲得該危險或失效產(chǎn)生的基準時間t0,并可在pf(或b)向量中定位到發(fā)控軟件運行模型中的輸入(或模型參數(shù))pf_x(或 bx)。
根據(jù)危險或失效原因中對“E時序改變”既有方式的選擇,可通過查表的方法,并結(jié)合需求模型中對時序參數(shù)(時間分辨率、響應(yīng)時間等)的設(shè)置,確定危險或失效的實際激發(fā)時間t0+δ;同時根據(jù)危險或失效原因中對“D數(shù)值改變”既有方式的選擇,可通過查表的方法,結(jié)合pf(t0)(或b(t0))的正常輸入以及需求模型中對接口參數(shù)(上下限、精度等)的設(shè)置,確定產(chǎn)生危險的系統(tǒng)輸入pf_x(t0+δ)(或bx(t0+δ))。
最后,根據(jù)安全性分析結(jié)果將單點或組合的危險或失效原因?qū)嵗敵鼋Y(jié)果疊加于原模型參數(shù)和操作輸出序列中,未影響的輸入(或模型參數(shù))填充為“null”,即

根據(jù)式(8)形成新的發(fā)控軟件運行序列,作為該危險或失效原因所對應(yīng)的安全性測試用例。
某型號航空發(fā)動機控制系統(tǒng)由FADEC控制器、傳感器、液壓機械裝置和電氣系統(tǒng)組成。其中發(fā)控軟件是FADEC控制器的核心部分,該軟件接收來自飛機、發(fā)動機和機械液壓裝置的信號,經(jīng)過數(shù)字運算、邏輯判斷發(fā)出各種控制信號給相應(yīng)的執(zhí)行機構(gòu)以控制發(fā)動機狀態(tài),同時傳輸信號給飛機機載裝置顯示和記錄。
2014年9月至2016年8月,對該發(fā)控軟件開展了安全性分析和測試工作。其中安全性分析工作通過自研的“軟件安全性分析工具”開展,在依據(jù)系統(tǒng)和軟件需求建立外部交聯(lián)關(guān)系模型、狀態(tài)遷移模型、狀態(tài)流程模型和公共功能模型的基礎(chǔ)上,采用PHA和FMEA方法進行了軟件安全性分析,分析識別系統(tǒng)危險45項,分解危險原因69條,識別軟件失效138項,獲得失效原因155條。典型安全性分析結(jié)果見表1。

表1 典型安全性分析結(jié)果
其中,32條危險原因和101條失效原因均已采取相應(yīng)的控制措施,形成為軟件安全性需求,并在軟件的升級版中得到落實。對失效或危險原因進行優(yōu)化和合并后,設(shè)計軟件安全性測試用例117個(其中92個采用軟件安全性測試用生成算法自動生成),執(zhí)行了全部測試用例,軟件安全性需求得到有效驗證。
針對發(fā)控軟件的特點,要求安全性測試環(huán)境具備實時性、自動化、支持仿真模型運行的能力,因此在項目實施過程中,構(gòu)建軟件安全性測試環(huán)境如圖2所示。
該測試環(huán)境通過測試執(zhí)行計算機中的測試主控模塊實現(xiàn)測試用例的自動組織和執(zhí)行。測試用例和測試模型通過以太網(wǎng)加載到測試執(zhí)行計算機中,并通過測試執(zhí)行計算機集成的總線接口加載到被測設(shè)備中,測試執(zhí)行計算機采用VxWorks實時操作系統(tǒng),能夠以較高的時間精度實現(xiàn)仿真模型的運行和測試用例的執(zhí)行[16]。

圖2 某發(fā)動機控制軟件安全性測試環(huán)境
根據(jù)表1中描述的典型軟件安全性分析結(jié)果設(shè)計測試用例,在已落實安全性需求的軟件中執(zhí)行的結(jié)果見表2。

表2 典型安全性測試用例
通過對某型發(fā)動機控制軟件安全性分析和測試,使?jié)撛趯?dǎo)致系統(tǒng)危險和失效的軟件原因得到了有效的識別和控制。在安全性測試工作中,已形成安全性需求的危險或失效原因均通過測試用例進行覆蓋,危險和失效得到有效復(fù)現(xiàn),軟件安全性需求得到驗證。
本文提出了針對航空發(fā)動機控制軟件的安全性測試新方法,并給出了軟件安全性測試用例自動生成的算法和原理,開發(fā)形成了原型工具平臺,型號發(fā)控軟件的工程應(yīng)用表明該方法具有較高的實用性和可操作性,能夠為發(fā)控軟件的質(zhì)量提升和安全性保證提供支撐。后續(xù)工作中,可將軟件安全性分析與安全性測試結(jié)果相結(jié)合,采用軟件安全性分析的方法對安全性測試數(shù)據(jù)進行采集,作為迭代開展軟件安全性分析的輸入;此外,軟件安全性分析結(jié)果到軟件安全性測試用例的轉(zhuǎn)換算法是通過形式化描述實現(xiàn)的,因此需要對軟件安全性分析結(jié)果進行進一步優(yōu)化,使其能夠與測試用例生成模塊直接對接,從而避免人工進行形式化轉(zhuǎn)化工作,進而大大提高測試效率。
[1]姜彩虹.航空發(fā)動機雙余度控制規(guī)律設(shè)計方法 [J].航空動力學(xué)報,2011,26(10):2364-2370.JIANG Caihong.Method of dual-redundant control law design for aeroengine [J].Journal of Aerospace Power,2011,26(10):2364-2370.(in Chinese)
[2]Antona Bertoling.Software testing research:achievements,challenges,dreams [C]//Futureof SoftwareEngineering,Minneapolis,2007:85-103.
[3]RTCA/DO-178C.Software considerations in airborne systems and equipment certification[S].Washington.DC:Requirement s and Technical Concepts for Aviation(RTCA),2011:31.
[4]何鑫,鄭軍,劉暢.軟件安全性測試研究綜述[J].計算機測量與控制,2011,19(3):493-496.HE Xin,ZHENG Jun,LIU Chang.A survey on research of software safety test [J].Computer Measurement&Control,2011,19(3):493-496.(in Chinese).
[5]MIL-STD-882D,Standard Practice for System Safety Program Requirements[S].Department of Defense,Washington.DC:USA Military,1996:4.
[6]徐丙鳳,黃志球,胡軍,等.面向適航認證的模型驅(qū)動機載軟件構(gòu)件的安全性驗證[J].航空學(xué)報,2012,33(5):796-808.XU Bingfeng,HUANG Zhiqiu,HU Jun,et al.Model-driven safety dependence verification for component-based airborne software supporting airworthiness certification [J].Acta Aeronautica Et Astronautica Sinica,2012,33(5):796-808.(in Chinese)
[7]Hendzik Post,Carsten Sinz,Florian Merz,et al.Linking functional requirements and software verification[C]//17th IEEE International Requirements Engineering Conference,2009:295-302.
[8]李華聰,王鑫,韓小寶,等.航空發(fā)動機線性變參數(shù)建模方法研究[J].推進技術(shù),2007,28(4):418-421.LI Huacong,WANG Xin,HAN Xiaobao,et al.Study of aeroengine linear parameter varying modeling[J].Journal of Propulsion Technology,2007,28(4):418-421.(in Chinese).
[9]胡衛(wèi)紅,李述清,孫健國.控制問題中航空發(fā)動機飛行包線區(qū)域最優(yōu)劃分[J].推進技術(shù),2011,32(3):391-395.HU Weihong,LI Shuqing,SUN Jianguo.Flight-envelope optimization partition for aeroengines control[J].Journal of Propulsion Technology,2011,32(3):391-395.(in Chinese)
[10]NASA.NASA-GB-8719.13 Software safety guidebook[S].Washington.DC:National Aeronautics and Space Administration,2004:6.
[11]SAE.SAE ARP4761 Guidelines and methods for conducting the safety assessment process on civil airborne systems and equipment[S].Warrendale:The Engineering Society For Advancing Mobility Land Sea Air and Space,1996:6.
[12]宋曉秋.GJB/Z 102A-2012軍用軟件安全性設(shè)計指南 [S].北京:中國人民解放軍總裝備部,2012:13.SONG Xiaoqiu.GJB/Z 102A-2012 Guide for military software safety design[S].Beijing:General Armament Department of the People's Liberation Army,2012:13.(in Chinese)
[13]趙躍華,朱媛媛.基于故障樹分析的軟件安全性測試研究[J].計算機應(yīng)用研究,2013,30(6):1760-1763.ZHAO Yuehua,ZHU Yuanyuan.Research on software safety testing based on fault tree analysis[J].Application Research of Computers,2013,30(6):1760-1763.(in Chinese)
[14]蔣文亮,王少永,營笑,等.一種應(yīng)用于航空發(fā)動機全權(quán)限數(shù)字電子控制系統(tǒng)的解算器處理技術(shù)[J].推進技術(shù),2017,38(3):666-672.JIANG Wenliang,WANG Shaoyong,YING Xiao,et al.A resolver technology for full authority digital electronic control systems of aero-engine[J].Journal of Proplsion Technology,2017,38(3):666-672.(in Chinese)
[15]楊偉,馮雷星,彭靖波,等.求解航空發(fā)動機數(shù)學(xué)模型的混合智能方法[J].推進技術(shù),2008,29(5):614-616.YANG Wei,FENG Leixing,PENG Jingbo,et al.An intelligent algorithm for solution of nonlinear mathematical model for aeroengine[J].Journal of Propulsion Technology,2008,29(5):614-616.(in Chinese)
[16]劉暢,劉斌,阮鐮.航空電子軟件仿真測試環(huán)境軟件體系結(jié)構(gòu)研究[J].航空學(xué)報,2006,27(5):877-882.LIU Chang,LIU Bin,RUAN Lian.Software architecture of simulation testing environment for software in avionics [J].Acta Aeronautica Et Astronautica Sinica,2006,27(5):877-882.(in Chinese)