基于状态的系统和有限状态机FSM

news2024/12/24 21:03:20

基于状态的系统和有限状态机FSM

介绍
基于模型进行测试。模型可能是规格或描述感兴趣的属性。
该模型通常是一个抽象概念,应该相对容易理解。
测试补充了白盒方法。
测试通常是黑盒:不考虑实际系统的结构。
如果模型具有形式语义,则可实现的主要好处:我们就有了自动化的潜力。
大部分工作使用基于状态的语言 state-based languages

基于状态的系统
许多真实系统都有内部状态。
这些系统可以使用语言建模,eg 状态图。
由于它们的重要性,人们特别感兴趣针对以下领域的基于状态的测试:
(1) 交通运输(汽车、铁路、航空电子……)
(2) 机器人与自主系统
(3) 通讯协议
与许多其他系统相关

状态图是一种建模语言和一种用于描述反应式系统行为的形式主义。 它提供了一种可视化表示,用于以分层和结构化的方式指定系统的状态、转换和操作。 状态图对于为具有多个并发状态和复杂行为的复杂系统建模特别有用。

以下是状态图的一些主要特性和概念:

  1. 状态:状态图允许您定义系统可能处于的不同状态。状态表示系统的特定模式、条件或行为。 状态可以有进入动作(进入状态时执行的动作)和退出动作(离开状态时执行的动作)。

  2. 事件:事件是导致状态之间转换的刺激或触发器。 事件可以是内部的(在系统内生成)或外部的(从环境中接收)。 当事件发生时,它会导致状态转换。

  3. 转换:转换定义了与响应事件而从一种状态到另一种状态的变化相关联的条件和动作。 转换可以有守卫(转换发生必须满足的条件)和动作(转换期间执行的动作)。

  4. 分层状态:状态图支持状态的分层结构,允许对具有嵌套状态的复杂系统进行建模。 状态可以有子状态,转换可以发生在父状态内的子状态之间或父状态之间。

  5. 正交区域:状态图还可以通过使用正交区域对并发行为进行建模。 正交区域表示系统中可以同时执行的独立组件,每个组件都有自己的状态和转换。

  6. 历史状态:历史状态会记住父状态中先前处于活动状态的子状态,允许系统在重新进入父状态时恢复其先前的行为。

状态图提供系统行为的图形表示,通常使用状态图,其中状态表示为节点,转换表示为有向边。 它们提供了一种清晰直观的方法来建模和分析反应式系统的行为,从而更容易理解、交流和推理复杂的系统动力学。
状态图通常用于各个领域,包括软件工程、控制系统、嵌入式系统和用户界面设计。 它们得到各种建模工具和框架的支持,这些工具和框架有助于创建、模拟和验证基于状态图的模型。

状态和转换States and Transitions
系统可以通过以下方式建模:
一组逻辑状态。 这些状态之间的转换。
然后:
每个逻辑状态通常代表内部变量的一些(tuples)值
每个转换都将代表一个操作的使用状态或输入/输出对。

状态和转换:嵌入式系统embedded systems
许多嵌入式控制系统的运行周期如下:
从传感器读取值(输入)
然后根据当前状态信息(内部变量的值)处理这些值。
最后,将值(输出)发送到执行器并更新内部变量的值。
因此,每个循环都涉及输入,然后是输出和状态变化。

故障Faults
可以考虑:
(1) 转换产生错误的输出(输出故障)。
(2) 转换具有错误的结束状态(状态转移错误)。
(3) 有额外的状态。
我们希望能够测试这些。 通常,输出故障是最容易发现的。

有限状态机Finite State Machines
最简单的基于状态的模型,具有输入和输出。
有状态和状态之间的转换。
每个转换都有一个标签:输入/输出对。
有一个初始状态。
这本质上是一个有限自动机,其中:
所有状态都是最终状态。字母表是输入/输出对的集合。
称为 Mealy 机器。

使用 FSM
开发中使用的语言比 FSM 更丰富(例如有逻辑状态和内部状态变量)。
但是,FSM 测试生成技术经常使用(或改编):
工具可以扩展内部状态变量。 这可以是一个预处理步骤,或者“扩展”可以即时发生。
通常可以抽象出大部分日期。例如,考虑通信协议中的消息数据。

  1. 逻辑状态:逻辑状态通过合并描述系统行为或模式的附加信息或条件来扩展系统中的状态概念,而不仅仅是简单的状态转换。 虽然传统的 FSM 通常将状态表示为离散的原子实体,但逻辑状态引入了复合或聚合状态的概念,以捕获更复杂的行为和条件。

