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

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条,其余类似不做赘述。

用例编号 测试项 标题 预置条件 操作步骤 预期结果
Test_01 改变事件状态 事件状态转变:【已创建/待分配】--【已分派】--【处理中】--【已解决】--【已关闭】 可正常操作事件 1、通过fxm渠道进线生成事件;2、客服手动领取事件;3、客服操作更新事件信息;4、客服点击解决事件;5、事件15天无操作,系统归档事件。 事件状态转变为:【已创建/待分配】--【已分派】--【处理中】--【已解决】--【已关闭】
Test_02 改变事件状态 事件状态转变:【已创建/待分配】--【已分派】--【处理中】--【已解决】--【再次打开】--【已解决】--【已关闭】 可正常操作事件 1、通过fxm渠道进线生成事件;2、客服手动领取事件;3、客服操作更新事件信息;4、客服点击解决事件;5、客服reopen事件;6、客服点击解决事件;7、事件15天无操作,系统归档事件。 事件状态转变为:【已创建/待分配】--【已分派】--【处理中】--【已解决】--【再次打开】--【已解决】--【已关闭】
Test_03 改变事件状态 事件状态转变:【已创建/待分配】--【已分派】--【处理中】--【已解决】--【再次打开】--【升级待分派】--【已分派】--【处理中】--【已解决】--【已关闭】 可正常操作事件 1、通过fxm渠道进线生成事件;2、客服手动领取事件;3、客服操作更新事件信息;4、客服点击解决事件;5、客服reopen事件;6、客服点击升级事件;7、事件分派至其他客服;8、客服操作更新事件信息;9、客服解决事件;10、事件15天无操作,系统归档事件。 事件状态转变为:【已创建/待分配】--【已分派】--【处理中】--【已解决】--【再次打开】--【升级待分派】--【已分派】--【处理中】--【已解决】--【已关闭】
Test_04 改变事件状态 事件状态转变:【已创建/待分配】--【已分派】--【处理中】--【已解决】--【再次打开】--【升级待分派】--【处理中】--【已解决】--【已关闭】 可正常操作事件 1、通过fxm渠道进线生成事件;2、客服手动领取事件;3、客服操作更新事件信息;4、客服点击解决事件;5、客服reopen事件;6、客服点击升级事件;7、主管转移事件;8、客服处理并解决事件;9、事件15天无操作,系统归档事件。 事件状态转变为:【已创建/待分配】--【已分派】--【处理中】--【已解决】--【再次打开】--【升级待分派】--【处理中】--【已解决】--【已关闭】
Test_05 改变事件状态 事件状态转变:【已创建/待分配】--【已分派】--【处理中】--【升级待分派】--【已分派】--【处理中】--【已解决】--【已关闭】 可正常操作事件 1、通过fxm渠道进线生成事件;2、客服手动领取事件;3、客服操作更新事件信息;4、客服点击升级事件;5、事件分派至其他客服;6、客服操作更新事件信息;7、客服解决事件;8、事件15天无操作,系统归档事件。 事件状态转变为:【已创建/待分配】--【已分派】--【处理中】--【升级待分派】--【已分派】--【处理中】--【已解决】--【已关闭】
... ... ... ... ... ...

5 总结

功能图/状态图方法
适用场景 1、由于某种条件成立导致发生状态改变的情况。2、主要关注状态转移的正确性。
优点 1、通过状态图可以清晰掌握系统的整个交互过程;2、可保证每一个状态的所有可达状态都覆盖到;3、通过验证给定条件内是否能够产生需要的状态变化,可检验出是否存在不可达的状态、不必要的状态或其他非法状态,以及非法的状态迁移。
缺点 针对有效输入输出进行设计,所以无法覆盖无效路径和非法输入。
注意事项 1、每种状态至少需要访问一次;2、重点测试最常见、最普遍的状态转换;3、其次测试最不常用的状态转换路径;4、单个状态之间的转换可通过结合其他用例设计方法保证覆盖全面;5、添加非法测试路径进行测试。(异常输入、状态和条件的非法组合)

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

作者:京东物流 陈雨婷

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

相关推荐
帅得不敢出门1 天前
安卓使用memtester进行内存压力测试
android·压力测试·测试·硬件测试
每周都想吃火锅7 天前
如何在postman中传入文件参数
postman·测试
HinsCoder9 天前
【测试】——Selenium API (万字详解)
自动化测试·笔记·学习·selenium·测试工具·web·测试
大柏怎么被偷了11 天前
【测试】什么是需求?
测试
郝同学的测开笔记12 天前
PyQt6 中的布局管理
后端·python·测试
南风与鱼13 天前
软件测试 BUG 篇
bug·测试
四格13 天前
如何使用 Bittly 进行基于串口的自动化测试
嵌入式·测试
Lossya15 天前
【自动化测试】常见的自动化遍历工具以及如何选择合适的自动化遍历工具
自动化测试·功能测试·测试工具·自动化·测试
HinsCoder15 天前
【渗透测试】——Upload靶场实战(1-5关)
笔记·学习·安全·web安全·渗透测试·测试·upload靶场
大柏怎么被偷了16 天前
【软件测试】测试的岗位有哪些?
软件测试·测试