What

UML-Unified Modeling Language 统一建模语言,又称标准建模语言,可以用于需求、设计、开发、运维的沟通,使用范围贯穿软件开发的整个生命周期,其重要性不言而喻。
软件开发过程中,常用的 UML 有 7 种,分别为 用例图、类图、组件图、部署图、序列图、活动图、状态图。

  • 需求分析
    • 用例图:描述人们如何与系统交互;
    • 类图:从概念视角画类图,是建造严密的领域词汇表的好办法;
    • 活动图:能够展示组织的工作流,展示软件如何与人类活动交互。活动图能够为用例展示其上下文,以及复杂用例的工作细节;
    • 状态图:如果一个概念有一个有趣的生命周期,里面有各种状态和改变状态的事件,状态图很有用。
  • 设计
    • 类图:从软件视角展示软件中的类。:,以及它们如何互联;
    • 序列图:一个有价值的方法是从用例中挑选最重要和最有趣的场景,使用CRC卡或序列图来弄清楚软件中发生了什么;
    • 包图:用于展示软件的大规模组织;
    • 状态图:为复杂生命历史的类创建状态图;
    • 部署图:用于展示软件的物理布局。

UML2.0

uml2.0中一共定义了14种图。
UML - 图1

How

UML 可以应用到不同领域的建模,这里只讨论 UML 在软件开发领域的建模。
使用 UML时,只要能传达清楚设计者的意图,就达到目的了,并不需要按照 UML 中定义的那样画的那么细,毕竟软件最终交付的是价值,画的细,投入的就大,产出的价值并不一定大,这个需要权衡。

软件进入编码之前,有三个阶段,分别是需求设计阶段、概要设计阶段、详细设计阶段,不同的图在不同的软件开发阶段,都承担着各自的职责。以下是不同阶段使用的不同图形:

阶段 图形 提供者
需求分析阶段 用例图、序列图、活动图、状态图 需求分析人员、产品经理、架构师
概要设计阶段 部署图、组件图、序列图、活动图 架构师、设计人员
详细设计阶段 类图、序列图、活动图、状态图 架构师、设计人员、开发人员

画图的细节太多,可以参考 《UML精粹》 这本书,这里只讲一些经验。画图时需要搞明白两件事:

  1. 该画到什么粒度?

画到你的团队能够理解为止

  1. 是否所有场景都需要画?比如类图、序列图。

结合工程实践(比如贫血模型的分层),能够正确传递思想即可,画出核心的图即可,并不需要所有都画全。

Why

UML 存在的意义是方便知识的传递,通过统一的符号传递创建者的意图。当然也可以不用 UML,自己抽象图形进行表示,但是为了节省成本,有现成的轮子,何必自己造轮子呢。