文/孫龑 徐豪 胡玉露 葛晨 余愛國
隨著通信技術發展,數據鏈已成為現代軍事信息系統中的核心技術。而航電顯控軟件作為航電系統的一部分,在數據鏈通信中主要負責接收數據以及飛行員的控制命令,根據正確的處理邏輯與外部設備通信,并將數據鏈數據顯示在顯示設備上。
在航電顯控軟件測試過程中,數據鏈模塊的測試具有如下特征:
(1)數據量大。僅“目標種類”一項就有近3000項,且每種分類下還有相關子數據,逐個測試工作量巨大;
(2)測試類型交織。由于航電顯控軟件的功能要求,在數據鏈模塊測試過程中人機交互測試、功能測試、邊界測試相互交織,很容易產生測試不充分的問題。
本文以航電顯控軟件為對象,依據國軍標相關要求,通過軟件架構分析、數據鏈數據分類等方面對軟件測試方法進行研究。
在某型機的航電顯控軟件的測試過程中,測試環境示意圖如圖 1所示。該航電顯控軟件的數據鏈模塊主要包括兩個部分:
(1)數據鏈數據解析模塊,負責數據鏈數據的接收、解析、封裝和發送;
(2)數據鏈數據顯示模塊,負責將解析后的數據鏈數據轉化為圖形或數字顯示到航電顯示器上并接收用戶指令傳遞給數據鏈數據解析模塊。
由于該航電顯控軟件中實現了較好的模塊化:所有數據鏈數據采用統一數據格式進行存儲,同一類型的數據采用相同的單元進行解析或封裝。且根據國軍標中對軟件測試階段和測試類型的劃分和技術要求,在測試過程中隸屬于白盒測試的(文檔審查、單元測試等)工作過程相對固化。因此本文將針對數據鏈數據的特性展開分析,研究優化黑盒測試(配置項測試、系統測試)工作的方法。
依據該航電顯控軟件的接口設計文檔,數據鏈與航電顯控軟件之間交互的數據可以分為三類:目標數據、指令數據、其它數據。
基于目標數據特點的分析,可以將目標數據的測試分為對目標名稱的測試和對目標圖標的測試。
3.1.1 目標名稱的測試方法設計
基于數據鏈接口設計文檔進行分析,目標名稱具有如下特點:
(1)共有目標近3000種,每種目標具有唯一的類型ID和名稱;
(2)目標名稱顯示在目標列表畫面,通過航電顯示器可以查看。
在對目標名稱的測試中,基于目標名稱的特征,在測試中存在如下難點:
(1)名稱數量多,人工的方式很容易產生遺漏;
(2)既要測試名稱與ID的映射,還要測試名稱的正誤;
(3)由于名稱是通過航電顯示器顯示的,所以還要測試名稱的顯示是否符合要求。
基于以上難點,設計測試方法如下(測試方法流程參見圖 2):
(1)通過工具從代碼中提取名稱字符串。從代碼中拷貝名稱字符串后刪除冗余字符(文中通過Notepad軟件完成),得到代碼中的名稱列表,進入步驟(2);
(2)通過工具建立代碼中的ID號與代碼中名稱的映射。基本操作類似步驟(1),提取出代碼中的ID號后,通過工具(文中使用Excel軟件)建立代碼中的名稱與ID的映射列表,進入步驟(3);
(3)通過工具對代碼中的映射與接口設計文檔中的映射進行比對。通過比對(這里使用Excel,也可使用類似Beyond Compare等工具),查找出不一致,如果存在不一致,并進行更改,進入步驟(1);如果不存在不一致,進入步驟(4);
(4)模擬特征目標查看名稱顯示。選擇帶有特殊字符(如含有英文、中文、特殊符號、字符個數最多)的名稱進行模擬顯示,查看顯示是否正常。在查看過程中除了要查看顯示名稱與需求中所要求的名稱是否一致,還要查看顏色、布局等顯示與軟件需求是否一致。如果存在不一致,進行更改,進入步驟(5),如果不存在不一致,測試結束。
通過以上方法的設計,實現了如下目的:

圖1:某型機航電顯控軟件測試環境示意圖

圖2:目標名稱測試流程
(1)通過提取代碼中目標名稱字符串、工具審查的方式,替代了人工逐個審查字符串的方式,提升了測試效率;
(2)在工具審查的過程中也是基于ID映射的,并通過特征數據的功能測試,測試了名稱與ID之間映射的正確性;
(3)在方法中設計了對特征數據的選擇和功能測試,保證了顯示的正確性。
3.1.2 針對目標圖標的測試方法設計
基于數據鏈接口設計進行分析,目標其它信息具有如下特點:
(1)共有目標近3000種,每種目標都有一個圖標,其中部分目標具有唯一的圖標,也存在多個目標共用一個圖標;
(2)每一種目標具有唯一的ID;
(3)每一種目標具有多個類型(敵、我、友等),每種類型的圖標顏色不同。
在對目標圖標的測試中,基于目標圖標的特征,在測試中存在如下難點:
(1)由于在代碼中圖標是以位圖的形式存儲,僅使用代碼審查的方式逐個查看位圖過于耗時;
(2)原有的一個人發送仿真數據一個人監控測試的模式需要同時占用兩個人;

