天天看點

基于TTCN-3測試系統的逆向模型發現架構的設計

  1、逆向工程介紹

  逆向工程是軟體工程領域的一個重要分支,随着軟體複雜性的提高和遺留系統的增多,逆向工程越來越受到人們的重視,進而有了廣闊的發展空間。chikofsky和cross将逆向工程定義為一個分析目标系統的過程,它一般包括如下兩個部分:

  (1)識别系統的構件并分析構件之間的依賴關系;

  (2)建立系統另外的或在更高抽象級别上的表達形式。按照上述定義的逆向工程本質上也是一個知識恢複、知識發現工程,對于軟體這種無形的人工産物來說,逆向工程的主要目的首先是重制考察對象所展現的原有設計知識,其次是能發現一些在設計中沒有明顯表示出的、存在于設計人員頭腦中的設計知識。

  由逆向工程的定義可見,軟體逆向工程的任務包括分析系統、抽象系統和展現系統,進而實作協助使用者了解系統的目的。分析系統是指分析系統的結構及運作過程,但不管目标系統面向何種應用領域,分析系統不外乎是分析系統的靜态資訊和動态資訊;目标系統面對不同的應用領域,要實作抽象目标系統的任務,需要領域知識和專家的經驗;展現系統最好的方式是使系統可視化。由于系統的抽象過程離不開領域知識和專家經驗,是以很難有統一的方法,是以一般隻讨論分析系統的過程,即靜态資訊和動态資訊的擷取。

  本文将傳統的逆向方法應用到ttcn-3測試系統之上,分别從靜态和動态兩個方面擷取資訊,然後制定領域相關的算法,提取描述測試系統的抽象模型并進行展示。通過逆向工程,有利于測試人員和維護人員了解和維護測試系統。

  2、基于ttcn-3測試系統的逆向工程

  由于ttcn-3語言所特有的動态配置、同步異步通信機制等強大功能,使得測試人員在從測試設計到測試實作階段很難保證彼此之間的一緻性;其次,面對龐大的測試系統的管理和維護,也需要有工具輔助。這些問題必将随着ttcn-3測試語言的日益成熟而受到人們更多的關注。對基于ttcn-3的測試系統進行逆向分析,可以幫助測試人員和維護人員從更高層次上把握測試系統的設計,同時可以檢驗測試設計和測試實作之間的一緻性,這些工作對于測試系統的維護、擴充以及評估都有重大的意義。

  基于ttcn-3測試系統的逆向工程,本質上是一個測試設計和測試模型的發現過程。逆向工程的一個核心問題就是為目标系統進行模組化,是以必須解決如何為ttcn-3測試系統建立元模型,進而在元模型基礎上生成測試系統模型。然後在測試系統模型上施加領域相關的算法,實作測試設計和測試模型的抽象和提取。

3、模型發現系統架構設計

  一般來說,逆向工程包括如下兩個部分:一是識别構件并分析構件之間的依賴關系;二是建立系統的另外的或在更高抽象級别上的表達形式。逆向工程本質上是一個知識恢複、知識發現的過程。是以本文将逆向工程分為三個步驟:

  (1)資料的提取:此時的資料是未經處理,通過靜态或動态分析獲得源檔案的中繼資料,這是逆向分析和模型發現的基礎;

  (2)知識的組織:将提取到的中繼資料進行分類和存儲,此時主要使用已經定義的通用模型或規格等将中繼資料進行重組,實作知識的建構;

  (3)資訊的展現:在已獲得知識的基礎上,施加某種領域相關的算法實作系統更高層次資訊的組織和提取。

  基于對逆向工程和模型發現技術的總結,本文為基于ttcn-3測試語言的逆向工程設計了模型發現的系統架構,如圖1所示。該架構建立在eclipse平台之上,使用了eclipse平台所提供的插件擴充機制,使得該架構易于維護和擴充。同時該架構還重用了eclipse平台所提供的大量基礎設施,利于系統的內建和開發。架構主要分為三個部分:靜态分析部分輸入為ttcn-3測試集,輸出為抽象文法樹和符号表,同時還包括動态軌迹的提取,即擷取了測試集的中繼資料;模組化部分輸入為u2tp和ttcn-3規範,在這個過程中設計了ttcn-3測試系統元模型,實作了u2tp到ttcn-3映射規則,輸出為ttcn-3測試系統模型,即實作了資料的重組和資訊的形成;展現部分輸入為ttcn-3測試系統模型,通過施加領域相關的算法實作測試設計和測試模型的發現,輸出為ttcn-3測試系統的各種視圖,即進行了模型的展現。