逻辑状态可用于表示需要满足多个标准或约束的更高级别模式或条件。 它们允许对单个状态转换无法充分捕获的复杂行为进行规范。 通过引入逻辑状态,可以在更高的抽象层次上对系统行为进行建模,从而实现更灵活和更具表现力的表示。

  1. 内部状态变量:内部状态变量,也称为状态属性或变量,用于表示和跟踪与系统中的状态相关的附加信息。 虽然 FSM 主要关注状态转换,但内部状态变量提供了一种机制来捕获和更新特定于状态的数据或条件。

内部状态变量可用于存储和操作与系统当前状态相关的信息,例如计数器、标志、计时器或与状态行为相关的任何其他数据。 这些变量可以在状态转换期间或响应外部事件时进行修改,它们的值可以影响系统的行为或后续的状态转换。
通过合并内部状态变量,系统的建模能力得到增强,允许更细微的行为和状态相关的决策制定。 内部状态变量使系统能够维护和利用特定于每个状态的信息,从而导致更复杂和上下文感知的系统行为。

有限状态机测试
测试生成算法可以利用:
有限自动机理论Finite Automata Theory:FSM 本质上是特殊类型的有限自动机,因此可以使用相应的算法和理论。
图论Graph Theory:FSM 可以看作是一个有向图, 每条边都有一个标签。 因此,我们也可以使用图论结果和算法。

确定性有限状态机 deterministic finite state machine的主要特征
(确定性)有限状态机 (FSM),也称为确定性有限自动机 (DFA),是一种用于描述系统或过程行为的数学模型。 它是一种状态机,其行为仅由当前状态和接收到的输入决定。

在确定性 FSM 中,每个状态都有一组已定义的转换,这些转换根据当前状态和正在处理的输入符号指定下一个状态。 机器的行为是通过在提供输入时遵循这些转换来确定的。

以下是确定性有限状态机的主要特征:

  1. 状态:一组有限的状态表示系统可能处于的不同模式或条件。FSM 在任何给定时间只能处于一种状态。

  2. 转换:转换表示基于接收到的输入符号的状态变化。 每个转换都与一个特定的状态和输入符号组合相关联,指定要转换到的下一个状态。

  3. 输入:FSM 从输入字母表中接收输入符号。 这些符号触发状态转换并确定机器的行为。

  4. 确定性行为:在确定性 FSM 中,对于任何给定的当前状态和输入符号,只有一个有效的下一状态。 这意味着机器的行为完全由当前状态和正在处理的输入符号决定。

  5. 接受(最终)状态:FSM 可能有一个或多个指定的接受状态,表明成功或期望的结果。 当机器达到接受状态时,表示已根据定义的规则成功处理了输入。

确定性有限状态机广泛应用于计算机科学和工程的各个领域,包括形式语言理论、编译器设计、协议规范和软件建模。 它们提供了一种简单而正式的方式来表示和推理系统的行为,这些系统表现出离散的、顺序的行为,并且可以使用算法和数学技术轻松实现和分析。
在这里插入图片描述

确定性Deterministic 和完全指定Completely-Specified的 FSM
FSM 是确定性的,如果:对于每个状态 s 和输入 x,至多有一个离开 s 的转换具有输入 x。
如果满足以下条件,则 FSM 是完全指定的:对于每个状态 s 和输入 x,至少存在一个离开 s 且具有输入 x 的转换。
给出的形式主义描述了 FSM 是完全指定和确定的:
如果我们想要描述不完全指定的 FSM,那么我们需要允许 δ 和 λ 是偏函数。
如果我们想描述非确定性那么我们使用S × X -> P(S × Y )替换具有转换的状态传递和输出函数(δ 和 λ)。
我们将专注于确定性和完全指定。

初始和强连接
如果满足以下条件,则 M 最初是连接的:
每个状态都可以从初始状态到达:对于每个状态 s,都有一些输入序列 x 将 M 从初始状态带到 s (δ(s0,x) = s)。

  • s0:它表示 FSM M 的初始状态。这是机器开始运行的状态。

  • x:它表示作为输入提供给 FSM 的输入序列或符号串。

  • δ:表示FSM的过渡函数。 它以当前状态和输入符号作为参数并返回下一个状态。

  • s:代表FSM中的一个状态。 表达式 δ(s0, x) = s 断言从初始状态 s0 开始,当处理输入序列 x 时,FSM 转换到状态 s。

