賈 虹
(南京模擬技術(shù)研究所質(zhì)量處軟件測(cè)試中心,南京 210000)
在軟件研發(fā)的過(guò)程中,軟件測(cè)試作為質(zhì)量把關(guān)的重要環(huán)節(jié),已經(jīng)更加引起國(guó)內(nèi)軟件企業(yè)的關(guān)注。隨著自動(dòng)化工程技術(shù)的快速發(fā)展,軟件規(guī)模及復(fù)雜度的迅速提升,自動(dòng)化軟件測(cè)試在軟件開發(fā)過(guò)程中的作用越來(lái)越重要。雖然目前自動(dòng)化軟件測(cè)試技術(shù)已然取得了明顯的進(jìn)步,但針對(duì)某些不具備輸入輸出測(cè)試條件的配置項(xiàng)的軟件接口測(cè)試,仍沒(méi)有便捷靈活的、統(tǒng)一的測(cè)試工具及相關(guān)標(biāo)準(zhǔn)可利用并遵循。本文以IOTest為工具,介紹了一種自動(dòng)化接口測(cè)試方法。
在多模塊軟件的各子系統(tǒng)與主系統(tǒng)聯(lián)調(diào)中,接口測(cè)試采用黑盒方法,對(duì)各系統(tǒng)進(jìn)行正確性檢查和排錯(cuò)。運(yùn)用該方法具體包括:對(duì)軟件需求中的輸入與預(yù)期輸出之間的一致性進(jìn)行檢查;檢查代碼是否完成預(yù)定的功能;不包括代碼的書寫規(guī)范與潛在的邏輯風(fēng)險(xiǎn)。目前進(jìn)行軟件接口測(cè)試的工具有SOAPui、Jemeter及本文所提到的IOTest。
接口測(cè)試是提高軟件質(zhì)量的有效辦法,但是基于系統(tǒng)測(cè)試的環(huán)境限制,很多輸入項(xiàng)依賴于其他分系統(tǒng)的輸出。在分系統(tǒng)未驗(yàn)證或未完成的情況下,該輸出不具備作為被測(cè)系統(tǒng)輸入的充分條件。一直以來(lái),網(wǎng)絡(luò)調(diào)試助手、串口工具均依賴人工輸入的方法來(lái)實(shí)現(xiàn)輸入,并人工將輸出結(jié)果與預(yù)期結(jié)果進(jìn)行比較,工作繁瑣且容易出錯(cuò),重復(fù)工作量大,數(shù)據(jù)輸入方式單一。IOTest接口測(cè)試工具軟件解決了上述難點(diǎn),可對(duì)嵌入式軟件進(jìn)行實(shí)時(shí)非侵入測(cè)試并支持插件式二次開發(fā),可滿足專業(yè)用戶的測(cè)試需求。
利用IOTest測(cè)試工具,測(cè)試人員可以完成:測(cè)試過(guò)程管理、仿真模型圖形化開發(fā)及代碼自動(dòng)生成、仿真模型代碼編譯、測(cè)試腳本輔助編輯、測(cè)試過(guò)程監(jiān)控、實(shí)時(shí)測(cè)試、測(cè)試數(shù)據(jù)收集定制、測(cè)試數(shù)據(jù)事后分析、日志管理及擴(kuò)展功能(可集成matlab)等方面的工作。IOTest具有通用性、靈活性、易用性等特點(diǎn),且在時(shí)間特性上可滿足工作周期不小于1ms的實(shí)時(shí)嵌入式軟件的系統(tǒng)測(cè)試要求。IOTest目前推薦使用的操作系統(tǒng)為Windows XP sp3。
3.1.1 黑盒測(cè)試功能
黑盒測(cè)試是一種動(dòng)態(tài)測(cè)試,用于檢查模塊或各系統(tǒng)之間接口是否按照需求規(guī)范制定的方式運(yùn)行。IOTest通過(guò)檢查測(cè)試用例腳本運(yùn)行的結(jié)果與期望的輸出結(jié)果是否匹配來(lái)進(jìn)行測(cè)試。
3.1.2 回歸測(cè)試功能
回歸測(cè)試用于檢查通信協(xié)議的改動(dòng)是否引入了之前出現(xiàn)的錯(cuò)誤。IOTest通過(guò)自動(dòng)執(zhí)行先前的測(cè)試腳本進(jìn)行回歸測(cè)試。
IOTest通過(guò)在測(cè)試前仿真被測(cè)系統(tǒng)的交聯(lián)設(shè)備的行為,由交聯(lián)環(huán)境圖自動(dòng)生成模型的框架代碼,在主機(jī)上完成代碼的編譯鏈接,得到目標(biāo)機(jī)上能運(yùn)行的可執(zhí)行文件,根據(jù)不同的測(cè)試要求生成對(duì)應(yīng)的測(cè)試用例,完成模型的初始化、任務(wù)調(diào)度,以及模型變量的收發(fā)工作。用戶通過(guò)編寫測(cè)試腳本描述用戶測(cè)試意圖,腳本是具有正規(guī)語(yǔ)法的數(shù)據(jù)和指令的集合,解釋器通過(guò)腳本文本來(lái)實(shí)現(xiàn)相應(yīng)功能。測(cè)試啟動(dòng)后,由實(shí)時(shí)調(diào)度程序驅(qū)動(dòng)腳本解釋器,將測(cè)試腳本翻譯為測(cè)試動(dòng)作,再分發(fā)至各仿真模型。同時(shí),解釋器、仿真模型與被測(cè)軟件之間通過(guò)交互對(duì)測(cè)試反饋進(jìn)行處理,完成最終的測(cè)試任務(wù)。
測(cè)試過(guò)程中通過(guò)“周期任務(wù)”“異步任務(wù)”(事件驅(qū)動(dòng)型任務(wù))來(lái)驅(qū)動(dòng)模型和測(cè)試腳本之間的數(shù)據(jù)收發(fā),并對(duì)測(cè)試過(guò)程進(jìn)行監(jiān)控,在接受任務(wù)過(guò)程中,系統(tǒng)會(huì)對(duì)接受數(shù)據(jù)的校驗(yàn)元素進(jìn)行檢查,若傳輸過(guò)程中出現(xiàn)錯(cuò)誤,則系統(tǒng)會(huì)發(fā)出警告。
測(cè)試結(jié)束后,IOTest會(huì)通過(guò)TDA(測(cè)試結(jié)果分析工具)對(duì)測(cè)試結(jié)果進(jìn)行分析:?jiǎn)?dòng)MySQL服務(wù)器,TDA 2.0通過(guò)讀取自動(dòng)保存在數(shù)據(jù)庫(kù)中的測(cè)試結(jié)果,并在工程管理區(qū)和分析管理區(qū)以樹形結(jié)構(gòu)顯示當(dāng)前要分析的結(jié)果文件(包括列表、曲線、腳本),主框架的日志區(qū)顯示當(dāng)前工程測(cè)試結(jié)果的詳細(xì)日志信息。工作原理如圖1所示。
3.3.1 對(duì)被測(cè)軟件進(jìn)行建模
圖1 IOTest工作原理
IOTest提供多種連接總線:Local、RS422、RS232、MIL-STD-1553B、ARINC429、CAN、以太網(wǎng)繼電器等。本文以連接RS232總線的串口通信為例,對(duì)照RS232(PCI—1620)管腳圖,將被測(cè)計(jì)算機(jī)端口與IOTest管腳接口連接,設(shè)計(jì)RS232串口通信的交聯(lián)環(huán)境圖(安裝串口調(diào)試助手的測(cè)試機(jī)為被測(cè)設(shè)備),端口號(hào)為6,波特率115200bps,其中發(fā)送數(shù)據(jù)位數(shù)6,奇偶校驗(yàn),停止位數(shù)1;接收端設(shè)備modol_1,數(shù)據(jù)位數(shù)8。對(duì)被測(cè)軟件進(jìn)行建模,如圖2所示。
每個(gè)仿真模型都由一個(gè)“.c”“.h”和文件組成,如實(shí)例中組成模型JIAHONG的代碼文件有JIAHONG.h與JIAHOGN.c文件,位置存于測(cè)試工程下“模型代碼 ode_1”中,結(jié)構(gòu)體如圖3所示。
模型結(jié)構(gòu)體繼承BaseModel,具有BaseModel的“模型初始化”“模型結(jié)束”“接收ISR數(shù)據(jù)”等方法,且方法以函數(shù)指針的形式存在,在模型的“.c”文件中給出這3個(gè)函數(shù)指針制定具體的函數(shù)實(shí)現(xiàn)。其中ISR任務(wù)調(diào)度函數(shù)如圖4所示。
從圖4中可以看出,當(dāng)SemIsrnode為可用時(shí),表明有數(shù)據(jù)到來(lái),然后根據(jù)數(shù)組變量“g_models”依次調(diào)用所有的ReceiveIsrData函數(shù)進(jìn)行處理,實(shí)現(xiàn)以中斷的方式接受串口數(shù)據(jù),如RS422、RS232等。
3.3.2 對(duì)判斷結(jié)構(gòu)進(jìn)行顯示
將模塊之間的通信格式按照協(xié)議進(jìn)行模塊之間通信的編輯,分別將輸入輸出定義為Send和Receive,數(shù)據(jù)為“UChar”類型。
將數(shù)據(jù)顯示與數(shù)據(jù)進(jìn)行關(guān)聯(lián),由工程顯示面板中的樹形圖接收。為直觀比對(duì)測(cè)試結(jié)果,在面板中增加信號(hào)指示燈標(biāo)識(shí),如果接收幀頭為“0X41”,則指示燈為綠色,反之則為紅色。
3.3.3 根據(jù)實(shí)際需求編寫測(cè)試腳本
在軟件添加對(duì)應(yīng)顯示、模型、收集方案后,可根據(jù)實(shí)際測(cè)試需求對(duì)發(fā)送端數(shù)據(jù)進(jìn)行控制。根據(jù)常見的測(cè)試要求,IOTest端發(fā)送變量Send,數(shù)據(jù)格式為“D1 F1 02 00 03 21”,第六位0x21為前5位數(shù)據(jù)的異或和。發(fā)送時(shí)要求第三位數(shù)據(jù)進(jìn)行自加并自動(dòng)計(jì)算前5位校驗(yàn)和,發(fā)送時(shí)間為10s,間隔時(shí)間1s。Task1 腳本如圖5所示。
圖2 系統(tǒng)交聯(lián)環(huán)境圖
圖3 模型JIAHONG的結(jié)構(gòu)體
圖4 ISR任務(wù)調(diào)度函數(shù)
圖5 Task1腳本
設(shè)置任務(wù)周期為1000ms,結(jié)束時(shí)間為10000ms。Task2腳本如圖6所示。
圖6 Task2腳本
模型周期任務(wù)的函數(shù)入口為“void JIAHONG_period_Task(JIAHONG*pMdl) ”,該任務(wù)進(jìn)行周期變量的發(fā)送與接收。由測(cè)試界面的“測(cè)試開始”按鈕進(jìn)行觸發(fā),使結(jié)構(gòu)體中“信號(hào)量”sem_Perd周期性釋放,每次運(yùn)行周期任務(wù)模型計(jì)數(shù)器timercounter增加相應(yīng)數(shù)值。模型周期任務(wù)代碼如圖7所示。
待腳本、顯示、收集方案編輯好后將其關(guān)聯(lián)至同一被測(cè)單元中,將整個(gè)工程進(jìn)行編譯、下載及測(cè)試初始化。被測(cè)軟件端向端口6發(fā)送錯(cuò)誤數(shù)據(jù)幀。結(jié)果如圖8所示。
從全文的分析中我們可以看到,IOTest已可以充分滿足常規(guī)配置項(xiàng)之間的接口測(cè)試需求,在整個(gè)軟件系統(tǒng)未完整實(shí)現(xiàn)的情況下,也能有效地捕捉各分系統(tǒng)軟件中存在的功能缺陷,縮短測(cè)試周期并提高開發(fā)效率。
圖7 模型周期任務(wù)代碼
圖8 測(cè)試結(jié)果顯示