黑盒测试方法——状态迁移

一.状态迁移概述:

  1.有限状态机:

    1.1. 有限状态机(Finite State Machine,缩写FSM),简称状态机,是表示有限个状态以及在这些状态之间的转换和动作行为的数学模型。状态机可以通过模型把多状态、多状态之间转换的解耦,并简明扼要的展示出来。

 

    1.2. 状态机可以归纳为3个要素组成:现态、条件、次态:

      a.现态:当前所处的状态。譬如你当前正处于学习 的状态;

      b.条件:又称为"事件",当一个条件被满足后,将会触发一个动作,或者执行一个状态迁移。

      c.次态:条件满足后要迁往的状态。譬如你在阅读完本文后,会回想生活中都有哪些是状态机,这便是从学习的状态转换为 思考 状态。

 

  2.状态迁移测试设计:

    2.1. 状态迁移测试设计就是基于有限状态机的理论而开展的测试设计活动。对于被测系统,我们会把系统的状态抽象出来,以及对抽象的状态相互之间的切换条件及切换路径进行标记,这边形成了一个有限状态机。根据有限状态机,从状态迁移路径覆盖的角度进行测试用例的设计,这便是状态迁移测试设计。

 

    2.2. 状态迁移的思想是提供将多个状态的转换串联起来进行测试的思路。

 

    2.3. 注意事项:a. 不要把条件/事件和状态混为一谈; b.避免出现状态的遗漏; c. 状态变化后可以回到原先状态。

 

二.状态迁移步骤:

  1. 跟进被测对象的需求提取状态
  2. 绘制状态迁移图
  3. 确定测试强度,转换成状态树
  4. 选取测试数据,设计测试用例  

 

二. 状态迁移图 与 状态树:

  • 假设我们每天都辛苦工作后,都需要学习一段时间,才开始睡觉。那么我们可以画出这个状态迁移图:

 

  1. 状态与迁移条件 :从下面的状态迁移图中,可以发现,(a)状态:工作、学习、睡觉。 (b)条件:a,b,c,d,e,f

 

 

 

  2. 转换为状态数:

    

 

 

    2.1. 把起始状态(工作) 作为状态树的根节点,然后以根节点的迁移状态(学习、睡觉) 作为子节点,依次执行,直到所有条件(a/b/c/d) 都有覆盖为止。

  

  3. 生成测试用例:

    3.1.  通过状态树快速得到测试用例:

      a. 工作 -> a -> 学习 -> b -> 学习;

      b. 工作 -> a -> 学习 -> c -> 睡觉;

      c. 工作 -> e -> 睡觉 -> e -> 工作;

      d. 工作 -> e -> 睡觉 ->d ->睡觉。

 

四. N Switch:

  4.1. N Switch 概念:

    N-Switch 是由 TSUN S. CHOW 于1978年,在他发布的论文《Testing Software Design Modeled by Finite-State Machines》 中提出,将 N-Switch 定义为程序图中长度为 n+1 的连续的边或弧线(通常在状态图中表示循环)的序列。N-Switch 是一个序列。

 

  4.2. 0-switch:

    0 - Switch 是长度为1的连续的边或弧线的序列,长度为1的边有 a、b、c、d、e、f。通过这6条边绘制出来的状态树:

 

    4.3. 1-switch:   

      a. 1-Switch是长度为2的连续的边或弧线的序列,长度为2的边有ab, ac, bb, bc, cd, ce, dd, de, ea, ef, fd, fe。通过这12条双边绘制出来的状态树:

      b. 通过1-switch状态树,我们发现1-switch是在0-switch的基础上扩展了一个层次。同理,N-Switch就是在(N-1)Switch的基础上扩展了一个层次。

      c. 随着N的递增,表明 测试强度 在加大,并且测试用例的数量在以指数趋势发生变化,我们需要平衡测试强度与测试人力的投入以及项目现状。

      d. 建议:

        (1) 在测试资源相对充裕的情况下,优先选择 1-Switch 的测试强度,当测试资源相对紧张时,选择 0-Switch 的测试强度。

        (2) 当被测需求的优先级较高或风险较高,优先选择 1-Switch 的测试强度,当被测需求的优先级较低或风险较低时,选择 0-Switch 的测试强度。

 
五.  实战:
  5.1. APP 的登录状态切换:
    a. 需求描述:
      (1)用户在第一次打开APP 后,默认处于游客状态。
      (2)如果当前用户 已经注册过用户,则可以直接进入 登录页面进行登录,进入 已登录的状态。
      (3)如果当前用户 未注册过用户,则需要进入 注册页面,进入 用户注册状态。
      (4)允许 已登录账户切换其他账户后,也处于 已登录状态。
      (5)游客 尝试登录失败后,会回到 游客状态。
      (6)游客状态可以通过第三方账号,过程中处于 授权中状态。
 
    b. 根据上述需求描述,并遵循 状态迁移 的步骤,可以进行以下分析:
      (1)提取状态 。通过上述对状态切换的描述,可以总结出该需求的状态有:游客、已登录、授权中、用户注册,四个状态。
      (2)绘制状态迁移图。
      (3)转换状态树。路径长度为1的序列为:a/b/c/d/e/f/g/h/i/j,覆盖所有路径,得到的状态树如下:
      • 先从起始状态-游客开始,找出游客的次态;
      • 确认 0-switch 是否已经覆盖,如果没有,则进行第三步;
      • 遍历末节点,找出各个末节点的次态,进入第二步。            
 
  
  5.2. 篮球场上球员的状态变化:
     a. 篮球场上球员的状态主要包括:
      (1)球员在场上进攻;
      (2)球员在场上防守;
      (3)球员在场下休息;
      (4)球员犯满毕业;
      (5)球员恶意犯规离场;
      (6)暂停,战术布置中;
      (7)球员受伤离场
 
  

 

     b. 跟进上述描述,进行球员状态变化分析:

      (1)提取状态 分析,球员的状态主要是:进攻、防守、场下休息、犯满、受伤离场、恶意犯规离场、暂停。

      (2)绘制状态迁移图

      (3)转换状态数-路径长度为1的序列为:a/b/c/d/e/f/g/h/i/j/k/l/m/n,覆盖所有的路径得到的状态树如下:

      • 先从起始状态-进攻开始,找出 进攻的次态;
      • 确认 0-switch 是否已经覆盖,如果没有,则进行第三步;
      • 遍历末节点,找出各个末节点的次态,进入第二步。           
      

 

 

     c. 设计测试用例:

      

 

 六. 小结:

  状态迁移测试设计方法喜闻乐见,是有效发现与挖掘缺陷的重要手段。除了在项目中运用,也可以在实际生活中使用状态迁移来进行分析。

      

 

posted @ 2021-11-24 21:45  浪里小白龙qaq  阅读(477)  评论(0编辑  收藏  举报