圖3:目標圖標測試流程
(3)目標數量多,不采用優化的方式,耗時太長;
(4)由于每種圖標的具有多個不同類型,逐個目標逐個類型的模擬會加倍測試的時間。
基于以上難點,設計測試方法如下(測試方法流程參見圖 3):
(1)代碼審查ID劃分。即通過代碼審查的方式確認使用同一個圖標的ID范圍是否正確,如果存在故障,則更改故障進入步驟(1),否則進入步驟(2);
(2)設計測試用例。依據數據鏈接口文檔中圖標ID范圍的劃分設計測試用例,同一種圖標設計1~2個測試用例,完成后進入步驟(3);
(3)基于測試用例設計自動模擬程序。自動模擬程序具有如下特征:一、每隔一定周期自動發送一次數據,無需人工干預;二、每次發送N(N是指目標類型個數)個同一ID但是不同類型的目標數據;三、所發送的ID號由步驟(2)確定;四、同一ID的N個目標的在顯示器畫面顯示的位置不同,不同ID的同一類型的目標處于畫面的同一位置,完成后進入步驟(4);
(4)執行模擬程序。啟動模擬程序,此時如果有剩余的未模擬的ID(即未執行的用例)則執行步驟(5),否則測試結束;
(5)測試圖標顯示。利用模擬程序發送的ID和類型,通過航電顯示器查看ID與圖標的映射、圖標的樣式和顏色設置是否正確,此時如果發現故障,則修改故障進入步驟(5),否則進入步驟(4)。
通過以上方法的設計,實現了如下目的:
(1)通過查看航電顯示器顯示的手段檢查圖標顯示的正確性,相比于代碼審查逐個ID審查圖標的手段,提升了效率;

圖4:指令數據測試流程
(2)通過模擬器周期性的發送仿真數據而不是人員逐個手動發送,節省了人力;
(3)依據數據鏈接口的要求,采用了先通過代碼審查檢查代碼中ID與圖標的映射再依據數據鏈接口優化測試用例的方法,減少了所需執行的測試用例個數;
(4)采用了同時發送多個不同類型的目標、固定位置顯示固定類型目標的方式,實現了一次測試多個類型的目的,縮短了測試時間。
基于數據鏈接口設計文檔進行分析,指令數據具有如下特點:
(1)指令集中存在約30個數據塊,每個數據塊中含有1項至多項數據信息;
(2)共有約90條指令,每條指令由某幾個數據塊組合而成;
(3)指令通過航電顯示器的指令畫面顯示,指令畫面會顯示出該指令中所含有的數據信息。
在對指令數據的測試中,基于指令數據的特征,在測試中存在如下難點:
(1)不同指令之間可能存在相同的數據塊,采用窮舉測試耗費時間太長;
(2)不同指令在指令畫面的布局不同,需要對每一條指令的布局進行測試;
(3)每次測試過程中還需測試指令的解析是否正確,即指令解析數值與真實數值是否一致。
基于以上難點,設計測試方法如下(測試方法流程參見圖 4):
(1)代碼審查確定代碼架構。通過代碼審查,該航電顯控軟件具有如下特點:一、指令數據解析和指令數據顯示為相互獨立的模塊;二、在指令的數據解析中是以數據塊為單元,即每一個數據塊構建一個解析單元,某條指令的解析是由屬于該指令的數據塊的解析單元組成;三、由于每個指令中所包含的數據塊的組合不同,所以每個數據塊的顯示是不同的;審查結束后進入步驟(2);
(2)逐條模擬指令。如果此時存在未模擬的指令逐條發送指令數據,進行指令模擬測試,進入步驟(3);如果此時不存在未模擬的指令,測試結束;
(3)測試指令中的數據塊。如果此時模擬的指令中存在未測試的數據塊,進入步驟(4),否則進入步驟(2);
(4)單個數據塊的測試。在測試中,主要完成如下工作:一、每條指令的測試是以數據塊為單位進行的;二、每個數據塊的測試包括解析測試和顯示測試兩部分;三、對于即將測試的數據塊,先要確定該數據塊在已測試的指令中是否已經測試過,如果已測試過則本次只需要進行數據塊的顯示測試,否則該數據塊先要進行解析測試再進行顯示測試。如果在測試過程中發現故障修改故障進入步驟(4),否則進入步驟(3)。
通過以上方法的設計,實現了如下目的:
(1)通過代碼審查確定代碼架構,基于代碼架構,對于已進行過解析測試的數據塊僅進行顯示測試,即每個數據塊僅進行一次解析測試,提升了測試效率;
(2)針對每一條指令的每一個數據塊都進行了顯示的測試,保證了顯示的準確性;
(3)針對每個數據塊都進行一次解析測試確保了每一個數據塊解析的正確。
除了目標數據和指令數據外,數據鏈其它數據根據數據類型可以劃分為枚舉型數據和數值型數據。枚舉型數據是指解析后的數值是一個個離散的值,每一個數據值均有對應的含義。數值型數據是指解析后的數值是連續值,表示的是一個數值范圍。

