测试用例设计方法六脉神剑——第四剑:石破天惊,功能图法攻阵| 京东物流技术团队

京东云开发者
• 阅读 246

1 引言

前面几篇文章为我们讲述了因果图、判定表、正交试验等几种方法,主要是针对于不同条件输入输出的组合进行测试,但在实际需求中,我们也常会遇到需要对被测对象的状态流转进行验证的情况,此时前面几种方法将不再适用,对于这种状态转换类问题,功能图法则可大展身手。

2 概念及原理

2.1 基本概念

功能图:也称状态图法,该方法是一种专门解决动态说明问题的测试用例设计方法 ,主要由状态迁移图和逻辑功能模型两部分构成。

2.1.1 状态迁移图

用于描述一个特定对象生命期中满足某些条件的所有状态,以及由于各种事件的发生而引起的状态之间的转移。关于状态迁移图,有如下几点需要注意:

1)一个状态迁移图中包含如下几种状态:

•初态 (即初始状态) —— 实心圆

•终态 (即最终状态) —— 一对同心圆 (内圆为实心圆)

•中间状态 —— 圆角矩形

2)在一张状态图中只能有一个初态,而终态则可以有 0 至多个。

3)状态图既可以表示单程生命周期,也可以表示系统循环运行过程。

2.1.2 逻辑功能模型

用于描述静态说明,表示在状态中输入条件和输出条件之间的对应关系。

2.2 核心思想

功能图法的核心思想在于:抽象出待测系统的若干状态以及状态之间的转换条件和转换路径,然后从状态迁移路径覆盖的角度设计测试用例。

3 方法步骤

1)分析需求,明确状态节点,具体关注以下几个信息

•存在的状态;

•状态之间的转换关系;

•状态变化的触发条件。

2)梳理不同状态的转换,输出状态 - 条件表;

3)画出状态迁移图;

•定义初始状态;

•为初始状态增加一次操作改变初始状态,增加新的状态;

•为上一步步产生的新状态增加一次操作,再增加新的状态;

•循环直到没有新状态产生为止。

4)转换为状态迁移树;

结合广度优先遍历 + 深度优先遍历算法,遍历状态迁移图的每一条路径,得到状态迁移树。

5)从状态迁移树导出测试路径。

状态迁移树中根节点到每个叶子节点的路径即为一条测试用例。

4 举个栗子

场景:针对客服系统事件状态流转过程设计测试用例

1)分析客服事件可能存在的所有状态。

•已创建 / 待分配

•已分派

•处理中

•已解决

•已关闭

•升级待分派

•再次打开

2)梳理状态之间的转换关系和触发条件,得到状态 - 条件表。

测试用例设计方法六脉神剑——第四剑:石破天惊,功能图法攻阵| 京东物流技术团队

3)根据状态 - 条件表,画出功能图 / 状态图。

测试用例设计方法六脉神剑——第四剑:石破天惊,功能图法攻阵| 京东物流技术团队

4)根据功能图输出状态迁移树。

测试用例设计方法六脉神剑——第四剑:石破天惊,功能图法攻阵| 京东物流技术团队

5)输出测试用例,下表举例输出前 5 条,其余类似不做赘述。

测试用例设计方法六脉神剑——第四剑:石破天惊,功能图法攻阵| 京东物流技术团队

5 总结

测试用例设计方法六脉神剑——第四剑:石破天惊,功能图法攻阵| 京东物流技术团队

通过本节讲述的功能图测试用例设计方法,我们可以轻松设计存在对象状态转移变换需求的测试用例,从而清楚的掌握整个系统的交互过程,但如果我们面对的需求中更多描述复杂的业务处理流程,我们又该使用哪种方法呢?一起看看下一节的场景法吧~

作者:京东物流 陈雨婷

