第1章 软件工程导论 1
1.1 软件和软件工程史 1
1.1.1 软件的产生 1
1.1.2 软件危机 3
1.1.3 传统软件工程 4
1.1.4 现代软件工程 4
1.1.5 软件工程与计算机科学 5
1.2 软件和软件工程 5
1.2.1 软件 5
1.2.2 软件危机的表现 6
1.2.3 软件工程 7
1.2.4 软件过程及通用过程框架 9
1.3 常见的软件过程模型 11
1.3.1 编码修正模型 11
1.3.2 线性顺序模型 12
1.3.3 V模型 13
1.3.4 增量模型 14
1.3.5 快速应用开发模型 15
1.3.6 演化模型 16
1.3.7 高级软件工程 21
1.4 传统软件过程规范 23
1.4.1 过程总述 23
1.4.2 需求分析阶段 23
1.4.3 高阶设计阶段 24
1.4.4 详细设计阶段 25
1.4.5 编码和单元测试阶段 25
1.4.6 集成计划与测试阶段 26
1.4.7 系统测试阶段 26
1.4.8 验收测试与安装阶段 27
1.4.9 维护阶段 27
1.5 Rational统一过程 28
1.5.1 RUP简介 28
1.5.2 RUP的二维开发模型 28
1.5.3 阶段和里程碑 30
1.5.4 RUP规程 33
1.5.5 RUP模型、工件及信息流 34
1.6 软件工程的发展动向 35
1.6.1 面向切面编程 35
1.6.2 敏捷软件开发 36
1.6.3 实验软件工程 37
1.6.4 模型驱动工程 38
1.6.5 软件生产线 38
1.7 习题 38
参考文献 39
第2章 面向对象和UML 40
2.1 面向对象 40
2.1.1 面向对象的历史 40
2.1.2 面向对象分析和设计基本概念 42
2.1.3 面向对象编程 43
【案例分析】类、对象 45
2.2 UML 45
2.2.1 UML的发展历史 45
2.2.2 RUP的发展历史 48
2.2.3 UML语义和UML表示法 48
2.3 习题 50
参考文献 50
第3章 业务建模 52
3.1 业务建模概述 52
3.1.1 业务建模的目的 52
3.1.2 业务的构架视图 53
3.1.3 业务建模工作流程 53
3.1.4 业务建模场景 56
3.1.5 业务建模关键任务 57
3.2 了解系统上下文 58
【案例分析】“数字软件学院”系统上下文 59
3.3 选定目标组织 60
3.3.1 确定目标组织的边界 60
3.3.2 确定业务涉众 61
【案例分析】数字软件学院的业务涉众 62
3.3.3 说明目标组织的结构 62
【案例分析】数字软件学院的目标组织结构 63
3.3.4 描绘业务愿景和业务目标 63
【案例分析】数字软件学院的业务愿景和业务目标 65
3.4 建立业务用例模型 66
3.4.1 识别业务执行者 66
【案例分析】数字软件学院业务系统的业务执行者 67
【案例分析】教务学分查询业务系统的业务执行者 68
3.4.2 识别业务用例 69
【案例分析】软件学院的业务用例模型 70
3.5 优化业务用例 73
3.5.1 精化业务用例 73
【案例分析】软件学院教学的业务用例精化 74
3.5.2 结构化业务用例 74
【案例分析】软件学院教学的业务用例包含关系 75
【案例分析】软件学院教学的业务用例扩展关系 76
【案例分析】软件学院教学的业务用例泛化 76
【案例分析】软件学院的业务执行者泛化 77
3.5.3 划分业务系统 77
【案例分析】软件学院的业务系统 79
3.5.4 详述业务用例 79
【案例分析】学分查询业务用例详细描述 81
3.6 建立业务分析模型 85
3.6.1 业务工作者 86
3.6.2 业务实体 86
3.6.3 业务用例实现 87
【案例分析】“学生学分查询”业务用例实现之一——活动图 87
【案例分析】“学生学分查询”业务用例实现之二——交互图 89
【案例分析】“学生学分查询”业务用例实现之三——类图 92
3.6.4 详细描述业务工作者和业务实体 92
【案例分析】“学生学分查询”业务用例——详细描述业务工作者和业务实体 93
3.7 创建领域模型 94
3.8 小结 95
3.9 习题 96
参考文献 98
第4章 需求 99
4.1 需求概述 99
4.1.1 功能性需求 100
4.1.2 非功能性需求 100
4.2 需求工作流程 102
4.2.1 分析问题 103
4.2.2 理解涉众需求 103
4.2.3 定义系统 104
4.2.4 管理系统范围 104
4.2.5 精化系统定义 105
4.2.6 管理变更需求 105
4.3 需求关键任务 105
4.3.1 引发涉众请求 106
4.3.2 开发愿景 106
4.3.3 查找执行者和用例 107
【案例分析】学院门户网站的执行者 108
【案例分析】教务学分查询系统的执行者 108
【案例分析】学院门户网站的用例 109
【案例分析】教务学分查询系统的用例 110
4.3.4 划分用例优先级 111
4.3.5 结构化用例模型 112
【案例分析】学院门户网站的用例包 114
【案例分析】教务学分查询系统的用例包 115
4.3.6 详细描述用例 116
【案例分析】学院门户网站中的两个用例描述 117
【案例分析】教务学分查询系统中学分查询的用例描述 120
4.3.7 制定补充规范 120
4.3.8 其他任务 123
4.4 详细描述软件需求 124
4.4.1 软件需求规约(不带用例) 125
4.4.2 软件需求规约(带用例) 128
4.4.3 用户界面原型 129
【案例分析】学分查询系统的界面原型 131
4.5 习题 132
参考文献 134
第5章 分析与设计 135
5.1 关于分析与设计的讨论 135
5.1.1 分析概述 136
5.1.2 设计概述 137
5.2 分析与设计工作流程 138
5.2.1 执行体系结构合成 139
5.2.2 定义候选体系结构 139
5.2.3 优化体系结构 139
5.2.4 分析行为 139
5.2.5 设计构件 140
5.2.6 设计数据库 140
5.2.7 服务识别 140
5.2.8 服务规范 140
5.3 分析建模 141
5.3.1 分析模型元素 141
5.3.2 静态模型 142
【案例分析】学院门户网站系统分析——静态模型 144
【案例分析】教务学分查询系统分析——静态模型 145
5.3.3 动态模型 145
【案例分析】教务学分查询用例分析——动态模型 147
【案例分析】学院门户网站中的修改用户角色用例分析——动态模型 148
5.4 设计建模 149
5.4.1 设计及设计模型元素 149
5.4.2 软件模式 150
5.5 体系结构设计 151
5.5.1 体系结构演变 152
5.5.2 体系结构设计原则 153
5.5.3 三层体系结构设计 154
5.5.4 MVC架构 158
5.5.5 J2EE的轻量级框架SSH 160
5.5.6 体系结构风格、框架与模式关系 162
5.5.7 RUP4+1体系结构视图 164
【案例分析】“数字软件学院”体系结构设计 165
【案例分析】教务学分查询系统体系结构 171
5.6 详细设计 171
5.6.1 详细设计概念 171
5.6.2 设计模式 172
5.6.3 类设计 181
【案例分析】教务学分查询系统——初始设计类 183
【案例分析】学院门户网站——持久类 185
【案例分析】教务学分查询系统——定义类操作 188
5.6.4 数据库设计 191
【案例分析】学院门户网站持久类到表的映射 192
5.6.5 界面设计 194
5.7 习题 197
参考文献 198
第6章 实现 200
6.1 实现工作流程 200
6.1.1 结构化实现模型介绍 201
6.1.2 计划集成 201
6.1.3 服务实现 202
6.1.4 实现构件 202
6.1.5 集成每个子系统 202
6.1.6 集成系统 202
6.2 实现关键任务 202
6.2.1 结构化实现模型步骤 202
6.2.2 实现设计元素 205
6.2.3 评审代码 207
6.2.4 分析运行时行为 208
6.2.5 开发人员测试 210
6.2.6 实现可测性元素 213
6.2.7 子系统集成 213
6.2.8 系统集成 214
6.2.9 记录服务实现决策 217
6.3 JSP代码实现案例 219
【案例分析】门户网站用户管理功能实现 219
【案例分析】教务学分查询功能实现 221
6.4 习题 223
参考文献 224
附录A 一体化案例介绍 225