陳子杭 肖 剛* 郭曉燕 姚志超 李洪宇
(1. 上海交通大學,上海 200240; 2. 上海飛機設計研究院,上海 201210)
根據SAE ARP 4754A所規定的民用飛機研制流程,民用飛機應在早期設計階段進行飛機級需求的確認與驗證工作[1]。在傳統的工作中,這一過程主要基于需求文檔完成。近年來,以場景作為工具,在場景中進行測試工作,完成需求的確認與驗證的方法逐漸受到工業界的關注。而要實現基于場景的測試,首先要解決的問題是測試用例的生成[2],在以往的工作中測試用例由測試人員手動編寫完成,存在著效率低和容易遺漏的缺點,基于場景模型自動生成測試用例逐漸成為研究的熱點。本研究采用SysML活動圖構建民用飛機運行場景模型,提出了基于場景模型的測試用例生成和排序方法,為后續實施基于場景的自動化測試提供了理論基礎。
基于場景的測試最早應用于軟件工程領域,通過軟件的具體應用場景來生成測試用例,以期找出軟件中的錯誤[3]。近年來,逐步應用于自動駕駛等領域,通過建立測試場景數據庫來進行駕駛安全性測試工作[4-5]。在民機領域,主要利用場景分析來進行需求的捕獲工作[6-7],但由于民機本身作為一個復雜產品,加上其所處的環境具有多重影響因素,基于場景進行相應的工作還處在初步階段[8-10],有很大的進步空間。
民機運行場景是指飛機在交付后投入載客運行階段所處的環境。在建立場景模型的過程中首先需要明確構建場景的目的,即構建場景的用途。其次明確場景中的主要參與方,根據飛機所處不同的飛行階段,由飛機、航空公司和空中管制單位交替參與,最后需要確定各參與方自身在場景中所需完成的任務和參與方之間的交互過程。
根據前文所述,場景模型應具備描述各參與方本身的任務流程和各參與方之間交互過程的功能,可采用SysML活動圖建立運行場景模型,構成場景模型的基本元素如表1所示。

表1 場景模型基本元素表
本研究以飛機在進近過程中觸發TAWS模式1下降率過大告警這一場景為例,建立模型。根據2.1小節所述的建模步驟,首先應明確的是建立場景的目的,即驗證飛機在遭遇下降率過大這一情況時能否脫離告警包線爬升至安全高度,進而確定本場景的參與方為飛機和進近管制,最后確定各參與方相應的任務流程。下降率過大告警的示意圖如圖1所示。告警包線方程如圖2所示。當飛機進入外層告警包線時,系統將發出“SINKRATE”語音警告,直至飛機脫離告警包線。若飛機繼續進入內層告警曲線時,則將發出“PULL UP”語音告警。值得說明的是,本研究不考慮陡峭進近等特殊情況。

圖1 TAWS模式1告警示意圖[11-13]

圖2 TAWS模式1告警包線[11-13]
圖2中外層告警包線斜線部分方程如公式(1)所示:
RA=-572+0.603 5*DR
(1)
式中,RA為無線電高度,單位為ft,DR為下降率,單位為ft/min。
內層告警包線方程底部斜線如公式(2)所示:
RA=-1 620+1.113 3*AR
(2)
上部斜線公式如公式(3)所示:
RA=-400+0.4*DR
(3)
式中,變量名稱與單位與公式(1)一致。
根據以上信息,可以建立如圖3所示的場景模型。

圖3 場景模型實例
測試用例生成方法如圖4所示,場景的測試用例由測試路徑和測試數據組合而成。對于測試路徑,從建立的模型中提取結構信息,搜索初始點到終點的路徑即可得到測試路徑。對于測試數據,則需要分析模型各節點的內容信息,確定關鍵參數的取值范圍,進而獲得測試數據。最后將測試路徑和測試數據結合可以得到測試用例,進而可以得到用于該場景的測試用例集。

圖4 測試用例生成方法
在以往利用活動圖生成測試路徑的過程中,首先將活動圖轉化為有向圖,在有向圖中搜索測試路徑,然而由于循環結構和并發結構測試路徑的多樣性,這種方法所產生的測試路徑充分性難以得到保障。因此本文提出如圖5所示的測試路徑生成方法,首先將建立的場景活動圖模型保存為XML文件,從XML文件中提取出原活動圖的節點和邊的信息,將活動圖轉換為有向圖,然后識別出有向圖中的循環與并發結構,并用復合節點替代,生成簡化后的有向圖。利用深度優先搜索算法,在簡化后的有向圖中搜索從初始節點到流終點和初始節點到結束節點間的所有路徑,即可得到初始測試路徑。在得到初始測試路徑后,處理其中的復合節點,即可得到最終測試路徑。
3.1.1 初級測試路徑生成方法
根據前面所述的方法,將2.3小節所建立的場景活動圖模型轉化為圖6所示的有向圖模型。
圖6中各節點編號所對應的原活動圖內容如表2所示。替換規則是用活動圖節點的簡稱加數字序號代替原活動圖節點。

