软件架构与设计 第 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),用户可以添加模块
- 缺点:添加模块机制复杂,学习曲线陡峭,过于依赖工具



相关文章
- 软件架构与设计 习题课 6 设计模式进阶练习2016-03-30
- 软件架构与设计 习题课 5 设计模式练习2016-03-20
- 软件架构与设计 第 20 课 设计模式2016-03-17
- 软件架构与设计 第 19 课 People, Role, Teams2016-02-27
已恢复到上次阅读位置