软件工程:系统动态分析

📌目录



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

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

🎯 一、系统动态分析概述

(一)动态分析的定义

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

动态分析概念:
#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网等工具各有特点,可以根据系统特点选择合适的工具。动态分析与静态分析、功能分析相结合,才能建立完整、准确的系统需求模型。


相关推荐
对讲机数码科普11 小时前
数字集群对讲工程全流程拆解:DMR/ePDT 制式选型、组网落地与运维实战
运维·软件工程
硅谷秋水12 小时前
EmbodiedSWE:面向长时程灵巧机器人的编程智能体
人工智能·机器学习·语言模型·机器人·软件工程
郝学胜-神的一滴13 小时前
C++ Templates 03:手写一个Stack看透模板核心机制
开发语言·c++·产品运营·软件工程·产品经理
rolt13 小时前
05 医学 ISO 13940-用UML表示的行业标准,健康信息学 — 支持照护连续性的概念体系
软件工程·架构师·uml
️公子14 小时前
决策模型开战:Jev / Decisions API / Strands Decider 的 ClosedSet、置信度闸门与混合 Agent
人工智能·大模型·软件工程·agent·决策模型
蜗牛互联网1 天前
从Barclays扩大Claude部署看受监管软件工程的责任重分配
java·大数据·人工智能·后端·软件工程
rolt1 天前
3GPP-5G-用UML表示的行业标准-04电信移动通信
软件工程·ddd·uml·ontology
LEO的MATRIX2 天前
本体实施指南
人工智能·软件工程
梁辰兴2 天前
软件工程:面向规模的度量
软件工程·梁辰兴·规模度量·度量定义·面向规模的度量·生产力度量·质量度量