基于有限状态机的软件测试方法

Chipo ·
更新时间:2024-11-15
· 641 次阅读

   之前基于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及穷举的理论开始被接受,使自动化更加智能化是下一个测试时代的理论。



软件测试方法 测试方法 有限状态机 方法 软件测试 状态机 测试 软件

需要 登录 后方可回复, 如果你还没有账号请 注册新账号