《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 通信與網(wǎng)絡(luò) > 業(yè)界動(dòng)態(tài) > 基于TCL的DHCP協(xié)議冒煙測(cè)試

基于TCL的DHCP協(xié)議冒煙測(cè)試

2008-12-17
作者:方 毅, 趙保華

  摘 要: 介紹了基于TCL的協(xié)議冒煙測(cè)試" title="冒煙測(cè)試">冒煙測(cè)試系統(tǒng),對(duì)DHCP協(xié)議進(jìn)行形式化分析,生成EFSM圖,采用UIO方法生成一致性測(cè)試序列,并在該系統(tǒng)上針對(duì)提供DHCP服務(wù)的各網(wǎng)絡(luò)設(shè)備進(jìn)行了DHCP協(xié)議的冒煙測(cè)試,在實(shí)際應(yīng)用中取得了較好的測(cè)試效率,縮短了產(chǎn)品研發(fā)周期,降低了風(fēng)險(xiǎn),提高了產(chǎn)品的可靠性。
  關(guān)鍵詞: 協(xié)議測(cè)試" title="協(xié)議測(cè)試">協(xié)議測(cè)試; 冒煙測(cè)試; 一致性測(cè)試

?

  每日構(gòu)建和冒煙測(cè)試是個(gè)優(yōu)秀軟件產(chǎn)品的實(shí)踐過(guò)程,在這個(gè)過(guò)程中,軟件產(chǎn)品每天被完全創(chuàng)建并通過(guò)一系列的測(cè)試以檢驗(yàn)它的基本運(yùn)行情況。冒煙測(cè)試可以極大地降低經(jīng)常遇到的項(xiàng)目進(jìn)度不清、不成功的整合、質(zhì)量低劣等風(fēng)險(xiǎn)[1]。
  網(wǎng)絡(luò)協(xié)議對(duì)確保網(wǎng)絡(luò)的正常運(yùn)行起著至關(guān)重要的作用。協(xié)議測(cè)試是檢驗(yàn)網(wǎng)絡(luò)協(xié)議實(shí)現(xiàn)與協(xié)議標(biāo)準(zhǔn)是否一致的重要手段。DHCP是一個(gè)草案標(biāo)準(zhǔn)協(xié)議,廣泛應(yīng)用于TCP/IP網(wǎng)絡(luò)上的主機(jī)信息自動(dòng)配置。協(xié)議的冒煙測(cè)試是網(wǎng)絡(luò)產(chǎn)品設(shè)計(jì)過(guò)程中的重要環(huán)節(jié),可降低系統(tǒng)集成風(fēng)險(xiǎn),縮短產(chǎn)品開(kāi)發(fā)周期,是保證協(xié)議一致性的重要手段。它為依照國(guó)際標(biāo)準(zhǔn)化組織所制定的“協(xié)議一致性測(cè)試的方法和框架”[2]進(jìn)行一致性的測(cè)試做準(zhǔn)備。
  本文介紹了基于TCL的協(xié)議冒煙測(cè)試系統(tǒng)" title="測(cè)試系統(tǒng)">測(cè)試系統(tǒng)平臺(tái)、對(duì)DHCP協(xié)議進(jìn)行形式化描述、生成EFSM圖和UIO測(cè)試序列、引出DHCP協(xié)議冒煙測(cè)試的功能點(diǎn)、結(jié)合TCL的高擴(kuò)展能力,給出基于TCL的DHCP協(xié)議冒煙測(cè)試系統(tǒng)的具體實(shí)現(xiàn)。