表1:“空中目標”的“名稱”信息

表2:“空中目標”的“名稱”原測試方法耗時信息

表3:“空中目標”的“名稱”本文設計的測試方法耗時信息

表4:“空中目標”的“圖標”信息

表5:“空中目標”的“圖標”原測試耗時信息

表6:“空中目標”的“圖標”本文設計的測試方法耗時信息

表7:“指揮引導”指令的信息

表8:“指揮引導”指令的原測試耗時信息

表9:“指揮引導”指令的本文設計的測試方法耗時信息

表10:“時間基準消息”數據塊的數據結構

表11:“時間基準消息”的原測試用例設計
基于數據鏈接口設計文檔進行分析,其它數據鏈數據具有如下特點:
(1)數據由多個獨立的數據塊組成,每個數據塊中含有一個或多個數據項;
(2)數據項為枚舉型或數值型;
(3)每個數據塊中不同的數據項的解析是相互獨立的單元;
(4)在數據模擬過程中,只能以數據塊為單元發送數據;
(5)針對每個數據塊分為解析模塊和顯示模塊,數據塊在完成解析后顯示到航電顯示器上。
在對其它數據鏈數據的測試中,基于數據的特征,在測試中存在如下難點:
(1)針對某一數據項,窮舉測試工作量過大,不易實現;
(2)對于一個數據塊中存在多個數據項的情況,由于數據鏈數據模擬監控器是以數據塊為單位進行發送,如果每次僅發送一個數據項的有效值,測試效率很低;
(3)數據測試過程中,既要進行解析測試,也要進行顯示測試。
基于以上難點,設計測試方法如下(測試方法流程參見圖 5):
(1)確定數據塊中是否只有一個數據項。如果被測數據塊中僅有一個數據項,進入步驟(2),否則進入步驟(7);
(2)確定該數據項是枚舉型還是數值型。如果是枚舉型進入步驟(3),如果是數值型進入步驟(5);
(3)代碼審查映射一致性。通過代碼審查確認代碼中的映射與數據鏈接口設計文檔中映射的一致性,如存在故障則修改故障進入步驟(3),否則進入步驟(4);
(4)構建測試用例集進行測試。用例集僅選取特殊值(最長字符串、特殊字符等)進行顯示測試,如存在故障則修改故障進入步驟(4),否則測試結束;

表12:“時間基準消息”的原測試耗時信息

表13:“時間基準消息”的本文設計的測試方法用例設計

表14:“時間基準消息”的本文設計的測試方法耗時信息

