文/孫龑 徐豪 胡玉露 葛晨 余愛國
隨著通信技術(shù)發(fā)展,數(shù)據(jù)鏈已成為現(xiàn)代軍事信息系統(tǒng)中的核心技術(shù)。而航電顯控軟件作為航電系統(tǒng)的一部分,在數(shù)據(jù)鏈通信中主要負責(zé)接收數(shù)據(jù)以及飛行員的控制命令,根據(jù)正確的處理邏輯與外部設(shè)備通信,并將數(shù)據(jù)鏈數(shù)據(jù)顯示在顯示設(shè)備上。
在航電顯控軟件測試過程中,數(shù)據(jù)鏈模塊的測試具有如下特征:
(1)數(shù)據(jù)量大。僅“目標(biāo)種類”一項就有近3000項,且每種分類下還有相關(guān)子數(shù)據(jù),逐個測試工作量巨大;
(2)測試類型交織。由于航電顯控軟件的功能要求,在數(shù)據(jù)鏈模塊測試過程中人機交互測試、功能測試、邊界測試相互交織,很容易產(chǎn)生測試不充分的問題。
本文以航電顯控軟件為對象,依據(jù)國軍標(biāo)相關(guān)要求,通過軟件架構(gòu)分析、數(shù)據(jù)鏈數(shù)據(jù)分類等方面對軟件測試方法進行研究。
在某型機的航電顯控軟件的測試過程中,測試環(huán)境示意圖如圖 1所示。該航電顯控軟件的數(shù)據(jù)鏈模塊主要包括兩個部分:
(1)數(shù)據(jù)鏈數(shù)據(jù)解析模塊,負責(zé)數(shù)據(jù)鏈數(shù)據(jù)的接收、解析、封裝和發(fā)送;
(2)數(shù)據(jù)鏈數(shù)據(jù)顯示模塊,負責(zé)將解析后的數(shù)據(jù)鏈數(shù)據(jù)轉(zhuǎn)化為圖形或數(shù)字顯示到航電顯示器上并接收用戶指令傳遞給數(shù)據(jù)鏈數(shù)據(jù)解析模塊。
由于該航電顯控軟件中實現(xiàn)了較好的模塊化:所有數(shù)據(jù)鏈數(shù)據(jù)采用統(tǒng)一數(shù)據(jù)格式進行存儲,同一類型的數(shù)據(jù)采用相同的單元進行解析或封裝。且根據(jù)國軍標(biāo)中對軟件測試階段和測試類型的劃分和技術(shù)要求,在測試過程中隸屬于白盒測試的(文檔審查、單元測試等)工作過程相對固化。因此本文將針對數(shù)據(jù)鏈數(shù)據(jù)的特性展開分析,研究優(yōu)化黑盒測試(配置項測試、系統(tǒng)測試)工作的方法。
依據(jù)該航電顯控軟件的接口設(shè)計文檔,數(shù)據(jù)鏈與航電顯控軟件之間交互的數(shù)據(jù)可以分為三類:目標(biāo)數(shù)據(jù)、指令數(shù)據(jù)、其它數(shù)據(jù)。
基于目標(biāo)數(shù)據(jù)特點的分析,可以將目標(biāo)數(shù)據(jù)的測試分為對目標(biāo)名稱的測試和對目標(biāo)圖標(biāo)的測試。
3.1.1 目標(biāo)名稱的測試方法設(shè)計
基于數(shù)據(jù)鏈接口設(shè)計文檔進行分析,目標(biāo)名稱具有如下特點:
(1)共有目標(biāo)近3000種,每種目標(biāo)具有唯一的類型ID和名稱;
(2)目標(biāo)名稱顯示在目標(biāo)列表畫面,通過航電顯示器可以查看。
在對目標(biāo)名稱的測試中,基于目標(biāo)名稱的特征,在測試中存在如下難點:
(1)名稱數(shù)量多,人工的方式很容易產(chǎn)生遺漏;
(2)既要測試名稱與ID的映射,還要測試名稱的正誤;
(3)由于名稱是通過航電顯示器顯示的,所以還要測試名稱的顯示是否符合要求。
基于以上難點,設(shè)計測試方法如下(測試方法流程參見圖 2):
(1)通過工具從代碼中提取名稱字符串。從代碼中拷貝名稱字符串后刪除冗余字符(文中通過Notepad軟件完成),得到代碼中的名稱列表,進入步驟(2);
(2)通過工具建立代碼中的ID號與代碼中名稱的映射?;静僮黝愃撇襟E(1),提取出代碼中的ID號后,通過工具(文中使用Excel軟件)建立代碼中的名稱與ID的映射列表,進入步驟(3);
(3)通過工具對代碼中的映射與接口設(shè)計文檔中的映射進行比對。通過比對(這里使用Excel,也可使用類似Beyond Compare等工具),查找出不一致,如果存在不一致,并進行更改,進入步驟(1);如果不存在不一致,進入步驟(4);
(4)模擬特征目標(biāo)查看名稱顯示。選擇帶有特殊字符(如含有英文、中文、特殊符號、字符個數(shù)最多)的名稱進行模擬顯示,查看顯示是否正常。在查看過程中除了要查看顯示名稱與需求中所要求的名稱是否一致,還要查看顏色、布局等顯示與軟件需求是否一致。如果存在不一致,進行更改,進入步驟(5),如果不存在不一致,測試結(jié)束。
通過以上方法的設(shè)計,實現(xiàn)了如下目的:
圖1:某型機航電顯控軟件測試環(huán)境示意圖
圖2:目標(biāo)名稱測試流程
(1)通過提取代碼中目標(biāo)名稱字符串、工具審查的方式,替代了人工逐個審查字符串的方式,提升了測試效率;
(2)在工具審查的過程中也是基于ID映射的,并通過特征數(shù)據(jù)的功能測試,測試了名稱與ID之間映射的正確性;
(3)在方法中設(shè)計了對特征數(shù)據(jù)的選擇和功能測試,保證了顯示的正確性。
3.1.2 針對目標(biāo)圖標(biāo)的測試方法設(shè)計
基于數(shù)據(jù)鏈接口設(shè)計進行分析,目標(biāo)其它信息具有如下特點:
(1)共有目標(biāo)近3000種,每種目標(biāo)都有一個圖標(biāo),其中部分目標(biāo)具有唯一的圖標(biāo),也存在多個目標(biāo)共用一個圖標(biāo);
(2)每一種目標(biāo)具有唯一的ID;
(3)每一種目標(biāo)具有多個類型(敵、我、友等),每種類型的圖標(biāo)顏色不同。
在對目標(biāo)圖標(biāo)的測試中,基于目標(biāo)圖標(biāo)的特征,在測試中存在如下難點:
(1)由于在代碼中圖標(biāo)是以位圖的形式存儲,僅使用代碼審查的方式逐個查看位圖過于耗時;
(2)原有的一個人發(fā)送仿真數(shù)據(jù)一個人監(jiān)控測試的模式需要同時占用兩個人;
圖3:目標(biāo)圖標(biāo)測試流程
(3)目標(biāo)數(shù)量多,不采用優(yōu)化的方式,耗時太長;
(4)由于每種圖標(biāo)的具有多個不同類型,逐個目標(biāo)逐個類型的模擬會加倍測試的時間。
基于以上難點,設(shè)計測試方法如下(測試方法流程參見圖 3):
(1)代碼審查ID劃分。即通過代碼審查的方式確認使用同一個圖標(biāo)的ID范圍是否正確,如果存在故障,則更改故障進入步驟(1),否則進入步驟(2);
(2)設(shè)計測試用例。依據(jù)數(shù)據(jù)鏈接口文檔中圖標(biāo)ID范圍的劃分設(shè)計測試用例,同一種圖標(biāo)設(shè)計1~2個測試用例,完成后進入步驟(3);
(3)基于測試用例設(shè)計自動模擬程序。自動模擬程序具有如下特征:一、每隔一定周期自動發(fā)送一次數(shù)據(jù),無需人工干預(yù);二、每次發(fā)送N(N是指目標(biāo)類型個數(shù))個同一ID但是不同類型的目標(biāo)數(shù)據(jù);三、所發(fā)送的ID號由步驟(2)確定;四、同一ID的N個目標(biāo)的在顯示器畫面顯示的位置不同,不同ID的同一類型的目標(biāo)處于畫面的同一位置,完成后進入步驟(4);
(4)執(zhí)行模擬程序。啟動模擬程序,此時如果有剩余的未模擬的ID(即未執(zhí)行的用例)則執(zhí)行步驟(5),否則測試結(jié)束;
(5)測試圖標(biāo)顯示。利用模擬程序發(fā)送的ID和類型,通過航電顯示器查看ID與圖標(biāo)的映射、圖標(biāo)的樣式和顏色設(shè)置是否正確,此時如果發(fā)現(xiàn)故障,則修改故障進入步驟(5),否則進入步驟(4)。
通過以上方法的設(shè)計,實現(xiàn)了如下目的:
(1)通過查看航電顯示器顯示的手段檢查圖標(biāo)顯示的正確性,相比于代碼審查逐個ID審查圖標(biāo)的手段,提升了效率;
圖4:指令數(shù)據(jù)測試流程
(2)通過模擬器周期性的發(fā)送仿真數(shù)據(jù)而不是人員逐個手動發(fā)送,節(jié)省了人力;
(3)依據(jù)數(shù)據(jù)鏈接口的要求,采用了先通過代碼審查檢查代碼中ID與圖標(biāo)的映射再依據(jù)數(shù)據(jù)鏈接口優(yōu)化測試用例的方法,減少了所需執(zhí)行的測試用例個數(shù);
(4)采用了同時發(fā)送多個不同類型的目標(biāo)、固定位置顯示固定類型目標(biāo)的方式,實現(xiàn)了一次測試多個類型的目的,縮短了測試時間。
基于數(shù)據(jù)鏈接口設(shè)計文檔進行分析,指令數(shù)據(jù)具有如下特點:
(1)指令集中存在約30個數(shù)據(jù)塊,每個數(shù)據(jù)塊中含有1項至多項數(shù)據(jù)信息;
(2)共有約90條指令,每條指令由某幾個數(shù)據(jù)塊組合而成;
(3)指令通過航電顯示器的指令畫面顯示,指令畫面會顯示出該指令中所含有的數(shù)據(jù)信息。
在對指令數(shù)據(jù)的測試中,基于指令數(shù)據(jù)的特征,在測試中存在如下難點:
(1)不同指令之間可能存在相同的數(shù)據(jù)塊,采用窮舉測試耗費時間太長;
(2)不同指令在指令畫面的布局不同,需要對每一條指令的布局進行測試;
(3)每次測試過程中還需測試指令的解析是否正確,即指令解析數(shù)值與真實數(shù)值是否一致。
基于以上難點,設(shè)計測試方法如下(測試方法流程參見圖 4):
(1)代碼審查確定代碼架構(gòu)。通過代碼審查,該航電顯控軟件具有如下特點:一、指令數(shù)據(jù)解析和指令數(shù)據(jù)顯示為相互獨立的模塊;二、在指令的數(shù)據(jù)解析中是以數(shù)據(jù)塊為單元,即每一個數(shù)據(jù)塊構(gòu)建一個解析單元,某條指令的解析是由屬于該指令的數(shù)據(jù)塊的解析單元組成;三、由于每個指令中所包含的數(shù)據(jù)塊的組合不同,所以每個數(shù)據(jù)塊的顯示是不同的;審查結(jié)束后進入步驟(2);
(2)逐條模擬指令。如果此時存在未模擬的指令逐條發(fā)送指令數(shù)據(jù),進行指令模擬測試,進入步驟(3);如果此時不存在未模擬的指令,測試結(jié)束;
(3)測試指令中的數(shù)據(jù)塊。如果此時模擬的指令中存在未測試的數(shù)據(jù)塊,進入步驟(4),否則進入步驟(2);
(4)單個數(shù)據(jù)塊的測試。在測試中,主要完成如下工作:一、每條指令的測試是以數(shù)據(jù)塊為單位進行的;二、每個數(shù)據(jù)塊的測試包括解析測試和顯示測試兩部分;三、對于即將測試的數(shù)據(jù)塊,先要確定該數(shù)據(jù)塊在已測試的指令中是否已經(jīng)測試過,如果已測試過則本次只需要進行數(shù)據(jù)塊的顯示測試,否則該數(shù)據(jù)塊先要進行解析測試再進行顯示測試。如果在測試過程中發(fā)現(xiàn)故障修改故障進入步驟(4),否則進入步驟(3)。
通過以上方法的設(shè)計,實現(xiàn)了如下目的:
(1)通過代碼審查確定代碼架構(gòu),基于代碼架構(gòu),對于已進行過解析測試的數(shù)據(jù)塊僅進行顯示測試,即每個數(shù)據(jù)塊僅進行一次解析測試,提升了測試效率;
(2)針對每一條指令的每一個數(shù)據(jù)塊都進行了顯示的測試,保證了顯示的準(zhǔn)確性;
(3)針對每個數(shù)據(jù)塊都進行一次解析測試確保了每一個數(shù)據(jù)塊解析的正確。
除了目標(biāo)數(shù)據(jù)和指令數(shù)據(jù)外,數(shù)據(jù)鏈其它數(shù)據(jù)根據(jù)數(shù)據(jù)類型可以劃分為枚舉型數(shù)據(jù)和數(shù)值型數(shù)據(jù)。枚舉型數(shù)據(jù)是指解析后的數(shù)值是一個個離散的值,每一個數(shù)據(jù)值均有對應(yīng)的含義。數(shù)值型數(shù)據(jù)是指解析后的數(shù)值是連續(xù)值,表示的是一個數(shù)值范圍。
表1:“空中目標(biāo)”的“名稱”信息
表2:“空中目標(biāo)”的“名稱”原測試方法耗時信息
表3:“空中目標(biāo)”的“名稱”本文設(shè)計的測試方法耗時信息
表4:“空中目標(biāo)”的“圖標(biāo)”信息
表5:“空中目標(biāo)”的“圖標(biāo)”原測試耗時信息
表6:“空中目標(biāo)”的“圖標(biāo)”本文設(shè)計的測試方法耗時信息
表7:“指揮引導(dǎo)”指令的信息
表8:“指揮引導(dǎo)”指令的原測試耗時信息
表9:“指揮引導(dǎo)”指令的本文設(shè)計的測試方法耗時信息
表10:“時間基準(zhǔn)消息”數(shù)據(jù)塊的數(shù)據(jù)結(jié)構(gòu)
表11:“時間基準(zhǔn)消息”的原測試用例設(shè)計
基于數(shù)據(jù)鏈接口設(shè)計文檔進行分析,其它數(shù)據(jù)鏈數(shù)據(jù)具有如下特點:
(1)數(shù)據(jù)由多個獨立的數(shù)據(jù)塊組成,每個數(shù)據(jù)塊中含有一個或多個數(shù)據(jù)項;
(2)數(shù)據(jù)項為枚舉型或數(shù)值型;
(3)每個數(shù)據(jù)塊中不同的數(shù)據(jù)項的解析是相互獨立的單元;
(4)在數(shù)據(jù)模擬過程中,只能以數(shù)據(jù)塊為單元發(fā)送數(shù)據(jù);
(5)針對每個數(shù)據(jù)塊分為解析模塊和顯示模塊,數(shù)據(jù)塊在完成解析后顯示到航電顯示器上。
在對其它數(shù)據(jù)鏈數(shù)據(jù)的測試中,基于數(shù)據(jù)的特征,在測試中存在如下難點:
(1)針對某一數(shù)據(jù)項,窮舉測試工作量過大,不易實現(xiàn);
(2)對于一個數(shù)據(jù)塊中存在多個數(shù)據(jù)項的情況,由于數(shù)據(jù)鏈數(shù)據(jù)模擬監(jiān)控器是以數(shù)據(jù)塊為單位進行發(fā)送,如果每次僅發(fā)送一個數(shù)據(jù)項的有效值,測試效率很低;
(3)數(shù)據(jù)測試過程中,既要進行解析測試,也要進行顯示測試。
基于以上難點,設(shè)計測試方法如下(測試方法流程參見圖 5):
(1)確定數(shù)據(jù)塊中是否只有一個數(shù)據(jù)項。如果被測數(shù)據(jù)塊中僅有一個數(shù)據(jù)項,進入步驟(2),否則進入步驟(7);
(2)確定該數(shù)據(jù)項是枚舉型還是數(shù)值型。如果是枚舉型進入步驟(3),如果是數(shù)值型進入步驟(5);
(3)代碼審查映射一致性。通過代碼審查確認代碼中的映射與數(shù)據(jù)鏈接口設(shè)計文檔中映射的一致性,如存在故障則修改故障進入步驟(3),否則進入步驟(4);
(4)構(gòu)建測試用例集進行測試。用例集僅選取特殊值(最長字符串、特殊字符等)進行顯示測試,如存在故障則修改故障進入步驟(4),否則測試結(jié)束;
表12:“時間基準(zhǔn)消息”的原測試耗時信息
表13:“時間基準(zhǔn)消息”的本文設(shè)計的測試方法用例設(shè)計
表14:“時間基準(zhǔn)消息”的本文設(shè)計的測試方法耗時信息
圖5:其它數(shù)據(jù)鏈數(shù)據(jù)測試流程
(5)構(gòu)建測試用例集。依據(jù)邊界值分析技術(shù),對數(shù)值型數(shù)據(jù)項的每一個范圍選取特定值(最小值、略大于最小值、正常值、略小于最大值、最大值)構(gòu)建測試用例集,進入步驟(6);
(6)測試數(shù)據(jù)的解析和顯示。模擬數(shù)據(jù)執(zhí)行測試用例,測試解析和顯示是否正確,如存在故障,修改故障,進入步驟(6),否則測試結(jié)束;
(7)分解數(shù)據(jù)項。即確認數(shù)據(jù)塊中包含幾個數(shù)據(jù)項,每個數(shù)據(jù)項是枚舉型還是數(shù)值型;如果數(shù)據(jù)項為枚舉型,則進入步驟(8),否則進入步驟(9);
(8)代碼審查映射一致性。通過代碼審查確認代碼中的映射與數(shù)據(jù)鏈接口設(shè)計文檔中映射的一致性,如存在故障則修改故障進入步驟(8),否則進入步驟(9);
(9)選取數(shù)據(jù)項用例值。僅選取數(shù)據(jù)項中的特殊值(最長字符串、特殊字符等)作為測試用例值,進入步驟(11);
(10)選取數(shù)據(jù)項用例值。即通過邊界值分析選取數(shù)據(jù)項測試用例值,然后進入步驟(11);
(11)構(gòu)建該數(shù)據(jù)塊最小用例集。即依據(jù)步驟(9)和步驟(10)所確定的各個數(shù)據(jù)項的測試用例值,建立該數(shù)據(jù)塊的最小用例集;該用例集每條用例由一組數(shù)據(jù)構(gòu)成,用例集包含所有數(shù)據(jù)項的所有用例值;完成構(gòu)建后進入步驟(12);
(12)執(zhí)行數(shù)據(jù)塊的最小用例集。執(zhí)行步驟(11)所構(gòu)建的用例集,進行解析測試和顯示測試,如果存在故障則修改故障進入步驟(12),否則測試結(jié)束。
通過以上方法的設(shè)計,實現(xiàn)了如下目的:
(1)分別針對枚舉型數(shù)據(jù)和數(shù)值型數(shù)據(jù)進行了測試設(shè)計,選取特征值構(gòu)建測試用例集,而不是采用窮舉的手段進行測試,提高了測試效率;
(2)基于每次要發(fā)送一個數(shù)據(jù)塊的事實,根據(jù)數(shù)據(jù)塊的情況構(gòu)建最小用例集,每個用例同時對多個數(shù)據(jù)項進行測試,避免了逐個測試數(shù)據(jù)項的低效;
(3)通過執(zhí)行測試用例集并觀察航電顯示器顯示的手段進行測試,實現(xiàn)了數(shù)據(jù)解析和數(shù)據(jù)顯示的同步測試。
針對以上測試方法,在本次研究中進行了如下驗證以確認方法的有效性。由于原有測試方法和本文設(shè)計的測試方法在故障處理中所耗費的時間基本一致,故文中僅進行測試過程的耗時比對。
4.1.1 目標(biāo)名稱的測試方法的驗證
為簡化驗證過程,僅選取目標(biāo)中的一個子類“空中目標(biāo)”進行驗證?!翱罩心繕?biāo)”的“名稱”信息參見表1。
采用原有逐個模擬目標(biāo)ID查看字符串顯示的測試方法耗時情況參見表2,總耗時為 10秒/人·個 * 2人 * 152個=3040秒。
本文設(shè)計的測試方法的耗時信息參見表3,總耗時為 150秒 + 150秒 + 300秒 +120秒 + 3個 * 10秒/人·個 * 2人 + 15秒 = 795秒。
對比可知,本文設(shè)計的測試方法測試速度提升((152/795)/(152/3040)-1)*100%≈282%。
4.1.2 目標(biāo)圖標(biāo)的測試方法的驗證
為簡化驗證過程,本次驗證中僅選取目標(biāo)中的一個子類“空中目標(biāo)”進行驗證?!翱罩心繕?biāo)”的“圖標(biāo)”信息參見表4。即每個ID對應(yīng)5種類型的圖標(biāo),但是由于共用的原因,實際圖標(biāo)庫中僅有50個不同的圖標(biāo)。
采用原有的逐個模擬ID和類型數(shù)查看圖標(biāo)顯示的方法耗時信息參見表5,總耗時為 10秒/人·個 * 2人 * 5種/個 * 152個 = 15200秒。
采用本文的測試方法的耗時信息參見表6,總耗時為760秒 + 50秒/人·個 * 10個 * 1人 + 20秒/個 * 10個+1800秒 =3260秒。
對比可知,本文設(shè)計的測試方法測試速度提升約((152/3260)/(152/15200)-1)*100%≈366%。
為簡化驗證過程,本次驗證中僅選取指令中的一個子類“指揮引導(dǎo)”進行驗證?!爸笓]引導(dǎo)”指令的信息參見表7。
采用原有的逐個模擬指令查看指令的解析與顯示的方法耗時信息參見表8,總耗時為 20秒/條 * 20條 * 2人 + 30秒/個·人 * 54個 * 2人 = 4040秒。
采用本文的測試方法的耗時信息參見表9,總耗時為20秒/個 * 18個 + 30秒/個·人 * 18個 * 2人 + 20秒/條·人 * 20條 * 2人 + 10秒/條 * 20條 = 1900秒。
對比可知,本文設(shè)計的測試方法測試速度提升約((20/1900)/(20/4040)-1)*100%≈113%。
由于其它數(shù)據(jù)量較多,為簡化驗證過程,本次驗證中僅選取一個數(shù)據(jù)塊“時間基準(zhǔn)消息”進行驗證。“時間基準(zhǔn)消息”數(shù)據(jù)塊的信息參見表10。
采用原有的逐個模擬數(shù)據(jù)項的方法設(shè)計的測試用例集參見表8,查看解析與顯示的方法耗時信息參見表11和表12,總耗時為5秒/條 * 20個 + 10秒/個·人 * 20個 * 2人 + 5秒/個·人 * 20個 * 2人 = 700 秒。
采用本文中測試方法設(shè)計的測試用例參見表13,采用本文設(shè)計的測試方法的耗時信息參見表14,總耗時為90秒 + 25秒/條 * 5條 + 10秒/條·人 * 5條 * 2人 + 25秒/條·人 * 5條 * 2人 = 565秒。
對比可知,本文設(shè)計的測試方法測試速度提升約((20/565)/(20/700)-1)*100%≈24%。
通過文中的方法完成自測試后,在三方測試過程中,航電顯控軟件數(shù)據(jù)鏈模塊未發(fā)現(xiàn)故障,測試方法有效。
本文針對某型機航電顯控軟件數(shù)據(jù)鏈模塊的測試過程進行了研究,根據(jù)航電顯控軟件與數(shù)據(jù)鏈之間的交互關(guān)系,提出了一種基于數(shù)據(jù)特征的灰盒測試方法。該方法針對不同類型的數(shù)據(jù)鏈數(shù)據(jù),設(shè)計了不同的測試流程,針對性地優(yōu)化了各類型數(shù)據(jù)的測試過程。文中還對原有測試方法和本文設(shè)計的測試方法進行比較,證明了本文的測試方法在效率上的提升。本文對類似架構(gòu)的航電顯控軟件的測試具有一定的參照價值。