徐春梅
(四川九洲空管科技有限責任公司,四川 綿陽621000)
二次雷達(Secondary surveillance radar,簡稱SSR)在現(xiàn)代空管領域中發(fā)揮著重要的作用,SSR 包括詢問機和應答機,主要工作原理是詢問機發(fā)射詢問信號,飛機上的應答機收到詢問信號后,經(jīng)過信號處理、譯碼,然后由應答機發(fā)送應答信號,地面詢問機天線收到應答信號后,再經(jīng)過信號處理和數(shù)據(jù)處理,可以獲取飛機代號、高度、方位和距離等目標信息,形成目標航跡后傳送到管制中心,從而對空中目標進行監(jiān)視[1]。其中形成目標航跡的軟件就是航跡軟件,指目標航跡的建立、更新和刪除等。航跡軟件是嵌入式軟件,處理的數(shù)據(jù)量較大,由于軟件運行環(huán)境較難搭建,通用測試工具環(huán)境缺乏,對于嵌入式軟件的系統(tǒng)測試提出了較高的要求。
系統(tǒng)測試主要是通過對被測軟件(運行后)輸入測試用例,對被測軟件的運行情況進行分析,輸入和輸出的關系是否滿足軟件的功能需求。實驗室需要對被測軟件搭建測試平臺,一種方式是手動輸入測試報文,通過通信協(xié)議編輯報文、組報、發(fā)送到被測軟件,人工比較測試結果是否滿足預期結果,這種方式耗費較多的人力和時間成本。二是開發(fā)簡單高效的自動化測試驅動軟件,可以重復使用,提高工作效率。本文的被測軟件是通過網(wǎng)口(UDP 協(xié)議)通信,所以主要討論基于網(wǎng)口的自動化測試驅動軟件的設計與實現(xiàn)。
測試人員考慮采用網(wǎng)絡調試助手作為被測軟件的測試輸入數(shù)據(jù)的工具,比如在網(wǎng)絡調試助手的發(fā)送區(qū)設置選中“文件載入”,載入文件的數(shù)據(jù)內容為“77”(16 進制),設置為十六進制顯示,網(wǎng)口調試助手以字符串的形式讀取文件,數(shù)據(jù)待發(fā)送區(qū)域顯示為“37 37”,點擊“發(fā)送”,發(fā)送區(qū)域顯示發(fā)送數(shù)據(jù)“37 37”,串口調試助手把十六進制數(shù)據(jù)識別為字符串,會導致發(fā)送的數(shù)據(jù)出現(xiàn)錯誤。所以該測試驅動軟件必須正確讀取文件的數(shù)據(jù),數(shù)據(jù)之間的間隔為逗號或空格等特定的分隔符。
建立測試驅動軟件和被測軟件之間的網(wǎng)絡通信,為數(shù)據(jù)的發(fā)送和接收提供鏈路,測試驅動軟件發(fā)送測試報文數(shù)據(jù),同時接收被測軟件輸出的報文數(shù)據(jù)。
測試驅動軟件接收被測軟件的輸出報文數(shù)據(jù),和已知的數(shù)據(jù)文件進行結果比較,給出合格和不合格的判定。
LabWindows/CVI 是一個ANSI C 開發(fā)環(huán)境,用于儀器控制、自動控制、數(shù)據(jù)處理的應用軟件,主要采用事件驅動與回調函數(shù)方式,編程方法簡單易學。工具提供了標準函數(shù)庫和交互式的函數(shù)面板,用戶利用便捷的用戶界面編輯器,代碼創(chuàng)建向導及函數(shù)庫,實現(xiàn)可視化用戶界面的建立,顯示和控制,很容易生成各種應用程序,并且這些程序可以在不同的平臺上移植,所以選用LabWindows/CVI 開發(fā)該測試驅動軟件[2]。
文件信息填寫的內容包括文件的數(shù)據(jù)類型(十六進制、八進制或者十進制),數(shù)據(jù)的間隔(逗號或者空格),數(shù)據(jù)發(fā)送間隔(0到10 秒),是否循環(huán)發(fā)送,使用庫函數(shù)GetCtrlVal()獲取控件的當前值。用戶選擇“打開”按鈕,瀏覽并打開測試計算機要導入發(fā)送的文件名。用戶選擇“預期輸出”按鈕,瀏覽并打開被測軟件預期輸出的數(shù)據(jù)文件。用戶選擇“保存”按鈕,選擇測試計算機保存被測軟件實際輸出的數(shù)據(jù)的文件名。文件信息填寫的界面如圖1所示。
圖1 文件信息界面
打開文件使用OpenFile () 函數(shù),使用ReadLine(filesucc1,Binarydata[countline],-1)按行讀取文件的字符串內容,filesucc1 是打開文件的句柄,Binarydata[countline]數(shù)組保存每一行的內容,-1 表示讀取到文件的結束。保存數(shù)據(jù)使用庫函數(shù)WriteLine(filesucc2,msg,-1) 對接收的數(shù)據(jù)按行進行保存,filesucc2 是保存文件的句柄,msg 是需要保存的字符串。
函數(shù)strtodata(char *SourceString,int Style,int Mark,int Len,int*DestData) 實現(xiàn)的功能是將特定字符為間隔的字符串轉換為數(shù)值,其中SourceString 為源字符串指針,Style 為數(shù)據(jù)的類型樣式(其中8 表示源字符串為八進制,10 表示源字符串為十進制,16表示源字符串為十六進制),Mark 表示間隔標識符,Len 表示需要轉換的字符串長度,DestData 為源字符串轉換成數(shù)值后的指針,strtodata()函數(shù)的偽代碼如下:1for(j=0; j<len; j++)2 if(SourceString[j] == Mark) // 從字符串中以指定字符為間隔提取數(shù)值
使用LabWindows/CVI 進行網(wǎng)絡通信時,測試驅動軟件通過UDP 協(xié)議與被測軟件建立鏈路連接,測試驅動軟件直接調用庫函數(shù)CreateUDPChannel (unsigned int localPort, unsigned int*channel),建立發(fā)送和接收數(shù)據(jù)的鏈路,退出程序時調用DisposeUDPChannel(unsigned int channel)釋放通信鏈路。填寫地址信息的界面如圖2 所示(IP 選擇Sring 控件,PORT 選擇Numeric 控件),包括IP 地址和端口號(PORT)。使用定時器(Timer)每隔特定時間間隔觸發(fā)回調函數(shù),回調函數(shù)中調用庫函數(shù)UDPRead()和UDPWrite()進行數(shù)據(jù)的收發(fā)操作,庫函數(shù)的具體使用方法可查看LabWindows/CVI 的幫助文件。
圖2 地址界面
測試驅動軟件的結果顯示如圖3 所示,采用Table 控件,增加行和列的名稱,下圖中的輸入列為測試驅動軟件發(fā)送的數(shù)據(jù),預期輸出列是被測軟件的預期輸出,實際輸出列是被測軟件的實際輸出,程序根據(jù)預期輸出和實際輸出的值進行比較,從而得到軟件測試結果合格或者不合格。
圖3 結果判定
圖3 打印輸出的是字符串,測試驅動軟件收到是數(shù)據(jù)數(shù)組,測試驅動軟件需要將一組數(shù)據(jù)轉換成字符串,采用語句p +=sprintf(targetstring+p,"%#04x,", numdata[j])實現(xiàn),p 為sprintf()函數(shù)一共轉換的字符個數(shù),numdata[]為數(shù)據(jù)數(shù)組,targetstring 為轉換后的字符串指針,根據(jù)不同的數(shù)據(jù)類型和顯示格式的需要,增加判定條件,同時修改sprintf()的格式類型即可。
本文只討論了基于網(wǎng)口的自動化測試軟件,如果被測軟件有串口通信,可以擴展進行串口通信,只需在界面上增加串口參數(shù)設置,根據(jù)測試需求填寫端口號、波特率、數(shù)據(jù)位、停止位、校驗位等,調用庫函數(shù)ComRd()和ComWrt()進行數(shù)據(jù)收發(fā)等。
通過該測試驅動軟件,可以向被測軟件定時發(fā)送特定格式的數(shù)據(jù)文件,同時接收被測軟件的實際輸出值,通過對比預期輸出和實際輸出值,得到軟件的測試結果。通過采用該測試驅動軟件測試航跡軟件,克服了串口調試助手讀取數(shù)據(jù)的局限性,同時節(jié)約了人力和時間資源,提高了效率,在實際的軟件測試中具有較好的應用價值。