软件工程:系统动态分析

📌目录



⚖️ 系统动态分析:描述系统行为的关键技术

系统动态分析是需求分析的重要组成部分,它关注系统随时间变化的行为特征,描述系统在不同状态之间的转换过程。本文将详细介绍系统动态分析的概念、方法、工具及应用。

🎯 一、系统动态分析概述

(一)动态分析的定义

系统动态分析是分析系统随时间变化的行为特征,描述系统状态转换过程的分析方法。

动态分析概念
#mermaid-svg-4OokYslZlwORm4aM{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-4OokYslZlwORm4aM .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-4OokYslZlwORm4aM .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-4OokYslZlwORm4aM .error-icon{fill:#552222;}#mermaid-svg-4OokYslZlwORm4aM .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-4OokYslZlwORm4aM .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-4OokYslZlwORm4aM .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-4OokYslZlwORm4aM .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-4OokYslZlwORm4aM .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-4OokYslZlwORm4aM .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-4OokYslZlwORm4aM .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-4OokYslZlwORm4aM .marker{fill:#333333;stroke:#333333;}#mermaid-svg-4OokYslZlwORm4aM .marker.cross{stroke:#333333;}#mermaid-svg-4OokYslZlwORm4aM svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-4OokYslZlwORm4aM p{margin:0;}#mermaid-svg-4OokYslZlwORm4aM .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-4OokYslZlwORm4aM .cluster-label text{fill:#333;}#mermaid-svg-4OokYslZlwORm4aM .cluster-label span{color:#333;}#mermaid-svg-4OokYslZlwORm4aM .cluster-label span p{background-color:transparent;}#mermaid-svg-4OokYslZlwORm4aM .label text,#mermaid-svg-4OokYslZlwORm4aM span{fill:#333;color:#333;}#mermaid-svg-4OokYslZlwORm4aM .node rect,#mermaid-svg-4OokYslZlwORm4aM .node circle,#mermaid-svg-4OokYslZlwORm4aM .node ellipse,#mermaid-svg-4OokYslZlwORm4aM .node polygon,#mermaid-svg-4OokYslZlwORm4aM .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-4OokYslZlwORm4aM .rough-node .label text,#mermaid-svg-4OokYslZlwORm4aM .node .label text,#mermaid-svg-4OokYslZlwORm4aM .image-shape .label,#mermaid-svg-4OokYslZlwORm4aM .icon-shape .label{text-anchor:middle;}#mermaid-svg-4OokYslZlwORm4aM .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-4OokYslZlwORm4aM .rough-node .label,#mermaid-svg-4OokYslZlwORm4aM .node .label,#mermaid-svg-4OokYslZlwORm4aM .image-shape .label,#mermaid-svg-4OokYslZlwORm4aM .icon-shape .label{text-align:center;}#mermaid-svg-4OokYslZlwORm4aM .node.clickable{cursor:pointer;}#mermaid-svg-4OokYslZlwORm4aM .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-4OokYslZlwORm4aM .arrowheadPath{fill:#333333;}#mermaid-svg-4OokYslZlwORm4aM .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-4OokYslZlwORm4aM .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-4OokYslZlwORm4aM .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-4OokYslZlwORm4aM .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-4OokYslZlwORm4aM .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-4OokYslZlwORm4aM .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-4OokYslZlwORm4aM .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-4OokYslZlwORm4aM .cluster text{fill:#333;}#mermaid-svg-4OokYslZlwORm4aM .cluster span{color:#333;}#mermaid-svg-4OokYslZlwORm4aM div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-4OokYslZlwORm4aM .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-4OokYslZlwORm4aM rect.text{fill:none;stroke-width:0;}#mermaid-svg-4OokYslZlwORm4aM .icon-shape,#mermaid-svg-4OokYslZlwORm4aM .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-4OokYslZlwORm4aM .icon-shape p,#mermaid-svg-4OokYslZlwORm4aM .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-4OokYslZlwORm4aM .icon-shape .label rect,#mermaid-svg-4OokYslZlwORm4aM .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-4OokYslZlwORm4aM .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-4OokYslZlwORm4aM .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-4OokYslZlwORm4aM :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 系统动态分析
状态分析
事件分析
转换分析
行为建模
系统状态
触发事件
状态转换
行为模型

(二)动态分析与静态分析

分析对比

分析类型 关注点 描述内容 工具
静态分析 数据结构 数据关系 ER图
动态分析 行为特征 状态转换 状态图
功能分析 处理功能 数据流动 DFD

三者关系
#mermaid-svg-CiIsc4dFqTpCXhqA{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-CiIsc4dFqTpCXhqA .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-CiIsc4dFqTpCXhqA .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-CiIsc4dFqTpCXhqA .error-icon{fill:#552222;}#mermaid-svg-CiIsc4dFqTpCXhqA .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-CiIsc4dFqTpCXhqA .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-CiIsc4dFqTpCXhqA .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-CiIsc4dFqTpCXhqA .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-CiIsc4dFqTpCXhqA .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-CiIsc4dFqTpCXhqA .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-CiIsc4dFqTpCXhqA .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-CiIsc4dFqTpCXhqA .marker{fill:#333333;stroke:#333333;}#mermaid-svg-CiIsc4dFqTpCXhqA .marker.cross{stroke:#333333;}#mermaid-svg-CiIsc4dFqTpCXhqA svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-CiIsc4dFqTpCXhqA p{margin:0;}#mermaid-svg-CiIsc4dFqTpCXhqA .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-CiIsc4dFqTpCXhqA .cluster-label text{fill:#333;}#mermaid-svg-CiIsc4dFqTpCXhqA .cluster-label span{color:#333;}#mermaid-svg-CiIsc4dFqTpCXhqA .cluster-label span p{background-color:transparent;}#mermaid-svg-CiIsc4dFqTpCXhqA .label text,#mermaid-svg-CiIsc4dFqTpCXhqA span{fill:#333;color:#333;}#mermaid-svg-CiIsc4dFqTpCXhqA .node rect,#mermaid-svg-CiIsc4dFqTpCXhqA .node circle,#mermaid-svg-CiIsc4dFqTpCXhqA .node ellipse,#mermaid-svg-CiIsc4dFqTpCXhqA .node polygon,#mermaid-svg-CiIsc4dFqTpCXhqA .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-CiIsc4dFqTpCXhqA .rough-node .label text,#mermaid-svg-CiIsc4dFqTpCXhqA .node .label text,#mermaid-svg-CiIsc4dFqTpCXhqA .image-shape .label,#mermaid-svg-CiIsc4dFqTpCXhqA .icon-shape .label{text-anchor:middle;}#mermaid-svg-CiIsc4dFqTpCXhqA .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-CiIsc4dFqTpCXhqA .rough-node .label,#mermaid-svg-CiIsc4dFqTpCXhqA .node .label,#mermaid-svg-CiIsc4dFqTpCXhqA .image-shape .label,#mermaid-svg-CiIsc4dFqTpCXhqA .icon-shape .label{text-align:center;}#mermaid-svg-CiIsc4dFqTpCXhqA .node.clickable{cursor:pointer;}#mermaid-svg-CiIsc4dFqTpCXhqA .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-CiIsc4dFqTpCXhqA .arrowheadPath{fill:#333333;}#mermaid-svg-CiIsc4dFqTpCXhqA .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-CiIsc4dFqTpCXhqA .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-CiIsc4dFqTpCXhqA .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-CiIsc4dFqTpCXhqA .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-CiIsc4dFqTpCXhqA .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-CiIsc4dFqTpCXhqA .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-CiIsc4dFqTpCXhqA .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-CiIsc4dFqTpCXhqA .cluster text{fill:#333;}#mermaid-svg-CiIsc4dFqTpCXhqA .cluster span{color:#333;}#mermaid-svg-CiIsc4dFqTpCXhqA div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-CiIsc4dFqTpCXhqA .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-CiIsc4dFqTpCXhqA rect.text{fill:none;stroke-width:0;}#mermaid-svg-CiIsc4dFqTpCXhqA .icon-shape,#mermaid-svg-CiIsc4dFqTpCXhqA .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-CiIsc4dFqTpCXhqA .icon-shape p,#mermaid-svg-CiIsc4dFqTpCXhqA .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-CiIsc4dFqTpCXhqA .icon-shape .label rect,#mermaid-svg-CiIsc4dFqTpCXhqA .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-CiIsc4dFqTpCXhqA .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-CiIsc4dFqTpCXhqA .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-CiIsc4dFqTpCXhqA :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 需求分析
功能分析
数据建模
动态分析
数据流图
实体关系图
状态转换图
系统模型