1 協(xié)議冒煙測(cè)試系統(tǒng)
1.1 冒煙測(cè)試
  冒煙測(cè)試是微軟公司[3]首先提出的一個(gè)概念,與微軟公司一直提倡的每日構(gòu)建有很密切的聯(lián)系。冒煙測(cè)試指的是開(kāi)發(fā)人員在個(gè)人版本的軟件上進(jìn)行一個(gè)簡(jiǎn)單的功能需求測(cè)試,確定基本功能都已經(jīng)被實(shí)現(xiàn),可以進(jìn)行后續(xù)測(cè)試工作。其嚴(yán)格定義為:冒煙測(cè)試是從抽象層次驗(yàn)證軟件的基本功能是否已經(jīng)實(shí)現(xiàn)來(lái)確定是否需要更多的測(cè)試。若測(cè)試失效,軟件不再進(jìn)行其他測(cè)試,直接返回給開(kāi)發(fā)人員。具體地說(shuō),冒煙測(cè)試就是在每日構(gòu)建建立后對(duì)系統(tǒng)的基本功能進(jìn)行簡(jiǎn)單的測(cè)試,這種測(cè)試強(qiáng)調(diào)功能的覆蓋率,而不對(duì)功能的正確性進(jìn)行驗(yàn)證。從這一點(diǎn)看,與所謂的“接受性(驗(yàn)收)測(cè)試(Acceptance Test)”非常相似。不同之處在于冒煙測(cè)試所執(zhí)行的頻率和被測(cè)的版本不同。
  協(xié)議的冒煙測(cè)試是對(duì)協(xié)議實(shí)現(xiàn)的基本功能進(jìn)行測(cè)試,確保協(xié)議能夠正常運(yùn)行。冒煙測(cè)試隨著系統(tǒng)的擴(kuò)充而擴(kuò)充,最初的冒煙測(cè)試可能非常簡(jiǎn)單,隨著開(kāi)發(fā)的進(jìn)展,系統(tǒng)功能的擴(kuò)充,冒煙測(cè)試也越來(lái)越充分[1]。所以冒煙測(cè)試本質(zhì)上屬于協(xié)議一致性測(cè)試,因此,協(xié)議一致性測(cè)試的方法適用于冒煙測(cè)試。冒煙測(cè)試作為一個(gè)優(yōu)秀有益的實(shí)踐過(guò)程,有別于通常的協(xié)議一致性測(cè)試的地方在于測(cè)試的頻率和范圍。
  由于協(xié)議軟件比一般軟件更加復(fù)雜,完整測(cè)試的代價(jià)也更高,因此更加需要進(jìn)行冒煙測(cè)試。當(dāng)冒煙測(cè)試成為軟件開(kāi)發(fā)生命周期的一部分時(shí),產(chǎn)品的質(zhì)量將得到很大的提升。冒煙測(cè)試首先要開(kāi)發(fā)一系列的測(cè)試?yán)?,這些測(cè)試?yán)龑⒃诿看尉幾g構(gòu)建后運(yùn)行,用來(lái)測(cè)試系統(tǒng)的主要功能完成情況。將這些測(cè)試?yán)_本串行自動(dòng)化執(zhí)行,向用戶(hù)返回一個(gè)哪些協(xié)議功能已經(jīng)基本實(shí)現(xiàn)(通過(guò)冒煙測(cè)試)的列表,這個(gè)自動(dòng)化的冒煙測(cè)試過(guò)程是針對(duì)被測(cè)實(shí)現(xiàn)IUT(Implement Under Test)在路由器開(kāi)發(fā)過(guò)程中被定期執(zhí)行。目前常用的腳本語(yǔ)言有TCL、Perl、Python、Windows Scripting及批處理等。其中,TCL腳本已逐漸成為業(yè)界普遍采用的實(shí)用工具。
1.2 系統(tǒng)實(shí)現(xiàn)
  本測(cè)試?yán)肨CL的可擴(kuò)展性,通過(guò)將C++實(shí)現(xiàn)的協(xié)議測(cè)試基本庫(kù)封裝在動(dòng)態(tài)鏈接庫(kù),無(wú)縫集成到TCL平臺(tái),同時(shí)對(duì)TCL命令集進(jìn)行擴(kuò)展,實(shí)現(xiàn)了一個(gè)基于TCL的DHCP協(xié)議冒煙測(cè)試系統(tǒng)。圖1是該系統(tǒng)的系統(tǒng)架構(gòu)。DHCP協(xié)議冒煙測(cè)試即是在該系統(tǒng)架構(gòu)下實(shí)現(xiàn)的。

?


  該系統(tǒng)由底層支持模塊、測(cè)試套編輯模塊、測(cè)試套執(zhí)行和管理模塊、GUI界面模塊構(gòu)成。
