《软件测试技术实战:设计、工具及管理》—第2章 2.3节运用状态转换图设计测试用例

简介: 基于状态转换软件测试设计是软件测试设计的另一种方法,这种方法具有以下4个特征。

本节书摘来自异步社区《软件测试技术实战:设计、工具及管理》一书中的第2章,第2.3节运用状态转换图设计测试用例,作者顾翔,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.3 运用状态转换图设计测试用例
基于状态转换软件测试设计是软件测试设计的另一种方法,这种方法具有以下4个特征。

(1)软件测试对象的输出和行为方式不仅受当前输入数据的影响,同时还与软件测试对象之前的执行情况、之前的事件或以前的输入数据等有关。

(2)通过引入状态图(State Diagram)来描述软件测试对象和软件测试数据、对象状态之间的关系。

(3)状态图中的各个状态是通过不同的事件驱动的,如函数的调用。

(4)基于状态图开展的测试称之为状态转换测试。

状态图转化法最早运用于嵌入式测试用例设计。在嵌入式软件中,系统通过某种行为驱动能够从一种状态改变到另一种状态。图2-4是内存状态转换图。


d04d7af785852914fa5cdde0529fff25b9e7de56

2.3.1 从状态转换图到状态转换树
许多书中都以图2-4作为案例,进行状态转换法测试用例设计的介绍。但是,笔者认为这个图比较麻烦,不利于初学者掌握。下面以视频播放软件作为案例,来给大家介绍一个比较简单易懂的状态转化图,如图2-5所示。

d6a19bf1a222de8ae6bc1229b22c7bcba54ad2db

案例2-10:视频播放机。
这个软件的功能是:打开视频播放机,系统处于“开机”状态,单击【运行】键,系统处于“运行”状态;单击【停机】键,播放结束,系统处于停机状态;在“运行”状态单击【快进】键,进入“快进”状态,【快进】键最多可以按4次,分别为2倍数、4倍数、8倍数和16倍数前进;快进状态单击【停止】键返回“运行”状态,停机状态单击【播放】键,重新进入“运行”状态。

状态转换图转为状态转换树的方法是:

(1)状态树的节点描述状态图的状态,状态树的枝干描述状态图的事件。

(2)转换树的根节点为状态图的初始状态,转换树的终节点为叶节点。

(3)转换树的每个节点,在状态图中如有直接后续状态,则添加一个枝干和节点(不同的事件应有不同的枝干和节点),直到出现如下情况,可将此节点作为叶节点:

从根节点到新添加的节点的路径上已经出现过相同状态。
 或者:

新添加节点是状态图的一个结束状态,且不需要考虑其他状态转换。
来源:“Testing Software Design Modeled by Finite-State Machines”, IEEE Transactions on Software engineering, vol.4, no 3, may 1978, p 178-187

状态转换软件测试覆盖率:

(1)覆盖软件测试对象所有的状态;

(2)覆盖软件测试对象所有的事件;

(3)覆盖软件测试对象所有的状态转换至少一次;

(4)覆盖软件测试对象所有的状态、事件和状态转换。

为了能够得到比较高的状态转换软件测试覆盖率,再把状态图转换成状态树,然后再设计测试用例。下面讨论视频播放软件状态图是如何转换成状态树的。

图2-6为该软件的0-switch转换图。有了这棵树,就可以设计测试用例了。从树的根节点到所有叶子节点就是一个测试用例,这样就得到4个测试用例,分别为:


92eee3a3384180211058ce5596c377dfa66249ed

(1)开机->运行->快进->运行;

(2)开机->运行->快进->快进;

(3)开机->运行->停机->运行;

(4)开机->运行->停机。

上面这棵树叫作0-switch展开,也就是最基本的展开法。为了得到更多的测试用例,可以把这棵树的非结束的叶子节点再进行一次展开,也就是1-switch展开,如图2-7所示。

这样,可以得到7个测试用例:

(1)开机->运行->快进->运行->快进;

(2)开机->运行->快进->运行->停机;

(3)开机->运行->快进->快进->运行;

(4)开机->运行->快进->快进->快进;


a76f0e1f0ba9d86c768853ec51349f60d14f5a3e

(5)开机>运行->停机;

(6)开机>运行->停机->运行->停机;

(7)开机>运行->停机->运行->快进。

按照这种方法可以设计2-switch、3-switch……但是,在实际工作中,没有特殊情况,做到1-switch就已经足够了。

2.3.2 从状态转换图到状态转换表
状态转换图也可以转换为状态转换表,方法是:表头和第一列依次对应各个节点,如果这个节点与所对应的节点有链接,在表中值为边值,否则值为X。视频播放软件状态转换表见表2-14。


f8846fe10da66d8375acd26e7b94ae4ff3b472cb