(三)动态分析的意义

分析意义

意义 说明
描述行为 描述系统行为特征
发现错误 发现状态转换错误
验证完整性 验证状态完整性
指导设计 指导后续设计
支持测试 支持测试用例设计

📦 二、状态转换图

(一)状态转换图概述

状态转换图(State Transition Diagram, STD) 是描述系统动态行为的主要工具。

STD组成
#mermaid-svg-r1YJOY6hTwKU3h6s{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-r1YJOY6hTwKU3h6s .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-r1YJOY6hTwKU3h6s .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-r1YJOY6hTwKU3h6s .error-icon{fill:#552222;}#mermaid-svg-r1YJOY6hTwKU3h6s .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-r1YJOY6hTwKU3h6s .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-r1YJOY6hTwKU3h6s .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-r1YJOY6hTwKU3h6s .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-r1YJOY6hTwKU3h6s .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-r1YJOY6hTwKU3h6s .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-r1YJOY6hTwKU3h6s .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-r1YJOY6hTwKU3h6s .marker{fill:#333333;stroke:#333333;}#mermaid-svg-r1YJOY6hTwKU3h6s .marker.cross{stroke:#333333;}#mermaid-svg-r1YJOY6hTwKU3h6s svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-r1YJOY6hTwKU3h6s p{margin:0;}#mermaid-svg-r1YJOY6hTwKU3h6s .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-r1YJOY6hTwKU3h6s .cluster-label text{fill:#333;}#mermaid-svg-r1YJOY6hTwKU3h6s .cluster-label span{color:#333;}#mermaid-svg-r1YJOY6hTwKU3h6s .cluster-label span p{background-color:transparent;}#mermaid-svg-r1YJOY6hTwKU3h6s .label text,#mermaid-svg-r1YJOY6hTwKU3h6s span{fill:#333;color:#333;}#mermaid-svg-r1YJOY6hTwKU3h6s .node rect,#mermaid-svg-r1YJOY6hTwKU3h6s .node circle,#mermaid-svg-r1YJOY6hTwKU3h6s .node ellipse,#mermaid-svg-r1YJOY6hTwKU3h6s .node polygon,#mermaid-svg-r1YJOY6hTwKU3h6s .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-r1YJOY6hTwKU3h6s .rough-node .label text,#mermaid-svg-r1YJOY6hTwKU3h6s .node .label text,#mermaid-svg-r1YJOY6hTwKU3h6s .image-shape .label,#mermaid-svg-r1YJOY6hTwKU3h6s .icon-shape .label{text-anchor:middle;}#mermaid-svg-r1YJOY6hTwKU3h6s .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-r1YJOY6hTwKU3h6s .rough-node .label,#mermaid-svg-r1YJOY6hTwKU3h6s .node .label,#mermaid-svg-r1YJOY6hTwKU3h6s .image-shape .label,#mermaid-svg-r1YJOY6hTwKU3h6s .icon-shape .label{text-align:center;}#mermaid-svg-r1YJOY6hTwKU3h6s .node.clickable{cursor:pointer;}#mermaid-svg-r1YJOY6hTwKU3h6s .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-r1YJOY6hTwKU3h6s .arrowheadPath{fill:#333333;}#mermaid-svg-r1YJOY6hTwKU3h6s .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-r1YJOY6hTwKU3h6s .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-r1YJOY6hTwKU3h6s .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-r1YJOY6hTwKU3h6s .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-r1YJOY6hTwKU3h6s .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-r1YJOY6hTwKU3h6s .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-r1YJOY6hTwKU3h6s .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-r1YJOY6hTwKU3h6s .cluster text{fill:#333;}#mermaid-svg-r1YJOY6hTwKU3h6s .cluster span{color:#333;}#mermaid-svg-r1YJOY6hTwKU3h6s div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-r1YJOY6hTwKU3h6s .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-r1YJOY6hTwKU3h6s rect.text{fill:none;stroke-width:0;}#mermaid-svg-r1YJOY6hTwKU3h6s .icon-shape,#mermaid-svg-r1YJOY6hTwKU3h6s .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-r1YJOY6hTwKU3h6s .icon-shape p,#mermaid-svg-r1YJOY6hTwKU3h6s .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-r1YJOY6hTwKU3h6s .icon-shape .label rect,#mermaid-svg-r1YJOY6hTwKU3h6s .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-r1YJOY6hTwKU3h6s .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-r1YJOY6hTwKU3h6s .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-r1YJOY6hTwKU3h6s :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} STD组成
状态
事件
转换
动作
系统状态
圆形/圆角矩形
触发事件
转换条件
状态转换
箭头
转换动作
动作说明

STD符号

符号 名称 说明
○/□ 状态 系统的状态
转换 状态转换
初态 初始状态
终态 终止状态

(二)状态的定义

状态