底層支持模塊:在TCL自身命令的基礎(chǔ)上,增加C++實(shí)現(xiàn)的協(xié)議測(cè)試基本庫(kù)及TCL擴(kuò)展命令,提供從鏈路層及以上各層協(xié)議的收發(fā)和編解碼等命令。
  測(cè)試套編輯模塊:采用TCL為測(cè)試套的編寫(xiě)語(yǔ)言,包括測(cè)試?yán)枋觥y(cè)試腳本、測(cè)試配置文件。
  測(cè)試套執(zhí)行和管理模塊:由于底層支撐命令采用的是已編譯過(guò)的二進(jìn)制代碼,故雖然測(cè)試套采用TCL編寫(xiě),但是測(cè)試執(zhí)行是簡(jiǎn)單高效的。測(cè)試套執(zhí)行后,自動(dòng)生成測(cè)試結(jié)果報(bào)告。
  GUI界面模塊:目前采用VC實(shí)現(xiàn),以后將考慮用TK實(shí)現(xiàn),以提高系統(tǒng)的可移值性。
2 基于TCL的DHCP協(xié)議冒煙測(cè)試的測(cè)試套實(shí)現(xiàn)
2.1 DHCP協(xié)議及其形式化

  DHCP是一個(gè)草案標(biāo)準(zhǔn)協(xié)議。動(dòng)態(tài)主機(jī)配置協(xié)議DHCP(Dynamic Host Configuration Protocol)RFC2131、DHCP RFC2132選項(xiàng)和BOOTP軟件商擴(kuò)展(DHCP Options and BOOTP Vendor Extensions),系統(tǒng)地描述了當(dāng)前DHCP規(guī)范。
  DHCP提供了一個(gè)把配置信息傳遞到TCP/IP網(wǎng)絡(luò)上的主機(jī)的框架[4]。DHCP基于BOOTP協(xié)議[5],增加了自動(dòng)分配可重用網(wǎng)絡(luò)地址的能力和額外的配置選項(xiàng)[6]。有關(guān)BOOTP的規(guī)范可參考文獻(xiàn)[7]。
  DHCP消息使用UDP的67端口(BOOTP服務(wù)器公用)和68端口(BOOTP客戶(hù)公用端口)。DHCP參與者可以與BOOTP參與者互操作[8]。
  DHCP采用客戶(hù)/服務(wù)器模式,由兩部分組成:
  (1)把特定主機(jī)的配置參數(shù)從一個(gè)DHCP服務(wù)器發(fā)送到主機(jī)的協(xié)議。
  (2) 把網(wǎng)絡(luò)地址(臨時(shí)或永久)分配給主機(jī)的機(jī)制。
  DHCP消息分為DHCPDISCOVER、DHCPOFFER、DHCP-
  REQUEST、DHCPACK、DHCPNACK、DHCPDECLINE、DHC-
  PRELEASE、DHCPINFORM等八種類(lèi)型。圖2為DHCP客戶(hù)/服務(wù)器交互過(guò)程時(shí)序圖,顯示了其典型客戶(hù)/服務(wù)器交互的時(shí)序關(guān)系及各消息類(lèi)型間的關(guān)系。

?


  DHCP服務(wù)器端接收來(lái)自DHCP客戶(hù)端" title="客戶(hù)端">客戶(hù)端的DHCPDISCOVER、DHCPREQUEST、DHCPDECLINE、DHCPRELEASE、DHCPINFORM等DHCP消息,而DHCP客戶(hù)端則接收來(lái)自DHCP服務(wù)器端的DHCPOFFER、DHCPACK、DHCPNAK等DHCP消息。通過(guò)DHCP客戶(hù)/服務(wù)器交互過(guò)程完成整個(gè)DHCP機(jī)制,其DHCP消息類(lèi)型是DHCP機(jī)制成功實(shí)施的基礎(chǔ)和關(guān)鍵。
  DHCP冒煙測(cè)試的功能點(diǎn)包括:客戶(hù)端初始化并通過(guò)DHCP Relay Agent向DHCP Server獲取網(wǎng)絡(luò)地址(DHCP Relay)、客戶(hù)端初始化向DHCP Server獲取網(wǎng)絡(luò)地址;客戶(hù)端初始化向DHCP Server申請(qǐng)重新使用以前分配的網(wǎng)絡(luò)地址;外部賦予客戶(hù)端配置參數(shù),客戶(hù)端與DHCP Server通信進(jìn)行初始化(DHCP Server)。
  本文以DHCP Server功能為例,首先將DHCP的非形式化描述轉(zhuǎn)化成用EFSM[9]協(xié)議形式化描述技術(shù)來(lái)進(jìn)行描述,然后基于EFSM的測(cè)試序列生成方法UIO(Unique Input/Ouput Sequence)[10]生成DHCP協(xié)議的測(cè)試序列,最后實(shí)現(xiàn)測(cè)試序列的腳本,即完成其冒煙測(cè)試。
  DHCP Server功能主要實(shí)現(xiàn)動(dòng)態(tài)IP地址分配,其EFSM圖如圖3所示。

