软件工程绘图简记
本篇博客分为两个部分:
- 基本概念部分:介绍各种类型图的功能、作用、使用阶段等
- 教程部分:介绍该如何绘制各种类型的图
基本概念
在软件工程中,图表是沟通需求、设计系统和实现功能的重要工具。以下按使用阶段分类,介绍常见的图表及其功能和作用。
需求分析阶段
- 用例图 (Use Case Diagram)
- 功能: 展示系统功能需求及用户与系统的交互。
- 作用: 明确“谁”使用系统以及“做什么”,定义功能范围。
- 特点: 包含参与者(Actors)和用例(Use Cases),简单直观。
- 数据流图 (Data Flow Diagram, DFD)
- 功能: 表示数据的流动和处理过程。
- 作用: 展示数据如何在模块间传递,用于功能分解。
- 特点: 包含外部实体、数据流、数据存储和处理过程。
- 活动图 (Activity Diagram)
- 功能: 描述业务流程或功能的动态行为。
- 作用: 建模复杂流程,展示活动顺序和条件。
- 特点: 支持分支、合并和并发,类似增强版流程图。
系统设计阶段
- 类图 (Class Diagram)
- 功能: 表示类的结构、属性、方法及类间关系。
- 作用: 定义系统的静态架构,是面向对象设计核心。
- 特点: 展示继承、关联、聚合等关系。
- 序列图 (Sequence Diagram)
- 功能: 展示对象间的时序交互。
- 作用: 描述用例或功能的动态执行流程。
- 特点: 包含生命线(Lifeline)和消息(Messages)。
- 状态图 (State Diagram)
- 功能: 表示对象生命周期中的状态变化。
- 作用: 建模状态转换的系统组件。
- 特点: 关注状态和触发事件。
- 组件图 (Component Diagram)
- 功能: 展示软件组件的组织和依赖关系。
- 作用: 定义系统的高层模块化设计。
- 特点: 关注组件接口和连接。
- 包图 (Package Diagram)
- 功能: 将系统元素组织成包,展示依赖关系。
- 作用: 管理大型系统复杂性。
- 特点: 类似文件夹结构。
- 时序图 (Timing Diagram)
- 功能: 强调时间约束下的状态或交互变化。
- 作用: 建模实时系统的时间行为。
- 特点: 以时间轴为核心。
- 实体-关系图 (Entity-Relationship Diagram, ERD)
- 功能: 展示数据库实体及其关系。
- 作用: 设计数据库表结构和数据关联。
- 特点: 包含实体、属性和关系。
实现与测试阶段
- 流程图 (Flowchart)
- 功能: 表示算法或流程的步骤顺序。
- 作用: 设计算法或说明实现逻辑。
- 特点: 包含开始/结束、决策点和处理步骤。
部署阶段
- 部署图 (Deployment Diagram)
- 功能: 表示软件组件部署到硬件节点的物理架构。
- 作用: 规划系统运行时的物理分布。
- 特点: 包含节点(Nodes)和组件(Components)。
教程
以下介绍如何绘制上述图表,推荐工具包括 UML 建模工具(如 StarUML、Enterprise Architect)、在线绘图工具(如 Draw.io、Lucidchart)以及 Mermaid(代码生成图表)。每种图的绘制步骤如下:
1. 用例图
- 步骤:
- 确定参与者(用小人图标表示)。
- 列出用例(用椭圆表示)。
- 用直线连接参与者和用例,表示交互。
- Mermaid 示例:
graph TD A[用户] --> B(登录) A --> C(查看信息)
2. 数据流图
- 步骤:
- 画外部实体(用矩形表示)。
- 画处理过程(用圆或椭圆表示)。
- 用箭头表示数据流,标注数据名称。
- 添加数据存储(用平行线表示)。
3. 活动图
- 步骤:
- 用圆圈表示开始和结束。
- 用圆角矩形表示活动。
- 用箭头连接活动,添加决策点(菱形)。
- Mermaid 示例:
graph TD A[开始] --> B[输入用户名] B --> C{验证} C -->|通过| D[进入系统] C -->|失败| E[提示错误] D --> F[结束] E --> F
4. 类图 (Class Diagram)
- 步骤:
- 用矩形表示类,分为三部分:类名、属性、方法。
- 用线条表示关系:继承(空心箭头)、关联(实线)、聚合(空心菱形)。
- 添加可见性符号(如 + 表示 public)。
- Mermaid 示例:
classDiagram class User { +String name +int age +login() } class Admin { +manageUsers() } User <|-- Admin
5. 序列图 (Sequence Diagram)
- 步骤:
- 画对象(矩形)和生命线(虚线)。
- 用箭头表示消息传递(实线为调用,虚线为返回)。
- 添加时间轴,从上到下表示时序。
- Mermaid 示例:
sequenceDiagram participant U as User participant S as System U ->> S: 登录请求 S -->> U: 登录成功
6. 状态图 (State Diagram)
- 步骤:
- 用实心圆表示初始状态,圆圈加实心圆表示结束状态。
- 用圆角矩形表示状态。
- 用带箭头的线表示状态转换,标注触发事件。
- Mermaid 示例:
stateDiagram-v2 [*] --> Idle Idle --> Running : Start Running --> Stopped : Stop Stopped --> [*]
7. 组件图 (Component Diagram)
- 步骤:
- 用带小图标的矩形表示组件。
- 用接口符号(半圆或线)表示提供/依赖接口。
- 用线连接组件,表示依赖关系。
- Mermaid 示例:
graph TD A[组件A] -->|依赖| B[组件B] B --> C[组件C]
8. 包图 (Package Diagram)
- 步骤:
- 用带标签的矩形表示包。
- 将类或组件放入包内。
- 用虚线箭头表示包间依赖。
- Mermaid 示例:
classDiagram namespace PackageA { class Class1 } namespace PackageB { class Class2 } PackageA --> PackageB
9. 时序图 (Timing Diagram)
- 步骤:
- 横轴表示时间,纵轴表示对象或状态。
- 用矩形波形表示状态变化。
- 标注时间约束。
- 工具建议: Draw.io(Mermaid 不直接支持)。
- 示例描述: User: [Idle] → [Active] (t=5s) → [Idle]。
10. 实体-关系图 (ER Diagram)
- 步骤:
- 用矩形表示实体,列出属性。
- 用菱形表示关系,连接实体。
- 添加主键(PK)和外键(FK)。
- Mermaid 示例:
erDiagram CUSTOMER ||--o{ ORDER : places CUSTOMER { int id PK string name } ORDER { int id PK int customer_id FK }
11. 流程图 (Flowchart)
- 步骤:
- 用圆形表示开始/结束。
- 用矩形表示处理步骤,菱形表示决策。
- 用箭头连接,标注条件。
- Mermaid 示例:
graph TD A[开始] --> B[输入数据] B --> C{有效?} C -->|是| D[处理] C -->|否| E[错误] D --> F[结束] E --> F
12. 部署图 (Deployment Diagram)
- 步骤:
- 用立体矩形表示节点(硬件)。
- 在节点内画组件或工件(文件图标)。
- 用线连接节点,表示通信。
- Mermaid 示例:
graph TD A[服务器] --> B[数据库] A --> C[客户端]
本文由作者按照 CC BY 4.0 进行授权