陳子杭 肖 剛* 郭曉燕 姚志超 李洪宇
(1. 上海交通大學(xué),上海 200240; 2. 上海飛機(jī)設(shè)計(jì)研究院,上海 201210)
根據(jù)SAE ARP 4754A所規(guī)定的民用飛機(jī)研制流程,民用飛機(jī)應(yīng)在早期設(shè)計(jì)階段進(jìn)行飛機(jī)級需求的確認(rèn)與驗(yàn)證工作[1]。在傳統(tǒng)的工作中,這一過程主要基于需求文檔完成。近年來,以場景作為工具,在場景中進(jìn)行測試工作,完成需求的確認(rèn)與驗(yàn)證的方法逐漸受到工業(yè)界的關(guān)注。而要實(shí)現(xiàn)基于場景的測試,首先要解決的問題是測試用例的生成[2],在以往的工作中測試用例由測試人員手動(dòng)編寫完成,存在著效率低和容易遺漏的缺點(diǎn),基于場景模型自動(dòng)生成測試用例逐漸成為研究的熱點(diǎn)。本研究采用SysML活動(dòng)圖構(gòu)建民用飛機(jī)運(yùn)行場景模型,提出了基于場景模型的測試用例生成和排序方法,為后續(xù)實(shí)施基于場景的自動(dòng)化測試提供了理論基礎(chǔ)。
基于場景的測試最早應(yīng)用于軟件工程領(lǐng)域,通過軟件的具體應(yīng)用場景來生成測試用例,以期找出軟件中的錯(cuò)誤[3]。近年來,逐步應(yīng)用于自動(dòng)駕駛等領(lǐng)域,通過建立測試場景數(shù)據(jù)庫來進(jìn)行駕駛安全性測試工作[4-5]。在民機(jī)領(lǐng)域,主要利用場景分析來進(jìn)行需求的捕獲工作[6-7],但由于民機(jī)本身作為一個(gè)復(fù)雜產(chǎn)品,加上其所處的環(huán)境具有多重影響因素,基于場景進(jìn)行相應(yīng)的工作還處在初步階段[8-10],有很大的進(jìn)步空間。
民機(jī)運(yùn)行場景是指飛機(jī)在交付后投入載客運(yùn)行階段所處的環(huán)境。在建立場景模型的過程中首先需要明確構(gòu)建場景的目的,即構(gòu)建場景的用途。其次明確場景中的主要參與方,根據(jù)飛機(jī)所處不同的飛行階段,由飛機(jī)、航空公司和空中管制單位交替參與,最后需要確定各參與方自身在場景中所需完成的任務(wù)和參與方之間的交互過程。
根據(jù)前文所述,場景模型應(yīng)具備描述各參與方本身的任務(wù)流程和各參與方之間交互過程的功能,可采用SysML活動(dòng)圖建立運(yùn)行場景模型,構(gòu)成場景模型的基本元素如表1所示。
表1 場景模型基本元素表
本研究以飛機(jī)在進(jìn)近過程中觸發(fā)TAWS模式1下降率過大告警這一場景為例,建立模型。根據(jù)2.1小節(jié)所述的建模步驟,首先應(yīng)明確的是建立場景的目的,即驗(yàn)證飛機(jī)在遭遇下降率過大這一情況時(shí)能否脫離告警包線爬升至安全高度,進(jìn)而確定本場景的參與方為飛機(jī)和進(jìn)近管制,最后確定各參與方相應(yīng)的任務(wù)流程。下降率過大告警的示意圖如圖1所示。告警包線方程如圖2所示。當(dāng)飛機(jī)進(jìn)入外層告警包線時(shí),系統(tǒng)將發(fā)出“SINKRATE”語音警告,直至飛機(jī)脫離告警包線。若飛機(jī)繼續(xù)進(jìn)入內(nèi)層告警曲線時(shí),則將發(fā)出“PULL UP”語音告警。值得說明的是,本研究不考慮陡峭進(jìn)近等特殊情況。
圖1 TAWS模式1告警示意圖[11-13]
圖2 TAWS模式1告警包線[11-13]
圖2中外層告警包線斜線部分方程如公式(1)所示:
RA=-572+0.603 5*DR
(1)
式中,RA為無線電高度,單位為ft,DR為下降率,單位為ft/min。
內(nèi)層告警包線方程底部斜線如公式(2)所示:
RA=-1 620+1.113 3*AR
(2)
上部斜線公式如公式(3)所示:
RA=-400+0.4*DR
(3)
式中,變量名稱與單位與公式(1)一致。
根據(jù)以上信息,可以建立如圖3所示的場景模型。
圖3 場景模型實(shí)例
測試用例生成方法如圖4所示,場景的測試用例由測試路徑和測試數(shù)據(jù)組合而成。對于測試路徑,從建立的模型中提取結(jié)構(gòu)信息,搜索初始點(diǎn)到終點(diǎn)的路徑即可得到測試路徑。對于測試數(shù)據(jù),則需要分析模型各節(jié)點(diǎn)的內(nèi)容信息,確定關(guān)鍵參數(shù)的取值范圍,進(jìn)而獲得測試數(shù)據(jù)。最后將測試路徑和測試數(shù)據(jù)結(jié)合可以得到測試用例,進(jìn)而可以得到用于該場景的測試用例集。
圖4 測試用例生成方法
在以往利用活動(dòng)圖生成測試路徑的過程中,首先將活動(dòng)圖轉(zhuǎn)化為有向圖,在有向圖中搜索測試路徑,然而由于循環(huán)結(jié)構(gòu)和并發(fā)結(jié)構(gòu)測試路徑的多樣性,這種方法所產(chǎn)生的測試路徑充分性難以得到保障。因此本文提出如圖5所示的測試路徑生成方法,首先將建立的場景活動(dòng)圖模型保存為XML文件,從XML文件中提取出原活動(dòng)圖的節(jié)點(diǎn)和邊的信息,將活動(dòng)圖轉(zhuǎn)換為有向圖,然后識別出有向圖中的循環(huán)與并發(fā)結(jié)構(gòu),并用復(fù)合節(jié)點(diǎn)替代,生成簡化后的有向圖。利用深度優(yōu)先搜索算法,在簡化后的有向圖中搜索從初始節(jié)點(diǎn)到流終點(diǎn)和初始節(jié)點(diǎn)到結(jié)束節(jié)點(diǎn)間的所有路徑,即可得到初始測試路徑。在得到初始測試路徑后,處理其中的復(fù)合節(jié)點(diǎn),即可得到最終測試路徑。
3.1.1 初級測試路徑生成方法
根據(jù)前面所述的方法,將2.3小節(jié)所建立的場景活動(dòng)圖模型轉(zhuǎn)化為圖6所示的有向圖模型。
圖6中各節(jié)點(diǎn)編號所對應(yīng)的原活動(dòng)圖內(nèi)容如表2所示。替換規(guī)則是用活動(dòng)圖節(jié)點(diǎn)的簡稱加數(shù)字序號代替原活動(dòng)圖節(jié)點(diǎn)。
圖5 測試路徑生成方法
圖6 有向圖模型
表2 節(jié)點(diǎn)內(nèi)容替換說明
進(jìn)而識別圖6中的循環(huán)和并發(fā)結(jié)構(gòu),采用復(fù)合節(jié)點(diǎn)L1代替循環(huán)結(jié)構(gòu),用復(fù)合節(jié)點(diǎn)C1代替并發(fā)結(jié)構(gòu),可以得到圖7所示簡化后的有向圖。
圖7 簡化后的有向圖
3.1.2 最終測試路徑生成方法
在生成初始的測試路徑后,還需處理復(fù)合節(jié)點(diǎn)所替代的循環(huán)與并發(fā)結(jié)構(gòu)以生成最終的測試路徑。
1)循環(huán)結(jié)構(gòu)測試路徑生成方法
如圖8所示是一個(gè)典型的循環(huán)結(jié)構(gòu),根據(jù)不同的輸入情況,可能多次觸發(fā)判斷條件,執(zhí)行循環(huán)活動(dòng),通過設(shè)置循環(huán)次數(shù)得到測試路徑。本研究設(shè)置循環(huán)次數(shù)為1次??梢缘玫絻蓷l測試路徑:
(1)A1→A2→A3→DN1→A4
(2)A1→A2→A3→DN1→A2→A3→DN1→A4
圖8 循環(huán)結(jié)構(gòu)
2)并發(fā)結(jié)構(gòu)測試路徑生成方法
圖9所示的是一個(gè)典型的并發(fā)結(jié)構(gòu),并發(fā)結(jié)構(gòu)由分叉節(jié)點(diǎn)開始,當(dāng)控制流進(jìn)入分叉節(jié)點(diǎn)后會分成具有并發(fā)關(guān)系的多個(gè)線程,當(dāng)執(zhí)行完各自線程上的活動(dòng)后,這些線程匯聚到匯合節(jié)點(diǎn),在匯合節(jié)點(diǎn)同步后,控制流才能繼續(xù)向下執(zhí)行。
圖9 并發(fā)結(jié)構(gòu)
并發(fā)結(jié)構(gòu)的測試路徑基于排列的方式生成,首先對并發(fā)結(jié)構(gòu)內(nèi)的所有活動(dòng)做一次排列可以得到4!=24種組合,添加A2>A3>A4這一限制條件后可以得到如下四條測試路徑:
(1)FN1→A1→A2→A3→A4→JN1
(2)FN1→A2→A1→A3→A4→JN1
(3)FN1→A2→A3→A1→A4→JN1
(4)FN1→A2→A4→A4→A1→JN1
利用3.1.1及3.1.2節(jié)所述測試路徑生成方法處理建立的場景模型,可以得到14條測試路徑,表3中展示部分測試路徑。
表3 部分測試路徑
測試用例中的測試數(shù)據(jù)是從活動(dòng)圖的節(jié)點(diǎn)中獲取的,要生成測試數(shù)據(jù),需要分析活動(dòng)圖的節(jié)點(diǎn)的內(nèi)容,找到能生成測試數(shù)據(jù)的信息。以本研究所建立的場景模型為例,關(guān)鍵參數(shù)是飛機(jī)的無線電高度(RA)和下降率(DR),有三個(gè)節(jié)點(diǎn)A1、A3和A8需要測試數(shù)據(jù)。
首先需要確定飛機(jī)初始的下降率和無線電高度,本研究設(shè)置飛機(jī)的初始下降率為2 000 ft/min,初始無限電高度為2 500 ft,即為A1節(jié)點(diǎn)的測試數(shù)據(jù)。
圖10 測試用例
參考模式1外層告警包線的判斷條件確定 RA的取值范圍為10 ft~2 450 ft,DR的取值下界為964 ft/min,取值上界無限制。若想觸發(fā)外層告警,DR與RA的取值還應(yīng)滿足外層告警包線方程,可將A3節(jié)點(diǎn)測試數(shù)據(jù)取為(DR=3 500,RA=1 400)。
參考模式1內(nèi)層告警包線的判斷條件確定RA的取值范圍為10 ft~2 450 ft,DR的取值下界為1 482 ft/min,取值上界無限制。若想觸發(fā)內(nèi)層告警,DR與RA的取值還應(yīng)滿足內(nèi)層告警包線方程,可將A8節(jié)點(diǎn)測試數(shù)據(jù)取為(DR=4 500,RA=1 000)。
將生成的測試數(shù)據(jù)插入到最終測試路徑中即可獲得如圖10所示的5條測試用例。
為了提高后續(xù)測試工作的效率,引入測試用例重要度這一參數(shù),將生成的測試用例進(jìn)行排序,優(yōu)先執(zhí)行重要度高的測試用例。測試用例重要度計(jì)算如式(4)所示:
(4)
(5)
式中,n為該條路徑上活動(dòng)節(jié)點(diǎn)的數(shù)量,Wi為活動(dòng)節(jié)點(diǎn)的權(quán)值。
測試路徑上活動(dòng)節(jié)點(diǎn)權(quán)值的分配原則如下:活動(dòng)節(jié)點(diǎn)位于單一泳道內(nèi),且不與其他泳道交互的權(quán)值定為1;活動(dòng)節(jié)點(diǎn)與其他泳道有交互的權(quán)值定為2。
測試預(yù)期結(jié)果也即測試用例的期望輸出,表現(xiàn)為場景中飛機(jī)的最終狀態(tài)。測試預(yù)期結(jié)果權(quán)重可以按如下規(guī)則分配:
若測試預(yù)期結(jié)果表明飛行安全未受到影響,飛機(jī)可以繼續(xù)完成飛行任務(wù),則其權(quán)值定為1;若測試預(yù)期結(jié)果表明飛行安全受到中等程度影響,但飛機(jī)經(jīng)過調(diào)整后可以繼續(xù)完成飛行任務(wù)的,權(quán)值定為2;若測試預(yù)期結(jié)果表明飛行安全受到較嚴(yán)重影響,可能造成飛機(jī)損毀、人員傷亡,例如迫降等情況,權(quán)值定為3;若測試預(yù)期結(jié)果表明飛行安全受到非常嚴(yán)重影響,造成飛機(jī)嚴(yán)重?fù)p毀、人員傷亡,例如飛機(jī)墜毀,權(quán)值定為4。
按照上述方法計(jì)算圖10所給測試用例的重要度,其排序結(jié)果如表4所示。
表4 測試用例重要度
本文構(gòu)建民用飛機(jī)典型運(yùn)行場景,基于場景模型生成測試用例,引入測試用例重要度這一概念,對生成的測試用例進(jìn)行排序,解決了進(jìn)行基于場景測試的初步問題。下一步研究將細(xì)化場景模型的顆粒度,同時(shí)構(gòu)建場景的仿真模型,關(guān)注測試用例的自動(dòng)執(zhí)行,打通基于場景的自動(dòng)化測試途徑,實(shí)現(xiàn)基于場景的需求確認(rèn)和驗(yàn)證。