圖5:其它數據鏈數據測試流程
(5)構建測試用例集。依據邊界值分析技術,對數值型數據項的每一個范圍選取特定值(最小值、略大于最小值、正常值、略小于最大值、最大值)構建測試用例集,進入步驟(6);
(6)測試數據的解析和顯示。模擬數據執行測試用例,測試解析和顯示是否正確,如存在故障,修改故障,進入步驟(6),否則測試結束;
(7)分解數據項。即確認數據塊中包含幾個數據項,每個數據項是枚舉型還是數值型;如果數據項為枚舉型,則進入步驟(8),否則進入步驟(9);
(8)代碼審查映射一致性。通過代碼審查確認代碼中的映射與數據鏈接口設計文檔中映射的一致性,如存在故障則修改故障進入步驟(8),否則進入步驟(9);
(9)選取數據項用例值。僅選取數據項中的特殊值(最長字符串、特殊字符等)作為測試用例值,進入步驟(11);
(10)選取數據項用例值。即通過邊界值分析選取數據項測試用例值,然后進入步驟(11);
(11)構建該數據塊最小用例集。即依據步驟(9)和步驟(10)所確定的各個數據項的測試用例值,建立該數據塊的最小用例集;該用例集每條用例由一組數據構成,用例集包含所有數據項的所有用例值;完成構建后進入步驟(12);
(12)執行數據塊的最小用例集。執行步驟(11)所構建的用例集,進行解析測試和顯示測試,如果存在故障則修改故障進入步驟(12),否則測試結束。
通過以上方法的設計,實現了如下目的:
(1)分別針對枚舉型數據和數值型數據進行了測試設計,選取特征值構建測試用例集,而不是采用窮舉的手段進行測試,提高了測試效率;
(2)基于每次要發送一個數據塊的事實,根據數據塊的情況構建最小用例集,每個用例同時對多個數據項進行測試,避免了逐個測試數據項的低效;
(3)通過執行測試用例集并觀察航電顯示器顯示的手段進行測試,實現了數據解析和數據顯示的同步測試。
針對以上測試方法,在本次研究中進行了如下驗證以確認方法的有效性。由于原有測試方法和本文設計的測試方法在故障處理中所耗費的時間基本一致,故文中僅進行測試過程的耗時比對。
4.1.1 目標名稱的測試方法的驗證
為簡化驗證過程,僅選取目標中的一個子類“空中目標”進行驗證。“空中目標”的“名稱”信息參見表1。
采用原有逐個模擬目標ID查看字符串顯示的測試方法耗時情況參見表2,總耗時為 10秒/人·個 * 2人 * 152個=3040秒。
本文設計的測試方法的耗時信息參見表3,總耗時為 150秒 + 150秒 + 300秒 +120秒 + 3個 * 10秒/人·個 * 2人 + 15秒 = 795秒。
對比可知,本文設計的測試方法測試速度提升((152/795)/(152/3040)-1)*100%≈282%。
4.1.2 目標圖標的測試方法的驗證
為簡化驗證過程,本次驗證中僅選取目標中的一個子類“空中目標”進行驗證。“空中目標”的“圖標”信息參見表4。即每個ID對應5種類型的圖標,但是由于共用的原因,實際圖標庫中僅有50個不同的圖標。
采用原有的逐個模擬ID和類型數查看圖標顯示的方法耗時信息參見表5,總耗時為 10秒/人·個 * 2人 * 5種/個 * 152個 = 15200秒。
采用本文的測試方法的耗時信息參見表6,總耗時為760秒 + 50秒/人·個 * 10個 * 1人 + 20秒/個 * 10個+1800秒 =3260秒。
對比可知,本文設計的測試方法測試速度提升約((152/3260)/(152/15200)-1)*100%≈366%。
為簡化驗證過程,本次驗證中僅選取指令中的一個子類“指揮引導”進行驗證。“指揮引導”指令的信息參見表7。
采用原有的逐個模擬指令查看指令的解析與顯示的方法耗時信息參見表8,總耗時為 20秒/條 * 20條 * 2人 + 30秒/個·人 * 54個 * 2人 = 4040秒。
采用本文的測試方法的耗時信息參見表9,總耗時為20秒/個 * 18個 + 30秒/個·人 * 18個 * 2人 + 20秒/條·人 * 20條 * 2人 + 10秒/條 * 20條 = 1900秒。
對比可知,本文設計的測試方法測試速度提升約((20/1900)/(20/4040)-1)*100%≈113%。
由于其它數據量較多,為簡化驗證過程,本次驗證中僅選取一個數據塊“時間基準消息”進行驗證。“時間基準消息”數據塊的信息參見表10。
采用原有的逐個模擬數據項的方法設計的測試用例集參見表8,查看解析與顯示的方法耗時信息參見表11和表12,總耗時為5秒/條 * 20個 + 10秒/個·人 * 20個 * 2人 + 5秒/個·人 * 20個 * 2人 = 700 秒。
采用本文中測試方法設計的測試用例參見表13,采用本文設計的測試方法的耗時信息參見表14,總耗時為90秒 + 25秒/條 * 5條 + 10秒/條·人 * 5條 * 2人 + 25秒/條·人 * 5條 * 2人 = 565秒。
對比可知,本文設計的測試方法測試速度提升約((20/565)/(20/700)-1)*100%≈24%。
通過文中的方法完成自測試后,在三方測試過程中,航電顯控軟件數據鏈模塊未發現故障,測試方法有效。
本文針對某型機航電顯控軟件數據鏈模塊的測試過程進行了研究,根據航電顯控軟件與數據鏈之間的交互關系,提出了一種基于數據特征的灰盒測試方法。該方法針對不同類型的數據鏈數據,設計了不同的測試流程,針對性地優化了各類型數據的測試過程。文中還對原有測試方法和本文設計的測試方法進行比較,證明了本文的測試方法在效率上的提升。本文對類似架構的航電顯控軟件的測試具有一定的參照價值。