架构设计 — 软件架构课程 Lecture-5

主讲:周立新(Dr. Zhou Lixin)
来源:北京大学软件与微电子学院 软件体系结构课程
系列:0B105-SoftwareArchitecture / Lecture-5

课程定位

本讲是Lecture-5《架构设计》的核心课件,共18页,分为两大部分:

  1. 第一部分(5.1节):UI架构的设计空间与设计规则
  2. 第二部分(5.2节):量化设计空间(基于QFD框架)

注:本PPT为纲要性课件,文字层内容精简,大量信息以图表形式呈现。详细内容可参考同目录下的两篇CMU SEI技术报告:


第一部分: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)

设计规则的本质:基于经验总结的”如果…那么…”式启发式原则

如果 [需求条件]
那么 [推荐/禁止的设计选择]
因为 [理由/权衡依据]

示例规则类型:

  1. 需求→架构的映射规则

    • 高频实时反馈需求 → 采用事件驱动模型
    • 复杂多窗口操作 → 采用重叠窗口管理
    • 新手用户为主 → 采用菜单驱动 + 向导式交互
  2. 内部一致性规则

    • 如果使用事件驱动控制流,则应配套使用回调注册机制
    • 如果采用组件框架,则应有配套的生命周期管理
  3. 质量属性规则

    • 可移植性需求 → 引入抽象层隔离平台差异
    • 性能需求 → 减少跨层调用、批量操作

5.1.4 设计空间的应用:实例

设计空间方法的应用流程:

  1. 明确需求:梳理功能需求与质量属性需求
  2. 映射到设计空间维度:将每个需求对应到相关的设计维度
  3. 应用设计规则:根据规则筛选可行的设计选择
  4. 评估与权衡:在多个可行方案间做权衡
  5. 细化到下一层抽象:逐步深入,逐层设计

5.1.5 验证实验(Validation Experiment)

  • 用设计空间方法对若干已知系统进行反向设计
  • 对比设计空间推导结果与系统实际架构
  • 验证设计规则的有效性和准确性
  • CMU的实验显示:有经验的设计者使用设计空间方法,可达到中等程度的一致性(kappa系数)

5.1.6 设计空间的构建方法

构建基础:基于对现有UI系统的广泛调研和归纳

潜在问题与挑战:

  1. 前瞻性不足:基于已有系统归纳,难以预见从未出现过的全新架构
  2. 维度遗漏风险:重要的设计维度可能被忽视
  3. 维度冗余:不相关或重复的维度会干扰决策
  4. 持续精炼:通过实践使用不断修正和完善设计空间,是消除缺陷的唯一途径

关键洞察:去除冗余维度与发现新维度同样重要,且同样困难。


5.1.7 核心总结

  1. 目标:组织软件设计知识,建立常规化的设计方法
  2. 设计过程模型:从系统需求出发,分多个步骤、多个抽象层次,逐步推进到完整设计
  3. 工程实用主义:设计规则不一定要完美才能发挥价值,作为工程辅助工具,“够用”即可
  4. 长期愿景:可靠的设计规则体系可以成为自动化设计助手,甚至全自动系统构建的基础
  5. 当前局限:目前仅在用户界面系统架构这一个领域进行了深入研究

第二部分:量化设计空间(5.2)

5.2.1 概述

量化设计空间 = 设计空间 + QFD(质量功能展开)框架

将定性的设计空间维度赋予量化权重,使得设计决策可以:

  • 量化评估不同方案的优劣
  • 客观比较多种架构选择
  • 将需求优先级映射到设计决策

5.2.2 背景:设计空间与QFD

设计空间的局限:

  • 维度是定性的,难以直接比较
  • 多维度权衡缺乏统一度量
  • 依赖设计者经验和直觉

QFD(Quality Function Deployment / 质量功能部署):

  • 起源于制造业(丰田/三菱重工,1970年代)
  • 将”用户需求”转化为”技术特性”的系统化方法
  • 核心工具:质量屋(House of Quality)
  • 通过关系矩阵和权重实现量化分析

5.2.3 量化设计空间的实现

在QFD框架上实现设计空间

基本思路:

用户需求  →  [关系矩阵]  →  设计维度
  (WHAT)       权重          (HOW)
                ↓
          设计选择的
          量化评分

步骤:

  1. 左墙(WHATs):列出所有用户需求/质量属性
  2. 右墙:为每个需求分配权重(重要度评分)
  3. 天花板(HOWs):列出设计空间的所有维度
  4. 关系矩阵(房间):评估每个设计维度对每项需求的影响程度
    • 强相关(◎):9分
    • 中等相关(○):3分
    • 弱相关(△):1分
    • 不相关:0分
  5. 屋顶:设计维度之间的相关性(正相关/负相关)
  6. 地板:计算各设计维度的加权总分
  7. 地下室:设计方案的技术评估与基准比较

量化设计空间的使用

  1. 多方案比较:为每个设计方案在各维度上打分,乘以权重后求和,总分越高越优
  2. 敏感性分析:调整需求权重,观察设计方案排序的变化
  3. 需求-设计追溯:清晰展示每个设计决策背后的需求驱动因素
  4. 沟通工具:用统一的量化框架促进跨角色沟通

5.2.4 结论与意义

  • 量化设计空间将定性的架构决策转化为可量化的分析过程
  • 融合了设计空间方法的系统性与QFD的量化评估能力
  • 特别适用于:架构选型、方案评审、需求-架构追溯
  • 局限性:权重和关系矩阵的赋值仍有主观性,需结合专家经验

补充:COTS产品的使用

课件最后提及 COTS(Commercial Off-The-Shelf,商业现成产品) 的使用问题。

在架构设计中引入COTS组件的考量:

  1. 优势:减少开发量、加速交付、成熟稳定
  2. 挑战:
    • 集成难度:COTS产品的架构可能与目标系统不匹配
    • 黑盒特性:无法修改内部实现
    • 供应商锁定风险
    • 功能冗余与缺失
  3. 架构视角:COTS选型本身就是重要的架构决策,需要纳入设计空间分析

与其他Lecture的关联

  • Lecture-1 概述:架构的定义与重要性 → 本讲提供具体的架构设计方法论
  • Lecture-2 架构风格:8种经典架构风格 → 可看作设计空间中特定的”区域”
  • Lecture-3 案例研究:KWIC四种架构对比 → 设计空间方法的具体实践案例
  • Lecture-4 数据管理/Agent/共享信息系统:各领域架构 → 各领域的设计空间实例
  • tr18.90.pdf:设计空间与设计规则的完整方法论(本讲的原始文献)
  • tr22.90.pdf:UI架构设计空间的完整622条规则(本讲5.1节的原始文献)

关键洞见

  1. 设计知识可以被系统化:不是每个设计决策都需要从零开始的创造性思考,大量设计是”常规设计”
  2. 维度化思维:将复杂的架构设计问题分解为多个独立的设计维度,是应对复杂性的有效手段
  3. 量化辅助决策:QFD框架让架构权衡从”拍脑袋”变成”有据可依”的分析过程
  4. 工程实用主义:设计规则不需要完美,只要足够可靠就能创造价值——这是工程师的思维方式
  5. 持续精炼:设计空间不是一劳永逸的,需要在实践中迭代完善