徐春梅
(四川九洲空管科技有限責任公司,四川 綿陽621000)
二次雷達(Secondary surveillance radar,簡稱SSR)在現代空管領域中發揮著重要的作用,SSR 包括詢問機和應答機,主要工作原理是詢問機發射詢問信號,飛機上的應答機收到詢問信號后,經過信號處理、譯碼,然后由應答機發送應答信號,地面詢問機天線收到應答信號后,再經過信號處理和數據處理,可以獲取飛機代號、高度、方位和距離等目標信息,形成目標航跡后傳送到管制中心,從而對空中目標進行監視[1]。其中形成目標航跡的軟件就是航跡軟件,指目標航跡的建立、更新和刪除等。航跡軟件是嵌入式軟件,處理的數據量較大,由于軟件運行環境較難搭建,通用測試工具環境缺乏,對于嵌入式軟件的系統測試提出了較高的要求。
系統測試主要是通過對被測軟件(運行后)輸入測試用例,對被測軟件的運行情況進行分析,輸入和輸出的關系是否滿足軟件的功能需求。實驗室需要對被測軟件搭建測試平臺,一種方式是手動輸入測試報文,通過通信協議編輯報文、組報、發送到被測軟件,人工比較測試結果是否滿足預期結果,這種方式耗費較多的人力和時間成本。二是開發簡單高效的自動化測試驅動軟件,可以重復使用,提高工作效率。本文的被測軟件是通過網口(UDP 協議)通信,所以主要討論基于網口的自動化測試驅動軟件的設計與實現。
測試人員考慮采用網絡調試助手作為被測軟件的測試輸入數據的工具,比如在網絡調試助手的發送區設置選中“文件載入”,載入文件的數據內容為“77”(16 進制),設置為十六進制顯示,網口調試助手以字符串的形式讀取文件,數據待發送區域顯示為“37 37”,點擊“發送”,發送區域顯示發送數據“37 37”,串口調試助手把十六進制數據識別為字符串,會導致發送的數據出現錯誤。所以該測試驅動軟件必須正確讀取文件的數據,數據之間的間隔為逗號或空格等特定的分隔符。
建立測試驅動軟件和被測軟件之間的網絡通信,為數據的發送和接收提供鏈路,測試驅動軟件發送測試報文數據,同時接收被測軟件輸出的報文數據。
測試驅動軟件接收被測軟件的輸出報文數據,和已知的數據文件進行結果比較,給出合格和不合格的判定。
LabWindows/CVI 是一個ANSI C 開發環境,用于儀器控制、自動控制、數據處理的應用軟件,主要采用事件驅動與回調函數方式,編程方法簡單易學。工具提供了標準函數庫和交互式的函數面板,用戶利用便捷的用戶界面編輯器,代碼創建向導及函數庫,實現可視化用戶界面的建立,顯示和控制,很容易生成各種應用程序,并且這些程序可以在不同的平臺上移植,所以選用LabWindows/CVI 開發該測試驅動軟件[2]。
文件信息填寫的內容包括文件的數據類型(十六進制、八進制或者十進制),數據的間隔(逗號或者空格),數據發送間隔(0到10 秒),是否循環發送,使用庫函數GetCtrlVal()獲取控件的當前值。用戶選擇“打開”按鈕,瀏覽并打開測試計算機要導入發送的文件名。用戶選擇“預期輸出”按鈕,瀏覽并打開被測軟件預期輸出的數據文件。用戶選擇“保存”按鈕,選擇測試計算機保存被測軟件實際輸出的數據的文件名。文件信息填寫的界面如圖1所示。

圖1 文件信息界面
打開文件使用OpenFile () 函數,使用ReadLine(filesucc1,Binarydata[countline],-1)按行讀取文件的字符串內容,filesucc1 是打開文件的句柄,Binarydata[countline]數組保存每一行的內容,-1 表示讀取到文件的結束。保存數據使用庫函數WriteLine(filesucc2,msg,-1) 對接收的數據按行進行保存,filesucc2 是保存文件的句柄,msg 是需要保存的字符串。
函數strtodata(char *SourceString,int Style,int Mark,int Len,int*DestData) 實現的功能是將特定字符為間隔的字符串轉換為數值,其中SourceString 為源字符串指針,Style 為數據的類型樣式(其中8 表示源字符串為八進制,10 表示源字符串為十進制,16表示源字符串為十六進制),Mark 表示間隔標識符,Len 表示需要轉換的字符串長度,DestData 為源字符串轉換成數值后的指針,strtodata()函數的偽代碼如下:1for(j=0; j<len; j++)2 if(SourceString[j] == Mark) // 從字符串中以指定字符為間隔提取數值

使用LabWindows/CVI 進行網絡通信時,測試驅動軟件通過UDP 協議與被測軟件建立鏈路連接,測試驅動軟件直接調用庫函數CreateUDPChannel (unsigned int localPort, unsigned int*channel),建立發送和接收數據的鏈路,退出程序時調用DisposeUDPChannel(unsigned int channel)釋放通信鏈路。填寫地址信息的界面如圖2 所示(IP 選擇Sring 控件,PORT 選擇Numeric 控件),包括IP 地址和端口號(PORT)。使用定時器(Timer)每隔特定時間間隔觸發回調函數,回調函數中調用庫函數UDPRead()和UDPWrite()進行數據的收發操作,庫函數的具體使用方法可查看LabWindows/CVI 的幫助文件。

圖2 地址界面
測試驅動軟件的結果顯示如圖3 所示,采用Table 控件,增加行和列的名稱,下圖中的輸入列為測試驅動軟件發送的數據,預期輸出列是被測軟件的預期輸出,實際輸出列是被測軟件的實際輸出,程序根據預期輸出和實際輸出的值進行比較,從而得到軟件測試結果合格或者不合格。

圖3 結果判定
圖3 打印輸出的是字符串,測試驅動軟件收到是數據數組,測試驅動軟件需要將一組數據轉換成字符串,采用語句p +=sprintf(targetstring+p,"%#04x,", numdata[j])實現,p 為sprintf()函數一共轉換的字符個數,numdata[]為數據數組,targetstring 為轉換后的字符串指針,根據不同的數據類型和顯示格式的需要,增加判定條件,同時修改sprintf()的格式類型即可。
本文只討論了基于網口的自動化測試軟件,如果被測軟件有串口通信,可以擴展進行串口通信,只需在界面上增加串口參數設置,根據測試需求填寫端口號、波特率、數據位、停止位、校驗位等,調用庫函數ComRd()和ComWrt()進行數據收發等。
通過該測試驅動軟件,可以向被測軟件定時發送特定格式的數據文件,同時接收被測軟件的實際輸出值,通過對比預期輸出和實際輸出值,得到軟件的測試結果。通過采用該測試驅動軟件測試航跡軟件,克服了串口調試助手讀取數據的局限性,同時節約了人力和時間資源,提高了效率,在實際的軟件測試中具有較好的應用價值。