賈 虹
(南京模擬技術研究所質量處軟件測試中心,南京 210000)
在軟件研發的過程中,軟件測試作為質量把關的重要環節,已經更加引起國內軟件企業的關注。隨著自動化工程技術的快速發展,軟件規模及復雜度的迅速提升,自動化軟件測試在軟件開發過程中的作用越來越重要。雖然目前自動化軟件測試技術已然取得了明顯的進步,但針對某些不具備輸入輸出測試條件的配置項的軟件接口測試,仍沒有便捷靈活的、統一的測試工具及相關標準可利用并遵循。本文以IOTest為工具,介紹了一種自動化接口測試方法。
在多模塊軟件的各子系統與主系統聯調中,接口測試采用黑盒方法,對各系統進行正確性檢查和排錯。運用該方法具體包括:對軟件需求中的輸入與預期輸出之間的一致性進行檢查;檢查代碼是否完成預定的功能;不包括代碼的書寫規范與潛在的邏輯風險。目前進行軟件接口測試的工具有SOAPui、Jemeter及本文所提到的IOTest。
接口測試是提高軟件質量的有效辦法,但是基于系統測試的環境限制,很多輸入項依賴于其他分系統的輸出。在分系統未驗證或未完成的情況下,該輸出不具備作為被測系統輸入的充分條件。一直以來,網絡調試助手、串口工具均依賴人工輸入的方法來實現輸入,并人工將輸出結果與預期結果進行比較,工作繁瑣且容易出錯,重復工作量大,數據輸入方式單一。IOTest接口測試工具軟件解決了上述難點,可對嵌入式軟件進行實時非侵入測試并支持插件式二次開發,可滿足專業用戶的測試需求。
利用IOTest測試工具,測試人員可以完成:測試過程管理、仿真模型圖形化開發及代碼自動生成、仿真模型代碼編譯、測試腳本輔助編輯、測試過程監控、實時測試、測試數據收集定制、測試數據事后分析、日志管理及擴展功能(可集成matlab)等方面的工作。IOTest具有通用性、靈活性、易用性等特點,且在時間特性上可滿足工作周期不小于1ms的實時嵌入式軟件的系統測試要求。IOTest目前推薦使用的操作系統為Windows XP sp3。
3.1.1 黑盒測試功能
黑盒測試是一種動態測試,用于檢查模塊或各系統之間接口是否按照需求規范制定的方式運行。IOTest通過檢查測試用例腳本運行的結果與期望的輸出結果是否匹配來進行測試。
3.1.2 回歸測試功能
回歸測試用于檢查通信協議的改動是否引入了之前出現的錯誤。IOTest通過自動執行先前的測試腳本進行回歸測試。
IOTest通過在測試前仿真被測系統的交聯設備的行為,由交聯環境圖自動生成模型的框架代碼,在主機上完成代碼的編譯鏈接,得到目標機上能運行的可執行文件,根據不同的測試要求生成對應的測試用例,完成模型的初始化、任務調度,以及模型變量的收發工作。用戶通過編寫測試腳本描述用戶測試意圖,腳本是具有正規語法的數據和指令的集合,解釋器通過腳本文本來實現相應功能。測試啟動后,由實時調度程序驅動腳本解釋器,將測試腳本翻譯為測試動作,再分發至各仿真模型。同時,解釋器、仿真模型與被測軟件之間通過交互對測試反饋進行處理,完成最終的測試任務。
測試過程中通過“周期任務”“異步任務”(事件驅動型任務)來驅動模型和測試腳本之間的數據收發,并對測試過程進行監控,在接受任務過程中,系統會對接受數據的校驗元素進行檢查,若傳輸過程中出現錯誤,則系統會發出警告。
測試結束后,IOTest會通過TDA(測試結果分析工具)對測試結果進行分析:啟動MySQL服務器,TDA 2.0通過讀取自動保存在數據庫中的測試結果,并在工程管理區和分析管理區以樹形結構顯示當前要分析的結果文件(包括列表、曲線、腳本),主框架的日志區顯示當前工程測試結果的詳細日志信息。工作原理如圖1所示。
3.3.1 對被測軟件進行建模

圖1 IOTest工作原理
IOTest提供多種連接總線:Local、RS422、RS232、MIL-STD-1553B、ARINC429、CAN、以太網繼電器等。本文以連接RS232總線的串口通信為例,對照RS232(PCI—1620)管腳圖,將被測計算機端口與IOTest管腳接口連接,設計RS232串口通信的交聯環境圖(安裝串口調試助手的測試機為被測設備),端口號為6,波特率115200bps,其中發送數據位數6,奇偶校驗,停止位數1;接收端設備modol_1,數據位數8。對被測軟件進行建模,如圖2所示。
每個仿真模型都由一個“.c”“.h”和文件組成,如實例中組成模型JIAHONG的代碼文件有JIAHONG.h與JIAHOGN.c文件,位置存于測試工程下“模型代碼 ode_1”中,結構體如圖3所示。
模型結構體繼承BaseModel,具有BaseModel的“模型初始化”“模型結束”“接收ISR數據”等方法,且方法以函數指針的形式存在,在模型的“.c”文件中給出這3個函數指針制定具體的函數實現。其中ISR任務調度函數如圖4所示。
從圖4中可以看出,當SemIsrnode為可用時,表明有數據到來,然后根據數組變量“g_models”依次調用所有的ReceiveIsrData函數進行處理,實現以中斷的方式接受串口數據,如RS422、RS232等。
3.3.2 對判斷結構進行顯示
將模塊之間的通信格式按照協議進行模塊之間通信的編輯,分別將輸入輸出定義為Send和Receive,數據為“UChar”類型。
將數據顯示與數據進行關聯,由工程顯示面板中的樹形圖接收。為直觀比對測試結果,在面板中增加信號指示燈標識,如果接收幀頭為“0X41”,則指示燈為綠色,反之則為紅色。
3.3.3 根據實際需求編寫測試腳本
在軟件添加對應顯示、模型、收集方案后,可根據實際測試需求對發送端數據進行控制。根據常見的測試要求,IOTest端發送變量Send,數據格式為“D1 F1 02 00 03 21”,第六位0x21為前5位數據的異或和。發送時要求第三位數據進行自加并自動計算前5位校驗和,發送時間為10s,間隔時間1s。Task1 腳本如圖5所示。

圖2 系統交聯環境圖

圖3 模型JIAHONG的結構體

圖4 ISR任務調度函數

圖5 Task1腳本
設置任務周期為1000ms,結束時間為10000ms。Task2腳本如圖6所示。

圖6 Task2腳本
模型周期任務的函數入口為“void JIAHONG_period_Task(JIAHONG*pMdl) ”,該任務進行周期變量的發送與接收。由測試界面的“測試開始”按鈕進行觸發,使結構體中“信號量”sem_Perd周期性釋放,每次運行周期任務模型計數器timercounter增加相應數值。模型周期任務代碼如圖7所示。
待腳本、顯示、收集方案編輯好后將其關聯至同一被測單元中,將整個工程進行編譯、下載及測試初始化。被測軟件端向端口6發送錯誤數據幀。結果如圖8所示。
從全文的分析中我們可以看到,IOTest已可以充分滿足常規配置項之間的接口測試需求,在整個軟件系統未完整實現的情況下,也能有效地捕捉各分系統軟件中存在的功能缺陷,縮短測試周期并提高開發效率。

圖7 模型周期任務代碼

圖8 測試結果顯示