模型驱动的软件开发(MDSD)是当前受到开发人员和研究人员高度关注的开发范型。随着OMG的MDA和Microsoft的Software Factories的出现,MDSD方法已经越来越受到程序员的关注,并且成为一些国际协会(例如OOPSLA、JAOO和OOP)的重点讨论议题。
MDSD使用域特定语言创建模型,这种模型以有效的、域特定方式表达应用程序结构或行为。通过一系列模型转换过程,这些模型随后被转换为可执行的代码。
本书是一本面向软件架构师和开发人员的实践指南,包括了大量实践范例和丰富的案例研究。
第Ⅰ部分 导论
第1章 绪论
1.1 本书的主题
1.2 目标读者
1.2.1 软件体系结构
1.2.2 软件程序员
1.2.3 经理和项目主管
1.3 本书的目标
1.4 本书的范围
1.5 本书的结构及读者指南
1.6 关于作者
1.7 关于封面
1.8 致谢
第2章 MDSD的基本思想和术语
2.1 挑战
2.1.1 历史回顾
2.1.2 现状
2.2 MDSD目标
2.3 MDSD方法
2.4 基本术语
2.5 以体系结构为中心的MDSD
2.5.1 动机
2.5.2 生成软件体系结构
2.5.3 以体系结构为中心的设计
2.5.4 开发过程
2.5.5 以体系结构为中心的MDSD属性
第3章 一个典型的Web应用案例分析
3.1 应用程序开发
3.1.1 应用程序实例
3.1.2 MDSD工具
3.1.3 例1:模型的简单变化
3.1.4 例2:模型的变化和保护区
3.1.5 例3:使用动态模型
3.1.6 开发和体系结构之间的相互作用
3.1.7 中间结果
3.2 体系结构开发
3.2.1 LFM[,配置文件
3.2.2 变换
3.2.3 MDSD生成器的运行模式
3.2.4 引导程序
3.2.5 调整生成软件体系结构
3.2.6 基架代码的边界
3.2.7 结构化元程序
3.3 结论和展望
第4章 概念形成
4.1 MDSD通用概念和术语
4.1.1 建模
4.1.2 平台
4.1.3 变换
4.1.4 软件系统族
4.2 模型驱动体系结构
4.3 以体系结构为中心的MDSD
4.4 生成编程
4.5 软件工厂
4.5.1 软件工厂大纲
4.5.2 软件工厂模板
4.5.3 DSL的作用以及它与MDSD的关系
4.6 模型集成计算
4.7 面向语言编程
4.8 特定域建模
笫5章 分类
5.1 比较MDSD与CASE、4GL和向导
5.2 比较MDSD与双向工程
5.3 MDSD和模式
5.3.1 模式和变换
5.3.2 模式和配置文件
5.3.3 作为一种DSL源的模式语言
5.4 MDSD和域驱动设计
5.5 MDSD、数据驱动开发和解释程序
5.6 MDSD和敏捷软件开发
5.6.1 敏捷宣言和MDSD
5.6.2 敏捷技术
第Ⅱ部分 域体系结构
第6章 元建模
6.1 元模型的定义
6.2 比较元层和抽象层
6.3 MOF和UML
6.4 扩展UML
6.4.1 基于元模型扩展
6.4.2 用UML 1.x的类别模板扩展
6.4.3 用UML 2.0的配置文件扩展
6.5 UML配置文件
6.6 元建模和OCL
6.7 元建模:例1
6.8 元建模:例2
6.9 工具支持的模型验证
6.10 元建模和行为
6.11 一个更加复杂的例子
6.11.1 基础
6.11.2 值类型
6.11.3 物理量
6.12 元建模中的缺陷
6.12.1 接口
6.12.2 依赖性
6.12.3 ID
6.12.4 基本键
6.12.5 元层和Instanceof
第7章 可以使用MDSD的目标体系结构
7.1 在MDSD背景下的软件体系结构
7.2 什么是合理的体系结构
7.3 如何获得一个合理的体系结构
7.4 软件体系结构的基本构件
7.4.1 架构
7.4.2 中间件
7.4.3 组件
7.5 体系结构的参考模型
7.6 衡量MDSD平台
7.6.1 例子
7.6.2 架构集成
7.7 体系结构一致性
7.8 MDSD和CBD
7.8.1 3个方面
7.8.2 方面之间的依赖关系
7.8.3 侧重面模型
7.8.4 变型形式
7.8.5 组件实现
7.9 SOA、BPM和MDSD
7.9.1 SOA
7.9.2 BPM
7.9.3 SOA和BPM
第8章 构建域体系结构
8.1 DSL构造
8.1.1 选择一种合适的DSL
8.1.2 配置和构造——变型形式
8.1.3 建模行为
8.1.4 具体语法问题
8.1.5 元模型的连续式验证
8.2 一般变换的体系结构
8.2.1 应该生成目标体系结构的哪个部分
8.2.2 相信再生
8.2.3 开发模型
8.2.4 生成漂亮的代码——只要可能
8.2.5 模型驱动集成
8.2.6 分离生成的和非生成的代码
8.2.7 模块变换
8.2.8 层叠的模型驱动开发
8.3 建立变换的技术方面
8.3.1 生成的代码和手工实现部分的显式集成
8.3.2 虚拟代码
8.3.3 技术子域
8.3.4 代理元素
8.3.5 外部模型标记
8.3.6 方面定位和MDSD
8.3.7 描述性元对象
8.3.8 生成的反射层
8.4 解释程序的使用
8.4.1 解释程序
8.4.2 再次访问MDSD术语
8.4.3 解释程序的非功能性属性
8.4.4 在一个系统中集成解释程序
8.4.5 解释程序和测试
第9章 代码生成技术
9.1 代码生成——选择它的原因
9.1.1 性能
9.1.2 代码规模
9.1.3 可分析性
9.1.4 早期错误检测
9.1.5 平台兼容性
9.1.6 (编程)语言的限制
9.1.7 模块单元
9.1.8 自我测量
9.2 分类
9.2.1 元编程
9.2.2 程序和元程序的分离/混合
9.2.3 生成的和非生成的代码的隐式或显式集成
9.2.4 关系
9.2.5 程序和元程序混合的例子
9.3 生成技术
9.3.1 模板和滤波
9.3.2 模板和元模型
9.3.3 框架处理器
9.3.4 基于API的生成器
9.3.5 内联的生成
9.3.6 代码品质
9.3.7 代码交织
9.3.8 组合不同的技术
9.3.9 不同方法间的共同点和不同点
9.3.10 其他系统
第10章 使用QVT进行模型转换
10.1 历史
10.2 M2M语言需求
10.3 整体的体系结构
10.4 转换示例
10.4.1 QVT Relations语言中的示例
10.4.2 QVT Operational Mappings语言中的示例
10.5 OMG标准化过程和工具可用性
10.6 评估
第11章 MDSD工具:角色、体系结构、选择标准和指南
11.1 工具在开发过程中的角色
11.1.1 建模
11.1.2 模型验证和代码生成
11.1.3 构建工具
11.1.4 处方框架
11.1.5 IDE工具箱
11.2 工具体系结构和选择标准
11.2.1 实现元模型
11.2.2 忽略具体语法
11.2.3 模块化的转换
11.2.4 模型转换的重要性
11.3 指针
11.3.1 Eclipse的世界
11.3.2 UML工具的发展趋势
11.3.3 UML2复合结构图
11.3.4 其他类型的编辑器
11.3.5 集成的元建模IDE
第12章 MDA标准
12.1 目标
12.2 核心概念
12.2.1 UML2.0
12.2.2 MOF——元对象设施
12.2.3 XMI
12.2.4 PIM/PSM/PDM
12.2.5 多个阶段的转换
12.2.6 动作语言
12.2.7 核心模型
12.2.8 控制PIM到PSM的转换
12.2.9 可执行的UML
第部分 过程和工程
第13章 MDSD过程构件和最佳实践
13.1 简介
13.2 应用程序和域体系结构开发的分离
13.2.1 基本原理
13.2.2 域体系结构开发线程
13.2.3 应用程序开发线程
13.3 双轨的迭代开发
13.4 目标体系结构开发过程
13.4.1 3个阶段
13.4.2 阶段1:详细描述
13.4.3 阶段2:迭代
13.4.4 阶段3:自动化
13.5 产品线工程
13.5.1 软件系统家族和产品线
13.5.2 与MDSD过程的集成
13.5.3 方法学
13.5.4 域建模
13.5.5 更多的读物
第14章 测试
14.1 测试类型
14.2 模型驱动应用程序开发中的测试
14.2.1 单元测试
14.2.2 接受测试
14.2.3 加载测试
14.2.4 非功能性测试
14.2.5 模型确认
14.3 测试域体系结构
14.3.1 测试引用实现和MDSD平台
14.3.2 DSL的接受测试
14.3.3 MDSD转换的测试
第15章 版本化
15.1 版本化的概念
15.2 项目和相关性
15.3 应用程序项目的结构
15.4 混合文件的版本管理和构建过程
15.5 团队中的建模和部分模型的版本化
15.5.1 分区与子域
15.5.2 各种生成的软件体系结构
15.5.3 DSL的发展
15.5.4 分区和集成
第16章 案例研究:嵌入式的组件基础结构
16.1 概述
16.1.1 简介和动机
16.1.2 组件基础结构
16.1.3 嵌入式系统的组件基础结构
16.1.4 基本方法
16.2 生产线工程
16.2.1 域作用范围
16.2.2 可变性分析和域结构化
16.2.3 域设计
16.2.4 域实现
16.3 建模
16.3.1 接口的定义
16.3.2 组件和端口的定义
16.3.3 系统的定义
16.3.4 完整的模型
16.3.5 处理
16.4 组件的实现
16.5 生成器改进
16.5.1 解析文本语法
16.5.2 解析系统定义XML
16.5.3 解析和合并完整的模型
16.5.4 伪声明的元模型实现
16.6 代码生成
16.6.1 引用
16.6.2 多态性
16.6.3 元模型中涉及内容的分离
16.6.4 构建文件的生成
16.6.5 使用AspectJ
第17章 案例研究:企业系统
17.1 概述
17.2 阶段1:详细描述
17.2.1 技术无关的体系结构
17.2.2 编程模型
17.2.3 技术映射
17.2.4 模拟平台
17.2.5 垂直原型
17.3 阶段2:迭代
17.4 阶段3:自动化
17.4.1 体系结构元模型
17.4.2 粘接代码(glue code)生成
17.4.3 基于DSL的编程模型
17.4.4 基于模型的体系结构验证
17.5 讨论
第Ⅳ部分 管理
第18章 决策支持
18.1 业务潜力
18.2 自动化和重用
18.3 质量
18.3.1 良好定义的体系结构
18.3.2 保存的专家知识
18.3.3 严格的编程模型
18.3.4 更新的和可用的文档
18.3.5 生成代码的质量
18.3.6 测试工作和可能的错误来源
18.4 重用
18.5 可移植性、易变性
18.6 投资和可能的收益
18.6.1 体系结构中心的MDSn
18.6.2 功能/专业MDSD域
18.7 关键问题
18.8 结论
18.9 推荐读物
第19章 组织方面
19.1 角色的分配
19.1.1 域体系结构开发
19.1.2 应用程序开发
19.2 团队结构
19.2.1 角色和人员配备需求的定义
19.2.2 跨领域团队
19.2.3 体系结构组的任务
19.3 软件产品开发模型
19.3.1 术语
19.3.2 内部开发
19.3.3 经典的外部采购
19.3.4 离岸外包
19.3.5 激进的离岸外包
19.3.6 受控制的离岸外包
19.3.7 与组件有关的决策
第20章 MDSD的改进策略
20.1 预备知识
20.2 开始学习——MDSD试验
20.2.1 风险分析
20.2.2 项目初始化
20.3 已有系统的MDSD改进
20.4 软件库存的分类
20.5 构建、购买或开放源代码
20.6 供应链的设计
20.7 域体系结构的渐进发展
20.8 风险管理
20.8.1 风险:以工具为中心
20.8.2 风险:开发工具链对MDSD起反作用
20.8.3 风险:负担过重的域体系结构团队
20.8.4 风险:瀑布过程模型、以数据库为中心的开发
20.8.5 风险:脱离实际的个人
20.8.6 风险:没有分离应用程序和域体系结构
附录A 模型转换代码
A.1 完整的QVT alma2db关系数据库示例
A.2 完整的QVT操作映射alma2db示例