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

news/2024/6/30 10:49:58

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 转载请注明来源


http://lihuaxi.xjx100.cn/news/1891102.html

相关文章

论文润色降重哪个平台好 papergpt

大家好,今天来聊聊论文润色降重哪个平台好,希望能给大家提供一点参考。 以下是针对论文重复率高的情况,提供一些修改建议和技巧: 标题:论文润色降重哪个平台好――专业、高效、可靠的学术支持 一、引言 在学术研究中&…

OpenHarmony 鸿蒙系统之开发环境安装

一、首先在下方链接网址中下载DevEco Studio的安装包。 DevEco Studio历史版本下载-HarmonyOS应用开发官网

单通道led线性驱动芯片推荐:SM2082EGS

单通道LED线性驱动芯片是一种用于控制LED灯的芯片,它能够提供恒定的电流输出,从而实现LED灯的稳定亮度调节。这种芯片主要由输入端、控制电路、放大器和输出端构成,通过控制输入端的电压和信号来调节LED的亮度。 单通道led线性驱动芯片推荐&a…

debezium常见问题官网翻译版

原文链接 https://debezium.io/documentation/faq/ 欢迎关注留言,我是收集整理小能手,笔芯笔芯. 什么是Debezium? Debezium 是一组分布式服务,可捕获数据库中的行级更改,以便您的应用程序可以查看并响应这些更 改。D…

Python Django Suit:构建现代化的Django后台管理

概要 Django Suit是一款为Django后台管理提供现代、优雅界面的第三方应用,它致力于提升Django开发者的管理体验。本文将深入介绍Django Suit的安装、配置和高级功能,提供详实的示例代码,帮助大家更好地使用和定制Django后台管理界面。 安装与…

Django、Echarts异步请求、动态更新

前端页面 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>echarts示例</title> <script src"jquery.min.js"></script><script type "text/javascript" src "echarts.m…

后端对数据库查询的时间格式化

方式一&#xff1a; 在属性上加入注解&#xff0c;对日期进行格式化&#xff0c;如&#xff1a; JsonFormat(pattern "yyyy-MM-dd HH:mm:ss") private LocalDateTime updateTime;方式二&#xff1a; 在WebMvcConfiguration 中扩展Spring MVC的消息转换器&#xf…

k8s-8 ingress

ExternalName类型 当集群外的资源往集群内迁移时&#xff0c;地址并不稳定&#xff0c;访问域名或者访问方式等会产生变化&#xff1b; 使用svc的方式来做可以保证不会改变&#xff1a;内部直接访问svc&#xff1b;外部会在dns上加上解析&#xff0c;以确保访问到外部地址。 …