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