• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 基于有限狀態機的軟件測試方法

    發表于:2012-10-16來源:futurehandw作者:吳穎敏點擊數: 標簽:狀態機
    基于有限狀態機的軟件測試方法.之前基于DBT的page-model模式,在頁面數量和功能很大的情況下的伸縮性,擴展性都比較的差。 需要更多的mapping來減少工作量,想到了新的測試模式。

      之前基于DBT的page-model模式,在頁面數量和功能很大的情況下的伸縮性,擴展性都比較的差。

      需要更多的mapping來減少工作量,想到了新的測試模式。

      在MBT中提到了FSM對于web service測試的優越性

      首先在MBT對于web service的測試中,總結了幾點主要的優點:

      更準確的描述Web 服務之間的動態交互行為。

      有利于測試用例的生成和測試結果的分析。

      基于FSM的測試用例,有利于自動化的實現。

      基于FSM的測試覆蓋率準則,有利于Web服務測試的充分性。

      定義一個FSM,FSM為一個六元組(S,S0,δ,λ,I,O),其中:

      S 為一個有限集合;

      S0∈S是起始轉臺;

      δ:S×I×O->S是狀態狀態函數;

      λ: 是輸出函數;

      I 為輸入字符集;

      O 為輸出字符集;

      狀態集 Q={q0,q1,q2,q3,a4……}

      輸入集 I={userinfo, continue_operate, buy, finish}

      輸出集 O={Verifi_ACC,Invalid_ACC,showinfo,showresults,showboughtlist}

      字母表 R={userinfo/Verifi_ACC,userinfo/Invalid_ACC,continue_operate/showinfo,buy/showresults,finish/showboughtlist}

      函數表

      q0 = userinfo/Verifi_ACC × hasitem -> q1

      q0 = userinfo/Verifi_ACC × noitem -> q2

      q0 = userinfo/Invalid_ACC × true -> q3

      q1 = continue_operate/showinfo × true -> q4

      q2 = continue_operate/showinfo × true -> q5

      ……

      這樣產生的狀態集即為相對應的測試用例。而函數即為相應的邏輯處理,這樣對于web service的自動化測試框架資本就成型了。

      那MBT對于web ui自動化測試是否適用呢?之后Jason會詳細地介紹。

      當自動化測試如火如荼的時候,測試2.0時代已經悄然來臨。

      更多的時間是花在自動化測試腳本編寫上,還是其他?讓自動化更加自動化。之前jason已經介紹了相關的基于有限狀態機的測試(MBT)的測試,今天在工具的實踐上留下點memory.

      model測試在國外不少公司已經應用起來了。 NModel,JunitModel,PyModel越來越多的語言實現了MBT的理論。

      今天介紹下JunitModel,JunitModel的理論還是基于FSM的機制,對于已知的狀態和步驟進行自動化case的生成和執行。

      這里我們可以使用HtmlUnit集成JunitModel來實現對于web工作流的測試。

      為什么選擇HtmlUnit, UI操作的繁瑣和高異常性更多的選擇內存化自動化測試工具與JunitModel對接。

      public enum State {welcome, register, displayTickets, terminal};

      public boolean loginEricOkGuard() {return loginGrd(); }

      @Action public void loginEricOk() { login(“ERIC”, “ETO”); }

      public boolean loginGrd() {return state == State.welcome;}

      public void login(String userName, String userPassword)

      {

      if (userName.equals(“”)) {

      message = “EMPTY_USERNAME”; /*@REQ: CIN_031 @*/

      }

      else if (userPassword.equals(“”)) {

      message = “EMPTY_PASSWORD”; /*@REQ: CIN_032 @*/

      }

      else if ( ! allUsers.containsKey(userName)) {

      message = “UNKNOWN_USER_NAME_PASSWORD”; /*@REQ: CIN_033 @*/

      }

      else {

      User user_found = allUsers.get(userName);

      if (user_found.password.equals(userPassword)) {

      currentUser = user_found;

      message = “WELCOME”; /*@REQ: CIN_030 @*/

      }

      else {

      message = “WRONG_PASSWORD”; /*@REQ: CIN_034 @*/

      }

      }

      }

      public Object getState()

      {

      }

      public void reset(boolean testing)

      {

      }

      已JunitModel為例以annotation @Action 為屬性間步驟的實現。reset為case進行reset的重寫方法。運行結果中多種覆蓋率的統計。

      越來越多的公司注重自動化的效率和覆蓋率,也有越來越多的商業化工具基于MBT及窮舉的理論開始被接受,使自動化更加智能化是下一個測試時代的理論。

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>