李德明,葉 進(jìn)
(桂林電子科技大學(xué) 信息與通信學(xué)院,廣西 桂林 541004)
軟件測(cè)試工作是一個(gè)即復(fù)雜也需耗費(fèi)大量人力和時(shí)間的過(guò)程,據(jù)相關(guān)統(tǒng)計(jì),軟件測(cè)試的成本已超過(guò)整個(gè)軟件開發(fā)總成本的40%以上,因此,提高軟件測(cè)試工作的自動(dòng)化水平將可有效地降低軟件開發(fā)的成本、提高軟件質(zhì)量及其可靠性。
網(wǎng)絡(luò)設(shè)備的核心部件——網(wǎng)絡(luò)處理器(network processor,NP)是一種處理網(wǎng)絡(luò)傳輸?shù)膶S肅PU,擁有復(fù)雜的內(nèi)部結(jié)構(gòu)及專用的指令系統(tǒng)。相對(duì)于通用的CPU,NP擁有更為復(fù)雜的處理過(guò)程和外部接口。因此,在開發(fā)設(shè)計(jì)網(wǎng)絡(luò)處理器時(shí),往往需要利用仿真器進(jìn)行功能模擬及性能驗(yàn)證等工作,以加快系統(tǒng)開發(fā)的效率提高系統(tǒng)的可靠性。NP仿真器的正確實(shí)現(xiàn)將決定相關(guān)后繼工作能否正常展開。為此,不僅需要在其設(shè)計(jì)及實(shí)現(xiàn)階段進(jìn)行全面的單元測(cè)試,更需要系統(tǒng)集成狀態(tài)下對(duì)各個(gè)模塊及整體性能進(jìn)行全面的系統(tǒng)集成測(cè)試[1]。對(duì)于如此復(fù)雜的系統(tǒng),僅使用傳統(tǒng)手工進(jìn)行測(cè)試將難以實(shí)現(xiàn)。因此,本文針對(duì)NP 仿真器的測(cè)試工作設(shè)計(jì)了一款通用、高效的自動(dòng)測(cè)試系統(tǒng)[2]以實(shí)現(xiàn)對(duì)NP仿真器的自動(dòng)系統(tǒng)集成測(cè)試。
隨著自動(dòng)測(cè)試技術(shù)的發(fā)展,目前主要有以下幾種自動(dòng)測(cè)試技術(shù)。
(1)錄制回放技術(shù)[3]
錄制回放技術(shù)是指通過(guò)特定的工具記錄下用戶所有操作,并生成可以重復(fù)執(zhí)行的測(cè)試腳本。這種技術(shù)的優(yōu)點(diǎn)是測(cè)試人員無(wú)需掌握豐富的編程經(jīng)驗(yàn)即可錄制腳本,但當(dāng)被測(cè)對(duì)象發(fā)現(xiàn)變化時(shí),所對(duì)應(yīng)的腳本也需重新錄制,因此它的測(cè)試用例重用性差,難以維護(hù)。
(2)數(shù)據(jù)驅(qū)動(dòng)技術(shù)[4]
為了改進(jìn)錄制回放技術(shù)中數(shù)據(jù)和腳本完全綁定的缺點(diǎn),數(shù)據(jù)驅(qū)動(dòng)技術(shù)是通過(guò)運(yùn)用同一個(gè)測(cè)試用例對(duì)應(yīng)多組不同測(cè)試數(shù)據(jù)來(lái)完成測(cè)試的技術(shù)。它實(shí)現(xiàn)了測(cè)試邏輯和測(cè)試數(shù)據(jù)的分離,從而大幅提高了系統(tǒng)的復(fù)用性易及可維護(hù)性,但也對(duì)測(cè)試人員提出了更高的程序設(shè)計(jì)要求。
(3)關(guān)鍵字驅(qū)動(dòng)技術(shù)[5]
在關(guān)鍵字驅(qū)動(dòng)的測(cè)試技術(shù)中,它將整個(gè)測(cè)試邏輯按照功能關(guān)鍵字進(jìn)行邏輯分解,并把關(guān)鍵字的功能實(shí)現(xiàn)所需要的測(cè)試數(shù)據(jù)也做了適當(dāng)?shù)奶幚?,這樣用關(guān)鍵字的形式將測(cè)試邏輯封裝在數(shù)據(jù)文件中,測(cè)試工具只要能夠解析這些關(guān)鍵字即可對(duì)其應(yīng)用自動(dòng)化實(shí)現(xiàn)功能。
關(guān)鍵字驅(qū)動(dòng)技術(shù)因引入了對(duì)象化的設(shè)計(jì)思想,將關(guān)鍵字及對(duì)應(yīng)的數(shù)據(jù)封裝在對(duì)象中,使得測(cè)試腳本構(gòu)造簡(jiǎn)單、靈活,尤其適用于是一些靈活性要求較高的大型項(xiàng)目。
上述自動(dòng)測(cè)試技術(shù)各有優(yōu)缺點(diǎn),故本文采用了優(yōu)勢(shì)互補(bǔ)的形式,提出了一種融入數(shù)據(jù)的關(guān)鍵字驅(qū)動(dòng)的自動(dòng)化測(cè)試系統(tǒng)來(lái)完成NP的系統(tǒng)集成測(cè)試工作。
該自動(dòng)測(cè)試系統(tǒng)采用層次架構(gòu)[6]的應(yīng)用模型,依據(jù)系統(tǒng)功能劃分將系統(tǒng)邏輯分為:腳本處理層、測(cè)試層、服務(wù)層及適配層等4個(gè)功能應(yīng)用層。系統(tǒng)的每個(gè)功能層完成相對(duì)獨(dú)立的功能,并設(shè)計(jì)成相應(yīng)的系統(tǒng)構(gòu)件,構(gòu)件之間可以XML及SOAP[7]標(biāo)準(zhǔn)協(xié)議進(jìn)行通信。其系統(tǒng)架構(gòu)如圖1所示。
圖1 自動(dòng)測(cè)試系統(tǒng)的系統(tǒng)架構(gòu)
(1)腳本處理層是關(guān)鍵字處理的核心,其功能是管理測(cè)試人員所編寫含有關(guān)鍵字的測(cè)試用例集,根據(jù)測(cè)試用例中的關(guān)鍵字信息,將用例按測(cè)試層的需求自動(dòng)生成系統(tǒng)可識(shí)別的測(cè)試腳本,此外,還可提供多種腳本測(cè)試模式,如:?jiǎn)文_本測(cè)試運(yùn)行、多腳本(模塊)測(cè)試運(yùn)行。
(2)測(cè)試層是系統(tǒng)提供測(cè)試功能的核心組件,其中包含VPP協(xié)議報(bào)文生成、輸出結(jié)果預(yù)期及結(jié)果驗(yàn)證等三大核心模塊。報(bào)文成生模塊可根據(jù)測(cè)試腳本自動(dòng)生成相應(yīng)的VPP協(xié)議報(bào)文及其序列,作為被測(cè)NP和預(yù)期模塊的輸入數(shù)據(jù);預(yù)期模塊則可根據(jù)系統(tǒng)的配置信息、輸入的VPP報(bào)文內(nèi)容及其順序自動(dòng)預(yù)期正確的輸出報(bào)文內(nèi)容及序列;驗(yàn)正模塊提供了輸出數(shù)據(jù)與預(yù)期數(shù)據(jù)比對(duì)驗(yàn)證功能,如果輸出有誤,則可給出錯(cuò)誤類型并將相關(guān)信息提供給服務(wù)層進(jìn)行測(cè)試結(jié)果輸出。
(3)服務(wù)層提供了各種測(cè)試過(guò)程的善后處理工作,如:將各種測(cè)試結(jié)果按指定格式輸出以便后繼系統(tǒng)持續(xù)集成;備份原始測(cè)試數(shù)據(jù),提供對(duì)復(fù)雜問題的定位支持;系統(tǒng)占用資源清理等。
(4)適配層提供了測(cè)試系統(tǒng)與被測(cè)NP 仿真器之間的數(shù)據(jù)交互接口,根據(jù)NP 仿真器測(cè)試的需求,分別提供了以文件和網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)交互的文件接口和SOCKET 接口及其相關(guān)協(xié)議,以滿足不同測(cè)試需求。
(1)關(guān)鍵字的提取
根據(jù)NP 仿真器的特點(diǎn),首先將被測(cè)系統(tǒng)按可配置的模塊及其配置類型劃分成模塊關(guān)鍵字及配置關(guān)鍵字;由于NP工作狀態(tài)處理的報(bào)文長(zhǎng)度各異且總量巨大,但報(bào)文種類卻相對(duì)有限,因此可對(duì)報(bào)文類型進(jìn)行歸納,定義出相應(yīng)的報(bào)文類型關(guān)鍵字。最后,根據(jù)NP 常用處理邏輯過(guò)程定義出處理流程關(guān)鍵字等。至此,測(cè)試人員即可使用若干個(gè)關(guān)鍵字及附加數(shù)據(jù)來(lái)定義測(cè)試用例中的系統(tǒng)配置、測(cè)試數(shù)據(jù)及處理流程等關(guān)鍵測(cè)試環(huán)節(jié)。
(2)腳本的生成及處理
如圖2所示,測(cè)試人員使用融入數(shù)據(jù)的關(guān)鍵字技術(shù)設(shè)計(jì)的用例中定義了測(cè)試邏輯及步驟,但此時(shí)測(cè)試用例基本只是有一定規(guī)則的文本文件,它需在腳本生成模塊中進(jìn)行關(guān)鍵字及數(shù)據(jù)解析并生成測(cè)試模塊所需的實(shí)際測(cè)試腳本后再進(jìn)入后繼自動(dòng)測(cè)試各階段。這樣處理過(guò)程的設(shè)計(jì)主要基于以下因素:①可簡(jiǎn)化測(cè)試用例的設(shè)計(jì);②保留針對(duì)特殊測(cè)試用例(如異常測(cè)試等)自定義腳本的編寫;③適應(yīng)尚處于變化完善中的NP 仿真器的測(cè)試,實(shí)現(xiàn)測(cè)試腳本、測(cè)試邏輯和測(cè)試數(shù)據(jù)的三分離。腳本數(shù)據(jù)及關(guān)鍵字的處理及生成過(guò)程如圖3所示。其處理基本思路是將測(cè)試人員編寫的文本格式的用例中的內(nèi)容進(jìn)行逐行解析,將含有關(guān)鍵字及數(shù)據(jù)的行,通過(guò)查找該關(guān)鍵字的信息,調(diào)用相應(yīng)的處理方法,將其自動(dòng)轉(zhuǎn)換成相應(yīng)合法的腳本語(yǔ)言代碼,最后將轉(zhuǎn)換完成的腳本按用戶指定的測(cè)試方式分別加入到相應(yīng)的系統(tǒng)測(cè)試腳本集中,即可實(shí)現(xiàn)自動(dòng)進(jìn)行測(cè)試加載運(yùn)行。
圖2 用例的格式及內(nèi)容
測(cè)試層可自動(dòng)按照測(cè)試腳本生成輸入測(cè)試VPP協(xié)議報(bào)文,并通過(guò)結(jié)果預(yù)期及驗(yàn)證模塊進(jìn)行對(duì)被測(cè)NP 仿真器的處理結(jié)果進(jìn)行驗(yàn)證。驗(yàn)證內(nèi)容包括指令的處理結(jié)果的驗(yàn)證、報(bào)文的數(shù)量驗(yàn)證(分片,多播及組播)、報(bào)文的內(nèi)容驗(yàn)證、輸出通道及端口驗(yàn)證和報(bào)文輸出順序以及相關(guān)寄存器的驗(yàn)證等眾多檢測(cè)項(xiàng)目。
圖3 腳本生成模塊處理過(guò)程
在系統(tǒng)的眾多驗(yàn)證項(xiàng)目中,對(duì)報(bào)文輸出順序的驗(yàn)證,是測(cè)試層的基礎(chǔ)驗(yàn)證操作和處理關(guān)鍵。這是因?yàn)檎鎸?shí)的NP內(nèi)部采用是多通道(隊(duì)列)并行處理報(bào)文機(jī)制,以實(shí)現(xiàn)更高效的報(bào)文處理能力,為了確保對(duì)實(shí)時(shí)報(bào)文(如RTP 報(bào)文)的正確發(fā)送順序,NP內(nèi)部集成了一個(gè)專門用于確保報(bào)文正確處理順序的協(xié)處理器,此外,對(duì)其它VPP報(bào)文內(nèi)容驗(yàn)證等比對(duì)操作時(shí)也需找到與之對(duì)應(yīng)的輸入報(bào)文方可進(jìn)行。因此,對(duì)所有用例的測(cè)試驗(yàn)證中都需首先進(jìn)行輸出報(bào)文順序的驗(yàn)證操作,也是實(shí)現(xiàn)其它驗(yàn)證操作的前提。對(duì)于多隊(duì)列報(bào)文輸出的預(yù)期,從輸入端將難以實(shí)現(xiàn),這是因?yàn)槎嚓?duì)列報(bào)文輸出時(shí)可擁有眾多的合理組合,如圖4、圖5中所示僅含有兩個(gè)處理隊(duì)列的輸入輸出結(jié)果示例:圖4為兩個(gè)隊(duì)列并行處理時(shí)的隊(duì)列初始狀態(tài),圖5(a)列舉了由圖4中的隊(duì)列輸出的兩種合理的報(bào)文輸出序列,圖5(b)則為兩種錯(cuò)誤的報(bào)文輸出序列,由此可見,當(dāng)隊(duì)列及報(bào)文的數(shù)目較大時(shí),對(duì)每種合理組合都進(jìn)行驗(yàn)證將難以實(shí)現(xiàn)。
圖4 兩條處理報(bào)文的隊(duì)列示例
圖5 正確與錯(cuò)誤報(bào)文輸出示例
為此,在驗(yàn)證模塊中通過(guò)對(duì)NP 仿真器內(nèi)部處理隊(duì)列組的模擬(InputQueues)以及通過(guò)使用實(shí)際測(cè)試報(bào)文的輸出序列構(gòu)造出被測(cè)對(duì)象的報(bào)文實(shí)際輸出隊(duì)列(OutputQueue)的方法實(shí)現(xiàn)了一種多隊(duì)列輸出序列的逆向驗(yàn)證算法,其基本思路是將實(shí)際輸出隊(duì)列中的報(bào)文通過(guò)報(bào)文ID查找其是否處在處理隊(duì)列組中的隊(duì)列的隊(duì)頭位置,如果是,則此報(bào)文輸出正確,否則,此報(bào)文輸出有錯(cuò)誤。算法過(guò)程如圖6所示。
圖6 多隊(duì)列報(bào)文輸出逆向驗(yàn)證算法
虛擬報(bào)文協(xié)議(virtual packet protocol,VPP)是通過(guò)外部輸入數(shù)據(jù)(VPP 報(bào)文)實(shí)現(xiàn)控制NP 仿真器的內(nèi)部指令下達(dá),是NP各協(xié)處理器功能測(cè)試的關(guān)鍵。它主要定義了NP虛擬指令格式與封裝、VPP 協(xié)議報(bào)文的結(jié)構(gòu)及其處理規(guī)則等。
虛擬指令(virtual instruction,VI)按NP的實(shí)際指令系統(tǒng)進(jìn)行簡(jiǎn)化后定義的偽指令格式,其結(jié)構(gòu)如圖7(a)所示,一條VI指令由指令碼(instruction code)、指令參數(shù)(instruction parameter)及指令響應(yīng)(instruction response)組成。指令碼指示NP 仿真器需執(zhí)行的內(nèi)部指令,指令參數(shù)提供內(nèi)部指令所需的處理數(shù)據(jù)(如地址等),指令響應(yīng)則可保存NP執(zhí)行該指令后的處理結(jié)果,以便驗(yàn)證內(nèi)部指令處理的正確性。
圖7 VI指令及VPP報(bào)文格式
VPP 報(bào)文結(jié)構(gòu)如圖7(b)所示,由三部分構(gòu)成,Header即報(bào)文頭,可根據(jù)不同的報(bào)文類型配置成不同協(xié)議格式的報(bào)文頭,其中包含該報(bào)文的相關(guān)信息,如:報(bào)文ID、類型、長(zhǎng)度、輸入/出參數(shù)等信息;VI指令集部分,可包含多條需對(duì)此報(bào)文執(zhí)行處理的VI指令;Padding域是長(zhǎng)度可按測(cè)試需求調(diào)整的填充數(shù)據(jù),以滿足對(duì)不同長(zhǎng)度的報(bào)文測(cè)試需求。
NP仿真器通過(guò)輸入的VPP協(xié)議報(bào)文,即可將封裝在報(bào)文中的VI一并讀入、通過(guò)內(nèi)部微碼解析,并轉(zhuǎn)換成實(shí)際指令下發(fā)給NP的各個(gè)協(xié)處理器進(jìn)行相應(yīng)的處理,這樣即可方便地實(shí)現(xiàn)對(duì)各個(gè)功能模塊在集成環(huán)境下構(gòu)造各種測(cè)試用例。
目前,嵌入數(shù)據(jù)的關(guān)鍵字驅(qū)動(dòng)自動(dòng)測(cè)試系統(tǒng)已在華為公司的某型NP仿真器的測(cè)試項(xiàng)目中得到了應(yīng)用,系統(tǒng)的執(zhí)行測(cè)試狀態(tài)界面如圖8所示,與先前使用的傳統(tǒng)腳本自動(dòng)測(cè)試系統(tǒng)對(duì)比測(cè)試結(jié)果見表1。
圖8 測(cè)試平臺(tái)運(yùn)行GUI界面
表1 系統(tǒng)測(cè)試對(duì)比結(jié)果
從對(duì)比結(jié)果可以看出,采用融入數(shù)據(jù)的關(guān)鍵字驅(qū)動(dòng)的自動(dòng)測(cè)試技術(shù)的腳本平均長(zhǎng)度及其設(shè)計(jì)耗時(shí)都大為縮短,這主要得益于這種兼有關(guān)鍵字驅(qū)動(dòng)及數(shù)據(jù)驅(qū)動(dòng)技術(shù)優(yōu)點(diǎn)的測(cè)試技術(shù)對(duì)測(cè)試要素的高度抽象和概括,極大簡(jiǎn)化了測(cè)試腳本設(shè)計(jì),使測(cè)試人員可專注于測(cè)試邏輯的設(shè)計(jì),而非腳本的編寫,從而大幅提高了測(cè)試效率及進(jìn)度。
本文根據(jù)網(wǎng)絡(luò)處理器仿真器的測(cè)試中的需求及難點(diǎn),設(shè)計(jì)了一種融入數(shù)據(jù)的關(guān)鍵字驅(qū)動(dòng)自動(dòng)測(cè)試系統(tǒng),通過(guò)此系統(tǒng),測(cè)試人員可使用若干標(biāo)注有數(shù)據(jù)的關(guān)鍵字即可清晰描述測(cè)試用例的配置、數(shù)據(jù)及測(cè)試過(guò)程,大大簡(jiǎn)化了測(cè)試用例的設(shè)計(jì),從而大幅提高測(cè)試效率和測(cè)試質(zhì)量。
此外,文中還針對(duì)NP 內(nèi)部的多隊(duì)列處理特點(diǎn),提出了多隊(duì)列輸出逆向驗(yàn)證算法,并在實(shí)際測(cè)試應(yīng)用中充分地驗(yàn)證了這種測(cè)試技術(shù)針對(duì)NP 仿真器系統(tǒng)集成自動(dòng)測(cè)試的有效性及適用性,對(duì)其它復(fù)雜軟硬件系統(tǒng)的自動(dòng)測(cè)試平臺(tái)的設(shè)計(jì)有著一定的參考價(jià)值。
[1]LU Lu,WANG Baiyong.Technology of software automated test[M].Beijing:Northern Jiaotong University Press,2006:33(in Chinese).[陸璐,王柏勇.軟件自動(dòng)化測(cè)試技術(shù)[M].北京:北方交通大學(xué)出版社,2006:33.]
[2]FAN Yong,LAN Jingying,LI Huizhuo.Technology of software testing[M].Xi’an:Xidian University Press,2009(in Chinese).[范勇,蘭景英,李繪卓.軟件測(cè)試技術(shù)[M].西安:西安電子科技大學(xué)出版社,2009.]
[3]SHAN Jinhui,JIANG Ying,SUN Ping.Research progress in software testing[J].Acta Scientiarum Naturalium Universitatis Pekinensis,2005,41(1):134-145(in Chinese).[單錦輝,姜瑛,孫萍.軟件測(cè)試研究進(jìn)展[J].北京大學(xué)學(xué)報(bào)(自然科學(xué)版),2005,41(1):134-145.]
[4]ZHU Ju,WANG Zhijian,YANG Xue.A software automation test frameworks based on data-driven automation methodology[J].Computer Technology and Development,2006,16(5):68-70(in Chinese).[朱菊,王志堅(jiān),楊雪.基于數(shù)據(jù)驅(qū)動(dòng)的軟件自動(dòng)化測(cè)試框架[J].計(jì)算機(jī)技術(shù)與發(fā)展,2006,16(5):68-70.]
[5]WANG Jun,ZHU Meizheng,LI Xin.Research and implementation of keyword-driven test framework[J].Computer Engineering and Design,2010,31(10):2246-2248(in Chinese).[王君,朱美正,李欣.關(guān)鍵字驅(qū)動(dòng)測(cè)試框架的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2010,31(10):2246-2248.]
[6]Shaw M,Clement S P.The golden age of software architecture[J].IEEE Software,2005,23(2):312-319.
[7]SOAP Version 1.2 specification[EB/OL].http://www.w3.org/TR/soap/,2010.
[8]LU Deng.Application and research of automated test in large scale software system[D].Hangzhou:Zhejiang University,2010(in Chinese).[陸登.自動(dòng)化測(cè)試在大型軟件系統(tǒng)的應(yīng)用與研究[D].杭州:浙江大學(xué),2010.]
[9]JIE Hui,LAN Yuqing,LUO Pei.Keyword driven automated testing framework[J].Application Research of Computer,2009,26(3):927-929(in Chinese).[接卉,蘭雨晴,駱沛.一種關(guān)鍵字驅(qū)動(dòng)的自動(dòng)化測(cè)試框架[J].計(jì)算機(jī)應(yīng)用研究,2009,26(3):927-929.]
[10]Malik Q A,Lilius J,Laibinis L.Model based testing using scenarios and event-B refinements[C]//Lecture Notes in Computer Science 5454:Methods,Models and Tools for Fault Tolerance,2009:177-195.