基于TTCN-3測試系統的逆向模型發現架構的設計

圖1  逆向模型發現架構

  4、ttcn-3測試系統元模型設計

  ttcn-3雖然提供了諸如tft和gft這種表格和圖形化的描述形式,但隻是描述測試用例的一種格式而已,無法展現一個測試系統的整體結構和邏輯。為了解決維護、改進和複用大量遺留測試系統代碼的問題,需要為ttcn-3測試系統提供一個抽象層次更高的描述方法。是以,本文針對模型發現目标,借用u2tp中的具體概念,實作了u2tp和ttcn-3之間的映射關系,設計了ttcn-3測試系統元模型。

基于TTCN-3測試系統的逆向模型發現架構的設計

圖2  ttcn-3測試系統元模型

  參照u2tp對測試系統的描述和上面所制定的映射規則,本文将ttcn-3測試集抽象為四個部分:testarchitecture、testbehavior、testdata、time,并定義了如圖2所示的測試系統元模型。在設計過程中,本文考慮了逆向工程的特殊需求,對ttcn-3的元模型進行了相應的裁剪,友善測試系統模型的表示和展現。同時為了便于ttcn-3測試系統中基本資訊的組織和存儲,測試系統元模型中還定義了用于測試資訊記錄的相關資料結構。從圖中可以看到,整個測試系統的根節點是testsystem,每個測試系統會有自己的名字system,一般都是抽象測試集的名字。一個testsystem中會包括四個邏輯部分,testarchitecture、testbehavior、testdata和time。

  此外,測試系統元模型還包括了ttcn-3測試語言中所特有的的測試特性,主要是一些枚舉值的定義。主要包括通信的原子操作atomaction、測試判定結果verdict、測試通信類型communicatetype、測試構件類型componenttype、測試通信方向類型directtype、測試函數類型behaviortype等。

  5、ttcn-3靜态分析器的設計與實作

  5.1 三種靜态分析器的比較

  為了便于定制需要的逆向分析工具,本文主要調研了開源的ttcn-3靜态分析器。目前,主要有三種開源的面向ttcn-3的靜态分析器可用,下面是對這三種靜态分析器的對比分析:

  ttthreeparser:由德國testing technologies公司早期開發的分析器,目前隻支援ttcn-3v1.1.2版本,這是ttcn-3最早的一個版本,目前的測試腳本都是基于ttcn-3v3.1.1,在文法上進行了較大的調整,是以對本文的研究價值不大;

  ttcn3parser:由debian開源組織提供的基于python的靜态分析器,支援ttcn-3v3.1.1,但由于沒有提供合适的接口和文檔,是以需要重新改寫裡面的大部分文法,工作量太大;

  trex:由motorola和德國的gottingen大學合作開發,用于ttcn-3測試集的評估和重構,其中包括對ttcn-3v3.1.1的靜态分析,并且定義了明确的接口和資料結構。

  通過對上面工具的調研,本課題選用了trex作為靜态分析的工具,并在開源工具trex靜态分析器的基礎上實作相應的接口、定義相應的資料結構,通過靜态的逆向分析擷取ttcn-3測試系統的基本資訊和模型定義。trex對ttcn-3的現有标準支援較好,同時還是一個開放源代碼的研究性工程。另外,trex以eclipse插件的形式出現,這對于系統的擴充和內建非常有利。

  5.2 trex介紹

  trex是基于eclipse插件機制實作的ttcn-3度量和重構工具,由motorola公司和德國的哥廷根大學合作開發了這套系統。正向的ttcn-3工具一般都專注于核心編譯器與測試執行器的開發,trex屬于逆向工程支援工具,其目标是分析和優化測試系統代碼。motorola公司發現,ttcn-3的編輯和執行固然需要工具支援,同樣ttcn-3測試系統的維護和評估也需要有工具輔助。trex的出現,使得ttcn-3測試代碼的自動化度量和重構變為現實,同時也為評估測試系統設計的好壞提供了有力的依據。然而trex無法幫助測試人員從更高層次上把握測試系統的設計,無法檢驗測試設計和測試實作之間的一緻性。随着ttcn-3的發展,必将有更多的遺産測試系統需要被維護和更新,測試人員如何在最短時間内了解和掌握已有的測試系統,以及如何檢驗測試設計和測試實作之間的一緻性,必将作為一個重大的問題受到人們的關注。本文的研究工作很好的滿足了ttcn-3發展中的這種要求,同時結合trex工具,必将為ttcn-3測試系統的管理和維護提供強有力的支援。

  trex主要用于ttcn-3測試系統的度量和重構,它主要分為三個子產品,如圖3:

  ● 将ttcn-3測試集作為輸入,通過靜态分析獲得抽象文法樹和符号表,即測試集的中繼資料;

  ● 将測試集的中繼資料作為輸入,通過計算擷取測試集的路徑成本,為測試集的好壞提供資料上的依據;

  ● 将測試集的中繼資料和路徑成本作為輸入,通過變換文法樹完成測試代碼的重構。

  通過靜态分析、度量和重構,為測試集的維護提供了依據,同時輸出品質更高的ttcn-3測試集。

