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