来源:京东云开发者社区 自猿其说 Tech 转载请注明来源

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
java如何获取一个double的小数位数
前言看标题是不是觉得这是一个很简单的问题,我一开始也是这么认为的,但是实际情况下,在各种情况下我们都进行了测试,发现很多实际情况是无法不尽如人意的。方法分析当前能想到的比较容易有下面几种1、直接使用double处理2、将double转换成String进行处理方法一:直接对double进行处理,进行计算通过计算后的结
Stella981 Stella981
3年前
Python接口自动化实战(第二阶段)
1.unitttest简介为什么要使用unittest?前面我们已经写代码实现了注册接口的处理调用,但是一个接口往往需要多条测试用例才能完整的覆盖到每一种情况,针对于单接口多条测试用例需要执行的情况,我们该如何处理呢?在unittest的测试类中定义多个测试方法来完成测试,这可能是大家最先想到的一个解决方法,
Wesley13 Wesley13
3年前
MySQL redo与undo日志解析
前言:前面文章讲述了MySQL系统中常见的几种日志,其实还有事务相关日志redolog和undolog没有介绍。相对于其他几种日志而言,redolog和undolog是更加神秘,难以观测的。本篇文章将主要介绍这两类事务日志的作用及运维方法。1.重做日志(redolog)我们都知道,事务的四大特性里面
Wesley13 Wesley13
3年前
Java数据结构和算法(十五)——无权无向图
前面我们介绍了树这种数据结构,树是由n(n0)个有限节点通过连接它们的边组成一个具有层次关系的集合,把它叫做“树”是因为它看起来像一棵倒挂的树,包括二叉树、红黑树、234树、堆等各种不同的树,有对这几种树不了解的可以参考我前面几篇博客。而本篇博客我们将介绍另外一种数据结构——图,图也是计算机程序设计中最常用的数据结构之一,从数学意义上讲
Wesley13 Wesley13
3年前
C#单元测试
什么叫单元测试(unittesting)?是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软
Wesley13 Wesley13
3年前
Java重点基础:反射机制
一、什么是反射?Java反射说的是在运行状态中,对于任何一个类,我们都能够知道这个类有哪些方法和属性。对于任何一个对象,我们都能够对它的方法和属性进行调用。我们把这种动态获取对象信息和调用对象方法的功能称之为反射机制。二、反射的三种方式
京东云开发者 京东云开发者
4个月前
研发视角浅谈R2流量回放测试
一、背景测试小伙伴们在2023年保障了团队线上系统0问题,这简直就是一项了不起的壮举!这得益于咱们测试组同事对工作的细致投入、风险把控、以及严格遵循流程规范进行测试用例评审、自动化建设、联调推动、回归验证、常态化压测、大促高保真压测、引流回放等多重保险策略
京东云开发者 京东云开发者
11个月前
测试用例设计方法六脉神剑——第二剑:招式组合,因果判定出世 | 京东物流技术团队
1引言上篇讲了等价类划分和边界值分析法,而这两种方法只考虑了单个的输入条件,并未考虑输入条件的各种组合、输入条件之间的相互制约关系的场景。基于此短板,因果图法和判定表法应运而生。2因果图法2.1概念及原理2.1.1定义一种描述输入条件的组合以及每种组合对应
京东云开发者 京东云开发者
11个月前
测试用例设计方法六脉神剑——第三剑:倚天屠龙,正交试验冲锋 | 京东物流技术团队
1引言上篇讲了因果图和判定表法,而这两种方法在变量值很多、排列组合数量极大的场景下,会生成非常庞大且冗余的测试用例,此时我们很难对所有组合场景进行全量测试用例覆盖,基于此短板,正交试验法应运而生。2概念及原理2.1定义正交试验法是研究多因素、多水平的一种试
京东云开发者 京东云开发者
11个月前
测试用例设计方法六脉神剑——第六剑:心法至简,百家之长集成
1引言在前面几篇文章中,为大家介绍的都是系统的方法论,但在实际需求测试的过程当中,受到外部环境及业务逻辑的影响,比如涉及多需求耦合、浏览器缓存堆积等情况,仅针对当前需求设计出的测试用例就会有覆盖不全的问题,此时就需要借助以往的经验进行反向错误推测,辅助其他