黃偉
【摘 要】為提高串口測試軟件的通用性和靈活性、提高測試效率,提出一種通用報(bào)文編解碼與串口測試軟件的實(shí)現(xiàn)方案,重點(diǎn)對(duì)報(bào)文編解碼所涉及的關(guān)鍵技術(shù)進(jìn)行研究。
【關(guān)鍵詞】串口測試 串行通信 報(bào)文編解碼 自動(dòng)化
【中圖分類號(hào)】 G 【文獻(xiàn)標(biāo)識(shí)碼】 A
【文章編號(hào)】0450-9889(2015)06C-0189-02
在串行通信系統(tǒng)系統(tǒng)的測試工作中,報(bào)文協(xié)議是一項(xiàng)非常重要的測試內(nèi)容,需要對(duì)各種報(bào)文協(xié)議進(jìn)行大量的測試。測試人員在設(shè)計(jì)測試用例時(shí)針對(duì)每個(gè)報(bào)文協(xié)議手工編制大量的測試報(bào)文,再通過串口調(diào)試工具來進(jìn)行串行通信并完成相關(guān)測試,最后根據(jù)報(bào)文協(xié)議來人工判讀測試數(shù)據(jù),工作量相當(dāng)繁重。此外,報(bào)文協(xié)議的復(fù)雜性、枯燥性,以及重復(fù)性地輸入輸出數(shù)據(jù)給手工測試帶來了很大的困難,大量測試報(bào)文的編制和解析更增加了手工測試的難度和出錯(cuò)率。編寫專用的串口測試程序是提高測試效率和準(zhǔn)確性的有效途徑,但是各類系統(tǒng)的報(bào)文協(xié)議種類多、區(qū)別大,使用專用的串口測試程序只能完成特定系統(tǒng)、特定報(bào)文協(xié)議的測試任務(wù),無法靈活滿足新系統(tǒng)、新報(bào)文協(xié)議的測試需求。
針對(duì)上述問題,本文以提高串口測試軟件的通用性和靈活性、提高測試效率為主要目標(biāo),提出一種通用報(bào)文編解碼與串口測試軟件的實(shí)現(xiàn)方案,重點(diǎn)對(duì)報(bào)文編解碼所涉及的關(guān)鍵技術(shù)進(jìn)行研究。
一、軟件系統(tǒng)組成
在數(shù)字通信中,一次通信所要傳輸?shù)乃袛?shù)據(jù)稱為報(bào)文。待測的串行通信系統(tǒng)各個(gè)組成部分以及系統(tǒng)與外界之間必須按照協(xié)議來傳輸報(bào)文數(shù)據(jù),因此在對(duì)系統(tǒng)進(jìn)行測試的過程中,報(bào)文協(xié)議是一項(xiàng)非常重要的測試內(nèi)容,需要進(jìn)行大量的報(bào)文編碼、串口調(diào)試及報(bào)文解析工作。因此,通用報(bào)文編解碼與串口測試軟件總體上由報(bào)文元數(shù)據(jù)管理模塊、報(bào)文管理模塊、串口測試模塊、報(bào)文解析模塊共4個(gè)模塊組成。
報(bào)文元數(shù)據(jù)管理模塊主要實(shí)現(xiàn)報(bào)文系統(tǒng)的元數(shù)據(jù)定義功能。元數(shù)據(jù)(Metadata)是描述數(shù)據(jù)的數(shù)據(jù)(data about data),主要是對(duì)數(shù)據(jù)屬性(property)的描述性信息。對(duì)于報(bào)文系統(tǒng)而言,元數(shù)據(jù)描述了報(bào)文協(xié)議的數(shù)據(jù)結(jié)構(gòu)和報(bào)文字段的格式。報(bào)文元數(shù)據(jù)管理模塊通過友好的用戶界面,讓用戶方便地輸入和維護(hù)待測試報(bào)文協(xié)議的報(bào)文元數(shù)據(jù)。
報(bào)文管理模塊提供一個(gè)直觀的報(bào)文編輯界面,根據(jù)指定的報(bào)文協(xié)議的元數(shù)據(jù)信息,將數(shù)據(jù)幀結(jié)構(gòu)中各項(xiàng)參數(shù)的具體含義和可選值等信息通過友好的用戶界面呈現(xiàn)給用戶,并根據(jù)用戶設(shè)定的各項(xiàng)參數(shù)值生成十六進(jìn)制的報(bào)文數(shù)據(jù)。
串口測試模塊負(fù)責(zé)將報(bào)文管理模塊生成的一條或多條報(bào)文數(shù)據(jù)發(fā)送到對(duì)應(yīng)的串口,并接收串口的應(yīng)答報(bào)文。
報(bào)文解析模塊負(fù)責(zé)解析不同應(yīng)答報(bào)文的具體含義,將報(bào)文的內(nèi)容和意義直觀展示給用戶。由用戶指定需要解析的應(yīng)答報(bào)文以及期望匹配的報(bào)文協(xié)議,該模塊根據(jù)報(bào)文協(xié)議的元數(shù)據(jù)信息,將十六進(jìn)制的應(yīng)答報(bào)文解析為用戶可以理解的報(bào)文狀態(tài)參數(shù)值。
二、關(guān)鍵技術(shù)實(shí)現(xiàn)
(一)數(shù)據(jù)存儲(chǔ)方式。報(bào)文元數(shù)據(jù)既可以存儲(chǔ)于XML文件,也可以存儲(chǔ)于關(guān)系型數(shù)據(jù)庫,兩種方式各有利弊:
1.XML文件隨系統(tǒng)軟件存儲(chǔ)于本地計(jì)算機(jī),適合在單機(jī)環(huán)境使用;XML的語法非常適合描述數(shù)據(jù),能清晰地表示數(shù)據(jù)的邏輯結(jié)構(gòu),易于用戶理解,用戶使用操作系統(tǒng)自帶的文本編輯器即可對(duì)報(bào)文元數(shù)據(jù)進(jìn)行維護(hù)。但報(bào)文元數(shù)據(jù)均以明文方式存儲(chǔ)于XML文件之中,缺乏安全性保護(hù)機(jī)制,如果是多用戶共用則可能造成用戶敏感數(shù)據(jù)的泄漏。
2.關(guān)系型數(shù)據(jù)庫如SQL Server既能有效地存儲(chǔ)報(bào)文元數(shù)據(jù),又提供了很好的安全性保護(hù)機(jī)制,適合在單機(jī)環(huán)境和網(wǎng)絡(luò)環(huán)境使用。但是采用關(guān)系型數(shù)據(jù)庫增加了系統(tǒng)部署的工作量和難度,不利于非專業(yè)人員使用。
本文采用SQLite來存儲(chǔ)報(bào)文元數(shù)據(jù)。SQLite是一款輕量級(jí)的關(guān)系數(shù)據(jù)庫,具有零配置的特點(diǎn),無需安裝和管理配置,是存儲(chǔ)在單一磁盤文件中的一個(gè)完整的數(shù)據(jù)庫。SQLite可以為數(shù)據(jù)庫文件設(shè)置訪問密鑰,從而實(shí)現(xiàn)基本的數(shù)據(jù)安全保護(hù)。由于SQLite既適合在單機(jī)環(huán)境使用,無需安裝和管理配置,又具有關(guān)系型數(shù)據(jù)庫的優(yōu)點(diǎn),因此是一種比較理想的數(shù)據(jù)存儲(chǔ)方式。如果采用抽象工廠設(shè)計(jì)模式,還可以方便的遷移到其他諸如SQL Server等數(shù)據(jù)庫系統(tǒng)以實(shí)現(xiàn)C/S模式運(yùn)行。
(二)報(bào)文元數(shù)據(jù)管理。本文研究的串口數(shù)據(jù)幀由幀頭、數(shù)據(jù)及幀尾3部分組成。幀頭標(biāo)記每幀報(bào)文的開始,長度和值由串口通信協(xié)議具體定義。數(shù)據(jù)域存放數(shù)據(jù)幀的信息內(nèi)容如方位角、俯仰角,或控制指令如自檢命令、授時(shí)命令等。幀尾是整個(gè)數(shù)據(jù)域與幀頭的校驗(yàn)碼,常用的校驗(yàn)方式有累加和校驗(yàn)、異或和校驗(yàn)、循環(huán)冗余校驗(yàn)等,有的協(xié)議幀尾使用固定的值,甚至沒有幀尾。
據(jù)此設(shè)計(jì)報(bào)文元數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu),包括數(shù)據(jù)幀表、幀頭表、數(shù)據(jù)域表、位域表及枚舉值表。具體作用如下。
1.數(shù)據(jù)幀表:包含某一類報(bào)文的描述性名稱,幀頭長度,數(shù)據(jù)域長度以及校驗(yàn)方式。
2.幀頭表:存儲(chǔ)某一類報(bào)文幀頭各個(gè)字節(jié)的描述性名稱和值。
3.數(shù)據(jù)域表:存儲(chǔ)某一類報(bào)文數(shù)據(jù)域的各個(gè)數(shù)據(jù)項(xiàng)的描述性名稱、數(shù)據(jù)類型、存儲(chǔ)方式等信息。數(shù)據(jù)項(xiàng)的存儲(chǔ)方式又定義為高中低3個(gè)字節(jié)、高低2個(gè)字節(jié)、不含位域的1個(gè)字節(jié)、包含位域的1個(gè)字節(jié)等類型。所謂“位域”是把一個(gè)字節(jié)中的8個(gè)二進(jìn)位劃分為幾個(gè)不同長度的區(qū)域,這樣就可以用一個(gè)字節(jié)的二進(jìn)制位域來同時(shí)表示幾個(gè)信息。如果數(shù)據(jù)項(xiàng)包含位域,還需通過位域表來進(jìn)一步描述各個(gè)位域的具體信息。
4.位域表:存儲(chǔ)組成某個(gè)字節(jié)的各個(gè)位域的描述性名稱、位域長度、是否提供枚舉值、是否有默認(rèn)值等信息。
5.枚舉值表:用于創(chuàng)建報(bào)文編輯界面的時(shí)候,為枚舉型的位域提供輸入選項(xiàng),如是/否、有效/無效、正常/故障,等等。枚舉值表存儲(chǔ)這些選項(xiàng)的描述性名稱和對(duì)應(yīng)位域的二進(jìn)制值。
(三)報(bào)文管理。報(bào)文管理模塊主要解決兩個(gè)關(guān)鍵問題:一是從報(bào)文元數(shù)據(jù)加載指定的報(bào)文協(xié)議定義,并動(dòng)態(tài)生成報(bào)文編輯界面;二是用戶根據(jù)用戶在報(bào)文編輯界面設(shè)定的各項(xiàng)報(bào)文參數(shù),動(dòng)態(tài)生成十六進(jìn)制的報(bào)文數(shù)據(jù)。
1.動(dòng)態(tài)生成報(bào)文編輯界面。由于不同報(bào)文協(xié)議的報(bào)文格式、內(nèi)容及長度不一,因此報(bào)文編輯界面必須根據(jù)具體的報(bào)文協(xié)議來動(dòng)態(tài)生成。.NET Winform的TableLayoutPanel控件提供了一個(gè)表格布局模版,適合以表格形式在窗體上動(dòng)態(tài)添加控件,表格的行數(shù)也可以根據(jù)報(bào)文長度動(dòng)態(tài)增加。本文使用單選按鈕控件,提供默認(rèn)值、枚舉值及自定義值等選項(xiàng)來給用戶指定各個(gè)報(bào)文字段的值,單選按鈕控件與其所代表的報(bào)文元數(shù)據(jù)的名稱和值(Name-Value)綁定,用戶選中單選按鈕即可將其對(duì)應(yīng)的報(bào)文字段值顯示在當(dāng)前行。
2.動(dòng)態(tài)生成報(bào)文數(shù)據(jù)。這是本文所述系統(tǒng)的關(guān)鍵功能,實(shí)現(xiàn)的算法是根據(jù)報(bào)文元數(shù)據(jù)所定義的字節(jié)和位域順序,在報(bào)文編輯界面依次查找和讀取各個(gè)報(bào)文字段的當(dāng)前值,并將讀取到的十六進(jìn)制或二進(jìn)制值,經(jīng)數(shù)據(jù)轉(zhuǎn)換和重組之后形成一條相對(duì)完整的報(bào)文。
對(duì)于占1字節(jié)、包含位域的報(bào)文字段,程序?qū)⒃撟止?jié)各個(gè)位域的二進(jìn)制值,全部拼接成一個(gè)8位二進(jìn)制字符串,再轉(zhuǎn)換為十六進(jìn)制值。
對(duì)于占2字節(jié)的報(bào)文字段,值范圍為十進(jìn)制數(shù)0~65535,需要程序?qū)τ脩糨斎氲闹颠M(jìn)行數(shù)據(jù)轉(zhuǎn)換,分別提取其十六進(jìn)制表示的高八位和低八位。例如十進(jìn)制數(shù)60110,轉(zhuǎn)換的結(jié)果為0xEA(高八位)、0xCE(低八位)。借助C#語言中StructLayout和FieldOffset特性,可以比較方便的實(shí)現(xiàn)相關(guān)的數(shù)據(jù)轉(zhuǎn)換。
(四)發(fā)送報(bào)文。報(bào)文管理模塊生成的報(bào)文并未包含校驗(yàn)碼和幀尾,并不是完整的一條報(bào)文。在串口測試工作中,校驗(yàn)碼也是一個(gè)重要的測試內(nèi)容,還需要對(duì)缺少校驗(yàn)碼或校驗(yàn)碼錯(cuò)誤的情況進(jìn)行測試,如果由報(bào)文管理模塊來自動(dòng)計(jì)算出校驗(yàn)碼,會(huì)對(duì)后續(xù)的串口測試工作造成不便。因此本文在設(shè)計(jì)軟件時(shí),將添加校驗(yàn)碼和幀尾的工作放在串口測試模塊實(shí)現(xiàn)。用戶在窗體上設(shè)定校驗(yàn)碼為“無、自動(dòng)計(jì)算、隨機(jī)生成錯(cuò)誤值”三個(gè)選項(xiàng)之一,以及指定是否在報(bào)文末尾附加固定的幀尾值,報(bào)文將按指定的要求附加校驗(yàn)碼和幀尾之后才被發(fā)送到串口。串口測試模塊還可提供串口參數(shù)設(shè)定、自動(dòng)定時(shí)發(fā)送、接收串口數(shù)據(jù)等功能。
(五)報(bào)文解析。報(bào)文解析是報(bào)文編碼的逆過程。報(bào)文解析模塊有兩種實(shí)現(xiàn)方案:一是對(duì)串口測試模塊接收到的報(bào)文數(shù)據(jù)進(jìn)行實(shí)時(shí)的解析,二是先保存接收到的報(bào)文再進(jìn)行解析。相比之下后者更為合理,因?yàn)橄到y(tǒng)在短時(shí)間內(nèi)可能會(huì)接收到大量的報(bào)文數(shù)據(jù),如果對(duì)這些數(shù)據(jù)進(jìn)行實(shí)時(shí)解析和顯示,界面上信息刷新的速度會(huì)非??欤脩艨赡苓€沒有看清楚某個(gè)報(bào)文的具體意義,界面上的信息就已經(jīng)發(fā)生了變化。因此,為了分析測試數(shù)據(jù)的需要,報(bào)文解析模塊應(yīng)當(dāng)先保存捕獲到的報(bào)文,等到捕獲的報(bào)文數(shù)量達(dá)到一定值時(shí)自動(dòng)或手動(dòng)停止報(bào)文的捕獲,然后再開始對(duì)報(bào)文進(jìn)行分析。
報(bào)文解析模塊根據(jù)報(bào)文的數(shù)據(jù)幀格式來讀取通過串口測試模塊接收到的串口數(shù)據(jù),并根據(jù)報(bào)文元數(shù)據(jù)的定義,將串口數(shù)據(jù)逐字節(jié)、逐位域的解析還原為有具體含義的報(bào)文信息,最后通過友好的界面將報(bào)文的內(nèi)容和意義直觀展示給用戶。報(bào)文解析功能有助于測試人員觀察待測系統(tǒng)對(duì)于測試數(shù)據(jù)的響應(yīng)是否與測試用例的預(yù)期結(jié)果相符,減少了測試人員人工判讀測試結(jié)果的工作量,提高了測試效率和準(zhǔn)確性。
綜上,本文探討和實(shí)現(xiàn)了一種通用報(bào)文編解碼與串口測試軟件的實(shí)現(xiàn)方案以及涉及的關(guān)鍵技術(shù)。實(shí)際應(yīng)用情況表明,該軟件能減輕測試人員的工作量,避免了測試過程中人為的疏忽和錯(cuò)誤,提高了測試效率和正確率,同時(shí)也提高了串口測試軟件的通用性和靈活性。當(dāng)然,該軟件還存在繼續(xù)改進(jìn)的空間,例如可進(jìn)一步朝著自動(dòng)化測試產(chǎn)品的方向改進(jìn),根據(jù)測試腳本自動(dòng)生成測試用例,并自動(dòng)形成測試結(jié)果和報(bào)表,最終實(shí)現(xiàn)測試過程自動(dòng)化和測試結(jié)果自動(dòng)化。
【參考文獻(xiàn)】
[1]劉燁,王永斌,劉宏波.報(bào)文解析工具中的XML數(shù)據(jù)字典[J].計(jì)算機(jī)工程,2009(3)
[2]陳乃澍,吳國慶.炮兵指揮系統(tǒng)測試的報(bào)文通用解析編輯模型[J].火力與指揮控制,2009(6)
[3]馬賢穎,劉文紅,夏燁.航天測控系統(tǒng)遙控軟件自動(dòng)化測試仿真平臺(tái)研究[J].系統(tǒng)仿真學(xué)報(bào),2014(4)
[4]董延杰,宋朝輝,陳靜.嵌入式軟件串口通信自動(dòng)化測試工具的研究[J].自動(dòng)化應(yīng)用,2014(10)
[5]曹佳佳. 應(yīng)答器報(bào)文編譯碼的研究與設(shè)計(jì)[J]. 科技信息,2012(1)
[6]侯高雷,黃明山,李志華. 基于C~#的終端自動(dòng)化測試系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J]. 現(xiàn)代電子技術(shù),2012(2)
[7]張婷婷.基于.NET的RS-232高效串口調(diào)試程序設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)光盤軟件與應(yīng)用,2012(17)
【作者簡介】黃 偉(1979- ),男,廣西隆安人,碩士,南寧職業(yè)技術(shù)學(xué)院軟件技術(shù)專業(yè)帶頭人,講師。
(責(zé)編 黎 原)