状态是系统在某一时刻的条件或情况,它描述了系统在一段时间内的特征。

状态特征

特征 说明
持续性 状态会持续一段时间
互斥性 同一时刻只能处于一个状态
完整性 所有可能状态构成完整集合
可观测性 状态可以被观测

状态要素

要素 说明
状态名 状态的名称
进入条件 进入该状态的条件
退出条件 退出该状态的条件
状态活动 在该状态下的活动

(三)事件的定义

事件

事件是引起状态转换的外部或内部刺激。

事件类型

类型 说明 示例
外部事件 来自系统外部 用户输入
内部事件 来自系统内部 定时器触发
条件事件 条件满足时 库存不足
时间事件 时间到达时 超时

事件要素

要素 说明
事件名 事件的名称
事件来源 事件的来源
事件数据 事件携带的数据
触发条件 触发条件

(四)转换的定义

转换

转换是从一个状态到另一个状态的迁移。

转换要素

要素 说明
源状态 转换的起始状态
目标状态 转换的目标状态
触发事件 引起转换的事件
守护条件 转换发生的条件
转换动作 转换时执行的动作

转换表示

复制代码
转换 = 事件 [条件] / 动作

转换示例

源状态 事件 条件 动作 目标状态
待支付 支付 金额正确 更新订单 已支付
待支付 取消 - 释放库存 已取消
已支付 发货 库存充足 扣减库存 已发货

(五)状态转换图示例

订单状态转换图
#mermaid-svg-IadGgHwHa9iAhqNi{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-IadGgHwHa9iAhqNi .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-IadGgHwHa9iAhqNi .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-IadGgHwHa9iAhqNi .error-icon{fill:#552222;}#mermaid-svg-IadGgHwHa9iAhqNi .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-IadGgHwHa9iAhqNi .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-IadGgHwHa9iAhqNi .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-IadGgHwHa9iAhqNi .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-IadGgHwHa9iAhqNi .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-IadGgHwHa9iAhqNi .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-IadGgHwHa9iAhqNi .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-IadGgHwHa9iAhqNi .marker{fill:#333333;stroke:#333333;}#mermaid-svg-IadGgHwHa9iAhqNi .marker.cross{stroke:#333333;}#mermaid-svg-IadGgHwHa9iAhqNi svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-IadGgHwHa9iAhqNi p{margin:0;}#mermaid-svg-IadGgHwHa9iAhqNi defs #statediagram-barbEnd{fill:#333333;stroke:#333333;}#mermaid-svg-IadGgHwHa9iAhqNi g.stateGroup text{fill:#9370DB;stroke:none;font-size:10px;}#mermaid-svg-IadGgHwHa9iAhqNi g.stateGroup text{fill:#333;stroke:none;font-size:10px;}#mermaid-svg-IadGgHwHa9iAhqNi g.stateGroup .state-title{font-weight:bolder;fill:#131300;}#mermaid-svg-IadGgHwHa9iAhqNi g.stateGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-IadGgHwHa9iAhqNi g.stateGroup line{stroke:#333333;stroke-width:1;}#mermaid-svg-IadGgHwHa9iAhqNi .transition{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-IadGgHwHa9iAhqNi .stateGroup .composit{fill:white;border-bottom:1px;}#mermaid-svg-IadGgHwHa9iAhqNi .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px;}#mermaid-svg-IadGgHwHa9iAhqNi .state-note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-IadGgHwHa9iAhqNi .state-note text{fill:black;stroke:none;font-size:10px;}#mermaid-svg-IadGgHwHa9iAhqNi .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-IadGgHwHa9iAhqNi .edgeLabel .label rect{fill:#ECECFF;opacity:0.5;}#mermaid-svg-IadGgHwHa9iAhqNi .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-IadGgHwHa9iAhqNi .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-IadGgHwHa9iAhqNi .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-IadGgHwHa9iAhqNi .edgeLabel .label text{fill:#333;}#mermaid-svg-IadGgHwHa9iAhqNi .label div .edgeLabel{color:#333;}#mermaid-svg-IadGgHwHa9iAhqNi .stateLabel text{fill:#131300;font-size:10px;font-weight:bold;}#mermaid-svg-IadGgHwHa9iAhqNi .node circle.state-start{fill:#333333;stroke:#333333;}#mermaid-svg-IadGgHwHa9iAhqNi .node .fork-join{fill:#333333;stroke:#333333;}#mermaid-svg-IadGgHwHa9iAhqNi .node circle.state-end{fill:#9370DB;stroke:white;stroke-width:1.5;}#mermaid-svg-IadGgHwHa9iAhqNi .end-state-inner{fill:white;stroke-width:1.5;}#mermaid-svg-IadGgHwHa9iAhqNi .node rect{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-IadGgHwHa9iAhqNi .node polygon{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-IadGgHwHa9iAhqNi #statediagram-barbEnd{fill:#333333;}#mermaid-svg-IadGgHwHa9iAhqNi .statediagram-cluster rect{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-IadGgHwHa9iAhqNi .cluster-label,#mermaid-svg-IadGgHwHa9iAhqNi .nodeLabel{color:#131300;}#mermaid-svg-IadGgHwHa9iAhqNi .statediagram-cluster rect.outer{rx:5px;ry:5px;}#mermaid-svg-IadGgHwHa9iAhqNi .statediagram-state .divider{stroke:#9370DB;}#mermaid-svg-IadGgHwHa9iAhqNi .statediagram-state .title-state{rx:5px;ry:5px;}#mermaid-svg-IadGgHwHa9iAhqNi .statediagram-cluster.statediagram-cluster .inner{fill:white;}#mermaid-svg-IadGgHwHa9iAhqNi .statediagram-cluster.statediagram-cluster-alt .inner{fill:#f0f0f0;}#mermaid-svg-IadGgHwHa9iAhqNi .statediagram-cluster .inner{rx:0;ry:0;}#mermaid-svg-IadGgHwHa9iAhqNi .statediagram-state rect.basic{rx:5px;ry:5px;}#mermaid-svg-IadGgHwHa9iAhqNi .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#f0f0f0;}#mermaid-svg-IadGgHwHa9iAhqNi .note-edge{stroke-dasharray:5;}#mermaid-svg-IadGgHwHa9iAhqNi .statediagram-note rect{fill:#fff5ad;stroke:#aaaa33;stroke-width:1px;rx:0;ry:0;}#mermaid-svg-IadGgHwHa9iAhqNi .statediagram-note rect{fill:#fff5ad;stroke:#aaaa33;stroke-width:1px;rx:0;ry:0;}#mermaid-svg-IadGgHwHa9iAhqNi .statediagram-note text{fill:black;}#mermaid-svg-IadGgHwHa9iAhqNi .statediagram-note .nodeLabel{color:black;}#mermaid-svg-IadGgHwHa9iAhqNi .statediagram .edgeLabel{color:red;}#mermaid-svg-IadGgHwHa9iAhqNi #dependencyStart,#mermaid-svg-IadGgHwHa9iAhqNi #dependencyEnd{fill:#333333;stroke:#333333;stroke-width:1;}#mermaid-svg-IadGgHwHa9iAhqNi .statediagramTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-IadGgHwHa9iAhqNi :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 支付成功
超时/取消
确认
发货
确认收货
待支付
已支付
已取消
待发货
已发货
已完成

