基于有限狀態機的軟件測試方法

發表于: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.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97