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