文章

软件工程绘图简记

本篇博客分为两个部分:

  • 基本概念部分:介绍各种类型图的功能、作用、使用阶段等
  • 教程部分:介绍该如何绘制各种类型的图

基本概念

在软件工程中,图表是沟通需求、设计系统和实现功能的重要工具。以下按使用阶段分类,介绍常见的图表及其功能和作用。

需求分析阶段

  1. 用例图 (Use Case Diagram)
    • 功能: 展示系统功能需求及用户与系统的交互。
    • 作用: 明确“谁”使用系统以及“做什么”,定义功能范围。
    • 特点: 包含参与者(Actors)和用例(Use Cases),简单直观。
  2. 数据流图 (Data Flow Diagram, DFD)
    • 功能: 表示数据的流动和处理过程。
    • 作用: 展示数据如何在模块间传递,用于功能分解。
    • 特点: 包含外部实体、数据流、数据存储和处理过程。
  3. 活动图 (Activity Diagram)
    • 功能: 描述业务流程或功能的动态行为。
    • 作用: 建模复杂流程,展示活动顺序和条件。
    • 特点: 支持分支、合并和并发,类似增强版流程图。

系统设计阶段

  1. 类图 (Class Diagram)
    • 功能: 表示类的结构、属性、方法及类间关系。
    • 作用: 定义系统的静态架构,是面向对象设计核心。
    • 特点: 展示继承、关联、聚合等关系。
  2. 序列图 (Sequence Diagram)
    • 功能: 展示对象间的时序交互。
    • 作用: 描述用例或功能的动态执行流程。
    • 特点: 包含生命线(Lifeline)和消息(Messages)。
  3. 状态图 (State Diagram)
    • 功能: 表示对象生命周期中的状态变化。
    • 作用: 建模状态转换的系统组件。
    • 特点: 关注状态和触发事件。
  4. 组件图 (Component Diagram)
    • 功能: 展示软件组件的组织和依赖关系。
    • 作用: 定义系统的高层模块化设计。
    • 特点: 关注组件接口和连接。
  5. 包图 (Package Diagram)
    • 功能: 将系统元素组织成包,展示依赖关系。
    • 作用: 管理大型系统复杂性。
    • 特点: 类似文件夹结构。
  6. 时序图 (Timing Diagram)
    • 功能: 强调时间约束下的状态或交互变化。
    • 作用: 建模实时系统的时间行为。
    • 特点: 以时间轴为核心。
  7. 实体-关系图 (Entity-Relationship Diagram, ERD)
    • 功能: 展示数据库实体及其关系。
    • 作用: 设计数据库表结构和数据关联。
    • 特点: 包含实体、属性和关系。

实现与测试阶段

  1. 流程图 (Flowchart)
    • 功能: 表示算法或流程的步骤顺序。
    • 作用: 设计算法或说明实现逻辑。
    • 特点: 包含开始/结束、决策点和处理步骤。

部署阶段

  1. 部署图 (Deployment Diagram)
    • 功能: 表示软件组件部署到硬件节点的物理架构。
    • 作用: 规划系统运行时的物理分布。
    • 特点: 包含节点(Nodes)和组件(Components)。

教程

以下介绍如何绘制上述图表,推荐工具包括 UML 建模工具(如 StarUML、Enterprise Architect)、在线绘图工具(如 Draw.io、Lucidchart)以及 Mermaid(代码生成图表)。每种图的绘制步骤如下:

1. 用例图

  • 步骤:
    1. 确定参与者(用小人图标表示)。
    2. 列出用例(用椭圆表示)。
    3. 用直线连接参与者和用例,表示交互。
  • Mermaid 示例:
    graph TD
        A[用户] --> B(登录)
        A --> C(查看信息)
    

2. 数据流图

  • 步骤:
    1. 画外部实体(用矩形表示)。
    2. 画处理过程(用圆或椭圆表示)。
    3. 用箭头表示数据流,标注数据名称。
    4. 添加数据存储(用平行线表示)。