电梯状态转换图
#mermaid-svg-y4KWTIWJdf918z7M{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-y4KWTIWJdf918z7M .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-y4KWTIWJdf918z7M .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-y4KWTIWJdf918z7M .error-icon{fill:#552222;}#mermaid-svg-y4KWTIWJdf918z7M .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-y4KWTIWJdf918z7M .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-y4KWTIWJdf918z7M .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-y4KWTIWJdf918z7M .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-y4KWTIWJdf918z7M .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-y4KWTIWJdf918z7M .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-y4KWTIWJdf918z7M .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-y4KWTIWJdf918z7M .marker{fill:#333333;stroke:#333333;}#mermaid-svg-y4KWTIWJdf918z7M .marker.cross{stroke:#333333;}#mermaid-svg-y4KWTIWJdf918z7M svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-y4KWTIWJdf918z7M p{margin:0;}#mermaid-svg-y4KWTIWJdf918z7M defs #statediagram-barbEnd{fill:#333333;stroke:#333333;}#mermaid-svg-y4KWTIWJdf918z7M g.stateGroup text{fill:#9370DB;stroke:none;font-size:10px;}#mermaid-svg-y4KWTIWJdf918z7M g.stateGroup text{fill:#333;stroke:none;font-size:10px;}#mermaid-svg-y4KWTIWJdf918z7M g.stateGroup .state-title{font-weight:bolder;fill:#131300;}#mermaid-svg-y4KWTIWJdf918z7M g.stateGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-y4KWTIWJdf918z7M g.stateGroup line{stroke:#333333;stroke-width:1;}#mermaid-svg-y4KWTIWJdf918z7M .transition{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-y4KWTIWJdf918z7M .stateGroup .composit{fill:white;border-bottom:1px;}#mermaid-svg-y4KWTIWJdf918z7M .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px;}#mermaid-svg-y4KWTIWJdf918z7M .state-note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-y4KWTIWJdf918z7M .state-note text{fill:black;stroke:none;font-size:10px;}#mermaid-svg-y4KWTIWJdf918z7M .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-y4KWTIWJdf918z7M .edgeLabel .label rect{fill:#ECECFF;opacity:0.5;}#mermaid-svg-y4KWTIWJdf918z7M .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-y4KWTIWJdf918z7M .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-y4KWTIWJdf918z7M .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-y4KWTIWJdf918z7M .edgeLabel .label text{fill:#333;}#mermaid-svg-y4KWTIWJdf918z7M .label div .edgeLabel{color:#333;}#mermaid-svg-y4KWTIWJdf918z7M .stateLabel text{fill:#131300;font-size:10px;font-weight:bold;}#mermaid-svg-y4KWTIWJdf918z7M .node circle.state-start{fill:#333333;stroke:#333333;}#mermaid-svg-y4KWTIWJdf918z7M .node .fork-join{fill:#333333;stroke:#333333;}#mermaid-svg-y4KWTIWJdf918z7M .node circle.state-end{fill:#9370DB;stroke:white;stroke-width:1.5;}#mermaid-svg-y4KWTIWJdf918z7M .end-state-inner{fill:white;stroke-width:1.5;}#mermaid-svg-y4KWTIWJdf918z7M .node rect{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-y4KWTIWJdf918z7M .node polygon{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-y4KWTIWJdf918z7M #statediagram-barbEnd{fill:#333333;}#mermaid-svg-y4KWTIWJdf918z7M .statediagram-cluster rect{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-y4KWTIWJdf918z7M .cluster-label,#mermaid-svg-y4KWTIWJdf918z7M .nodeLabel{color:#131300;}#mermaid-svg-y4KWTIWJdf918z7M .statediagram-cluster rect.outer{rx:5px;ry:5px;}#mermaid-svg-y4KWTIWJdf918z7M .statediagram-state .divider{stroke:#9370DB;}#mermaid-svg-y4KWTIWJdf918z7M .statediagram-state .title-state{rx:5px;ry:5px;}#mermaid-svg-y4KWTIWJdf918z7M .statediagram-cluster.statediagram-cluster .inner{fill:white;}#mermaid-svg-y4KWTIWJdf918z7M .statediagram-cluster.statediagram-cluster-alt .inner{fill:#f0f0f0;}#mermaid-svg-y4KWTIWJdf918z7M .statediagram-cluster .inner{rx:0;ry:0;}#mermaid-svg-y4KWTIWJdf918z7M .statediagram-state rect.basic{rx:5px;ry:5px;}#mermaid-svg-y4KWTIWJdf918z7M .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#f0f0f0;}#mermaid-svg-y4KWTIWJdf918z7M .note-edge{stroke-dasharray:5;}#mermaid-svg-y4KWTIWJdf918z7M .statediagram-note rect{fill:#fff5ad;stroke:#aaaa33;stroke-width:1px;rx:0;ry:0;}#mermaid-svg-y4KWTIWJdf918z7M .statediagram-note rect{fill:#fff5ad;stroke:#aaaa33;stroke-width:1px;rx:0;ry:0;}#mermaid-svg-y4KWTIWJdf918z7M .statediagram-note text{fill:black;}#mermaid-svg-y4KWTIWJdf918z7M .statediagram-note .nodeLabel{color:black;}#mermaid-svg-y4KWTIWJdf918z7M .statediagram .edgeLabel{color:red;}#mermaid-svg-y4KWTIWJdf918z7M #dependencyStart,#mermaid-svg-y4KWTIWJdf918z7M #dependencyEnd{fill:#333333;stroke:#333333;stroke-width:1;}#mermaid-svg-y4KWTIWJdf918z7M .statediagramTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-y4KWTIWJdf918z7M :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 上升请求
下降请求
到达目标层
到达目标层
经过楼层
经过楼层
停止
上升
下降

🌐 三、状态转换表

(一)状态转换表概述

状态转换表是状态转换图的表格表示形式。

表格结构

当前状态\事件 事件1 事件2 事件3
状态1 状态2/动作1 状态3/动作2 -
状态2 - 状态3/动作3 状态1/动作4
状态3 状态1/动作5 - -

(二)状态转换表示例

订单状态转换表

