当前位置: 首页 > news >正文

测试用例设计方法六脉神剑——第四剑:石破天惊,功能图法攻阵

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)梳理状态之间的转换关系和触发条件,得到状态-条件表。

| 当前状态 | 下一个状态 | 状态转换条件 |
| 已创建/待分配 | 已分派 | ①系统自动分派②手动领取 |
| 已分派 | 处理中 | ①客服操作事件/事件有更新 |
| 已创建/待分配 | 处理中 | ①事件转移 |
| 已创建/待分配 | 已解决 | ①系统解决事件(如小程序-用户取消服务) |
| 已创建/待分配 | 已关闭 | ①mq触发关闭(如上游取消异常) |
| 处理中 | 已解决 | ①客服手动解决事件②系统自动解决事件 |
| 已解决 | 已关闭 | ①归档 |
| 已解决 | 再次打开 | ①手动reopen②系统触发reopen |
| 处理中 | 升级待分派 | ①客服升级事件 |
| 处理中 | 已关闭 | ①合并 |
| 升级待分派 | 已分派 | ①系统自动分派②手动领取 |
| 升级待分派 | 处理中 | ①事件转移 |
| 再次打开 | 升级待分派 | ①客服升级事件 |
| 再次打开 | 已解决 | ①客服手动解决事件②系统自动解决事件 |
| - | 已创建/待分配 | ①fxm/小程序等生成事件 |
| - | 已分派 | ①客服手动创建②电话/咚咚等方式进线 |
| - | 升级待分派 | ①系统升级事件(如邮政投诉事件) |

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

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

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

在这里插入图片描述

5 总结

在这里插入图片描述

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

作者:京东物流 陈雨婷

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

相关文章:

  • 智能优化算法应用:基于鸽群算法3D无线传感器网络(WSN)覆盖优化 - 附代码
  • 自定义Axure元件库及原型图泳道图的绘制(详细不同类的案例)
  • Springboot整合Redis实现消息发布订阅
  • 做数据分析为何要学统计学(2)——如何估计总体概率分布
  • 我们一起做过的SPA——Nuxt.js介绍
  • 类MS Word 的文档处理控件TX Text Control x32 新版本抢先看!
  • 【智能家居】八、监控摄像采集、人脸识别比对进行开门功能点
  • 「公主文学」八大热点内容数据洞察(小红书)
  • 80后喜欢的经典老歌歌单总结,你最爱的是哪一首?
  • OpenCV-Python15:图像阈值处理
  • ​flutter 代码混淆
  • 《从入门到精通:AJAX基础知识解析,前端开发中利器》基础篇
  • 值得收藏:一份完整的Mysql高性能优化规范建议
  • 平面上点到直线的距离
  • Navicat 连接 GaussDB分布式的快速入门
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • C++类的相互关联
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • express如何解决request entity too large问题
  • Java知识点总结(JavaIO-打印流)
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • PHP CLI应用的调试原理
  • React-redux的原理以及使用
  • Spring核心 Bean的高级装配
  • V4L2视频输入框架概述
  • ViewService——一种保证客户端与服务端同步的方法
  • WePY 在小程序性能调优上做出的探究
  • windows-nginx-https-本地配置
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 对象引论
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 我的zsh配置, 2019最新方案
  • 小程序button引导用户授权
  • 写代码的正确姿势
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • #mysql 8.0 踩坑日记
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • #微信小程序:微信小程序常见的配置传值
  • (12)Linux 常见的三种进程状态
  • (26)4.7 字符函数和字符串函数
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (五)网络优化与超参数选择--九五小庞
  • (小白学Java)Java简介和基本配置
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (转)ABI是什么
  • (转载)CentOS查看系统信息|CentOS查看命令
  • .Net 8.0 新的变化
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • .NET项目中存在多个web.config文件时的加载顺序
  • /etc/skel 目录作用
  • /ThinkPHP/Library/Think/Storage/Driver/File.class.php  LINE: 48
  • @html.ActionLink的几种参数格式
  • [ solr入门 ] - 利用solrJ进行检索