?

  圖3中,a表示DHCPDiscover,b表示DHCPRequest, c表示DHCPInform,d表示DHCPDecline,x表示DHCPOffer,y表示DHCPAck, z表示DHCPNak。
  在圖3所示的EFSM圖的基礎(chǔ)上,采用UIO方法生成一致性測(cè)試序列:
  (1)為每個(gè)狀態(tài)確定一個(gè)不同的輸入輸出序列:
  UIO(S1)={a/x},UIO(S2)={b/y},UIO(S3)={c/y},是滿(mǎn)足上述要求的三個(gè)輸入輸出序列。
  (2)測(cè)試EFSM 中的每個(gè)狀態(tài)Si。測(cè)試序列由三部分組成:①引導(dǎo)序列。②狀態(tài)Si的UIO 序列(帶下劃線(xiàn)標(biāo)記)。③同步序列ri/null。
  

  (3)測(cè)試EFSM 中的每個(gè)狀態(tài)轉(zhuǎn)換(Si, Sj,i/o)。輸入序列由四部分組成:(a)引導(dǎo)序列。(b)待測(cè)轉(zhuǎn)換i/o(帶下劃線(xiàn)標(biāo)記)。(c)狀態(tài)sj 的UIO 序列。(d)同步序列ri/null。
  

2.2? 測(cè)試?yán)龑?shí)現(xiàn)
  測(cè)試套是測(cè)試?yán)募希瑴y(cè)試?yán)蓽y(cè)試?yán)枋?、測(cè)試腳本、測(cè)試?yán)渲梦募糠謽?gòu)成,而測(cè)試?yán)渲梦募址譁y(cè)試前配置文件、去配置文件,以保持干凈的測(cè)試環(huán)境" title="測(cè)試環(huán)境">測(cè)試環(huán)境,各測(cè)試?yán)跍y(cè)試套自動(dòng)執(zhí)行時(shí),前一測(cè)試?yán)挥绊懞竺娴臏y(cè)試?yán)M瑫r(shí),測(cè)試?yán)拿枋雠c測(cè)試環(huán)境密切相關(guān),測(cè)試?yán)诰帉?xiě)時(shí)將測(cè)試腳本和測(cè)試配置分開(kāi),以適應(yīng)不同的測(cè)試環(huán)境。
  圖4為DHCP Server功能點(diǎn)的冒煙測(cè)試環(huán)境。利用TCL的可擴(kuò)展性,實(shí)現(xiàn)了基于數(shù)據(jù)鏈路層的數(shù)據(jù)收發(fā)及編解碼支撐命令、PCO(Point of Control and Observation)支持命令、DHCP協(xié)議的接口支持函數(shù)和編解碼函數(shù)。部分命令如表1所示。

?


  測(cè)試?yán)目蚣苋缦拢?BR>  #首先開(kāi)發(fā)DHCP的TCL擴(kuò)展命令,封裝其各種報(bào)文的收發(fā)、編碼和解碼等。
  #加載TCL/Tk擴(kuò)展命令,以及測(cè)試環(huán)境配置參數(shù)。
  #通過(guò)telnet設(shè)置IUT測(cè)試環(huán)境:
  set result [TELNET::TelExecFile $s $cmdfilename]
  #測(cè)試過(guò)程
  #建立Socket連接并發(fā)送報(bào)文
  set udp_sock [UDP::Init $s_adpter $s_mac $broadMac??
   $s_addr $s_port $broadIp $d_port]
  set udp_bcast_rsock [UDP::Init $s_adpter $broadMac
  ??$d_mac? $broadIp $s_port $d_addr $d_port]
  UDP::Send $udp_sock $dhcpData
  …
  set dhcp_offer [UDP::ReceiveFrom $udp_bcast_rsock
???? $timeout '' '' '']
  #對(duì)收到的報(bào)文解碼分析。