当前状态\事件 支付 取消 发货 收货
待支付 已支付/更新订单 已取消/释放库存 - -
已支付 - - 已发货/扣减库存 -
已发货 - - - 已完成/更新状态
已完成 - - - -
已取消 - - - -

(三)状态转换表与状态图的对比

对比分析

方面 状态转换图 状态转换表
表达方式 图形化 表格化
直观性 直观 需要分析
完整性 可能遗漏 容易检查完整性
适用场景 简单系统 复杂系统
补充使用 互相补充 互相补充

📊 四、Petri网

(一)Petri网概述

Petri网是一种描述异步并发系统的数学模型。

Petri网组成
#mermaid-svg-y3DkdmbX9rcFD0M8{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-y3DkdmbX9rcFD0M8 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-y3DkdmbX9rcFD0M8 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-y3DkdmbX9rcFD0M8 .error-icon{fill:#552222;}#mermaid-svg-y3DkdmbX9rcFD0M8 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-y3DkdmbX9rcFD0M8 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-y3DkdmbX9rcFD0M8 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-y3DkdmbX9rcFD0M8 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-y3DkdmbX9rcFD0M8 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-y3DkdmbX9rcFD0M8 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-y3DkdmbX9rcFD0M8 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-y3DkdmbX9rcFD0M8 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-y3DkdmbX9rcFD0M8 .marker.cross{stroke:#333333;}#mermaid-svg-y3DkdmbX9rcFD0M8 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-y3DkdmbX9rcFD0M8 p{margin:0;}#mermaid-svg-y3DkdmbX9rcFD0M8 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-y3DkdmbX9rcFD0M8 .cluster-label text{fill:#333;}#mermaid-svg-y3DkdmbX9rcFD0M8 .cluster-label span{color:#333;}#mermaid-svg-y3DkdmbX9rcFD0M8 .cluster-label span p{background-color:transparent;}#mermaid-svg-y3DkdmbX9rcFD0M8 .label text,#mermaid-svg-y3DkdmbX9rcFD0M8 span{fill:#333;color:#333;}#mermaid-svg-y3DkdmbX9rcFD0M8 .node rect,#mermaid-svg-y3DkdmbX9rcFD0M8 .node circle,#mermaid-svg-y3DkdmbX9rcFD0M8 .node ellipse,#mermaid-svg-y3DkdmbX9rcFD0M8 .node polygon,#mermaid-svg-y3DkdmbX9rcFD0M8 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-y3DkdmbX9rcFD0M8 .rough-node .label text,#mermaid-svg-y3DkdmbX9rcFD0M8 .node .label text,#mermaid-svg-y3DkdmbX9rcFD0M8 .image-shape .label,#mermaid-svg-y3DkdmbX9rcFD0M8 .icon-shape .label{text-anchor:middle;}#mermaid-svg-y3DkdmbX9rcFD0M8 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-y3DkdmbX9rcFD0M8 .rough-node .label,#mermaid-svg-y3DkdmbX9rcFD0M8 .node .label,#mermaid-svg-y3DkdmbX9rcFD0M8 .image-shape .label,#mermaid-svg-y3DkdmbX9rcFD0M8 .icon-shape .label{text-align:center;}#mermaid-svg-y3DkdmbX9rcFD0M8 .node.clickable{cursor:pointer;}#mermaid-svg-y3DkdmbX9rcFD0M8 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-y3DkdmbX9rcFD0M8 .arrowheadPath{fill:#333333;}#mermaid-svg-y3DkdmbX9rcFD0M8 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-y3DkdmbX9rcFD0M8 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-y3DkdmbX9rcFD0M8 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-y3DkdmbX9rcFD0M8 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-y3DkdmbX9rcFD0M8 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-y3DkdmbX9rcFD0M8 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-y3DkdmbX9rcFD0M8 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-y3DkdmbX9rcFD0M8 .cluster text{fill:#333;}#mermaid-svg-y3DkdmbX9rcFD0M8 .cluster span{color:#333;}#mermaid-svg-y3DkdmbX9rcFD0M8 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-y3DkdmbX9rcFD0M8 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-y3DkdmbX9rcFD0M8 rect.text{fill:none;stroke-width:0;}#mermaid-svg-y3DkdmbX9rcFD0M8 .icon-shape,#mermaid-svg-y3DkdmbX9rcFD0M8 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-y3DkdmbX9rcFD0M8 .icon-shape p,#mermaid-svg-y3DkdmbX9rcFD0M8 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-y3DkdmbX9rcFD0M8 .icon-shape .label rect,#mermaid-svg-y3DkdmbX9rcFD0M8 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-y3DkdmbX9rcFD0M8 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-y3DkdmbX9rcFD0M8 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-y3DkdmbX9rcFD0M8 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Petri网
库所
变迁
有向弧
令牌
位置/条件
圆圈表示
事件/转换
矩形表示
连接关系
箭头表示
资源/状态
黑点表示

Petri网符号

符号 名称 说明
库所 位置或条件
变迁 事件或转换
有向弧 连接关系
令牌 资源或状态

(二)Petri网的基本概念

库所(Place)

库所表示系统的位置、条件或状态。

变迁(Transition)

变迁表示系统的事件或转换。

令牌(Token)

令牌表示资源或状态,在库所中流动。

触发规则

规则 说明
使能 输入库所都有令牌
触发 消耗输入令牌,产生输出令牌

(三)Petri网示例

