13 架构设计¶
说明
本文档由 AI 生成
这一章(Chapter 13: Architectural Design)是软件工程中关于**系统架构设计**的核心章节。它承接了第12章的设计概念,详细探讨了如何通过不同的视角(视图)来描述系统架构,分析了常见的架构风格与模式,并介绍了从设计决策到评审的完整流程。
这一章的逻辑非常清晰,首先阐述了架构的重要性,然后介绍了描述架构的标准(IEEE-Std-147—2000),接着详细讲解了各种架构风格(Genres/Styles)和模式(Patterns),最后涵盖了架构设计的上下文、决策记录、权衡分析以及评审流程。
以下是为你整理的详细笔记(Markdown格式),专有名词后均已附上英文对照:
🏗️ 软件工程 Chapter 13: 架构设计 (Architectural Design)¶
1. 为什么需要架构 (Why Architecture?)¶
架构是软件工程的基石,它不仅仅是可运行的软件,更是一种**表示 (Representation)**,使软件工程师能够:
- 分析有效性 (Analyze Effectiveness): 评估设计是否满足需求。
- 考虑替代方案 (Consider Alternatives): 在设计阶段(变更成本较低时)考虑不同的架构选择。
- 降低风险 (Reduce Risks): 减少软件构建过程中的不确定性。
2. 架构的重要性 (Why is Architecture Important?)¶
- 沟通的桥梁 (Enabler for Communication): 架构表示法(Representations)是所有利益相关者(Stakeholders)之间沟通的媒介。
- 早期设计决策 (Early Design Decisions): 架构突出了那些对后续所有工作和系统最终成功有深远影响的早期决策。
- 可理解的模型 (Intellectually Graspable Model): 架构构成了一个相对较小、易于理解的系统结构模式。
3. 架构描述 (Architectural Descriptions)¶
为了规范架构描述,IEEE 计算机协会提出了 IEEE-Std-1471-2000 标准。
- 定义: 架构描述 (Architectural Description, AD) 是记录架构的一组**制品 (Artifacts)**。
- 多视图 (Multiple Views): 描述本身使用多个视图来表示,每个视图是从一组相关利益相关者关注点的角度对整个系统的表示。
4. 架构风格 (Architectural Styles)¶
每种风格都包含四个要素:组件 (Components)、连接件 (Connectors)、约束 (Constraints) 和语义模型 (Semantic models)。
| 风格类别 | 英文 | 描述与特点 |
|---|---|---|
| 数据为中心架构 | Data-centered | 围绕一个中央数据存储库(Repository/Blackboard)构建,多个客户端软件对其进行读写操作。 |
| 数据流架构 | Data flow | 将系统视为一系列通过管道连接的过滤器 (Filters) 或批处理序列 (Batch sequential)。 |
| 调用与返回架构 | Call and return | 基于过程调用(如主程序-子程序结构),通过扇出 (Fan-out) 和深度 (Depth) 等指标衡量结构。 |
| 面向对象架构 | Object-oriented | 组件通过消息传递进行交互,强调封装和继承。 |
| 分层架构 | Layered | 系统被划分为多个层次(如用户接口层、应用层、核心层),每一层为上一层提供服务。 |
5. 架构模式 (Architectural Patterns)¶
针对特定领域的问题提供通用解决方案:
- 并发 (Concurrency): 处理多个任务的模拟并行执行。
- 示例: 操作系统进程管理模式、任务调度器模式。
- 持久性 (Persistence): 数据在创建它的进程结束后依然存在。
- 示例: 数据库管理系统模式 (DBMS)、应用级持久性模式。
- 分布 (Distribution): 系统组件在分布式环境中的通信方式。
- 示例: 代理 (Broker) 模式,在客户端和服务器之间充当中间人。
6. 架构设计流程 (Architectural Design)¶
- 建立上下文 (Architectural Context): 将软件置于具体环境中,定义与其交互的外部实体(其他系统、设备、人员)及其交互性质。
- 识别原型 (Identify Archetypes): 识别代表系统行为的抽象元素(如 Controller, Node, Detector)。
- 指定结构 (Specify Structure): 通过定义和精化实现每个原型的软件组件来构建系统结构。
7. SafeHome 案例分析 (Case Study: SafeHome)¶
PPT 以 SafeHome 安防系统为例,展示了架构设计的演进:
- 上下文 (Context): Homeowner(房主)通过控制面板与系统交互,系统连接传感器 (Sensors) 并提供安全 (Security) 和监控 (Surveillance) 功能。
- 组件结构 (Component Structure): 包含
SafeHomeExecutive(主控)、GUI(图形界面)、InternetInterface(网络接口)、Security(安全模块)等组件。 - 精化结构 (Refined Component Structure): 进一步细分为
Keypad processing(键盘处理)、Phone communication(电话通信)、Scheduler(调度器)等具体模块。
8. 架构考量因素 (Architectural Considerations)¶
在设计时需要权衡的非功能性属性:
- 经济性 (Economy): 依靠抽象减少不必要的细节,保持简洁。
- 可见性 (Visibility): 决策及其原因对后续的工程师应该是显而易见的。
- 分离 (Spacing): 关注点分离,同时避免引入隐藏依赖。
- 对称性 (Symmetry): 系统在属性上保持一致和平衡。
- 涌现性 (Emergence): 系统表现出自组织的行为和控制。
9. 架构决策与权衡 (Architectural Decisions & Tradeoffs)¶
- 决策文档化 (Decision Documentation): 需要记录决策与需求的链接、先决条件关系以及决策状态,确保可追溯性。
- 权衡分析 (Tradeoff Analysis):
- 收集场景 (Scenarios)。
- 引出需求和约束。
- 描述选定的架构风格/模式(模块视图、进程视图、数据流视图)。
- 评估质量属性(性能、安全性等)。
- 通过敏感性分析 (Sensitivity analysis) 批判性地评审候选架构。
10. 架构复杂度与描述语言 (Complexity & ADL)¶
- 复杂度 (Complexity): 通过考虑架构组件之间的**依赖关系 (Dependencies)** 来评估。
- 共享依赖 (Sharing dependencies): 消费者使用相同资源或生产者为相同消费者生产时的关系。
- 流依赖 (Flow dependencies): 生产者和消费者之间的关系。
- 约束依赖 (Constrained dependencies): 活动之间控制流的相对约束。
- 架构描述语言 (ADL): 提供描述软件架构的语法和语义,支持组件的分解 (Decomposition)、组合 (Composition) 和接口表示。
11. 架构评审 (Architecture Reviews)¶
- 目的: 评估架构满足质量要求的能力,并识别潜在风险。早期发现问题可以降低项目成本。
- 形式: 经验评审、原型评估、场景评审、检查单 (Checklists)。
- 基于模式的评审 (Pattern-Based Review): 通过走查用例,讨论架构图与需求的关系,验证模式对质量属性的影响。
- 敏捷与架构 (Agility and Architecture):
- 在敏捷开发中,使用用户故事 (User Stories) 来创建和演进架构模型(行走骨架 Walking Skeleton)。
- 每个 Sprint 产出工作产品,并通过评审代码来作为架构评审的一种形式。
💡 复习重点总结 (Key Takeaways for Exam)¶
- 架构描述 (AD): 理解 IEEE-Std-1471-2000 中关于架构描述的定义,特别是**视图 (Views)** 的概念。
- 架构风格 (Styles): 必须熟练掌握 数据为中心、数据流、分层 等常见风格的区别和适用场景。
- 架构模式 (Patterns): 区分 并发、持久性 和 分布 三种模式的应用目的。
- 复杂度 (Complexity): 理解三种依赖关系(共享、流、约束)对架构复杂度的影响。
- 敏捷架构 (Agile): 掌握 行走骨架 (Walking Skeleton) 的概念,即在敏捷开发中如何通过用户故事来逐步构建和验证架构。
这一章内容非常丰富且重要,涵盖了从理论到实践、从静态结构到动态评审的全方位知识。祝你复习顺利!
评论区
欢迎在评论区指出文档错误,为文档提供宝贵意见,或写下你的疑问