简单来说,表达式 δ(s0, x) = s 意味着如果我们从初始状态 s0 开始并将输入序列 x 应用于 FSM M,则结果状态将为 s。 换句话说,存在将 FSM 从初始状态带到指定状态 (s) 的输入序列 (x)。
此条件确保 FSM M 中的每个状态都可以从初始状态到达。 它保证至少有一个可能的输入序列导致机器中的每个状态。 此属性对于确定 FSM 的连接性很重要,可确保没有状态是不可访问或孤立的。

如果满足以下条件,则 M 是强连通的:
对于每个有序的状态对 (s,s0) 都有一些输入, 将 M 从 s 带到 s0 (δ^*(s, x) = s0) 的序列 x。

  • δ^*: 它表示 FSM 的扩展转移函数,它接受当前状态和输入序列作为参数,并返回最终的状态。

简单来说,表达式 δ^*(s, x) = s0 意味着如果我们从状态 s 开始,并将输入序列 x 应用于 FSM M,最终达到的状态是 s0。换句话说,存在一个输入序列(x)使得 FSM 从状态 s 经过一系列转换到达指定的状态 s0。
这个条件确保了 FSM M 是强连通的,也就是说,在 FSM 中的任意两个状态对 (s, s0) 之间,都存在一条序列 x 的输入路径,可以从状态 s 转换到状态 s0。

如果 M 最初没有连接,那么我们可以删除不可达状态。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/601275.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

leetcode--二叉搜索树中第K小的元素(java)

二叉搜索树中第K小的元素 leetcode 230 题 二叉搜索树第K 小的元素解题思路代码演示二叉树专题 leetcode 230 题 二叉搜索树第K 小的元素 原题链接: https://leetcode.cn/problems/kth-smallest-element-in-a-bst/ 题目描述 给定一个二叉搜索树的根节点 root &#…

智慧办公室虚拟现实 VR 可视化

“虚拟现实”是来自英文“Virtual Reality”,简称 VR 技术,其是通过利用计算机仿真系统模拟外界环境,主要模拟对象有环境、技能、传感设备和感知等,为用户提供多信息、三维动态、交互式的仿真体验。 图扑软件基于自研可视化引擎 H…

亚马逊云科技位列IDC MarketScape决策支持分析数据平台领导者

随着科学技术的不断发展,人们的生活方式也在不断改变。现在,人们可以通过互联网获得更多的信息,也可以通过智能手机随时随地与他人进行交流。此外,人工智能技术的进步也使得机器能够完成一些复杂的任务,从而提高了人们…

【Azure】微软 Azure 基础解析(六)计算服务中的虚拟机 VM、虚拟机规模集、Azure Functions 与 Azure 容器(ACI)

本系列博文还在更新中,收录在专栏:「Azure探秘:构建云计算世界」 专栏中。 本系列文章列表如下: 【Azure】微软 Azure 基础解析(三)描述云计算运营中的 CapEx 与 OpEx,如何区分 CapEx 与 OpEx…

写了 7 年代码,第一次见这么狗血的小 Bug!