生产者-消费者Petri网
#mermaid-svg-BGpDLrxpFaX3ARqt{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-BGpDLrxpFaX3ARqt .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-BGpDLrxpFaX3ARqt .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-BGpDLrxpFaX3ARqt .error-icon{fill:#552222;}#mermaid-svg-BGpDLrxpFaX3ARqt .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-BGpDLrxpFaX3ARqt .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-BGpDLrxpFaX3ARqt .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-BGpDLrxpFaX3ARqt .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-BGpDLrxpFaX3ARqt .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-BGpDLrxpFaX3ARqt .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-BGpDLrxpFaX3ARqt .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-BGpDLrxpFaX3ARqt .marker{fill:#333333;stroke:#333333;}#mermaid-svg-BGpDLrxpFaX3ARqt .marker.cross{stroke:#333333;}#mermaid-svg-BGpDLrxpFaX3ARqt svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-BGpDLrxpFaX3ARqt p{margin:0;}#mermaid-svg-BGpDLrxpFaX3ARqt .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-BGpDLrxpFaX3ARqt .cluster-label text{fill:#333;}#mermaid-svg-BGpDLrxpFaX3ARqt .cluster-label span{color:#333;}#mermaid-svg-BGpDLrxpFaX3ARqt .cluster-label span p{background-color:transparent;}#mermaid-svg-BGpDLrxpFaX3ARqt .label text,#mermaid-svg-BGpDLrxpFaX3ARqt span{fill:#333;color:#333;}#mermaid-svg-BGpDLrxpFaX3ARqt .node rect,#mermaid-svg-BGpDLrxpFaX3ARqt .node circle,#mermaid-svg-BGpDLrxpFaX3ARqt .node ellipse,#mermaid-svg-BGpDLrxpFaX3ARqt .node polygon,#mermaid-svg-BGpDLrxpFaX3ARqt .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-BGpDLrxpFaX3ARqt .rough-node .label text,#mermaid-svg-BGpDLrxpFaX3ARqt .node .label text,#mermaid-svg-BGpDLrxpFaX3ARqt .image-shape .label,#mermaid-svg-BGpDLrxpFaX3ARqt .icon-shape .label{text-anchor:middle;}#mermaid-svg-BGpDLrxpFaX3ARqt .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-BGpDLrxpFaX3ARqt .rough-node .label,#mermaid-svg-BGpDLrxpFaX3ARqt .node .label,#mermaid-svg-BGpDLrxpFaX3ARqt .image-shape .label,#mermaid-svg-BGpDLrxpFaX3ARqt .icon-shape .label{text-align:center;}#mermaid-svg-BGpDLrxpFaX3ARqt .node.clickable{cursor:pointer;}#mermaid-svg-BGpDLrxpFaX3ARqt .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-BGpDLrxpFaX3ARqt .arrowheadPath{fill:#333333;}#mermaid-svg-BGpDLrxpFaX3ARqt .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-BGpDLrxpFaX3ARqt .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-BGpDLrxpFaX3ARqt .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-BGpDLrxpFaX3ARqt .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-BGpDLrxpFaX3ARqt .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-BGpDLrxpFaX3ARqt .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-BGpDLrxpFaX3ARqt .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-BGpDLrxpFaX3ARqt .cluster text{fill:#333;}#mermaid-svg-BGpDLrxpFaX3ARqt .cluster span{color:#333;}#mermaid-svg-BGpDLrxpFaX3ARqt div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-BGpDLrxpFaX3ARqt .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-BGpDLrxpFaX3ARqt rect.text{fill:none;stroke-width:0;}#mermaid-svg-BGpDLrxpFaX3ARqt .icon-shape,#mermaid-svg-BGpDLrxpFaX3ARqt .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-BGpDLrxpFaX3ARqt .icon-shape p,#mermaid-svg-BGpDLrxpFaX3ARqt .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-BGpDLrxpFaX3ARqt .icon-shape .label rect,#mermaid-svg-BGpDLrxpFaX3ARqt .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-BGpDLrxpFaX3ARqt .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-BGpDLrxpFaX3ARqt .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-BGpDLrxpFaX3ARqt :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 弧







库所:空闲
变迁:生产
库所:产品
变迁:消费
库所:消费者
库所:消费完成
变迁:返回

简单Petri网

复制代码
库所:P1(空闲), P2(忙)
变迁:T1(开始), T2(结束)
弧:P1→T1, T1→P2, P2→T2, T2→P1
令牌:初始在P1

(四)Petri网的特点

Petri网特点

特点 说明
并发描述 描述并发行为
异步特性 描述异步系统
冲突检测 检测状态冲突
形式化 有严格数学基础
可视化 图形化表示

Petri网应用

应用领域 说明
并发系统 并发程序分析
工作流 工作流建模
通信协议 协议验证
制造系统 生产流程

📋 五、动态分析工具

(一)建模工具

建模工具

工具 功能 特点
Visio 绘图工具 功能全面
Stateflow 状态机 MATLAB集成
Rational Rose UML工具 功能强大
Enterprise Architect UML工具 专业建模
draw.io 在线绘图 免费开源

(二)UML状态图

UML状态图

UML状态图是标准化的状态转换图。

UML状态图元素

元素 说明 表示
初态 初始状态
状态 系统状态 圆角矩形
转换 状态转换 箭头
终态 终止状态
历史状态 历史状态

