架构设计 — 软件架构课程 Lecture-5
主讲:周立新(Dr. Zhou Lixin)
来源:北京大学软件与微电子学院 软件体系结构课程
系列:0B105-SoftwareArchitecture / Lecture-5
课程定位
本讲是Lecture-5《架构设计》的核心课件,共18页,分为两大部分:
- 第一部分(5.1节):UI架构的设计空间与设计规则
- 第二部分(5.2节):量化设计空间(基于QFD框架)
注:本PPT为纲要性课件,文字层内容精简,大量信息以图表形式呈现。详细内容可参考同目录下的两篇CMU SEI技术报告:
- 《设计空间与设计规则》(tr18.90.pdf,方法论总纲)
- 《用户界面软件架构的设计空间与设计规则》(tr22.90.pdf,UI领域完整实践)
第一部分:UI架构的设计空间与设计规则(5.1)
5.1.1 设计空间与设计规则基础
核心问题:编码化知识的效用(The Utility of Codified Knowledge)
- 将零散的设计经验系统化、结构化,形成可复用的知识体系
- 从”手工艺”模式走向”工程化”模式
- 设计知识可以被整理为设计空间 + 设计规则的形式
设计空间(Design Space)概念:
- 设计空间 = 一组维度,每个维度代表一个设计决策点
- 每个维度上的取值代表一种设计选择
- 所有维度的组合构成了”所有可能的设计方案”的空间
- 设计过程 = 在多维空间中搜索满足需求的解
5.1.2 UI架构的设计空间
基本结构模型(A Basic Structure Model)
UI软件的三层结构模型:
┌─────────────────────┐
│ 应用功能层 │ (应用程序核心逻辑)
├─────────────────────┤
│ UI对话层 │ (用户交互控制)
├─────────────────────┤
│ 表示层 │ (屏幕输出/输入处理)
└─────────────────────┘
功能维度示例(Sample Functional Dimensions)
功能维度描述UI系统”做什么”——即提供哪些功能能力。典型维度包括:
- 输入方式:键盘 / 鼠标 / 触控 / 语音 / 手势
- 输出方式:文本终端 / 图形界面 / 三维 / 沉浸式
- 交互范式:命令行 / 菜单驱动 / 直接操作 / 自然交互
- 窗口管理:平铺 / 重叠 / MDI / 标签页
- 帮助系统:无 / 上下文相关 / 智能助手
结构维度示例(Sample Structural Dimensions)
结构维度描述UI系统”如何组织”——即组件的架构组织方式。典型维度包括:
-
控制流模型:
- 过程式调用(应用程序主控)
- 事件驱动(UI主控,回调机制)
- 多线程并发
- 协程/生成器
-
组件模型:
- 过程抽象(子程序)
- 抽象数据类型
- 对象/类
- 组件框架
-
数据表示:
- 字符串命令
- 结构化数据
- 树状/图状结构
- 文档对象模型(DOM)
-
可扩展性:
- 不可扩展
- 配置文件
- 脚本语言
- 插件架构
- 完全可编程
5.1.3 UI架构的设计规则(Sample Rules)
出自CMU/SEI-90-TR-22,共622条形式化设计规则,PPT中只列举示例(P110)
设计规则的本质:基于经验总结的”如果…那么…”式启发式原则
如果 [需求条件]
那么 [推荐/禁止的设计选择]
因为 [理由/权衡依据]
示例规则类型:
-
需求→架构的映射规则
- 高频实时反馈需求 → 采用事件驱动模型
- 复杂多窗口操作 → 采用重叠窗口管理
- 新手用户为主 → 采用菜单驱动 + 向导式交互
-
内部一致性规则
- 如果使用事件驱动控制流,则应配套使用回调注册机制
- 如果采用组件框架,则应有配套的生命周期管理
-
质量属性规则
- 可移植性需求 → 引入抽象层隔离平台差异
- 性能需求 → 减少跨层调用、批量操作
5.1.4 设计空间的应用:实例
设计空间方法的应用流程:
- 明确需求:梳理功能需求与质量属性需求
- 映射到设计空间维度:将每个需求对应到相关的设计维度
- 应用设计规则:根据规则筛选可行的设计选择
- 评估与权衡:在多个可行方案间做权衡
- 细化到下一层抽象:逐步深入,逐层设计
5.1.5 验证实验(Validation Experiment)
- 用设计空间方法对若干已知系统进行反向设计
- 对比设计空间推导结果与系统实际架构
- 验证设计规则的有效性和准确性
- CMU的实验显示:有经验的设计者使用设计空间方法,可达到中等程度的一致性(kappa系数)
5.1.6 设计空间的构建方法
构建基础:基于对现有UI系统的广泛调研和归纳
潜在问题与挑战:
- 前瞻性不足:基于已有系统归纳,难以预见从未出现过的全新架构
- 维度遗漏风险:重要的设计维度可能被忽视
- 维度冗余:不相关或重复的维度会干扰决策
- 持续精炼:通过实践使用不断修正和完善设计空间,是消除缺陷的唯一途径
关键洞察:去除冗余维度与发现新维度同样重要,且同样困难。
5.1.7 核心总结
- 目标:组织软件设计知识,建立常规化的设计方法
- 设计过程模型:从系统需求出发,分多个步骤、多个抽象层次,逐步推进到完整设计
- 工程实用主义:设计规则不一定要完美才能发挥价值,作为工程辅助工具,“够用”即可
- 长期愿景:可靠的设计规则体系可以成为自动化设计助手,甚至全自动系统构建的基础
- 当前局限:目前仅在用户界面系统架构这一个领域进行了深入研究
第二部分:量化设计空间(5.2)
5.2.1 概述
量化设计空间 = 设计空间 + QFD(质量功能展开)框架
将定性的设计空间维度赋予量化权重,使得设计决策可以:
- 量化评估不同方案的优劣
- 客观比较多种架构选择
- 将需求优先级映射到设计决策
5.2.2 背景:设计空间与QFD
设计空间的局限:
- 维度是定性的,难以直接比较
- 多维度权衡缺乏统一度量
- 依赖设计者经验和直觉
QFD(Quality Function Deployment / 质量功能部署):
- 起源于制造业(丰田/三菱重工,1970年代)
- 将”用户需求”转化为”技术特性”的系统化方法
- 核心工具:质量屋(House of Quality)
- 通过关系矩阵和权重实现量化分析
5.2.3 量化设计空间的实现
在QFD框架上实现设计空间
基本思路:
用户需求 → [关系矩阵] → 设计维度
(WHAT) 权重 (HOW)
↓
设计选择的
量化评分
步骤:
- 左墙(WHATs):列出所有用户需求/质量属性
- 右墙:为每个需求分配权重(重要度评分)
- 天花板(HOWs):列出设计空间的所有维度
- 关系矩阵(房间):评估每个设计维度对每项需求的影响程度
- 强相关(◎):9分
- 中等相关(○):3分
- 弱相关(△):1分
- 不相关:0分
- 屋顶:设计维度之间的相关性(正相关/负相关)
- 地板:计算各设计维度的加权总分
- 地下室:设计方案的技术评估与基准比较
量化设计空间的使用
- 多方案比较:为每个设计方案在各维度上打分,乘以权重后求和,总分越高越优
- 敏感性分析:调整需求权重,观察设计方案排序的变化
- 需求-设计追溯:清晰展示每个设计决策背后的需求驱动因素
- 沟通工具:用统一的量化框架促进跨角色沟通
5.2.4 结论与意义
- 量化设计空间将定性的架构决策转化为可量化的分析过程
- 融合了设计空间方法的系统性与QFD的量化评估能力
- 特别适用于:架构选型、方案评审、需求-架构追溯
- 局限性:权重和关系矩阵的赋值仍有主观性,需结合专家经验
补充:COTS产品的使用
课件最后提及 COTS(Commercial Off-The-Shelf,商业现成产品) 的使用问题。
在架构设计中引入COTS组件的考量:
- 优势:减少开发量、加速交付、成熟稳定
- 挑战:
- 集成难度:COTS产品的架构可能与目标系统不匹配
- 黑盒特性:无法修改内部实现
- 供应商锁定风险
- 功能冗余与缺失
- 架构视角:COTS选型本身就是重要的架构决策,需要纳入设计空间分析
与其他Lecture的关联
- Lecture-1 概述:架构的定义与重要性 → 本讲提供具体的架构设计方法论
- Lecture-2 架构风格:8种经典架构风格 → 可看作设计空间中特定的”区域”
- Lecture-3 案例研究:KWIC四种架构对比 → 设计空间方法的具体实践案例
- Lecture-4 数据管理/Agent/共享信息系统:各领域架构 → 各领域的设计空间实例
- tr18.90.pdf:设计空间与设计规则的完整方法论(本讲的原始文献)
- tr22.90.pdf:UI架构设计空间的完整622条规则(本讲5.1节的原始文献)
关键洞见
- 设计知识可以被系统化:不是每个设计决策都需要从零开始的创造性思考,大量设计是”常规设计”
- 维度化思维:将复杂的架构设计问题分解为多个独立的设计维度,是应对复杂性的有效手段
- 量化辅助决策:QFD框架让架构权衡从”拍脑袋”变成”有据可依”的分析过程
- 工程实用主义:设计规则不需要完美,只要足够可靠就能创造价值——这是工程师的思维方式
- 持续精炼:设计空间不是一劳永逸的,需要在实践中迭代完善