3. 活动图

  • 步骤:
    1. 用圆圈表示开始和结束。
    2. 用圆角矩形表示活动。
    3. 用箭头连接活动,添加决策点(菱形)。
  • Mermaid 示例:
    graph TD
        A[开始] --> B[输入用户名]
        B --> C{验证}
        C -->|通过| D[进入系统]
        C -->|失败| E[提示错误]
        D --> F[结束]
        E --> F
    

4. 类图 (Class Diagram)

  • 步骤:
    1. 用矩形表示类,分为三部分:类名、属性、方法。
    2. 用线条表示关系:继承(空心箭头)、关联(实线)、聚合(空心菱形)。
    3. 添加可见性符号(如 + 表示 public)。
  • Mermaid 示例:
    classDiagram
        class User {
            +String name
            +int age
            +login()
        }
        class Admin {
            +manageUsers()
        }
        User <|-- Admin
    

5. 序列图 (Sequence Diagram)

  • 步骤:
    1. 画对象(矩形)和生命线(虚线)。
    2. 用箭头表示消息传递(实线为调用,虚线为返回)。
    3. 添加时间轴,从上到下表示时序。
  • Mermaid 示例:
    sequenceDiagram
        participant U as User
        participant S as System
        U ->> S: 登录请求
        S -->> U: 登录成功
    

6. 状态图 (State Diagram)

  • 步骤:
    1. 用实心圆表示初始状态,圆圈加实心圆表示结束状态。
    2. 用圆角矩形表示状态。
    3. 用带箭头的线表示状态转换,标注触发事件。
  • Mermaid 示例:
    stateDiagram-v2
        [*] --> Idle
        Idle --> Running : Start
        Running --> Stopped : Stop
        Stopped --> [*]
    

7. 组件图 (Component Diagram)

  • 步骤:
    1. 用带小图标的矩形表示组件。
    2. 用接口符号(半圆或线)表示提供/依赖接口。
    3. 用线连接组件,表示依赖关系。
  • Mermaid 示例:
    graph TD
        A[组件A] -->|依赖| B[组件B]
        B --> C[组件C]
    

8. 包图 (Package Diagram)

  • 步骤:
    1. 用带标签的矩形表示包。
    2. 将类或组件放入包内。
    3. 用虚线箭头表示包间依赖。
  • Mermaid 示例:
    classDiagram
        namespace PackageA {
            class Class1
        }
        namespace PackageB {
            class Class2
        }
        PackageA --> PackageB
    

9. 时序图 (Timing Diagram)

  • 步骤:
    1. 横轴表示时间,纵轴表示对象或状态。
    2. 用矩形波形表示状态变化。
    3. 标注时间约束。
  • 工具建议: Draw.io(Mermaid 不直接支持)。
  • 示例描述: User: [Idle] → [Active] (t=5s) → [Idle]。

10. 实体-关系图 (ER Diagram)

  • 步骤:
    1. 用矩形表示实体,列出属性。
    2. 用菱形表示关系,连接实体。
    3. 添加主键(PK)和外键(FK)。
  • Mermaid 示例:
    erDiagram
        CUSTOMER ||--o{ ORDER : places
        CUSTOMER {
            int id PK
            string name
        }
        ORDER {
            int id PK
            int customer_id FK
        }
    

11. 流程图 (Flowchart)

  • 步骤:
    1. 用圆形表示开始/结束。
    2. 用矩形表示处理步骤,菱形表示决策。
    3. 用箭头连接,标注条件。
  • Mermaid 示例:
    graph TD
        A[开始] --> B[输入数据]
        B --> C{有效?}
        C -->|是| D[处理]
        C -->|否| E[错误]
        D --> F[结束]
        E --> F
    

12. 部署图 (Deployment Diagram)

  • 步骤:
    1. 用立体矩形表示节点(硬件)。
    2. 在节点内画组件或工件(文件图标)。
    3. 用线连接节点,表示通信。
  • Mermaid 示例:
    graph TD
        A[服务器] --> B[数据库]
        A --> C[客户端]
    
本文由作者按照 CC BY 4.0 进行授权