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

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

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

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

?

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

?


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

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

?


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

?

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

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

2.2? 測試例實現(xiàn)
  測試套是測試例的集合,測試例由測試例描述、測試腳本、測試例配置文件三部分構(gòu)成,而測試例配置文件又分測試前配置文件、去配置文件,以保持干凈的測試環(huán)境" title="測試環(huán)境">測試環(huán)境,各測試例在測試套自動執(zhí)行時,前一測試例不影響后面的測試例。同時,測試例的描述與測試環(huán)境密切相關(guān),測試例在編寫時將測試腳本和測試配置分開,以適應(yīng)不同的測試環(huán)境。
  圖4為DHCP Server功能點的冒煙測試環(huán)境。利用TCL的可擴展性,實現(xiàn)了基于數(shù)據(jù)鏈路層的數(shù)據(jù)收發(fā)及編解碼支撐命令、PCO(Point of Control and Observation)支持命令、DHCP協(xié)議的接口支持函數(shù)和編解碼函數(shù)。部分命令如表1所示。

?


  測試例的框架如下:
  #首先開發(fā)DHCP的TCL擴展命令,封裝其各種報文的收發(fā)、編碼和解碼等。
  #加載TCL/Tk擴展命令,以及測試環(huán)境配置參數(shù)。
  #通過telnet設(shè)置IUT測試環(huán)境:
  set result [TELNET::TelExecFile $s $cmdfilename]
  #測試過程
  #建立Socket連接并發(fā)送報文
  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 '' '' '']
  #對收到的報文解碼分析。
2.3 測試結(jié)果
  協(xié)議冒煙測試實現(xiàn)的是對基本功能的測試,不關(guān)注細節(jié),其目的是確保系統(tǒng)穩(wěn)定運行,能進行進一步的測試。DHCP冒煙測試例在協(xié)議冒煙測試系統(tǒng)中以測試套的形式自動執(zhí)行,向用戶返回測試例的執(zhí)行結(jié)果。本例中,對DHCP的四個功能點實現(xiàn)其測試例,并且每個測試例以UIO測試序列來對協(xié)議實現(xiàn)情況進行測試和評判。其測試結(jié)果如表2所示。

?


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


參考文獻
[1]?(美)邁克康奈爾(Ma C S)著[M].快速軟件開發(fā)——有效控制與完成進度計劃.席相霖,等譯.北京:電子工業(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é)議一致性測試及應(yīng)用[J]. 數(shù)據(jù)通信,1996,(1):8-15.

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