对于表2-14,可以设计进行破环性测试用例,主要针对表中的X地方,如:快进到停机为X,这样可以设计一个测试用例,当播放软件处于快进阶段,强制按停止键,看系统会发生什么反应,说不定这里就有一个Bug(对于用户友好性测试的建议,当系统处于播放时,【运行】按键是虚的;当系统处于快进时,【停止】按键是虚的;当系统处于停止时,【快进】按键是虚的。)

2.3.3 业务流程状态转化法
笔者在软件测试实践中,发现状态转换法也可以运用在流程控制系统测试用例设计中,以设计出对每一个环节进行有效遍历的测试用例。

案例2-11:电子商务购物。


e95cf3460244af5bea45bf551dfbc6faffc5bb2c

由于图2-8很复杂,所以只需对关键部分进行0-switch展开就够了,如图2-9所示。

c5a54326454f43badaa14bd61a7d9b159c5c4661

这样设计出以下5个测试用例:

(1)登录->首页->查看商品->查看商品详情->下单->付款;

(2)登录->首页->修改用户信息->返回首页->查看商品->查看商品详情->查看其他商品详情->下单->付款;

(3)登录->首页->查看商品详情->下单->付款;

(4)登录->首页->查看商品详情->查看购物车->下单->付款;

(5)登录->首页->重置密码->返回首页->查看商品详情->查看商品->查看购物车->下单->付款。

注:
这里默认查看商品详情就是把这个商品放入了购物车。

对于业务流程,设计到0-switch就可以了。

相关文章
|
人工智能 自然语言处理 JavaScript
测试工程师要失业?Magnitude:开源AI Agent驱动的端到端测试框架,让Web测试更智能,自动完善测试用例!
Magnitude是一个基于视觉AI代理的开源端到端测试框架,通过自然语言构建测试用例,结合推理代理和视觉代理实现智能化的Web应用测试,支持本地运行和CI/CD集成。
3002 15
测试工程师要失业?Magnitude:开源AI Agent驱动的端到端测试框架,让Web测试更智能,自动完善测试用例!
|
测试技术 Python
自动化测试项目学习笔记(三):Unittest加载测试用例的四种方法
本文介绍了使用Python的unittest框架来加载测试用例的四种方法,包括通过测试用例类、模块、路径和逐条加载测试用例。
624 0
自动化测试项目学习笔记(三):Unittest加载测试用例的四种方法
|
测试技术 数据库
『软件测试2』 关于黑盒测试和测试用例的基础知识
该文章讲解了黑盒测试的基本概念以及如何编写有效的测试用例,包括选择合适的输入数据、预期结果的设定和测试执行的步骤。
|
测试技术 数据安全/隐私保护
软件测试的艺术:如何高效地编写测试用例
【9月更文挑战第2天】在软件开发的海洋中,测试用例是导航灯塔,指引着质量保障的航向。本文将带你航行于测试用例编写的技巧之海,从理解需求到设计思路,再到实际执行,我们将一起探索如何高效而精准地构建测试用例,确保软件的稳健与可靠。
554 1
|
测试技术
测试与开发问题之测试用例设计的重点是什么,如何实现
测试与开发问题之测试用例设计的重点是什么,如何实现
389 1
|
人工智能 测试技术 索引
基于LangChain手工测试用例生成工具
使用Python的LangChain框架,测试工程师能自动化从需求文档生成思维导图。代码示例演示了如何加载文档,提取信息,创建向量索引,执行检索,并通过PlantUML生成MindMap图像。流程中,AI替代了手动梳理需求和创建测试用例的过程,涉及的关键组件包括TextLoader、OpenAIEmbeddings、FAISS检索和AgentExecutor。该实践帮助掌握LangChain的检索和Agent功能,以实现文档到测试用例的智能转换。
|
Java 测试技术 API
SpringBoot单元测试快速写法问题之计算测试用例的分支覆盖率如何解决
SpringBoot单元测试快速写法问题之计算测试用例的分支覆盖率如何解决
|
测试技术
单元测试策略问题之寻找边界问题如何解决
单元测试策略问题之寻找边界问题如何解决
270 0
|
测试技术 开发工具 git
后端测试,好的建议,后端测试----Postman如何创建项目,导入测试用例和测试集,注意对测试用例进行保存,格式用测试用例---xxx测试用例
后端测试,好的建议,后端测试----Postman如何创建项目,导入测试用例和测试集,注意对测试用例进行保存,格式用测试用例---xxx测试用例
|
测试技术 Python
【Python自动化测试】:Unittest单元测试与HTMLTestRunner自动生成测试用例的好帮手
【Python自动化测试】:Unittest单元测试与HTMLTestRunner自动生成测试用例的好帮手
717 0