第1章 导论 1
1.1 什么是软件体系结构 1
1.1.1 软件体系结构不是什么 3
1.1.2 软件体系结构属性 4
1.1.3 与体系结构有关的其他关键术语的定义 5
1.1.4 其他类型的体系结构 6
1.2 为什么要有体系结构 8
1.3 体系结构视点概要 9
1.4 其他软件体系结构方法 12
1.4.1 4+1视图 12
1.4.2 RM-ODP视点 13
1.4.3 Bass的体系结构的构造 14
1.4.4 Hofmeister的软件体系结构视图 14
1.5 推荐读物 15
第2章 软件体系架构师的角色 17
2.1 在开发组织中与其他关键角色的关系 20
2.2 架构师的技能和背景 23
2.3 引入体系结构经验 25
2.4 体系结构团队的构成 25
2.5 与软件架构师相关的陷阱和圈套 26
2.5.1 明确领导的定位 27
2.5.2 软件架构师汇报的组织结构 27
2.5.3 软件架构师和技术领导的地理位置 27
2.5.4 体系结构团队的规模和组成 28
2.5.5 软件体系结构生命周期 29
2.6 推荐读物 29
第3章 软件体系结构和开发过程 31
3.1 迭代开发的概要 31
3.1.1 开发过程中的全部阶段的概述 32
3.1.2 生命周期阶段 33
3.1.3 体系结构和灵活过程 35
3.1.4 早开始, 不断细化 37
3.2 需求管理 38
3.2.1 用例和需求工程 38
3.2.2 影响体系结构的补充需求 39
3.2.3 需求跟踪 40
3.3 技术路线(Roadmap)的管理 40
3.3.1 外部软件产品 40
3.3.2 软件技术管理的陷阱和圈套 42
3.3.3 组织技术路线 44
3.4 有效的技术会议 44
3.4.1 非正式技术会议 44
3.4.2 同事审查和检查 45
3.4.3 设计审查 45
3.4.4 设计通信会议 46
3.4.5 管理会议 46
3.4.6 供货商陈述会议 46
3.4.7 分散式的技术会议 47
3.5 软件体系结构过程活动中的陷阱和圈套 47
3.5.1 开发者和架构师之间缺乏及时沟通 47
3.5.2 分析瘫痪 48
3.5.3 复用设计 48
3.5.4 用例 48
3.5.5 计划表 48
3.6 计算机辅助软件工程(CASE)工具 49
3.7 推荐读物 50
第4章 实例系统概要 51
4.1 系统概要 52
4.2 系统接口概要 52
4.3 约束 54
4.4 主要的操作和软件的需求 55
第5章 UML快速浏览 57
5.1 UML图示概括 57
5.2 通用作图习俗 59
5.2.1 通用特征:构造型. 标记值. 多实例 59
5.2.2 视图标签 62
5.3 图示 62
5.3.1 构件实例图 62
5.3.2 类和子系统图 63
5.3.3 交互(顺序和协作)图 64
5.3.4 部署图 66
5.3.5 状态图 67
5.3.6 活动图 67
5.4 管理复杂度 68
5.4.1 关注建模的用例 69
5.4.2 关注建模的元素 69
5.4.3 细节层 70
5.4.4 模型数量的控制 70
5.4.5 使用附加的文本信息 71
5.5 推荐读物 72
第6章 系统环境和领域分析 73
6.1 概念图 73
6.2 环境视点 75
6.3 领域分析技术 78
6.3.1 正式的分析技术 79
6.3.2 找出领域实体的其他技术 82
6.3.3 分析的捷径 83
6.4 分析视点 84
6.4.1 交互分析视点 84
6.4.2 焦点分析视点 85
6.4.3 整体分析视点 87
6.4.4 候选子系统标识 88
6.5 推荐读物 90
第7章 构件设计和建模 93
7.1 概述 93
7.1.1 基于构件的开发 93
7.1.2 术语 94
7.1.3 通信和接口 96
7.1.4 发现构件 96
7.1.5 构件设计的质量 97
7.2 构件视点 97
7.2.1 构件通信 98
7.2.2 构件接口 99
7.2.3 基于消息的构件建模 102
7.2.4 组合接口和消息 104
7.2.5 接口和消息的比较 106
7.2.6 机制和性能注释 107
7.3 构件交互视点 109
7.3.1 构件和构件之间的交互 109
7.4 构件状态建模 111
7.5 高级可配置构件体系结构的建模 114
7.6 推荐读物 115
第8章 子系统的设计 117
8.1 术语 117
8.2 对子系统. 接口和分层进行建模 119
8.2.1 子系统接口依赖性视点 119
8.2.2 利用分层加强子系统依赖视图的功能 121
8.2.3 顶层依赖 123
8.2.4 分层子系统视点 123
8.3 子系统和层与实现的映射 128
8.3.1 子系统. 层和构造树 128
8.3.2 子系统和构件 130
8.4 推荐读物 131
第9章 事务和数据设计 133
9.1 逻辑数据体系结构 133
9.1.1 逻辑数据模型的稳定性 135
9.1.2 稳定的逻辑数据模型的影响 136
9.2 逻辑数据视点 137
9.2.1 逻辑数据视图实例 137
9.2.2 消息传递的逻辑数据视图 140
9.3 数据模型的设计——其他要考虑的因素 141
9.3.1 数据模型和层 142
9.3.2 数据模型和映射 142
9.3.3 将对象映射到关系数据库 143
9.4 事务设计 146
9.4.1 事务概念 146
9.4.2 事务动态性建模 147
9.4.3 事务和接口设计 150
9.5 推荐读物 151
第10章 进程和部署的设计 153
10.1 物理数据视点 153
10.1.1 其他存储属性的建模 155
10.1.2 详细的物理存储建模 157
10.2 进程视点 158
10.2.1 进程和构件 161
10.2.2 进程和构件管理 161
10.2.3 进程状态视点 164
10.3 部署视点 168
10.3.1 可伸缩节点的设计 171
10.3.2 备份/归档设计 171
10.4 推荐读物 174
第11章 体系结构技术 175
11.1 体系结构开发技术 175
11.1.1 共性和可变性的分析 176
11.1.2 可变性设计 177
11.1.3 生成程序设计技术 178
11.1.4 构造一个框架系统 178
11.1.5 原型构造 179
11.1.6 接口开发——契约式设计 180
11.1.7 体系结构描述语言 181
11.1.8 体系结构的评价 181
11.2 软件划分策略——关注划分 181
11.2.1 功能分解 182
11.2.2 分离配置数据 183
11.2.3 分离特有硬件(hardware-specific)构件 183
11.2.4 分离时间关键(time-critical)构件 183
11.2.5 从用户接口中分离领域实现模型 183
11.2.6 从实现技术中分离领域实现模型 184
11.2.7 从监控中分离主要功能 184
11.2.8 分离错误恢复处理 184
11.2.9 外部接口的适配性 185
11.3 软件可变性和依赖性管理 185
11.3.1 稳定性依赖原则(SDP) 186
11.3.2 无环依赖原则 187
11.3.3 接口分离原则 187
11.4 使用体系结构模式 188
11.5 集成策略 189
11.5.1 纯数据(Data-only) 集成 190
11.5.2 可执行集成 191
11.6 建立体系结构以支持开发 192
11.6.1 配置和变化的管理 192
11.6.2 构造管理 192
11.6.3 连续集成 193
11.6.4 预期的多语言开发 193
11.6.5 预期技巧性开发(改编技术) 194
11.7 推荐读物 195
第12章 视点的应用 197
12.1 自底向上的体系结构开发 197
12.2 自顶向下的体系结构开发 199
12.3 消息协议和接口开发 201
12.4 对现存系统的再开发 202
12.5 体系结构文档化 203
12.6 结论 204
12.6.1 成为一个软件架师 204
12.6.2 实践的现状 206
12.6.3 未来前景 207
12.6.4 最后的思考 209
12.7 推荐读物 209
附录A 体系结构视点总结 211
参考文献 217
索引 225