UML状态图示例
#mermaid-svg-VbuySCq8MRjmpwDG{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-VbuySCq8MRjmpwDG .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-VbuySCq8MRjmpwDG .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-VbuySCq8MRjmpwDG .error-icon{fill:#552222;}#mermaid-svg-VbuySCq8MRjmpwDG .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-VbuySCq8MRjmpwDG .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-VbuySCq8MRjmpwDG .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-VbuySCq8MRjmpwDG .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-VbuySCq8MRjmpwDG .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-VbuySCq8MRjmpwDG .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-VbuySCq8MRjmpwDG .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-VbuySCq8MRjmpwDG .marker{fill:#333333;stroke:#333333;}#mermaid-svg-VbuySCq8MRjmpwDG .marker.cross{stroke:#333333;}#mermaid-svg-VbuySCq8MRjmpwDG svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-VbuySCq8MRjmpwDG p{margin:0;}#mermaid-svg-VbuySCq8MRjmpwDG defs #statediagram-barbEnd{fill:#333333;stroke:#333333;}#mermaid-svg-VbuySCq8MRjmpwDG g.stateGroup text{fill:#9370DB;stroke:none;font-size:10px;}#mermaid-svg-VbuySCq8MRjmpwDG g.stateGroup text{fill:#333;stroke:none;font-size:10px;}#mermaid-svg-VbuySCq8MRjmpwDG g.stateGroup .state-title{font-weight:bolder;fill:#131300;}#mermaid-svg-VbuySCq8MRjmpwDG g.stateGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-VbuySCq8MRjmpwDG g.stateGroup line{stroke:#333333;stroke-width:1;}#mermaid-svg-VbuySCq8MRjmpwDG .transition{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-VbuySCq8MRjmpwDG .stateGroup .composit{fill:white;border-bottom:1px;}#mermaid-svg-VbuySCq8MRjmpwDG .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px;}#mermaid-svg-VbuySCq8MRjmpwDG .state-note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-VbuySCq8MRjmpwDG .state-note text{fill:black;stroke:none;font-size:10px;}#mermaid-svg-VbuySCq8MRjmpwDG .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-VbuySCq8MRjmpwDG .edgeLabel .label rect{fill:#ECECFF;opacity:0.5;}#mermaid-svg-VbuySCq8MRjmpwDG .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-VbuySCq8MRjmpwDG .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-VbuySCq8MRjmpwDG .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-VbuySCq8MRjmpwDG .edgeLabel .label text{fill:#333;}#mermaid-svg-VbuySCq8MRjmpwDG .label div .edgeLabel{color:#333;}#mermaid-svg-VbuySCq8MRjmpwDG .stateLabel text{fill:#131300;font-size:10px;font-weight:bold;}#mermaid-svg-VbuySCq8MRjmpwDG .node circle.state-start{fill:#333333;stroke:#333333;}#mermaid-svg-VbuySCq8MRjmpwDG .node .fork-join{fill:#333333;stroke:#333333;}#mermaid-svg-VbuySCq8MRjmpwDG .node circle.state-end{fill:#9370DB;stroke:white;stroke-width:1.5;}#mermaid-svg-VbuySCq8MRjmpwDG .end-state-inner{fill:white;stroke-width:1.5;}#mermaid-svg-VbuySCq8MRjmpwDG .node rect{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-VbuySCq8MRjmpwDG .node polygon{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-VbuySCq8MRjmpwDG #statediagram-barbEnd{fill:#333333;}#mermaid-svg-VbuySCq8MRjmpwDG .statediagram-cluster rect{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-VbuySCq8MRjmpwDG .cluster-label,#mermaid-svg-VbuySCq8MRjmpwDG .nodeLabel{color:#131300;}#mermaid-svg-VbuySCq8MRjmpwDG .statediagram-cluster rect.outer{rx:5px;ry:5px;}#mermaid-svg-VbuySCq8MRjmpwDG .statediagram-state .divider{stroke:#9370DB;}#mermaid-svg-VbuySCq8MRjmpwDG .statediagram-state .title-state{rx:5px;ry:5px;}#mermaid-svg-VbuySCq8MRjmpwDG .statediagram-cluster.statediagram-cluster .inner{fill:white;}#mermaid-svg-VbuySCq8MRjmpwDG .statediagram-cluster.statediagram-cluster-alt .inner{fill:#f0f0f0;}#mermaid-svg-VbuySCq8MRjmpwDG .statediagram-cluster .inner{rx:0;ry:0;}#mermaid-svg-VbuySCq8MRjmpwDG .statediagram-state rect.basic{rx:5px;ry:5px;}#mermaid-svg-VbuySCq8MRjmpwDG .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#f0f0f0;}#mermaid-svg-VbuySCq8MRjmpwDG .note-edge{stroke-dasharray:5;}#mermaid-svg-VbuySCq8MRjmpwDG .statediagram-note rect{fill:#fff5ad;stroke:#aaaa33;stroke-width:1px;rx:0;ry:0;}#mermaid-svg-VbuySCq8MRjmpwDG .statediagram-note rect{fill:#fff5ad;stroke:#aaaa33;stroke-width:1px;rx:0;ry:0;}#mermaid-svg-VbuySCq8MRjmpwDG .statediagram-note text{fill:black;}#mermaid-svg-VbuySCq8MRjmpwDG .statediagram-note .nodeLabel{color:black;}#mermaid-svg-VbuySCq8MRjmpwDG .statediagram .edgeLabel{color:red;}#mermaid-svg-VbuySCq8MRjmpwDG #dependencyStart,#mermaid-svg-VbuySCq8MRjmpwDG #dependencyEnd{fill:#333333;stroke:#333333;stroke-width:1;}#mermaid-svg-VbuySCq8MRjmpwDG .statediagramTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-VbuySCq8MRjmpwDG :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 开始工作
暂停
继续
完成
空闲
工作中
暂停
完成

(三)动态分析技术

分析技术

技术 说明 适用场景
状态枚举 枚举所有状态 简单系统
状态覆盖 覆盖所有状态 测试设计
转换覆盖 覆盖所有转换 测试设计
路径覆盖 覆盖所有路径 完整测试

💡 六、动态分析实例

(一)实例背景

项目:自动售货机系统

系统描述

  • 用户投币选择商品
  • 系统验证金额
  • 出货找零

(二)状态识别

系统状态

状态 说明
空闲 等待用户操作
投币中 用户正在投币
选择中 用户选择商品
出货中 正在出货
找零中 正在找零
故障 系统故障

(三)事件识别

系统事件

事件 说明
投币 用户投入硬币
选择商品 用户选择商品
取消 用户取消操作
出货完成 出货完成
找零完成 找零完成
故障发生 系统故障

(四)状态转换图