2.3 測(cè)試結(jié)果
  協(xié)議冒煙測(cè)試實(shí)現(xiàn)的是對(duì)基本功能的測(cè)試,不關(guān)注細(xì)節(jié),其目的是確保系統(tǒng)穩(wěn)定運(yùn)行,能進(jìn)行進(jìn)一步的測(cè)試。DHCP冒煙測(cè)試?yán)趨f(xié)議冒煙測(cè)試系統(tǒng)中以測(cè)試套的形式自動(dòng)執(zhí)行,向用戶(hù)返回測(cè)試?yán)膱?zhí)行結(jié)果。本例中,對(duì)DHCP的四個(gè)功能點(diǎn)實(shí)現(xiàn)其測(cè)試?yán)?,并且每個(gè)測(cè)試?yán)訳IO測(cè)試序列來(lái)對(duì)協(xié)議實(shí)現(xiàn)情況進(jìn)行測(cè)試和評(píng)判。其測(cè)試結(jié)果如表2所示。

?


  表2顯示了DHCP Server、 Relay測(cè)試?yán)淹ㄟ^(guò),說(shuō)明該協(xié)議的冒煙測(cè)試已經(jīng)完成,該IUT支持DHCP。測(cè)試環(huán)境中的RUT是一臺(tái)成熟的路由器產(chǎn)品,該路由器支持DHCP,測(cè)試結(jié)果與預(yù)期的結(jié)果是一致的。說(shuō)明本文提出的基于TCL的協(xié)議冒煙測(cè)試系統(tǒng)在實(shí)際應(yīng)用中是可行、高效的。
  本文基于TCL/Tk協(xié)議測(cè)試系統(tǒng)實(shí)現(xiàn)了DHCP的冒煙測(cè)試,將冒煙測(cè)試引入?yún)f(xié)議產(chǎn)品的開(kāi)發(fā)中,提高了項(xiàng)目的可視性和產(chǎn)品的質(zhì)量,降低了產(chǎn)品上市時(shí)間延遲的風(fēng)險(xiǎn)。本文對(duì)提高協(xié)議測(cè)試的覆蓋率和測(cè)試效率,實(shí)現(xiàn)測(cè)試序列的自動(dòng)生成,具有一定的參考價(jià)值。


參考文獻(xiàn)
[1]?(美)邁克康奈爾(Ma C S)著[M].快速軟件開(kāi)發(fā)——有效控制與完成進(jìn)度計(jì)劃.席相霖,等譯.北京:電子工業(yè)出版社,2002.
[2] ?IS29646.ISO. Conformance testing methodology and framework[S]. 1991.
[3] ?CONNELL M C S. Software project survival Guide[M]. ?Microsoft Press, 1998:290-330.
[4] ?RFC2131.Dynamic host configuration protocol[S].?1997.
[5] ?CROFT B, GILMORE J. Bootstrap protocol?(BOOTP). RFC951 Stanford and SUN Microsystems[S], September 1985.
[6]? SCHILLER J, ROSENSTEIN M. A protocol for the?dynamic assignment of IP addresses for use on an ethernet.(Available from the Athena Project, MIT)[Z], 1989.
[7]? ?RFC951. Bootstrap Protocol[S]. 1985.

[8] ?DROMS D. Interoperation between DHCP and BOOTP.? RFC 1534[S], Bucknell University, October 1993.
[9]? DUALE A Y, FECKO M A, UYAR M U. Generating?executable tests for timed and untimed EFSM models.
?Proc. IIS/IEEE World Multiconference on Systemics,Cybernetics and Informatics[J], Orlando, FL, 2001,(2):
?109-113.
[10] 余萍,顧冠群.基于UIO流方法的協(xié)議一致性測(cè)試及應(yīng)用[J]. 數(shù)據(jù)通信,1996,(1):8-15.

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀(guān)點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話(huà)通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話(huà):010-82306118;郵箱:aet@chinaaet.com。