刚刚修我们鱼聪明 AI 助手平台的一个 Bug,结局很狗血!赶紧给大家分享一下,顺便也分享下标准的排查 Bug 思路。 事情是这样的,有小伙伴在鱼聪明平台(https://www.yucongming.com)创建了一个 AI 助手&#x…

ModStartCMS v6.5.0 菜单多级支持,框架结构优化

ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用,支持后台一键快速安装,让开发者能快的实现业务功能开发。 系统完全开源,基于 Apache 2.0 开源协议,免费且不限制商业使用。 功能特性 丰富的模块市…

InnoDB Cluster集群Mysql Router代理层最佳实践

InnoDB Cluster 集群 & Mysql-Router 代理层 前言 Mysql是现今最常用的关系型数据库之一,高可用一直是我们对软件服务的要求。常见的Mysql高可用是主从配置,在主节点挂掉后需要依赖监控脚本进行主从切换将从节点升级,后台服务代码层面也…

正在破坏您的协程(Coroutines)的无声杀手(Silent Killer)

正在破坏您的协程的无声杀手 处理 Kotlin 中的取消异常的唯一安全方法是不重新抛出它们。 今天生产服务器再次停止响应流量。 上个星期,你刚重新启动它们并将其视为故障。但是你总觉得有些奇怪,因为日志中没有任何错误的痕迹,甚至没有警告。…

vue cli配置代理解决跨域问题

跨域问题 是由于违背了同源策略,同源策略规定了协议名、主机名、端口号必须一致 我们目前所处的位置是http localhost 8080,我们想向一台服务器发送请求,它的位置是http localhost 5000,我们的ajax请求从浏览器发送到服务器&#…

界面组件DevExpress WPF中文指南 - 如何应用系统强调色及主题切换

在最新版本的Microsoft Office产品中,用户可以根据系统设置选择主题,当使用这个主题时,Office将采用Windows强调色和应用模式(亮/暗)设置,并将它们应用到Office本身。如果用户在操作系统中更改了强调色或应用模式,Offi…

【spring源码系列-02】通过refresh方法剖析IOC的整体流程

Spring源码系列整体栏目 内容链接地址【一】spring源码整体概述https://blog.csdn.net/zhenghuishengq/article/details/130940885【一】通过refresh方法剖析IOC的整体流程https://blog.csdn.net/zhenghuishengq/article/details/131003428 spring底层源码整体概述 一&#xff…

2个实际工作中的小技巧,先收再看(网工版)

大家好,我是老杨。 本来想发点关于快乐的文章,但我思来想去,对成年人最大的快乐,莫过于高效完成工作,早点下班回家。 关于提升工作效率这方面啊,我的文章其实零碎、分散的写过了很多次了。 你要知道&…

ChatGPT国内免费使用地址和开源公众号集成项目分享

ChatGPT国内免费使用地址和开源公众号集成项目分享 ChatGPT国内免费使用地址ChatGPT开源公众号集成项目ChatGPT国内免费调用API的地址总结免费体验地址 人工智能技术的快速发展,ChatGPT聊天机器人备受瞩目。然而,如何在国内免费使用ChatGPT却是许多人关注…

手绘echarts散点图

面对各种定制,echarts图表有时候不好处理,无论是数据处理还是样式处理,都会被echarts限制。 举例:echarts散点图如果数据较少,echarts会均匀分布,如图1 对于产品或者老板对页面的要求,认为中间…

ROS2中,从SolidWorks导出的urdf,联合moveit、gazebo进行控制及仿真

文章目录 1.前言2.从urdf到moveit3.从urdf到gazebo3.1.urdf文件的修改3.1.1.mesh路径3.1.2.零件起飞3.1.3.文件保存 3.2.xacro文件的修改3.3.launch 4.用moveit控制gazebo5.结语 1.前言 本文是对之前发的文章【在ROS2中,通过MoveIt2控制Gazebo中的自定义机械手】的…

C 语言详细教程

目录 第一章 C语言基础知识 第二章 数据类型、运算符和表达式 第三章 结构化程序设计 第四章 数组 第五章 函数 第六章 指针 第七章 结构体类型和自定义类型 第八章 编译预处理 第九章 文件 说明:本教程中的代码除一二三个之外,都在https://ligh…

尝试理解卷积神经和深度学习的关系,并且怎么使用

前言 最近想要了解卷积神经和深度学习,才发现并不是我想象中的简单,也不是我想象中的难.我想的难是指没有任何思路:不知道这是个什么玩意,里面的流程是不是很难,我想的简单就是:也就是用人家的包,全都是用来导包,我只需要知道这个包是怎么用的,从来没想过自己怎么开发出来一个依…

Python splitlines() 的使用

Python splitlines() 的作用 Python splitlines() 按照行(\r, \r\n, \n)分隔,返回一个包含各行作为元素的列表 Python splitlines()的注意事项 splitlines小括号里面的参数没有的时候,默认按照行(\r, \r\n, \n)分隔不带这些特殊的字符 如果这样splitlines(True)…

ISO21434 概述(一)

目录 一、ISO21434 1.1 目的 1.2 ISO21434文档组织结构 二、适用范围 三、引用标准 四、术语和缩写 4.1 术语 4.2 缩写 五、一般考虑 一、ISO21434 1.1 目的 本文件阐述了道路车辆内电气和电子(E/E)系统工程中的网络安全问题。通过确保对网络安…

Ansible的配置、主机清单、Ansible的脚本Playbook详解

文章目录 Ansible的配置配置文件 主机清单远程主机的分组变量 Ansible的脚本PlaybookPlaybook的文件格式YAMLansible-playbook的命令Playbook的基本语法变量 Ansible的配置 配置文件 Ansible是一款功能强大的自动化工具,可以实现对远程主机的管理和操作&#xff0…