圖5 測試路徑生成方法

圖6 有向圖模型

表2 節點內容替換說明
進而識別圖6中的循環和并發結構,采用復合節點L1代替循環結構,用復合節點C1代替并發結構,可以得到圖7所示簡化后的有向圖。

圖7 簡化后的有向圖
3.1.2 最終測試路徑生成方法
在生成初始的測試路徑后,還需處理復合節點所替代的循環與并發結構以生成最終的測試路徑。
1)循環結構測試路徑生成方法
如圖8所示是一個典型的循環結構,根據不同的輸入情況,可能多次觸發判斷條件,執行循環活動,通過設置循環次數得到測試路徑。本研究設置循環次數為1次。可以得到兩條測試路徑:
(1)A1→A2→A3→DN1→A4
(2)A1→A2→A3→DN1→A2→A3→DN1→A4

圖8 循環結構
2)并發結構測試路徑生成方法
圖9所示的是一個典型的并發結構,并發結構由分叉節點開始,當控制流進入分叉節點后會分成具有并發關系的多個線程,當執行完各自線程上的活動后,這些線程匯聚到匯合節點,在匯合節點同步后,控制流才能繼續向下執行。

圖9 并發結構
并發結構的測試路徑基于排列的方式生成,首先對并發結構內的所有活動做一次排列可以得到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節所述測試路徑生成方法處理建立的場景模型,可以得到14條測試路徑,表3中展示部分測試路徑。

表3 部分測試路徑
測試用例中的測試數據是從活動圖的節點中獲取的,要生成測試數據,需要分析活動圖的節點的內容,找到能生成測試數據的信息。以本研究所建立的場景模型為例,關鍵參數是飛機的無線電高度(RA)和下降率(DR),有三個節點A1、A3和A8需要測試數據。
首先需要確定飛機初始的下降率和無線電高度,本研究設置飛機的初始下降率為2 000 ft/min,初始無限電高度為2 500 ft,即為A1節點的測試數據。

圖10 測試用例
參考模式1外層告警包線的判斷條件確定 RA的取值范圍為10 ft~2 450 ft,DR的取值下界為964 ft/min,取值上界無限制。若想觸發外層告警,DR與RA的取值還應滿足外層告警包線方程,可將A3節點測試數據取為(DR=3 500,RA=1 400)。
參考模式1內層告警包線的判斷條件確定RA的取值范圍為10 ft~2 450 ft,DR的取值下界為1 482 ft/min,取值上界無限制。若想觸發內層告警,DR與RA的取值還應滿足內層告警包線方程,可將A8節點測試數據取為(DR=4 500,RA=1 000)。
將生成的測試數據插入到最終測試路徑中即可獲得如圖10所示的5條測試用例。
為了提高后續測試工作的效率,引入測試用例重要度這一參數,將生成的測試用例進行排序,優先執行重要度高的測試用例。測試用例重要度計算如式(4)所示:

(4)


(5)
式中,n為該條路徑上活動節點的數量,Wi為活動節點的權值。
測試路徑上活動節點權值的分配原則如下:活動節點位于單一泳道內,且不與其他泳道交互的權值定為1;活動節點與其他泳道有交互的權值定為2。
測試預期結果也即測試用例的期望輸出,表現為場景中飛機的最終狀態。測試預期結果權重可以按如下規則分配:
若測試預期結果表明飛行安全未受到影響,飛機可以繼續完成飛行任務,則其權值定為1;若測試預期結果表明飛行安全受到中等程度影響,但飛機經過調整后可以繼續完成飛行任務的,權值定為2;若測試預期結果表明飛行安全受到較嚴重影響,可能造成飛機損毀、人員傷亡,例如迫降等情況,權值定為3;若測試預期結果表明飛行安全受到非常嚴重影響,造成飛機嚴重損毀、人員傷亡,例如飛機墜毀,權值定為4。
按照上述方法計算圖10所給測試用例的重要度,其排序結果如表4所示。

表4 測試用例重要度
本文構建民用飛機典型運行場景,基于場景模型生成測試用例,引入測試用例重要度這一概念,對生成的測試用例進行排序,解決了進行基于場景測試的初步問題。下一步研究將細化場景模型的顆粒度,同時構建場景的仿真模型,關注測試用例的自動執行,打通基于場景的自動化測試途徑,實現基于場景的需求確認和驗證。