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