王煥宇
摘 要:該文實現(xiàn)了機(jī)組告警系統(tǒng)邏輯設(shè)計結(jié)果到試驗用例、試驗?zāi)_本與試驗結(jié)果自動測試工具的開發(fā),能夠自動化生成測試用例、腳本與結(jié)果,節(jié)省了大量試驗用例與試驗?zāi)_本開發(fā)時間,保障了對設(shè)計邏輯的準(zhǔn)確讀取分析,避免了人為出錯,實現(xiàn)了試驗結(jié)果的自動記錄與保存?;诖藴y試腳本自動化生成工具,也可以應(yīng)用于發(fā)動機(jī)指示頁面、主飛行顯示器指示、簡圖頁、機(jī)載記錄系統(tǒng)、機(jī)載維護(hù)系統(tǒng)等邏輯復(fù)雜、參數(shù)較多、需大量開發(fā)測試腳本的試驗應(yīng)用當(dāng)中,具有很強(qiáng)的擴(kuò)展性。該文成果應(yīng)用于某型機(jī)組告警系統(tǒng)邏輯試驗室驗證中,取得了良好效果。
關(guān)鍵詞:腳本 自動測試 后綴表達(dá)式 機(jī)組告警系統(tǒng) Python
中圖分類號:TP206 文獻(xiàn)標(biāo)識碼:A 文章編號:1674-098X(2016)02(c)-0007-05
Research on Auto Test About CAS System of Civil Aircraft
Wang Huanyu
(State Key Laboratory of Civil Aircraft Flight Simulator, Shanghai Aircraft Design and Research Institute, Shanghai, 201210, China)
Abstract:With results accurate, it is achieved that test case, test script and test report are generated automatically from CAS (Crew Alert System) design, which is time saving.It can be applied to other tests also, i.e. The Engine Indication test, Primary Flight Display test, Synoptic Page test, Flight Record System test and Onboard Maintenance System test, which are characterized with a great quantity of parameters, complicated logic and numerous test python scripts to be developed. Dedicated to a CAS test for a certain system, this tool works well as expected.
Key Words:Script; Auto Test; Suffix Expression; Crew Alert System; Python
民用飛機(jī)機(jī)組告警系統(tǒng)與IMA、顯示系統(tǒng)、燈光告警系統(tǒng)、音響告警系統(tǒng)集成程度日漸提高,飛機(jī)各系統(tǒng)通過不同級別的機(jī)組告警信息提示飛行員,告知相應(yīng)的系統(tǒng)狀態(tài),以便飛行員采取相應(yīng)的處理程序。這給系統(tǒng)設(shè)計與取證帶來了難度,也給系統(tǒng)地面集成驗證試驗帶來了挑戰(zhàn)。該文通過研究某型民用飛機(jī)機(jī)組告警系統(tǒng)架構(gòu)與試驗平臺功能,開發(fā)了一套自動化測試腳本生成工具與交互界面,讓大規(guī)模批量、全邏輯覆蓋的試驗成為可能,大幅提高了試驗效率,在系統(tǒng)級需求驗證試驗中取得了很好的效果。
1 民用飛機(jī)機(jī)組告警系統(tǒng)架構(gòu)
某型民用飛機(jī)機(jī)組告警系統(tǒng)由駐留在IMA中的應(yīng)用軟件、主警告燈、主警戒燈、音響告警抑制開關(guān)及下視顯示器等組成,通過顯示文本、離散通告、語音警告、燈警告或以上組合給飛行員提供警告、警戒、提示及狀態(tài)等機(jī)組告警功能。駐留在IMA中的機(jī)組告警系統(tǒng)應(yīng)用軟件接收來自飛機(jī)各系統(tǒng)的狀態(tài)輸入,按優(yōu)先級順序通過下視顯示,并能通過控制板進(jìn)行翻頁等選擇。當(dāng)需要時,提供音響告警和駕駛艙燈驅(qū)動提供觸發(fā)信號,為飛行員提供音響和燈警告。機(jī)組告警優(yōu)先級排序級別定義如表1所示[1]。
為了避免在一定階段出現(xiàn)不必要的警告,給機(jī)組帶來操作負(fù)擔(dān)和干擾,機(jī)組告警系統(tǒng)會對一些特定的告警在特定的時間、構(gòu)型和飛行階段進(jìn)行抑制。系統(tǒng)架構(gòu)如圖1所示。
2 民用飛機(jī)航電系統(tǒng)集成試驗平臺架構(gòu)
某型飛機(jī)航電系統(tǒng)集成驗證平臺(System Integration
and Verification Bench,SIVB)是一套用于航電核心處理系統(tǒng)、顯示系統(tǒng)、機(jī)載記錄系統(tǒng)、機(jī)載維護(hù)等系統(tǒng)集成驗證大型試驗設(shè)施,具有系統(tǒng)仿真、數(shù)據(jù)切換、數(shù)據(jù)采集與處理等功能。系統(tǒng)集成驗證平臺集成了機(jī)載系統(tǒng)接口控制文件(Interface Control Document,ICD)的數(shù)據(jù)信息,通過仿真數(shù)據(jù)網(wǎng)絡(luò)(Common Simulation Interface,CSI)與配套A664、A429、A825、離散、模擬等航空總線接口I/O板卡,可以將系統(tǒng)仿真數(shù)據(jù)通過真實機(jī)載數(shù)據(jù)接口與機(jī)載系統(tǒng)進(jìn)行通信與交互,從而實現(xiàn)系統(tǒng)仿真的功能。通過數(shù)據(jù)采集系統(tǒng)(Analyzer)實現(xiàn)將真實機(jī)載網(wǎng)絡(luò)數(shù)據(jù)采集并發(fā)送到仿真數(shù)據(jù)網(wǎng)絡(luò)中,供系統(tǒng)集成驗證平臺讀取,并能夠按ICD數(shù)據(jù)格式進(jìn)行解析、顯示和處理。整個系統(tǒng)架構(gòu)如圖2所示。
3 機(jī)組告警系統(tǒng)邏輯自動化測試方案
如圖3中所示,使用航電系統(tǒng)集成驗證平臺有3種基本方式能夠輸出系統(tǒng)仿真器數(shù)據(jù),如系統(tǒng)A仿真器可以通過以下方式輸出真實物理接口的數(shù)據(jù)參數(shù)。
(1)在數(shù)據(jù)采集軟件Data Browser上直接改寫相應(yīng)的參數(shù)值。Data Browser可以將采到的數(shù)據(jù)按照ICD的格式進(jìn)行顯示,即Data Display功能。也能通過在相應(yīng)的ICD參數(shù)上賦值的方式進(jìn)行數(shù)據(jù)設(shè)置,即Data Set功能。該方法使用簡單,能夠直接操作對應(yīng)參數(shù),但不適用于大規(guī)模的、需要反復(fù)進(jìn)行數(shù)據(jù)設(shè)置的情況。
(2)在腳本執(zhí)行器Script上輸入一條命令行,如執(zhí)行A664.
Message1.DS1.Parameter1.Vaule=100,則參數(shù)Parameter1會設(shè)置成100,并通過系統(tǒng)A仿真器的真實A664接口板卡進(jìn)行數(shù)據(jù)發(fā)送。該方法使用也較簡單,當(dāng)?shù)膊贿m用于大規(guī)模的、需要反復(fù)進(jìn)行數(shù)據(jù)設(shè)置的情況。
(3)將需要執(zhí)行的命令通過Python腳本,同樣由Script進(jìn)行執(zhí)行,則可實現(xiàn)大規(guī)模的或需要反復(fù)進(jìn)行數(shù)據(jù)設(shè)置,但若人工編寫測試用例較多的試驗?zāi)_本時重復(fù)勞動多,工作量巨大,有出錯的可能。
該文針對第三種實現(xiàn)機(jī)制,設(shè)計了從機(jī)組告警系統(tǒng)設(shè)計需求邏輯自動導(dǎo)入解析,自動生成測試腳本(如圖4),自動生成測試結(jié)果的工具及流程,實現(xiàn)了測試的自動化。
該文使用的軟件如下[2]。
(1)Microsoft Office,Excel,2003。用于記錄機(jī)組告警系統(tǒng)的邏輯,及每條邏輯對應(yīng)的ICD信息。
(2)PyQt,PyQt4-4.11.4-gpl-Py2.7-Qt4.8.7-x64。用于設(shè)計GUI用戶界面。
(3)Python,python-2.7.11rc1.amd64。用于開發(fā)及運行腳本。
(4)Pywin32,pywin32-219.win-amd64-py2.7。用于使用Python開發(fā)win32應(yīng)用。
(5)XLRD,xlrd-0.9.4.tar。用于讀取Excel的python模塊。
(6)Pyinstaller,pyinstaller-2.0。用于將.py文件轉(zhuǎn)化為.exe文件。
測試腳本生產(chǎn)流程與關(guān)鍵點如下。
(1)讀取表格中的邏輯表達(dá)式。如圖5所示,設(shè)計用戶界面,選取相應(yīng)的Excel邏輯文件,并對邏輯進(jìn)行去空格等預(yù)處理,判斷該系統(tǒng)有幾種等級的機(jī)組告警信息,并激活相應(yīng)的確認(rèn)框(Check Box),以便試驗人員可以勾選。以邏輯TD(3,A==1||B==1||Inval(C)&&Inval(D))為例,取得該邏輯后逐一分析。
(2)判斷是否為邏輯符號。根據(jù)機(jī)組告警系統(tǒng)邏輯編寫規(guī)范,參與邏輯運算的表達(dá)式按優(yōu)先級從高到低見表2(優(yōu)先級數(shù)值越低,優(yōu)先級越高)。邏輯優(yōu)先級的確定是為了下一步邏輯的解析與運算。如TD(3, || ||&&) ‘。
(3)判斷是否為參數(shù)表達(dá)式。邏輯表達(dá)式中非邏輯符號的都是參數(shù)表達(dá)式,如A==1,B==1,Inval(C)和Inval(D)。
(4)將邏輯表達(dá)式轉(zhuǎn)化為后綴表達(dá)式。后綴表達(dá)式(也叫逆波蘭表達(dá)式)是計算機(jī)可識別的順序操作表達(dá)方式,轉(zhuǎn)化后沒有括號參與,利于計算邏輯。按照以下步驟進(jìn)行轉(zhuǎn)化:
①初始化邏輯棧Stack_Logic與存放中間結(jié)果的棧Stack_Temp。
②從左至由掃描讀取邏輯表達(dá)式,如果是參數(shù)表達(dá),將其壓至Stack_Logic。
③從左至由掃描讀取邏輯表達(dá)式,如果是邏輯表達(dá):
第一,如果Stack_Temp為空,或棧頂為(‘,將其壓至Stack_Temp;
第二,如果Stack_Temp棧頂優(yōu)先級較高,也將其壓至 Stack_Temp;
第三,如果Stack_Temp棧頂優(yōu)先級較低,將Stack_Temp棧頂邏輯彈出,將其壓至Stack_Logic,轉(zhuǎn)到步驟c-1。
④遇到括號時:
第一,如果是(‘,將其壓至Stack_ Temp;
第二,如果是),將Stack_Temp棧頂邏輯彈出,將其壓至Stack_Logic,直到遇到(‘,并將這一對括號丟棄。
⑤重復(fù)步驟②到步驟④,直到邏輯表達(dá)式的最右邊,將Stack_Temp棧剩余邏輯依次彈出,將其依次壓至棧Stack_Logic。完成后棧Stack_Logic從棧底到棧頂即為邏輯的后綴表達(dá)式。
如表3所示,為TD(3,A==1||B==1||Inval(C)&&Inval(D))的轉(zhuǎn)化過程,最后轉(zhuǎn)化為 A==1,B==1,||, Inval(C), Inval(D),&&,||,TD3,以字符,相隔的后綴表達(dá)式。
(5)將參數(shù)表達(dá)式分解為參數(shù)與參數(shù)操作,確定操作的類型與數(shù)值。如將A==1,B==1,Inval(C)和Inval
(D)分解為參數(shù)A,B,C'和'D,并確定以上4個參數(shù)的操作類型為賦值,賦值,賦有效性和賦有效性,最后確定每個參數(shù)的操作數(shù)值為1,1,無效和無效。
(6)將分解到的參數(shù)進(jìn)行關(guān)聯(lián)到機(jī)載系統(tǒng)ICD。通過查表的方式,如將參數(shù)A聯(lián)查到對應(yīng)的ICD,一般需要確定如下幾項。
①A429的SDI,SSM與參數(shù)定義;
②A664的VL,F(xiàn)SB與參數(shù)定義;
③A825的FS與參數(shù)定義;
④離散量與模擬量的參數(shù)定義。
(7)將分解到的參數(shù)操作進(jìn)行定義,確定邏輯1與邏輯0的操作步驟。
①賦值,確定邏輯1或邏輯0時是否為賦參數(shù)值為1或0、是大于或小于某個數(shù);
②賦有效性,邏輯1或邏輯0時是否為有效或無效。
(8)將步驟6與步驟7確定的參數(shù)與操作分別設(shè)置,將參數(shù)表達(dá)式對應(yīng)的邏輯值帶入后綴表達(dá)式,進(jìn)行結(jié)果輸出。如對'A==0,'B==0,Inval(C)和Inval(D),對應(yīng)的邏輯值0,0,1和1,分別帶入后綴表達(dá)式中,按以下進(jìn)行計算。
①讀取邏輯棧Stack_Logic,初始化存放中間結(jié)果的棧Stack_Temp;
②從棧Stack_Logic彈出元素,如果是參數(shù)表達(dá)式,查參數(shù)表達(dá)式對應(yīng)的邏輯值為1還是0,將邏輯值壓至 Stack_Temp;
③從棧Stack_Logic彈出元素,如果是邏輯符號,對 Stack_ Temp中的元素進(jìn)行運算后,結(jié)果壓至Stack_Logic。
以A==0,B==0,Inval(C)和Inval(D)分別對應(yīng)邏輯值0,0,1和1為例,見表4,說明后綴表達(dá)式的邏輯計算過程。
(9)遍歷參數(shù)表達(dá)式的各種可能,可以得到不同的測試用例。將不同的測試用例輸出成航電系統(tǒng)集成驗證平臺定義的Python腳本格式,則可以得到大規(guī)模、全邏輯的測試腳本。在測試腳本中,編寫語句,彈出測試用例之間的對話框,供試驗人員判斷并進(jìn)行選擇試驗結(jié)果,對某條機(jī)組告警信息進(jìn)行確認(rèn)是顯示還是不顯示,將結(jié)果打印成CSV格式的測試結(jié)果中。
在某系統(tǒng)機(jī)組告警邏輯試驗中,應(yīng)用本文實現(xiàn)的成果自動生成測試腳本,針對61條機(jī)組告警信息,總計生成3332個測試用例,54077行測試代碼,快速完成了試驗用例與腳本的開發(fā)工作。如圖3所示,通過腳本執(zhí)行器執(zhí)行生成的腳本,腳本命令由通用仿真接口網(wǎng)絡(luò)下載至對應(yīng)系統(tǒng)仿真器上,進(jìn)而輸出了系統(tǒng)真是物理接口信號,模擬了各系統(tǒng)的狀態(tài)與數(shù)據(jù),通過查看系統(tǒng)系統(tǒng)的輸出響應(yīng),并記錄試驗結(jié)果,從而快速完成了各項告警系統(tǒng)功能試驗。
4 結(jié)語
該文實現(xiàn)了機(jī)組告警系統(tǒng)邏輯設(shè)計結(jié)果到試驗用例、試驗?zāi)_本與試驗結(jié)果自動測試工具的開發(fā),工具架構(gòu)合理,流程清晰,能夠自動化生成測試用例、腳本與結(jié)果,節(jié)省了大量試驗用例與試驗?zāi)_本開發(fā)時間,保障了對設(shè)計邏輯的準(zhǔn)確讀取分析,避免了人為出錯,實現(xiàn)了試驗結(jié)果的自動記錄與保存。
使用pyinstaller將此測試腳本自動化生成工具生成.exe格式單獨文件,可以發(fā)布給不同的試驗人員脫離python環(huán)境進(jìn)行使用,具有較強(qiáng)的應(yīng)用性?;诖藴y試腳本自動化生成工具,也可以應(yīng)用于發(fā)動機(jī)指示頁面、主飛行顯示器指示、簡圖頁、機(jī)載記錄系統(tǒng)、機(jī)載維護(hù)系統(tǒng)等邏輯復(fù)雜、參數(shù)較多、需大量開發(fā)測試腳本的試驗應(yīng)用當(dāng)中,具有很強(qiáng)的擴(kuò)展性。
參考文獻(xiàn)
[1] 張博.民用飛機(jī)機(jī)組告警系統(tǒng)設(shè)計[J].中國高新技術(shù)企業(yè),2014(26):29-30.
[2] (挪)Magnus Lie Hetland,著.Python基礎(chǔ)教程[M].2版.司維,曾軍崴,譚穎華,譯.北京,人民郵電出版社,2014.