摘 要: 為了實(shí)現(xiàn)對(duì)嵌入式控制軟件的測(cè)試,利用開(kāi)發(fā)工具Realview MDK提供的仿真測(cè)試技術(shù)進(jìn)行前期測(cè)試,并設(shè)計(jì)一種基于XML腳本語(yǔ)言描述測(cè)試用例的自動(dòng)化測(cè)試方法完成功能測(cè)試,從而較完善地滿足了對(duì)該軟件的測(cè)試需求。
關(guān)鍵詞: 電子直線加速器; 嵌入式軟件測(cè)試; 控制軟件
醫(yī)用電子直線加速器控制軟件是一種使用在醫(yī)療設(shè)備上的嵌入式應(yīng)用軟件。目前市面上對(duì)嵌入式軟件測(cè)試的工具一般都價(jià)格昂貴,而且不同的嵌入式軟件不完全適合醫(yī)用電子直線加速器控制軟件的測(cè)試;其次,嵌入式軟件都與硬件相結(jié)合,測(cè)試起來(lái)更有難度。為解決這一難題,設(shè)計(jì)一套較為通用的測(cè)試方法來(lái)滿足對(duì)該軟件的功能測(cè)試需求,具有很好的現(xiàn)實(shí)意義。
1 醫(yī)用電子直線加速器控制軟件的硬件系統(tǒng)
放射治療在對(duì)惡性腫瘤的治療中起著重要的作用,而放射治療技術(shù)的發(fā)展與加速器技術(shù)的發(fā)展緊密相關(guān)[1]。當(dāng)前,醫(yī)用加速器的代表是醫(yī)用直線加速器,因而對(duì)其軟件的可靠性和功能性的要求更高于其他領(lǐng)域。
本文中的醫(yī)用電子直線加速器控制軟件采用CE9200-3 ARM開(kāi)發(fā)板,為開(kāi)發(fā)提供基本的底層硬件、系統(tǒng)和驅(qū)動(dòng)等資源。其主要配置包括:CPU為AT91RM9200, 7片16路輸入的ADC板子,3片數(shù)字輸入輸出板。對(duì)于該軟件的測(cè)試,與一般軟件的很多測(cè)試方法是通用的,但是由于它是嵌入式軟件,而且涉及到硬件,需要采用一些特殊的測(cè)試方法來(lái)區(qū)別對(duì)待。
2 基于MDK的軟件仿真測(cè)試
在一般的嵌入式系統(tǒng)開(kāi)發(fā)中,軟件的開(kāi)發(fā)和測(cè)試都是在目標(biāo)硬件平臺(tái)初步開(kāi)發(fā)完成之后進(jìn)行的。Keil公司開(kāi)發(fā)的ARM開(kāi)發(fā)工具M(jìn)DK是用來(lái)開(kāi)發(fā)基于ARM 核的系列微控制器的嵌入式應(yīng)用程序[2]。RealView MDK可以使嵌入式系統(tǒng)的軟硬件協(xié)同開(kāi)發(fā)、同步進(jìn)行。
2.1 MDK軟件仿真器
大多開(kāi)發(fā)工具僅局限于對(duì)內(nèi)核指令集的仿真,而Realview MDK的軟件仿真器不但可以仿真ARM的指令集,還能仿真許多外圍設(shè)備,包括串口、外部I/O、中斷以及片上外設(shè)在內(nèi)的整個(gè)目標(biāo)硬件[3]。不僅如此,其強(qiáng)大之處還體現(xiàn)在它的各種調(diào)試工具上,通過(guò)與這些調(diào)試工具進(jìn)行交互,MDK的軟件仿真器可以精確地仿真各種片上外圍接口以及這些接口與外部芯片通信的過(guò)程。AT91RM9200軟件仿真器包括以下仿真模塊:PWM、UART、I2C、SPI、DMA、ADC、NAN Flash控制器、看門(mén)狗定時(shí)器等[4]。其中,每一個(gè)仿真模塊都對(duì)應(yīng)一個(gè)對(duì)話框,該對(duì)話框包含了相應(yīng)接口的所有寄存器。
當(dāng)使用AT91RM9200軟件仿真器調(diào)試程序時(shí),可以在這些外圍接口對(duì)話框中觀察到每一個(gè)寄存器值的狀態(tài)及其改變的情況;還可以通過(guò)修改這些寄存器的值來(lái)達(dá)到控制程序運(yùn)行的目的。軟件仿真器的每一個(gè)接口模塊都提供了引腳寄存器VTREG,用于記錄CPU引腳的狀態(tài)。這些引腳寄存器的值可以通過(guò)邏輯分析儀、調(diào)試腳本顯示和修改,使得嵌入式軟件的調(diào)試變得更加簡(jiǎn)單易行。圖1為通過(guò)調(diào)試腳本向AT91RM9200軟件仿真器的ADC模塊的引腳ADC2輸入正弦信號(hào),然后通過(guò)邏輯分析儀將這個(gè)引腳寄存器的狀態(tài)顯示出來(lái)的仿真圖。
2.2 UART通信仿真
很多微處理器都提供了UART或RS232串行接口[5]。μVision4調(diào)試器可仿真微處理器UART接口,并提供了3個(gè)像操作終端那樣方便的串行接口。通過(guò)Peripherals菜單很容易查看并設(shè)置通信的波特率和其他參數(shù),當(dāng)然也可以在程序中編寫(xiě)通信設(shè)置的參數(shù)。通過(guò)模擬超級(jí)終端, 軟件就可以在沒(méi)有硬件支持的情況下得到如圖2所示結(jié)果。
2.3 GPIO仿真
GPIO的仿真功能可以通過(guò)以下的小程序?qū)崿F(xiàn):依次閃爍每個(gè)LED,先從前向后,再由后至前,如此反復(fù)連續(xù)。其功能函數(shù)代碼如下:
int main (void) {
unsigned int i; /*LED var */
IODIR1 = 0x00FF0000;
/* P1.16..23 defined as Outputs */
while (1) { /*Loop forever */
for (i = 1<<16; i < 1<<23; i <<= 1){
/* Blink LED 0,1,2,3,4,5,6 */
IOSET1 = i; /*Turn on LED */
wait (); /*call wait function*/
IOCLR1 = i; } /*Turn off LED*/
for (i = 1<<23; i>1<<16; i>>=1){
/* Blink LED 7,6,5,4,3,2,1 */
IOSET1 = i; /* Turn on LED */
wait (); /* call wait function */
IOCLR1 = i; } /* Turn off LED */
}
}
仿真調(diào)試的片上外圍設(shè)備狀態(tài)如圖3所示,GPIO Port1外設(shè)對(duì)話框中的Output的第22位被置位,表示對(duì)應(yīng)的LED燈被點(diǎn)亮。從圖中GPIO的邏輯分析儀信號(hào)中可以清晰看出LED 閃爍的全過(guò)程,并直接查看IO引腳的值。
2.4 性能測(cè)試
RealView作為對(duì)醫(yī)用電子直線加速器控制軟件仿真測(cè)試還能做到對(duì)其代碼覆蓋率進(jìn)行測(cè)試,這在開(kāi)發(fā)和測(cè)試過(guò)程中都比較實(shí)用。μVision4仿真器的執(zhí)行剖析器能夠顯示已知地址區(qū)域執(zhí)行統(tǒng)計(jì)的信息。對(duì)沒(méi)有調(diào)試信息的地址區(qū)域,顯示列表中不會(huì)顯示這塊區(qū)域的執(zhí)行情況。μVision4的性能分析儀則可用于顯示整個(gè)模塊的執(zhí)行時(shí)間及各個(gè)模塊被調(diào)用的次數(shù)。μVision4的仿真器可以記錄整個(gè)程序代碼的執(zhí)行時(shí)間及函數(shù)調(diào)用情況。
當(dāng)需要優(yōu)化代碼時(shí),可以修改后直接進(jìn)行仿真,從執(zhí)行的時(shí)間測(cè)試出代碼優(yōu)化程度,很方便直觀。
2.5 覆蓋統(tǒng)計(jì)
μVision4提供了一個(gè)代碼統(tǒng)計(jì)執(zhí)行情況的功能,該功能以代碼統(tǒng)計(jì)對(duì)話框的形式表示出來(lái)。在調(diào)試框中,已執(zhí)行的代碼行在左側(cè)以綠色標(biāo)出。當(dāng)測(cè)試嵌入式應(yīng)用程序時(shí),可用此功能查看哪些程序還沒(méi)有被執(zhí)行。代碼統(tǒng)計(jì)框提供了程序中各個(gè)模塊及函數(shù)的執(zhí)行情況, 如圖4所示。
在Current Module下拉列表框中列出了程序中的所有模塊,在下面的列表框中顯示了相應(yīng)模塊中指令的執(zhí)行情況,即每個(gè)模塊或函數(shù)的指令執(zhí)行的百分比,只要執(zhí)行了的部分均以綠色標(biāo)出,在Output Window的Command頁(yè)中可以用Coverage調(diào)試命令將此信息輸出到輸出窗口中。當(dāng)某個(gè)函數(shù)的執(zhí)行率覆蓋不足90%以上,可以查看沒(méi)有被綠色覆蓋的代碼,然后通過(guò)改寫(xiě)代碼或是加上宏定義的測(cè)試函數(shù)執(zhí)行未執(zhí)行的代碼和路徑,這也是一種測(cè)試覆蓋率的好方法。
3 基于XML腳本的自動(dòng)化測(cè)試
醫(yī)用電子直線加速器控制軟件的大部分測(cè)試用例都是從上位機(jī)發(fā)送給下位機(jī)的操作指令,從而控制下位機(jī)的治療床運(yùn)動(dòng),因此測(cè)試部分的指令是測(cè)試該控制軟件的核心。由于指令部分的測(cè)試用例多,而且需要反復(fù)測(cè)試,單純依靠手工測(cè)試非常耗時(shí),因而需要考慮自動(dòng)化測(cè)試來(lái)提高測(cè)試效率。
3.1 測(cè)試用例的XML設(shè)計(jì)
作為W3C的一個(gè)數(shù)據(jù)交換推薦標(biāo)準(zhǔn),XML已經(jīng)被廣泛應(yīng)用于很多領(lǐng)域。用XML作為測(cè)試腳本的統(tǒng)一格式,可以降低測(cè)試腳本與測(cè)試工具之間的耦合度,提高測(cè)試的可擴(kuò)展性[6]。XML允許定義自己的標(biāo)記集,“形式良好”的XML文件才能被正確地解釋處理。在XML中一個(gè)標(biāo)簽用于描述一段數(shù)據(jù);另一個(gè)標(biāo)簽可分為開(kāi)始標(biāo)簽和結(jié)束標(biāo)簽。在開(kāi)始標(biāo)簽和結(jié)束標(biāo)簽之間,又可以使用其他標(biāo)簽描述其他數(shù)據(jù),以此來(lái)實(shí)現(xiàn)數(shù)據(jù)關(guān)系的描述。XML與HTML的差別在于,HTML是用來(lái)顯示的,而XML是用于數(shù)據(jù)的傳輸網(wǎng)絡(luò)傳輸數(shù)據(jù)、存儲(chǔ)數(shù)據(jù)的。利用這一點(diǎn),可以用XML來(lái)描述測(cè)試用例,然后通過(guò)串口或網(wǎng)口對(duì)下位機(jī)傳送指令并進(jìn)行測(cè)試。其XML的格式為:
<commands>
<type>HELP</type>
<type>RESET<set></set></type>
<type>INPUT<set>SET</set></type>
<type>INPUT<set>SET BIN</set></type>
<type>OUTPUT<set>SET WINDOW</set></type>
<type>OUTPUT <set>A </set><para>GANTRY HEAD
FLOLON </para></type>
</commands>
3.2 測(cè)試平臺(tái)的設(shè)計(jì)
為將測(cè)試得到的信息顯示出來(lái),并進(jìn)行下一步的自動(dòng)化測(cè)試,需要搭建一個(gè)測(cè)試平臺(tái),模擬上位機(jī)給下位機(jī)發(fā)送指令。本測(cè)試平臺(tái)采用宿主機(jī)與目標(biāo)機(jī)交聯(lián)測(cè)試的方式,程序的編譯、測(cè)試分析運(yùn)行在宿主機(jī)上,程序運(yùn)行后得到的測(cè)試信息在目標(biāo)機(jī)上產(chǎn)生,通過(guò)物理/邏輯連接傳輸?shù)剿拗鳈C(jī)上,由顯示模塊執(zhí)行。通常物理連接為串口或局域網(wǎng)絡(luò),邏輯連接為串口通信協(xié)議或TCP/IP網(wǎng)絡(luò)協(xié)議,本文研究的測(cè)試平臺(tái)宿主機(jī)與目標(biāo)機(jī)之間的通信采用串口連接。
3.3 自動(dòng)化測(cè)試的實(shí)現(xiàn)
將控制軟件每個(gè)模塊的XML腳本文件作為測(cè)試用例獨(dú)立存放在一個(gè)文件夾中,然后把宿主機(jī)與目標(biāo)機(jī)通過(guò)串口連接起來(lái),并在目標(biāo)機(jī)上下載好所需要測(cè)試的軟件。本測(cè)試平臺(tái)由用戶選擇需要導(dǎo)入的XML測(cè)試腳本,采用DOM解析編寫(xiě)的XML腳本,文檔對(duì)象模型DOM(Document Object Model)采用與平臺(tái)和語(yǔ)言無(wú)關(guān)的方式表示XML文檔的W3C標(biāo)準(zhǔn)。通俗地說(shuō),就是通過(guò)解析XML文檔,為XML文檔在邏輯上建立一個(gè)樹(shù)模型,樹(shù)的節(jié)點(diǎn)是一個(gè)個(gè)對(duì)象。通過(guò)存取這些對(duì)象就能夠存取XML文檔的內(nèi)容,然后執(zhí)行向串口定時(shí)發(fā)送經(jīng)過(guò)解析的測(cè)試用例,查看從串口得到的反饋,可以判斷測(cè)試用例是否通過(guò)。將所有的測(cè)試用例文檔(即XML文件)管理起來(lái),有利于之后的回歸測(cè)試,大大提高測(cè)試的效率。
3.4 測(cè)試結(jié)果的顯示
由于測(cè)試用例很多,所以隨機(jī)選取50個(gè)對(duì)治療床的控制的測(cè)試用例來(lái)進(jìn)行測(cè)試,查看執(zhí)行結(jié)果與執(zhí)行效率,圖5為測(cè)試用例的通過(guò)情況,并通過(guò)圖6的餅狀圖直觀顯示測(cè)試用例的通過(guò)率。
在軟件開(kāi)發(fā)階段中模擬仿真得出正確的結(jié)果,可以減少下載到硬件調(diào)試的時(shí)間,大大提高效率[7],本文中實(shí)例均在開(kāi)發(fā)板上調(diào)試通過(guò)。利用RealView MDK的軟件仿真功能可以大大提高項(xiàng)目的前期開(kāi)發(fā)效能,幫助縮短開(kāi)發(fā)周期;需要上位機(jī)發(fā)送指令控制下位機(jī)的運(yùn)動(dòng)時(shí),透過(guò)醫(yī)用電子直線加速器控制軟件特有的性質(zhì),可以實(shí)現(xiàn)測(cè)試用例的自動(dòng)化執(zhí)行;減少人工投入,而且便于軟件更新或是軟件升級(jí)的回歸測(cè)試,這種測(cè)試方法同樣比較適合類(lèi)似于醫(yī)用電子的控制軟件的測(cè)試。
參考文獻(xiàn)
[1] 程敬海.放射治療設(shè)備[D].上海:上海理工大學(xué)醫(yī)療器械學(xué)院,2009.
[2] ARM 公司. RealView MDK—引領(lǐng)ARM 開(kāi)發(fā)工具新潮流[J]. 電子產(chǎn)品世界,2007(11):125-127.
[3] 庫(kù)少平,徐良平. RealView MDK 軟件仿真器的測(cè)試技術(shù)研究[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2008(8):18-21.
[4] 李寧.ARM開(kāi)發(fā)工具RealView MDK 使用入門(mén)[M].北京:北京航空航天大學(xué)出版社,2008.
[5] 邵榮防,羅克露.嵌入式系統(tǒng)仿真測(cè)試平臺(tái)的體系結(jié)構(gòu)研究[J].福建電腦,2004(7):4-5.
[6] 朱經(jīng)緯. XML技術(shù)在軟件測(cè)試自動(dòng)化中的應(yīng)用[J].計(jì)算機(jī)工程,2005,31(02):94-95.
[7] 蔡建平. 嵌入式軟件測(cè)試實(shí)用技術(shù)[M]. 北京:清華大學(xué)出版社,2010.