嵌入式软件测试笔记12 | 什么是状态转换测试?如何开展?

简介: 嵌入式软件测试笔记12 | 什么是状态转换测试?如何开展?

1 状态转换测试简介

  • 嵌入式系统有些表现出基于状态的行为,设计此系统可使用基于状态的建模;
  • 在设计过程中,创建的模型可作为测试设计的基础;
  • 以下将描述基于状态的模型来导出测试用例的技术。

1.1 基于状态的测试设计技术

  • 此技术目标是:验证事件、动作、行为与转台转换之间的关系;
  • 通过此技术,可判定系统基于状态的行为是否满足系统的规范集合。

1.2 系统行为

分三种类型:

  • 简单行为;
  • 连续行为;
  • 基于状态的行为。

2 故障类别

基于状态的行为出现错误的三种原因:

  • 状态图无法表示系统功能规范的正确转换;
  • 状态去的语法不一致或不正确;
  • 从状态图到代码的转换。

以下是状态图和软件中可能发生的故障。

2.1 状态

  • 没有进入转换的状态;
  • 遗漏初始状态,需定义状态图中的所有路径;
  • 额外状态(系统生成比状态图中多的状态);
  • 遗漏状态(系统中没有给出状态图中给出的状态);
  • 破坏性生态(转换到无效状态而导致系统崩溃)。

2.2 防护

  • 防护必须指向转换而不是状态;
  • 完成事件转换上的防护;
  • 初始转换上的防护;
  • 重叠防护;
  • 防护为false但仍有转换发生;
  • 错误的防护实现。

2.3 转换

  • 必须有一个接收状态与一个最终状态;
  • 相互矛盾的转换;
  • 遗漏或错误转换;
  • 遗漏或错误动作。

2.4 事件

  • 遗漏事件;
  • 隐含路径;
  • 一个没有定义的事件做出响应。

2.5 其它

  • 在正交区域使用同步;
  • 规范故障可使用审查清单进行覆盖,如下:
    在这里插入图片描述

3 状态转换测试技术

3.1 编写状态-事件表

  • 状态图是编写状态-事件表的起点;
  • 编写状态-事件表给出状态与事件的关系;
  • 如下是一个简化的录音机(VCR)状态图:
    在这里插入图片描述
  • 由上述状态图可编写出状态-事件表:
    在这里插入图片描述

3.2 编写转换树

  • 状态-事件表被用于编写转换树;
  • 初始状态为转换树的根;
  • 以下为VCR的转换树:
    在这里插入图片描述

    3.3 编写合法测试用例的测试脚本

  • 借助以上转换树和状态-事件表可编写合法测试用例的测试脚本;
  • 转换树中每一条路径是一个测试用例;
  • 如下是部分从VCR状态图导出的测试用例:
    在这里插入图片描述

    3.4 编写非法测试用例的测试脚本

  • 可从状态-事件中得到非法的状态-事件组合;
  • 非法的状态-事件是指在该特定状态时,系统没有指定要对该事件做出响应;
  • 部分非法测试用例的测试脚本如下:
    在这里插入图片描述

    3.5 编写测试脚本防护

  • 以下为防护编写的测试用例的测试脚本:
    在这里插入图片描述

    4 广泛性和实用性

    4.1 广泛性

  • 测试深度被用于计算测试覆盖率;
  • 有关公式如下:
n:表示转换次数(也用于测试深度)
1次转换覆盖率/0次切换覆盖率 = 执行的转换数/状态模型中的转换总数
2次转换覆盖率/1次切换覆盖率 = 执行的两次转换的序列数/状态模型中两次转换的序列总数
状态-事件覆盖程度 = (状态数-执行的事件对)/(状态数*事件数)

4.2 故障检测

  • 测试深度是指测试基于状态的行为所需的最少工作;
  • 测试效果与故障检测的关系:
故障类别 合法测试用例 非法测试用例 边界值分析 更深层次的测试
额外状态 + + + +
遗漏状态 + - - -
破坏性状态* - +/- +/- +
重复防护 - - +/- -
防护为false的转换 - - + -
相互矛盾的转换 + - - -
遗漏或错误转换 + + + +/-
遗漏或错误动作 + - - +/-
遗落或错误事件 + - - +/-
隐含路径 - + + +/-
-:检测出故障的希望很渺茫
+:检测出故障的概率很大
+-:检测出故障的概率很小
*:进行更深层次的测试可能不足以检测出破坏性状态

4.3 实用性和可用性

  • 影响实用性的因素:

步进方式;
重置选项;
状态设置;
状态、转换、输入、输出与事件进行唯一性编码;
转换跟踪。

目录
相关文章
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
提升软件测试效率与质量:AI驱动的自动化测试策略
【2月更文挑战第19天】 在快速迭代的软件发展环境中,传统的手动测试方法已无法满足高效率和高质量的要求。本文探讨了人工智能(AI)技术如何革新现有的软件测试流程,通过引入AI驱动的自动化测试策略,旨在提高测试覆盖率,减少人为错误,优化资源分配,并缩短产品上市时间。我们将分析AI在识别潜在缺陷、生成测试用例、执行测试以及结果分析中的应用,并讨论实施这些策略时可能遇到的挑战和限制。
152 3
|
22天前
|
jenkins 测试技术 持续交付
软件测试|docker搭建Jenkins+Python+allure自动化测试环境
通过以上步骤,你可以在Docker中搭建起Jenkins自动化测试环境,实现Python测试的自动化执行和Allure报告生成。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
44 6
|
1月前
|
iOS开发
iOS自动混淆测试处理笔记
iOS自动混淆测试处理笔记
12 0
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
提升软件测试效率:AI驱动的自动化测试策略
【2月更文挑战第30天】随着人工智能(AI)在软件开发周期中的日益普及,其在提高软件测试效率方面的潜力正受到越来越多的关注。本文探讨了如何通过集成AI技术来优化自动化测试流程,从而减少重复工作、提高错误检测率和加快反馈速度。我们将分析当前AI在自动化测试中的应用,并提出一系列策略以利用AI改进测试案例生成、执行和维护过程。
86 0
|
1月前
|
算法 测试技术 开发者
软件质量测试笔记-合工大
软件质量测试笔记-合工大
102 1
|
2月前
|
关系型数据库 MySQL 测试技术
【软件测试】 初识软件测试
【软件测试】 初识软件测试
|
2月前
|
人工智能 前端开发 Java
软件测试/人工智能|熟练使用web控件定位技巧,提升测试工作效率!
软件测试/人工智能|熟练使用web控件定位技巧,提升测试工作效率!
197 1
|
2月前
|
iOS开发
  iOS 自动混淆测试处理笔记
  iOS 自动混淆测试处理笔记
|
3月前
|
测试技术
软件测试里的可访问性测试方法
软件测试里的可访问性测试方法
|
3月前
|
存储 安全 Java
软件测试中的压力测试是什么?
软件测试中的压力测试是什么?

热门文章

最新文章