第Ⅰ部分 导论 3
第1章 绪论 3
1.1本书的主题 3
1.2目标读者 4
1.2.1软件体系结构 5
1.2.2软件程序员 5
1.2.3经理和项目主管 5
1.3本书的目标 5
1.4本书的范围 6
1.5本书的结构及读者指南 6
1.6关于作者 7
1.7关于封面 8
1.8致谢 8
第2章 MDSD的基本思想和术语 11
2.1挑战 11
2.1.1历史回顾 12
2.1.2现状 12
2.2 MDSD目标 13
2.3 MDSD方法 14
2.4基本术语 15
2.5以体系结构为中心的MDSD 20
2.5.1动机 21
2.5.2生成软件体系结构 21
2.5.3以体系结构为中心的设计 23
2.5.4开发过程 25
2.5.5以体系结构为中心的MDSD属性 26
第3章 一个典型的Web应用案例分析 29
3.1应用程序开发 29
3.1.1应用程序实例 30
3.1.2 MDSD工具 32
3.1.3例1:模型的简单变化 32
3.1.4例2:模型的变化和保护区 35
3.1.5例3:使用动态模型 37
3.1.6开发和体系结构之间的相互作用 39
3.1.7中间结果 39
3.2体系结构开发 39
3.2.1 UML配置文件 40
3.2.2变换 41
3.2.3 MDSD生成器的运行模式 46
3.2.4引导程序 47
3.2.5调整生成软件体系结构 47
3.2.6基架代码的边界 51
3.2.7结构化元程序 52
3.3结论和展望 52
第4章 概念形成 53
4.1 MDSD通用概念和术语 53
4.1.1建模 53
4.1.2平台 57
4.1.3变换 58
4.1.4软件系统族 59
4.2模型驱动体系结构 60
4.3以体系结构为中心的MDSD 61
4.4生成编程 62
4.5软件工厂 64
4.5.1软件工厂大纲 64
4.5.2软件工厂模板 65
4.5.3 DSL的作用以及它与MDSD的关系 65
4.6模型集成计算 66
4.7面向语言编程 66
4.8特定域建模 67
第5章 分类 69
5.1比较MDSD与CASE、4GL和向导 69
5.2比较MDSD与双向工程 70
5.3 MDSD和模式 71
5.3.1模式和变换 71
5.3.2模式和配置文件 72
5.3.3作为一种DSL源的模式语言 72
5.4 MDSD和域驱动设计 72
5.5 MDSD、数据驱动开发和解释程序 73
5.6 MDSD和敏捷软件开发 73
5.6.1敏捷宣言和MDSD 74
5.6.2敏捷技术 75
第Ⅱ部分 域体系结构 79
第6章 元建模 79
6.1元模型的定义 79
6.2比较元层和抽象层 82
6.3 MOF和UML 82
6.4扩展UML 83
6.4.1基于元模型扩展 83
6.4.2用UML 1.x的类别模板扩展 85
6.4.3用UML 2.0的配置文件扩展 86
6.5 UML配置文件 86
6.6元建模和OCL 89
6.7元建模:例1 90
6.8元建模:例2 92
6.9工具支持的模型验证 94
6.10元建模和行为 98
6.11一个更加复杂的例子 100
6.11.1基础 100
6.11.2值类型 101
6.11.3物理量 103
6.12元建模中的缺陷 105
6.12.1接口 105
6.12.2依赖性 106
6.12.3 ID 106
6.12.4基本键 107
6.12.5元层和Instanceof 108
第7章 可以使用MDSD的目标体系结构 111
7.1在MDSD背景下的软件体系结构 111
7.2什么是合理的体系结构 112
7.3如何获得一个合理的体系结构 113
7.4软件体系结构的基本构件 114
7.4.1架构 114
7.4.2中间件 115
7.4.3组件 115
7.5体系结构的参考模型 116
7.6衡量MDSD平台 117
7.6.1例子 118
7.6.2架构集成 119
7.7体系结构一致性 119
7.8 MDSD和CBD 121
7.8.1 3个方面 121
7.8.2方面之间的依赖关系 124
7.8.3侧重面模型 124
7.8.4变型形式 125
7.8.5组件实现 127
7.9 SOA、BPM和MDSD 128
7.9.1 SOA 128
7.9.2 BPM 130
7.9.3 SOA和BPM 131
第8章 构建域体系结构 133
8.1 DSL构造 133
8.1.1选择一种合适的DSL 133
8.1.2配置和构造——变型形式 134
8.1.3建模行为 137
8.1.4具体语法问题 138
8.1.5元模型的连续式验证 138
8.2一般变换的体系结构 139
8.2.1应该生成目标体系结构的哪个部分 139
8.2.2相信再生 139
8.2.3开发模型 140
8.2.4生成漂亮的代码——只要可能 141
8.2.5模型驱动集成 142
8.2.6分离生成的和非生成的代码 142
8.2.7模块变换 143
8.2.8层叠的模型驱动开发 146
8.3建立变换的技术方面 148
8.3.1生成的代码和手工实现部分的显式集成 148
8.3.2虚拟代码 152
8.3.3技术子域 154
8.3.4代理元素 155
8.3.5外部模型标记 156
8.3.6方面定位和MDSD 156
8.3.7描述性元对象 157
8.3.8生成的反射层 159
8.4解释程序的使用 160
8.4.1解释程序 161
8.4.2再次访问MDSD术语 162
8.4.3解释程序的非功能性属性 163
8.4.4在一个系统中集成解释程序 164
8.4.5解释程序和测试 165
第9章 代码生成技术 167
9.1代码生成——选择它的原因 167
9.1.1性能 167
9.1.2代码规模 167
9.1.3可分析性 168
9.1.4早期错误检测 168
9.1.5平台兼容性 168
9.1.6(编程)语言的限制 168
9.1.7模块单元 168
9.1.8自我测量 168
9.2分类 168
9.2.1元编程 169
9.2.2程序和元程序的分离/混合 169
9.2.3生成的和非生成的代码的隐式或显式集成 170
9.2.4关系 170
9.2.5程序和元程序混合的例子 170
9.3生成技术 171
9.3.1模板和滤波 172
9.3.2模板和元模型 174
9.3.3框架处理器 174
9.3.4基于API的生成器 176
9.3.5内联的生成 179
9.3.6代码品质 180
9.3.7代码交织 181
9.3.8组合不同的技术 183
9.3.9不同方法间的共同点和不同点 183
9.3.10其他系统 185
第10章 使用QVT进行模型转换 187
10.1历史 187
10.2 M2M语言需求 188
10.3整体的体系结构 190
10.4转换示例 192
10.4.1 QVT Relations语言中的示例 195
10.4.2 QVT Operational Mappings语言中的示例 199
10.5 OMG标准化过程和工具可用性 202
10.6评估 203
第11章 MDSD工具:角色、体系结构、选择标准和指南 205
11.1工具在开发过程中的角色 205
11.1.1建模 206
11.1.2模型验证和代码生成 206
11.1.3构建工具 207
11.1.4处方框架 208
11.1.5 IDE工具箱 208
11.2工具体系结构和选择标准 209
11.2.1实现元模型 209
11.2.2忽略具体语法 209
11.2.3模块化的转换 211
11.2.4模型转换的重要性 211
11.3指针 211
11.3.1 Eclipse的世界 211
11.3.2 UML工具的发展趋势 214
11.3.3 UML2复合结构图 214
11.3.4其他类型的编辑器 216
11.3.5集成的元建模IDE 216
第12章 MDA标准 221
12.1目标 221
12.2核心概念 222
12.2.1 UML2.0 222
12.2.2 MOF——元对象设施 223
12.2.3 XMI 224
12.2.4 PIM/PSM/PDM 224
12.2.5多个阶段的转换 225
12.2.6 动作语言 226
12.2.7核心模型 228
12.2.8 控制PIM到PSM的转换 229
12.2.9可执行的UML 231
第Ⅲ部分 过程和工程 235
第13章 MDSD过程构件和最佳实践 235
13.1简介 235
13.2应用程序和域体系结构开发的分离 236
13.2.1基本原理 236
13.2.2域体系结构开发线程 237
13.2.3应用程序开发线程 242
13.3双轨的迭代开发 243
13.4目标体系结构开发过程 244
13.4.1 3个阶段 245
13.4.2阶段1:详细描述 246
13.4.3阶段2:迭代 249
13.4.4阶段3:自动化 249
13.5产品线工程 251
13.5.1软件系统家族和产品线 251
13.5.2与MDSD过程的集成 251
13.5.3方法学 252
13.5.4域建模 255
13.5.5更多的读物 255
第14章 测试 257
14.1测试类型 257
14.2模型驱动应用程序开发中的测试 258
14.2.1单元测试 259
14.2.2接受测试 264
14.2.3加载测试 265
14.2.4非功能性测试 266
14.2.5模型确认 266
14.3测试域体系结构 267
14.3.1测试引用实现和MDSD平台 267
14.3.2 DSL的接受测试 267
14.3.3 MDSD转换的测试 268
第15章 版本化 271
15.1版本化的概念 271
15.2项目和相关性 272
15.3应用程序项目的结构 272
15.4混合文件的版本管理和构建过程 273
15.5团队中的建模和部分模型的版本化 275
15.5.1分区与子域 275
15.5.2各种生成的软件体系结构 276
15.5.3 DSL的发展 276
15.5.4分区和集成 277
第16章 案例研究:嵌入式的组件基础结构 281
16.1概述 281
16.1.1简介和动机 282
16.1.2组件基础结构 282
16.1.3嵌入式系统的组件基础结构 282
16.1.4基本方法 283
16.2生产线工程 283
16.2.1域作用范围 283
16.2.2可变性分析和域结构化 284
16.2.3域设计 287
16.2.4域实现 289
16.3建模 289
16.3.1接口的定义 289
16.3.2组件和端口的定义 290
16.3.3系统的定义 291
16.3.4完整的模型 294
16.3.5处理 294
16.4组件的实现 295
16.5生成器改进 297
16.5.1解析文本语法 297
16.5.2解析系统定义XML 299
16.5.3解析和合并完整的模型 300
16.5.4伪声明的元模型实现 302
16.6代码生成 304
16.6.1引用 304
16.6.2多态性 307
16.6.3元模型中涉及内容的分离 309
16.6.4构建文件的生成 311
16.6.5使用AspectJ 312
第17章 案例研究:企业系统 315
17.1概述 315
17.2阶段1:详细描述 315
17.2.1技术无关的体系结构 315
17.2.2编程模型 316
17.2.3技术映射 317
17.2.4模拟平台 318
17.2.5垂直原型 318
17.3阶段2:迭代 318
17.4阶段3:自动化 319
17.4.1体系结构元模型 319
17.4.2粘接代码(glue code)生成 320
17.4.3基于DSL的编程模型 320
17.4.4基于模型的体系结构验证 327
17.5讨论 328
第Ⅳ部分 管理 331
第18章 决策支持 331
18.1业务潜力 331
18.2自动化和重用 332
18.3质量 336
18.3.1良好定义的体系结构 336
18.3.2保存的专家知识 336
18.3.3严格的编程模型 336
18.3.4更新的和可用的文档 337
18.3.5生成代码的质量 337
18.3.6测试工作和可能的错误来源 337
18.4重用 338
18.5可移植性、易变性 339
18.6投资和可能的收益 339
18.6.1体系结构中心的MDSD 339
18.6.2功能/专业MDSD域 343
18.7关键问题 344
18.8结论 347
18.9推荐读物 347
第19章 组织方面 349
19.1角色的分配 349
19.1.1域体系结构开发 349
19.1.2应用程序开发 352
19.2团队结构 352
19.2.1角色和人员配备需求的定义 353
19.2.2跨领域团队 354
19.2.3体系结构组的任务 354
19.3软件产品开发模型 356
19.3.1术语 356
19.3.2内部开发 356
19.3.3经典的外部采购 357
19.3.4离岸外包 357
19.3.5激进的离岸外包 358
19.3.6受控制的离岸外包 359
19.3.7与组件有关的决策 359
第20章 MDSD的改进策略 361
20.1预备知识 361
20.2开始学习——MDSD试验 361
20.2.1风险分析 362
20.2.2项目初始化 362
20.3已有系统的MDSD改进 363
20.4软件库存的分类 364
20.5构建、购买或开放源代码 366
20.6供应链的设计 366
20.7域体系结构的渐进发展 368
20.8风险管理 368
20.8.1风险:以工具为中心 368
20.8.2风险:开发工具链对MDSD起反作用 368
20.8.3风险:负担过重的域体系结构团队 369
20.8.4风险:瀑布过程模型、以数据库为中心的开发 369
20.8.5风险:脱离实际的个人 369
20.8.6 风险:没有分离应用程序和域体系结构 370
附录A 模型转换代码 371
A.1完整的QVT alma2db关系数据库示例 371
A.2完整的QVT操作映射alma2db示例 377