自动售货机状态转换图
#mermaid-svg-AuSyEKyCaHiEGrMh{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-AuSyEKyCaHiEGrMh .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-AuSyEKyCaHiEGrMh .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-AuSyEKyCaHiEGrMh .error-icon{fill:#552222;}#mermaid-svg-AuSyEKyCaHiEGrMh .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-AuSyEKyCaHiEGrMh .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-AuSyEKyCaHiEGrMh .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-AuSyEKyCaHiEGrMh .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-AuSyEKyCaHiEGrMh .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-AuSyEKyCaHiEGrMh .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-AuSyEKyCaHiEGrMh .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-AuSyEKyCaHiEGrMh .marker{fill:#333333;stroke:#333333;}#mermaid-svg-AuSyEKyCaHiEGrMh .marker.cross{stroke:#333333;}#mermaid-svg-AuSyEKyCaHiEGrMh svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-AuSyEKyCaHiEGrMh p{margin:0;}#mermaid-svg-AuSyEKyCaHiEGrMh defs #statediagram-barbEnd{fill:#333333;stroke:#333333;}#mermaid-svg-AuSyEKyCaHiEGrMh g.stateGroup text{fill:#9370DB;stroke:none;font-size:10px;}#mermaid-svg-AuSyEKyCaHiEGrMh g.stateGroup text{fill:#333;stroke:none;font-size:10px;}#mermaid-svg-AuSyEKyCaHiEGrMh g.stateGroup .state-title{font-weight:bolder;fill:#131300;}#mermaid-svg-AuSyEKyCaHiEGrMh g.stateGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-AuSyEKyCaHiEGrMh g.stateGroup line{stroke:#333333;stroke-width:1;}#mermaid-svg-AuSyEKyCaHiEGrMh .transition{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-AuSyEKyCaHiEGrMh .stateGroup .composit{fill:white;border-bottom:1px;}#mermaid-svg-AuSyEKyCaHiEGrMh .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px;}#mermaid-svg-AuSyEKyCaHiEGrMh .state-note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-AuSyEKyCaHiEGrMh .state-note text{fill:black;stroke:none;font-size:10px;}#mermaid-svg-AuSyEKyCaHiEGrMh .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-AuSyEKyCaHiEGrMh .edgeLabel .label rect{fill:#ECECFF;opacity:0.5;}#mermaid-svg-AuSyEKyCaHiEGrMh .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-AuSyEKyCaHiEGrMh .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-AuSyEKyCaHiEGrMh .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-AuSyEKyCaHiEGrMh .edgeLabel .label text{fill:#333;}#mermaid-svg-AuSyEKyCaHiEGrMh .label div .edgeLabel{color:#333;}#mermaid-svg-AuSyEKyCaHiEGrMh .stateLabel text{fill:#131300;font-size:10px;font-weight:bold;}#mermaid-svg-AuSyEKyCaHiEGrMh .node circle.state-start{fill:#333333;stroke:#333333;}#mermaid-svg-AuSyEKyCaHiEGrMh .node .fork-join{fill:#333333;stroke:#333333;}#mermaid-svg-AuSyEKyCaHiEGrMh .node circle.state-end{fill:#9370DB;stroke:white;stroke-width:1.5;}#mermaid-svg-AuSyEKyCaHiEGrMh .end-state-inner{fill:white;stroke-width:1.5;}#mermaid-svg-AuSyEKyCaHiEGrMh .node rect{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-AuSyEKyCaHiEGrMh .node polygon{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-AuSyEKyCaHiEGrMh #statediagram-barbEnd{fill:#333333;}#mermaid-svg-AuSyEKyCaHiEGrMh .statediagram-cluster rect{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-AuSyEKyCaHiEGrMh .cluster-label,#mermaid-svg-AuSyEKyCaHiEGrMh .nodeLabel{color:#131300;}#mermaid-svg-AuSyEKyCaHiEGrMh .statediagram-cluster rect.outer{rx:5px;ry:5px;}#mermaid-svg-AuSyEKyCaHiEGrMh .statediagram-state .divider{stroke:#9370DB;}#mermaid-svg-AuSyEKyCaHiEGrMh .statediagram-state .title-state{rx:5px;ry:5px;}#mermaid-svg-AuSyEKyCaHiEGrMh .statediagram-cluster.statediagram-cluster .inner{fill:white;}#mermaid-svg-AuSyEKyCaHiEGrMh .statediagram-cluster.statediagram-cluster-alt .inner{fill:#f0f0f0;}#mermaid-svg-AuSyEKyCaHiEGrMh .statediagram-cluster .inner{rx:0;ry:0;}#mermaid-svg-AuSyEKyCaHiEGrMh .statediagram-state rect.basic{rx:5px;ry:5px;}#mermaid-svg-AuSyEKyCaHiEGrMh .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#f0f0f0;}#mermaid-svg-AuSyEKyCaHiEGrMh .note-edge{stroke-dasharray:5;}#mermaid-svg-AuSyEKyCaHiEGrMh .statediagram-note rect{fill:#fff5ad;stroke:#aaaa33;stroke-width:1px;rx:0;ry:0;}#mermaid-svg-AuSyEKyCaHiEGrMh .statediagram-note rect{fill:#fff5ad;stroke:#aaaa33;stroke-width:1px;rx:0;ry:0;}#mermaid-svg-AuSyEKyCaHiEGrMh .statediagram-note text{fill:black;}#mermaid-svg-AuSyEKyCaHiEGrMh .statediagram-note .nodeLabel{color:black;}#mermaid-svg-AuSyEKyCaHiEGrMh .statediagram .edgeLabel{color:red;}#mermaid-svg-AuSyEKyCaHiEGrMh #dependencyStart,#mermaid-svg-AuSyEKyCaHiEGrMh #dependencyEnd{fill:#333333;stroke:#333333;stroke-width:1;}#mermaid-svg-AuSyEKyCaHiEGrMh .statediagramTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-AuSyEKyCaHiEGrMh :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 投币
继续投币
金额足够
取消
选择商品
金额不足
需要找零
无需找零
找零完成
故障发生
故障发生
故障发生
故障恢复
空闲
投币中
选择中
出货中
找零中
故障

(五)状态转换表

状态转换表

当前状态\事件 投币 选择 取消 出货完成 找零完成 故障
空闲 投币中 - - - - 故障
投币中 投币中 选择中 空闲 - - 故障
选择中 - 出货中 投币中 - - 故障
出货中 - - - 找零中/空闲 - -
找零中 - - - - 空闲 -
故障 - - - - - 空闲

(六)动态分析验证

验证内容

验证项 验证内容 结果
状态完整性 所有状态是否定义 完整
转换完整性 所有转换是否定义 完整
可达性 所有状态是否可达 可达
无死锁 是否存在死锁 无死锁

📝 总结

系统动态分析是描述系统行为特征的重要方法。

🎯 基本概念:动态分析关注系统随时间变化的行为;描述系统状态、事件和转换;与静态分析、功能分析共同构成完整的需求模型。

📦 状态转换图:STD是描述动态行为的主要工具;由状态、事件、转换组成;直观描述系统状态变化过程。

🌐 状态转换表:状态转换表的表格形式;便于检查完整性;与状态图互相补充。

📊 Petri网:描述异步并发系统的数学模型;由库所、变迁、弧、令牌组成;适合描述并发行为。

💡 应用要点:识别系统状态;识别触发事件;定义状态转换;验证状态完整性;使用工具辅助建模。


核心启示:系统动态分析是需求分析的重要组成部分,它关注系统的行为特征,描述系统在不同状态之间的转换过程。在实际工作中,我们需要注意:第一,全面识别系统状态,不遗漏任何状态;第二,准确定义触发事件,明确事件来源;第三,完整定义状态转换,包括条件、动作等;第四,验证状态的完整性和可达性,确保没有死锁;第五,使用合适的工具辅助建模,提高效率。状态转换图、状态转换表、Petri网等工具各有特点,可以根据系统特点选择合适的工具。动态分析与静态分析、功能分析相结合,才能建立完整、准确的系统需求模型。


相关推荐
梁辰兴2 天前
软件工程:结构化分析方法
软件工程·数据流图·数据字典·er图·基本概念·结构化分析方法·状态转换图
春风送暖8882 天前
专为汽车电子决策层打造,全星APQP系统以AI驱动风险前置,降本增效,构筑研发质量核心堡垒
软件工程
郝学胜-神的一滴3 天前
Python 高级编程 026:序列内核深剖
开发语言·python·程序人生·软件工程
梁辰兴4 天前
软件工程:需求分析的原则
软件工程·需求分析·需求分析的原则·四大基本原则·建模原则·质量原则·应用要点
梁辰兴4 天前
软件工程:需求分析的过程
软件工程·需求分析·需求管理·需求规格说明书·过程概述·需求获取·需求验证
梁辰兴5 天前
软件工程:几种度量效益的方法
软件工程·梁辰兴·度量效益·投资回收期法·纯收入法·投资回报率法·净现值法
还有你Y5 天前
软件工程架构
hadoop·架构·软件工程
大龄码农有梦想5 天前
Codex、Claude Code 等 AI 编程工具对软件工程的启发
人工智能·软件工程·agent·ai编程·ai agent·智能体·智能体平台
梁辰兴5 天前
软件工程:系统定义的评审
软件工程·梁辰兴·关键要点·评审目的·评审内容·评审方法·评审组织