專利名稱:一種數據編解碼方法及其編解碼器的制作方法
技術領域:
本發明涉及一種通用的數據編解碼方法,特別是涉及一種結構化二進制碼流的編解碼方法及其編解碼器。
背景技術:
在軟件開發過程中,伴隨著必不可少的軟件測試活動,這些活動包括編碼階段的白盒測試、軟件子系統間的集成測試和軟件產品的系統測試。
在目前流行的針對C/C++商用白盒測試工具中,諸如CppUnit、RationalTest RealTime等,對于單元測試數據的構造特別是針對復雜結構的數據構造,都是在代碼或是腳本中進行的,通過對結構成員字段賦值的方式,生成相應的數據構造的靜態代碼,和被測代碼一同編譯從而達到對被測試代碼進行白盒測試的目的;另一方面對測試結果的處理也是通過相應的測試代碼對結果成員字段取值并加以判斷,從而完成對被測結果的分析。另外在進行白盒方式的軟件測試活動,也可以不借助商用測試工具,在這種方式下一種比較通用的模式是,自己進行對測試用例的組織和管理,測試數據的生成和前面提到商用測試工具中的實現方式基本相同。
在針對軟件的集成測試和系統測試活動中,自行開發的軟件測試工具能比較好的滿足特定領域軟件測試的需求;通過測試工具來模擬需要的軟件子系統或系統實現對被測試對象的測試。在這些測試工具的開發中不可避免會涉及到被測軟件中已經定義的數據結構或是標準協議文檔中定義的數據結構,在工具實現中需要構造這些結構的數據碼流;目前通用的做法是在特定工具開發語言中通過對成員字段賦值的方式,生成相應的數據構造的靜態代碼,在代碼執行中完成對數據碼流的構造;另外在處理被測對象的結構碼流時,通過將碼流轉換為相應的數據結構,在特定工具開發語言中通過相應的代碼實現對結構字段成員的取值實現對數據的解碼。
從上面看出,無論是在針對軟件的白盒測試,還是集成和系統測試,在測試過程中都遇到對這種數據碼流構和解析的問題,對其簡要總結可以看出目前采用的一種通用的處理模式那就是通過引用被測試系統中已經定義的結構,在靜態代碼中通過對結構字段賦值和取值操作完成數據碼流的構造和解析。這種方式的最大缺點就是數據的構造和解析是和代碼綁定在一起的,在書寫額外代碼的同時,數據的變化會導致代碼的變動和重復編譯。另外這種用于測試目的代碼或是測試工具,會在編譯時依賴于被測代碼,當被測代碼做了版本的改動,特別是測試代碼或是工具涉及到的數據結構變化時,也將導致測試代碼和測試工具的重新編譯。
發明內容
本發明所要解決的技術問題在于提供一種數據編解碼方法及其編解碼器,用于解決現有技術中數據發生變化時需重新編譯測試代碼和測試工具的缺點。
為了實現上述目的,本發明提供了一種數據編解碼方法,適應于通用編解碼器,其特征在于,包括如下步驟步驟11提取被測試對象中數據結構的定義信息,生成以自定義格式表示的結構信息數據;步驟12讀取所述自定義格式元素中結構的成員字段數據,并通過數據編輯接口編輯結構的成員字段數據;步驟13調用所述通用編碼器的接口,并由所述結構信息數據、成員字段數據構造結構的二進制碼流數據;及步驟14根據所述自定義格式的結構信息數據,從所述二進制碼流數據中獲取結構成員字段數據來進行解碼。
所述的數據編解碼方法,其中,所述提取采用的方式隨所述數據結構的定義方式而變化。
所述的數據編解碼方法,其中,所述自定義格式采用可擴展標記語言XML(Extensible Markup Language)格式。
所述的數據編解碼方法,其中,由XML的多個元素描述所述數據結構的單個成員字段數據。
所述的數據編解碼方法,其中,所述成員字段數據包括默認值、編解碼方式和在所述數據結構內的相對偏移信息。
所述的數據編解碼方法,其中,所述編解碼方式的XML元素值與所述通用編解碼器中的一組編解碼函數中的一個編碼函數相對應。
所述的數據編解碼方法,其中,用于所述成員字段數據的操作包括獲取結構信息數據,并以XML格式定義返回;通過結構和成員字段的名稱修改XML格式元素中結構的成員字段的取值;及通過結構和成員字段的名稱獲取XML格式元素中結構的成員字段的取值。
所述的數據編解碼方法,其中,還包括單個結構成員字段的編碼過程,該過程又包括步驟81從通用編解碼器的XML格式元素中獲取結構的成員字段數據,包括編碼、取值和偏移信息;及步驟82根據所述結構成員字段的編碼信息和取值信息,調用編碼信息對應的編碼函數,生成所述結構成員字段的二進制碼流。
所述的數據編解碼方法,其中,還包括單個結構成員字段的解碼過程,該過程又包括步驟91從XML格式元素中讀取結構成員字段的解碼、長度和相對偏移信息;步驟92根據相對偏移和長度信息,從結構碼流的相對偏移處獲取成員字段的碼流;及步驟93根據結構成員字段的解碼信息調用相應的解碼函數,對成員字段的碼流進行解碼。
為了實現上述目的,本發明還提供了一種由上述數據編解碼方法實現的編解碼器,其特征在于,包括一結構信息提取和保存模塊,用于提取被測試對象中數據結構的定義信息,及在所述自定義格式的元素中保存結構信息數據、結構成員字段數據;一數據編輯接口模塊,連接所述結構信息提取和保存模塊,用于編輯所述結構成員字段的取值;及一編解碼模塊,連接所述結構信息提取和保存模塊,用于構造所述碼流數據,從所述碼流數據中獲取所述結構成員字段的取值信息。
所述的編解碼器,其中,所述數據編輯接口模塊包括圖形用戶界面GUI(Graphic User Interface)方式、腳本方式的數據編輯接口,其中所述腳本包括Python或TCL(Tool Command Language)。
所述的編解碼器,其中,還包括腳本命令方式的編輯接口,由腳本語言提供的命令擴展機制擴展腳本命令實現。
本發明對現有技術中數據的構造和解析是和代碼綁定在一起的情況,在書寫額外代碼的同時,數據的變化不會導致代碼的變動和重復編譯;對于用于測試目的代碼或是測試工具,當其數據結構變化時,不需要對此重新編譯。此外,本發明實現的編解碼器通過提取被測試軟件對象中的結構定義信息即可實現對結構數據的編解碼,同時還提供了豐富的數據編輯接口。
以下結合附圖和具體實施例對本發明進行詳細描述,但不作為對本發明的限定。
圖1是編碼器的應用框架圖;圖2是使用解碼器的接口進行數據編輯的一個接口層次圖;圖3是單個結構成員字段的編碼流程圖;及圖4是單個結構成員字段的解碼流程圖。
其中,附圖標記10 結構定義文件模塊11 通用編解碼器110編解碼模塊111數據編輯接口模塊112結構信息提供和保存模塊12 應用程序模塊具體實施方式
本發明提出了一種新的數據編解碼方法,使用這種方法實現的編解碼器通過提取被測試軟件對象中的結構定義信息即可實現對結構數據的編解碼。該新的數據編解碼方法,其編碼實現的主要步驟如下
步驟A1提取數據結構的定義信息,生成以自定義XML格式表示的結構信息數據;步驟A2通過編輯接口編輯結構成員字段的數據;步驟A3調用編碼接口構造結構的碼流數據。
其中,步驟A1的主要作用在于提取結構化數據的結構定義信息,對于提取的方式可以針對不同的結構定義方式采用相應的提取方式,本發明的實例描述中針對以標準C定義的結構,對于諸如ANS.1方式等其它的結構化數據結構定義本發明的處理方式一致。
其解碼實現的主要步驟如下步驟B1提取數據結構的定義信息,生成以自定義XML格式表示的結構信息數據;步驟B2根據XML格式的結構描述信息,對結構的碼流進行解碼。
使用本發明的編解碼方法實現的編解碼器提供了豐富的數據編輯接口,可提供圖形化的數據編輯接口,也可通過在現有的腳本語言中嵌入新的腳本命令來提供腳本方式的數據編輯接口等。
綜合上述本發明的編解碼方法,其特點如下(1),采用從結構的定義源中提取結構的定義信息,并以自定義格式的XML表示之;(2),依賴于以XML表示的結構信息提供結構的成員變量數據編輯接口,結構的成員變量數據也保存在自定義格式的XML元素中;(3),依賴于以XML表示的結構信息和保存的數據提供對結構數據碼流的構造;(4),依賴于以XML表示的結構信息提供對結構化碼流的解碼操作,即從結構化的碼流中獲取結構成員字段數據。
下面結合附圖對技術方案中的要點數據結構信息提取及表示、結構成員變量的編輯接口和消息的編解碼等實施做詳細的描述第一結構定義信息的提取及表示通過分析結構的定義信息,并以自定義格式表示該結構信息,所要分析的結構信息可為標準C中的基本數據類型或是復雜自定義數據類型,ASN.1格式定義的數據結構,或是其它結構化數據類型,在實施中根據不同的應用而有所區別。
本發明的編解碼方法使用了XML來表示結構化數據的結構定義信息,同時結構成員字段取值信息也存儲在XML格式的文檔中。
XML是W3C的一種建議。從組成結構來看,一個XML文檔包含一個或是多個元素,由一個起始標志符和停止標志符標記其界限,每一個元素有起始標志符和停止標志符,一個元素可能具有一個值,元素值置于其起始標志符和停止標志符之間。
本發明使用XML的多個元素來描述結構的單個成員信息,成員信息包括數據類型、默認值、編解碼方式和在結構內的相對偏移信息,再由成員的XML元素描述信息組成對整個結構的描述;其中用于描述結構成員信息的XML元素中,編解碼方式元素的元素值對應到通用編解碼器中的一組編解碼函數中的一個編碼函數,使用此編解碼函數完成對該結構成員的編碼和解碼。
在具體實施中針對不同結構化數據的結構定義形式需要有不同的結構信息提取方式或是說結構信息提取的實現方案,相同的是這些結構的信息最后都以同樣的自定義XML格式來描述。
在針對以標準C定義的復雜數據類型,可以采用靜態信息提取技術獲取結構信息,在提取的結構信息基礎上生成以XML格式描述的結構信息。
在XML自定義格式中存在如下名稱的元素<VALUE>...</VALUE>
<OFFSET>...</OFFSET>
<FUNNAME>...</FUNNAME>
上述三個元素分別用來描述結構元素的取值,結構成員字段在結構中的相對偏移,結構成員字段的編解碼信息;在實施上元素名稱是可以根據方便性來自行定義,名稱的不同不會影響通用編解碼器的實施,重要的是這些元素的值所描述的信息和體現出的本發明的編解碼思想和精神。
XML中編解碼信息元素(上面所說XML中的FUNNAME元素)說明編解碼信息元素的取值和編解碼器中的編解碼函數是對應的,能夠編解碼的結構成員字段的類型是用限的,所以XML中編解碼信息元素的取值也是有限的,不同的結構字段類型對應的編碼描述信息可以配置,在生成結構成員字段的編解碼信息元素時使用。
第二結構的成員變量編輯接口圖1所示是編碼器的應用框架圖,由結構定義文件模塊10、通用編解碼器11和應用程序模塊12組成,其中通用編解碼器11由編解碼模塊110、數據編輯接口模塊111和結構信息提供和保存模塊112組成;由將結構定義文件模塊11中的文件輸入到通用編解碼器11中進行處理,輸出數據的編解碼結構到應用程序模塊12中。
編解碼器中XML格式的數據中包含結構的定義信息,同時也包含結構成員字段的當前取值信息,編輯接口主要是針對結構成員字段的取值信息進行編輯;編輯的對象是XML中結構成員字段的描述元素VALUE的取值。
舉例把一個成員的取值編輯為1后,其VALUE元素如下<VALUE>1</VALUE>
通過訪問編解碼器中以XML格式描述的結構信息和結構成員字段取值信息,在此基礎上提供一套用戶對數據的通用的編輯接口,在此通用的編輯接口集中用戶可以自由選用其中的接口,達到自定義數據編輯功能。
此處的通用編輯接口主要用于對XML中存儲的結構成員字段數據進行操作。
通用的用于操作XML中結構成員字段數據的操作主要包括(一)獲取結構的描述信息,以自定義XML格式定義返回;(二)通過結構和字段名稱來對XML中結構成員的字段取值進行修改;(三)通過結構和字段名稱獲取XML中結構成員的字段取值。
圖2是從編解碼器應用者的角度說明編解碼器的編輯接口功能,此處應用者可以看作是接口的調用者。該圖是應用者調用編解碼器的通用接口對其中XML結構成員字段進行編輯時的一個接口調用層次圖,應用者可以通過編解碼器的接口(圖2中接口1標識)中獲取相關結構信息和結構字段當前取值,通過應用者提供的封裝后的編輯接口來編輯數據,編輯后的數據通過接口1寫入到編解器中,結構成員字段的數據值得到更新。
在此通用編輯接口集的基礎上可以根據應用場景來提供更豐富靈活的編輯接口,包括GUI方式的數據編輯接口和腳本方式的數據編輯接口;腳本可為Python或是TCL,可在其中通過腳本語言提供的命令擴展機制來擴展腳本命令,提供腳本命令方式的編輯接口。
圖2中接口2、接口3和接口4分別是應用者提供的封裝編輯接口,提供對數據的GUI、腳本和其它類型的編輯方式。
第三結構的編碼結構的編碼是指在調用通用編解碼器的相關編輯口完成對結構成員數據的編輯之后,構造結構的二進制碼流數據。
在編碼時遍歷編碼結構所有成員的XML元素描述信息,通過對所有成員XML元素的解析,并實施相應的編碼操作,完成對結構的編碼,生成結構的碼流數據。
圖3是單個結構成員字段的編碼流程圖,共有三個步驟步驟31從通用編解碼器的XML中獲取結構成員信息,包括編碼、取值和偏移等信息;步驟32根據結構成員的編碼信息和取值信息,調用編碼信息對應的編碼函數,生成結構成員的二進制碼流;步驟33添加結構成員碼流到該結構中的成員相對偏移地址處。
第四結構的解碼結構的解碼是從結構的二進制碼流中獲取結構成員字段取值信息,使用通用編解碼器中結構的XML描述信息,可以實現解碼功能;XML中記錄結構成員字段的解碼和在結構中的相對偏移信息,通過這些信息實現對結構成員字段的解碼。
圖4是單個結構成員字段的解碼流程圖,共有三個步驟步驟41從XML中讀取結構成員字段的解碼、長度和相對偏移等信息;步驟42根據相對偏移和長度信息,從結構碼流的相對偏移處獲取成員的碼流;步驟43根據結構成員的解碼信息調用相應的解碼函數,對成員的碼流進行解碼。
本發明克服了現有技術中數據的構造和解析是和代碼綁定在一起,在書寫額外代碼的同時,數據的變化會導致代碼的變動和重復編譯的缺點;對于用于測試目的代碼或是測試工具,當測試代碼或是工具涉及到的數據結構變化時,能夠不需要重新編譯測試代碼和測試工具。此外,使用本發明實現的編解碼器通過提取被測試軟件對象中的結構定義信息即可實現對結構數據的編解碼,同時還提供了豐富的數據編輯接口,可提供圖形化的數據編輯接口,也可通過在現有的腳本語言中嵌入新的腳本命令來提供腳本方式的數據編輯接口等。
當然,本發明還可有其他多種實施例,在不背離本發明精神及其實質的情況下,熟悉本領域的技術人員當可根據本發明作出各種相應的改變和變形,但這些相應的改變和變形都應屬于本發明所附的權利要求的保護范圍。
權利要求
1.一種數據編解碼方法,適應于通用編解碼器,其特征在于,包括步驟11提取被測試對象中數據結構的定義信息,生成以自定義格式表示的結構信息數據;步驟12讀取所述自定義格式元素中結構的成員字段數據,并通過數據編輯接口編輯結構的成員字段數據;步驟13調用所述通用編碼器的接口,并由所述結構信息數據、成員字段數據構造結構的二進制碼流數據;及步驟14根據所述自定義格式的結構信息數據,從所述二進制碼流數據中獲取結構成員字段數據來進行解碼。
2.根據權利要求1所述的數據編解碼方法,其特征在于,所述提取采用的方式隨所述數據結構的定義方式而變化。
3.根據權利要求1所述的數據編解碼方法,其特征在于,所述自定義格式采用可擴展標記語言XML格式。
4.根據權利要求3所述的數據編解碼方法,其特征在于,由XML的多個元素描述所述數據結構的單個成員字段數據。
5.根據權利要求4所述的數據編解碼方法,其特征在于,所述成員字段數據包括默認值、編解碼方式和在所述數據結構內的相對偏移信息。
6.根據權利要求5所述的數據編解碼方法,其特征在于,所述編解碼方式的XML元素值與所述通用編解碼器中的一組編解碼函數中的一個編碼函數相對應。
7.根據權利要求3所述的數據編解碼方法,其特征在于,用于所述成員字段數據的操作包括獲取結構信息數據,并以XML格式定義返回;通過結構和成員字段的名稱修改XML格式元素中結構的成員字段的取值;及通過結構和成員字段的名稱獲取XML格式元素中結構的成員字段的取值。
8.根據權利要求3所述的數據編解碼方法,其特征在于,還包括單個結構成員字段的編碼過程,該過程又包括步驟81從通用編解碼器的XML格式元素中獲取結構的成員字段數據,包括編碼、取值和偏移信息;及步驟82根據所述結構成員字段的編碼信息和取值信息,調用編碼信息對應的編碼函數,生成所述結構成員字段的二進制碼流。
9.根據權利要求3所述的數據解碼方法,其特征在于,還包括單個結構成員字段的解碼過程,該過程又包括步驟91從XML格式元素中讀取結構成員字段的解碼、長度和相對偏移信息;步驟92根據相對偏移和長度信息,從結構碼流的相對偏移處獲取成員字段的碼流;及步驟93根據結構成員字段的解碼信息調用相應的解碼函數,對成員字段的碼流進行解碼。
10.一種由權利1所述數據編解碼方法實現的編解碼器,其特征在于,包括一結構信息提取和保存模塊,用于提取被測試對象中數據結構的定義信息,及在所述自定義格式的元素中保存結構信息數據、結構成員字段數據;一數據編輯接口模塊,連接所述結構信息提取和保存模塊,用于編輯所述結構成員字段的取值;及一編解碼模塊,連接所述結構信息提取和保存模塊,用于構造所述碼流數據,從所述碼流數據中獲取所述結構成員字段的取值信息。
11.根據權利要求10所述的編解碼器,其特征在于,所述數據編輯接口模塊包括圖形用戶界面GUI方式、腳本方式的數據編輯接口,其中所述腳本包括Python或TCL。
12.根據權利要求11所述的編解碼器,其特征在于,還包括腳本命令方式的編輯接口,由腳本語言提供的命令擴展機制擴展腳本命令實現。
全文摘要
本發明公開了一種數據編解碼方法及其編解碼器,該編解碼方法包括步驟提取被測試對象中數據結構的定義信息,生成以自定義格式表示的結構信息數據;讀取自定義格式元素中結構的成員字段數據,并通過數據編輯接口編輯結構的成員字段數據;調用通用編碼器的接口,并由結構信息數據、成員字段數據構造結構的二進制碼流數據;及根據結構信息數據,從碼流數據中獲取結構成員字段數據來進行解碼。本發明在數據的變化,不需變動代碼和重復編譯;對用于測試目的代碼或是測試工具,當數據結構變化時,也無需重新編譯,有效提高了測試的效率。通過提取被測試軟件對象中的結構定義信息實現對結構數據的編解碼,還提供了豐富的數據編輯接口。
文檔編號G06F9/45GK1858717SQ200510039268
公開日2006年11月8日 申請日期2005年5月8日 優先權日2005年5月8日
發明者尤培剛, 馬軍, 肖遂 申請人:中興通訊股份有限公司