基于TTCN-3測試系統的逆向模型發現架構的設計

圖3  trex體系結構

 5.3 對trex的擴充

  編譯器首先把程式員寫的源程式轉換成一種友善處理的資料結構,那麼這個轉換過程就是詞法分析和文法分析。通過trex分析ttcn-3源代碼,可以獲得抽象文法樹和符号表。抽象文法樹使用tree作為資料結構,因為tree有很強的遞歸性,将tree中的任何結點node提取出來後,node依舊是一棵完整的tree。這一點符合現在編譯原理分析的形式語言,比如在函數裡面使用函數、循環中使用循環、條件中使用條件等等,那麼就可以很直覺地表示在tree這種資料結構上。

  針對本論文研究所要解決的問題,主要考察了de.ugoe.cs.swe.trex.core中的de.ugoe.cs.swe.trex.core.analyzer.rfparser包,它裡面包含了ttcn-3的靜态分析器,

  trex按照antlr的文法定義了ttcn-3語言的bnf範式,然後使用antlr提供的工具包生成了ttcn-3的靜态分析器。通過靜态分析器對ttcn-3源檔案的分析,可以擷取ttcn-3的抽象文法樹,然後使用符号表對基本資訊進行再組織。

  trex中重要的資料結構包括symbol、locationast、scope和symboltable,如圖4所示:

基于TTCN-3測試系統的逆向模型發現架構的設計

圖4  trex的符号表

  ttcn-3中定義了豐富的元素類型,可以友善使用者定義測試配置、測試行為和測試資料等。trex為每個ttcn-3元素都定義了一種symbol,如圖5所示。

基于TTCN-3測試系統的逆向模型發現架構的設計

圖5  trex中的符号

  在逆向分析過程中,本文主要分析了modulesymbol、typesymbol、signaturesymbol、enumsymbol、portinstancesymbol、subtypesymbol、templatesymbol、testcasesymbol、functionsymbol、altstepsymbol等關鍵資料結構。

  trex主要用于ttcn-3測試集的度量和重構,ttcn-3腳本的編輯功能和靜态分析功能是整個工具的核心。在此,本文還分析了trex的編輯器、編輯器之上的事件響應政策模式、靜态分析器的工廠模式以及ttcn-3靜态分析器的入口程式。本文通過對靜态分析器核心代碼的研讀,在ttcn3analyzer中加入了自己定義的資料結構和接口,用于通路靜态分析獲得的各種資訊,實作模型的逆向發現。

  6、總結

  本文設計實作了逆向模型發現的系統架構,并詳細介紹了靜态分析器的設計實作。測試模型的抽象和提取在技術報告《基于ttcn-3測試系統的靜态測試配置模型和資料模型的發現》和《基于ttcn-3測試系統的調用模型和動态測試配置模型的發現》中詳細介紹,而實驗在技術報告《基于ttcn-3測試系統的逆向工程的實驗及資料分析》中詳細介紹。對基于ttcn-3的測試系統進行逆向工程,可以幫助測試人員從更高層次把握測試系統的設計,同時可以檢驗測試設計和測試實作之間的一緻性,對于測試系統的維護、擴充以及評估都有重大的意義和重要的價值。   

最新内容請見作者的github頁:http://qaseven.github.io/