回到首页

输入关键词,多个关键词用空格分隔。

← 软件架构与设计 · 系列目录

软件架构与设计 第 9 课 Introduction to Modeling

约 4 分钟
本页目录

既然建模很重要,我们这节课就来了解一下关于建模的基本知识。


前面提到,所谓的架构,其实是一系列关于系统的原则性设计选择。所以我们可以说,一个架构模型是一个包含部分或所有设计选择的制品。架构建模的过程就是进行设计选择的具体化和文档化。如何建模和我们所采用的标记符号很有关系。

具体需要从不同的使用角色来进行考虑,还需要考虑的有细节的层次,描述的清晰度以及成本和收益的权衡。

Stakeholder 驱动的建模

从 Stakeholder 的角度来说,不同的设计点有不同的重要性。但是万变不离其宗,重要的还是:组件、连接器、接口、配置以及设计原则这几个项目。对于架构风格,可能还需要考虑交互上行为上和并行性上的限制。

还有一个需要注意的是,区分好功能性和非功能性需求,比方说『系统打印医疗记录』是一个功能性需求,但是『系统快速和秘密打印』就不算一个功能性需求了。通常来说,我们主要注意功能性需求,但是非功能性需求也很重要,因为这可能表现了功能背后的动机。

模型的重要特征

  • Ambiguity:如果一个模型有多说解释,那么就是不清晰的
  • Accuracy & Precision:这两个概念不大一样,但是常常被放在一起
    • 如果一个模型是正确的,符合事实的,那么说是 accurate
    • 如果一个模型是精确界定的,那么说是 precise
    • 可以参考下图来进行理解

视图与视点

横看成岭侧成峰,很多时候我们需要从多个角度来描述系统,才能得到一个比较准确的模型。下面是一个例子:

常用的视角有:

  • 逻辑视角:描述系统中的逻辑实体以及它们的交互
  • 物理视角:描述系统中的物理实体以及它们的交互
  • 部署视角:描述系统中的逻辑实体如何映射到对应的物理实体上
  • 并行视角:描述系统如何处理并行
  • 行为视角:描述系统的预期表现

因为有这么多视角,所以需要保证不同视角描述的东西是一致的,不能说一个视角中的逻辑是 A 到 B,在另一个视角中就成为 B 到 A 了(因为不同视角肯定有重合的地方,所以需要保证一致性)

常见的不一致有:

  • 方向不一致
  • 精细化不一致:高层的描述和底层的描述冲突
  • 静态动态不一致
  • 动态与动态不一致
  • 功能性与非功能行需求不一致

评估建模方法

我们可以从下面几个角度来评估一个建模方法是否合适:

  • 范围和目的
  • 基础元素
  • 风格
  • 静态和动态方面
  • 动态建模
  • 非功能方面
  • Ambiguity
  • Accuracy
  • Precision
  • 视角
  • 视角一致性

一些常见的建模方法有

通用方法

  • 自然语言
    • 优点:描述性高,所有 stakeholder 都可以查看,擅长捕捉非严格和非正式的架构元素,许多可用的工具
    • 缺点:模糊,宽松,不正式,通常比较冗长,没有办法用软件进行处理分析

  • PPT 建模
    • 优点:看起来漂亮,大小有限制,非常灵活
    • 缺点:模糊,宽松,不正式,没有办法用软件进行处理分析

  • UML
    • 优点:支持不同视角,易理解,许多工具
    • 缺点:需要确定 profile 来降低模糊性,难以保证一致性,难以描述外来概念或视图

早期架构描述语言

  • Darwin
    • 优点:简单直接描述结构依赖,可以进行正规分析,支持层级结构
    • 缺点:仅在简单的架构模型中比较有用,没有办法表达显式连接器

  • Rapide
    • 优点:可以描述异步沟通组件,支持模型模拟和事件的可视化追踪
    • 缺点:无法自然映射到已开发的系统,学习曲线陡峭,在现代计算机上难以运行

  • Wright
    • 优点:类似 Darwin 和 Rapide 的结构描述语言,可以用工具来分析(可以检测死锁)
    • 缺点:学习曲线陡峭,无法自然映射到已开发的系统

领域特定/风格特定语言

  • Koala
    • 优点:可以在一个模型中描述许多系统,可以直接映射到已开发的系统并进行代码重用
    • 缺点:需要特定设计的接口才能应用

  • Weaves
    • 优点:语法很简单,可以几乎映射到已开发的系统
    • 缺点:只能描述结构和数据流

  • AADL
    • 优点:可以详细规定软件硬件,有自动分析工具
    • 缺点:冗长,即使是简单的系统也需要大量描述,需要工具支持以及 UML profile 辅助描述

拓展架构描述语言

  • Acme
    • 优点:结构化描述,可以描述现存元素,工具支持(AcmeStudio)
    • 缺点:无法添加新的视图,属性规范可能非常复杂且有另外的语法

  • ADML
    • 优点:可以使用 XML 解析器,通过元描述增加表达能力
    • 缺点:属性仍然是键值对,没有利用 XML 扩展机制

  • xADL
    • 优点:内置一些常用模块,工具支持(ArchStudio),用户可以添加模块
    • 缺点:添加模块机制复杂,学习曲线陡峭,过于依赖工具

相关文章