一、引言
  测试工程师小新一是一名安卓客户端测试工程师,对于安卓客户端的功能测试、自动化测试和性能测试方面都有着非常丰富的经验。最近小新一被通知负责某二手交易APP的功能测试,在初步了解了该APP后,小新一皱起了眉头。
  该APP虽然看起来功能简单,只是提供了一个买家和卖家的交易沟通平台,但是其中涉及到了多个实体的状态变迁,如果只是对于需求进行测试用例设计的话,很难保证所有的功能路径都被覆盖了,而且测试用例对于路径的覆盖无法区分优先级。这样的测试用例是远远不能保证到产品的质量的。
  针对这个情况,小新一和测试分析小组负责人锅仔进行了一次深入的沟通,在听完小新一对于测试任务的描述后,锅仔提出了使用基于状态的测试方法来完成对于该APP的测试。
  那么什么是状态机呢?什么又是基于状态的测试呢?怎么使用基于状态的测试呢?基于状态的测试适用于什么情况呢?在使用状态机的时候需要注意哪些事项呢?如果你对这些问题还存有疑问,那么请看官继续往下看,和小新一一起,学习基于状态的测试方法。
  二、基于状态的测试
  2.1定义
  基于状态的测试是一种基于模型的测试方法,作为黑盒测试设计技术中的一种,常被用于事件驱动的系统中。基于状态的测试核心思路是通过遍历系统所有的状态转换迁移,来保证整个系统功能的正常。
  2.2状态机
  顾名思义,基于状态机的测试,其核心模型就是状态机,也叫状态图。状态机的组成其实比较简单,要素大致有三个:输入,输出,还有状态。输入和输出比较容易理解,那么什么叫做状态呢?状态就是对象生命期中的条件或情况,在这种状态中,对象满足某种条件,执行某种活动,或者等待某种事件。
  在基于状态的测试中,状态机的准确度直接决定了测试效果,所以状态机的绘制是非常重要的一环,我们可以通过以下三步来分析如何绘制状态机:
  步骤一:列出研究对象拥有的各种状态
  通过启发式的探索来发现系统的状态:
  1)通过三个简单问题发现状态:有没有什么事情是我现在可以做但之前不可以做的?有没有什么事情是我现在不可以做但之前可以做的?我现在所采取的行动是否产生了和之前不同的结果?
  2)留意用于描述正在发生事情的言辞,如"当……的时候"(While)、"当系统正在导入数据的时候……"、"当账户被冻结的时候……"
  3)每个状态都由事件所触发,认出状态可回过头找出触发事件,反之亦然
   ... ...
   查看全文内容,请点击下载:《51测试天地》原创测试文章系列(四十二)

用FSM写Case,玩过没?的更多相关文章

  1. python写机器人玩僵尸骰子

    python写机器人玩僵尸骰子由Al Sweigart用python发布注意:我正在为我的僵尸骰子模拟器寻找反馈,以及这一套指令.如果你觉得有什么地方可以改进,请发邮件到al@inventwithpy ...

  2. 什么?我往Redis写的数据怎么没了?

    大概是因为int没有因为change方法而改变原值,所以就说它传过去的是自身的值,因而叫值传递:User对象经过change方法后,对象的数据变了,就认为是因为实参和形参指向的是同一片内存空间,内存空 ...

  3. php l练习(写着玩)

    需求:假设今天24号,今天发表的评论显示几小时前发布,23号发布的显示 昨天几点发布的,再往前的就直接显示年月日. date_default_timezone_set('PRC'); // $crea ...

  4. c# 写着玩的,两个Task并发,一个写队列一个读队列的异常情况

    class Program { class TestEnqueue { static Queue<string> str = new Queue<string>(); publ ...

  5. 打印pid,写着玩。

    #include <stdio.h> #include <string.h> #include <dirent.h> #include <limits.h&g ...

  6. Springboot+WebSocket+Kafka(写着玩的)

    闹着玩的来源:前台发送消息,后台接受处理发给kafka,kafka消费者接到消息传给前台显示.联想到websocket. 最终效果如图: 页面解释: 不填写内容的话,表单值默认为Topic.Greet ...

  7. sql视图中写case判断null值

    下面是正解 用 is null (case when dbo.Feedback.Funnel is null then '否' when dbo.Feedback.Funnel='否' then '是 ...

  8. 如何保证写出来的程序没BUG

  9. 自己写的书《深入理解Android虚拟机内存管理》,不出版只是写着玩

    百度网盘地址:https://pan.baidu.com/s/1jI4xZgE 我给起的书名叫做<深入理解Android虚拟机内存管理>.本书分为两个部分,前半部分主要是我对Linux0. ...

随机推荐

  1. java异常处理机制 (转载)

    java异常处理机制 本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,从C ...

  2. 【Git 】$ ./gradlew idea 构建一个idea的项目

    Welcome to Git (version 1.9.5-preview20150319) Run 'git help git' to display the help index.Run 'git ...

  3. 我的PHP之旅--认识数据库及数据库操作

    数据库基本知识 什么是数据库服务器:安装了数据库软件的电脑,就是数据库服务器,同理安装了Apache软件的电脑就是www服务器. 什么是DBMS:database management system( ...

  4. 对敏捷开发的误解(转自MBAlib)

    对敏捷开发的误解 误解一:敏捷对人的要求很高 很多人在尝试实施敏捷时说:敏捷对人的要求太高了,我们没有这样的条件,我们没有这样的人,因此我们没法敏捷.可是,敏捷对人的要求真的那么高么? 软件归根到底还 ...

  5. 转载 -- iOS数据持久化存储

    作者:@翁呀伟呀 授权本站转载 概论 所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据.在iOS开发中,有很多数据持久化的方案,接下来我将尝试着介绍一下5种方 ...

  6. iOS 页面间传值 之 单例传值 , block 传值

    ios 页面间传值有许多,前边已经分享过属性传值和代理传值,今天主要说一下单例传值和 block 传值 单例传值:单例模式一种常用的开发的模式,单例因为在整个程序中无论在何时初始化对象,获取到的都是同 ...

  7. delphi xe5 android 开发数据访问手机端 解决乱码的办法

    经过测试,将sqlserver里的字段由varchar 或者char  改为  nvarchar 或者nchar 然后在手机端的clientdataset 增加字段的时候数据类型选择widestrin ...

  8. java.io.IOException: Cannot run program "bash": error=12, Cannot allocate memory

    java.io.IOException: Cannot run program , Cannot allocate memory 云服务器运行nutch报出的异常: 解决方案: http://daim ...

  9. CSS content内容生成技术以及应用(转)

    一.哗啦哗啦的简介 zxx://这里“哗啦哗啦”的作用是为了渲染一种氛围.content属性早在 CSS2.1的时候就被引入了,可以使用:before以及:after伪元素生成内容.此特性目前已被大部 ...

  10. Ubuntu之网络配置

    一.配置大概分三类:通过配置文件配置.通过命令配置.通过图形化的网络连接菜单配置. 拨号无线等的没条件实验,不涉及. 主要文件:/etc/network/interfaces,这里是IP.网关.掩码等 ...