第1章 软件工程概述 1
1.1 软件及其特点 1
1.2 军用软件的作用和特点 3
1.3 软件工程的定义及内涵 4
1.4 软件开发范型要素 5
1.4.1 项目的概念化 5
1.4.2 项目表示 6
1.4.3 项目实现 7
1.5 软件工程技术简史 7
1.5.1 结构化编程 7
1.5.2 功能分解 8
1.5.3 结构化分析与设计 9
1.5.4 以数据为中心的范型 10
1.5.5 面向对象范型 10
1.5.6 面Agent范型 12
1.5.7 面向构件的范型 14
1.5.8 面向服务的软件范型 16
1.6 软件灾难故事 18
1.6.1 失效案例简介 18
1.6.2 失效原因 18
1.6.3 CONFIRM 19
1.6.4 电话和通信 20
1.6.5 阿丽亚娜5型火箭 21
1.6.6 不按工程生产软件的代价 22
1.7 为什么软件工程不是万能的 22
1.8 基于项目学习软件工程 23
1.8.1 项目的作用 23
1.8.2 分小组工作 23
1.8.3 创建项目小组 24
1.9 班组项目:功能需求 25
1.9.1 MCGame项目概况 25
1.9.2 MCGame需求规约 25
1.10 学期大作业 27
1.10.1 项目名称 27
1.10.2 项目时间框架 30
习题 30
第2章 面向对象范型概述 33
2.1 熟悉班组项目 33
2.1.1 创建非正式场景指南 33
2.1.2 非正式场景示例:用户一个时间片内的鼠标点击 34
2.2 面向对象概念化 34
2.2.1 特殊应用关系 35
2.2.2 继承 35
2.2.3 聚合/组合 36
2.2.4 其他关系 36
2.3 软件开发过程模型 36
2.3.1 瀑布模型 37
2.3.2 原型开发 38
2.3.3 增量模型 38
2.3.4 螺旋模型 39
2.3.5 敏捷软件开发过程模型 41
2.4 面向对象建模 43
2.4.1 建立模型的作用 43
2.4.2 创建优质模块 43
2.4.3 建模符号 44
2.4.4 软件工程中模型的使用 45
2.5 良好面向对象系统的属性 46
2.6 分组工作 46
2.6.1 主程序员组 47
2.6.2 召开有效的小组会议 47
习题 48
第3章 面向对象分析 50
3.1 需求分析介绍 50
3.2 需求规约 51
3.3 案例研究:工资支付系统规约 53
3.4 评价需求规约 53
3.5 细化需求规约 54
3.6 验证需求规约 58
3.7 通过开发扩展需求 59
3.8 需求分析过程 59
3.8.1 识别UCCD的类 60
3.8.2 案例分析:识别工资支付系统中的类 61
3.8.3 识别用例 62
3.8.4 案例分析:识别工资支付系统中的用例 63
3.8.5 场景开发 64
3.8.6 实例分析:工资支付系统中的样本场景 64
3.8.7 用UML对系统建模 65
3.8.8 类图 65
3.8.9 案例分析:工资支付系统的类图 66
3.8.10 用例图 69
3.8.11 案例分析:工资支付系统中的用例图 69
3.8.12 需求分析小结 70
3.9 分析班组项目 71
3.10 分组工作 72
3.11 案例:MCGame需求分析 72
3.11.1 名词列表 72
3.11.2 名词表的分析 73
3.11.3 主类列表 74
3.11.4 用例开发 74
3.11.5 场景 76
3.11.6 细化后的类列表 78
3.11.7 建模 78
习题 79
第4章 体系结构设计 81
4.1 软件体系结构 81
4.2 数据设计 82
4.2.1 体系结构级的数据设计 82
4.2.2 构件级的数据设计 83
4.2.3 对象持久化 83
4.2.4 案例分析:工资支付系统中的对象持久化 85
4.3 体系结构风格和模式 86
4.3.1 体系结构风格的简单分类 87
4.3.2 体系结构模式 89
4.4 体系结构设计 90
4.4.1 系统的环境表示 90
4.4.2 定义原始模型 91
4.4.3 将体系结构精化为构件 92
4.4.4 描述系统实例 92
4.4.5 评估可选的体系结构设计 93
4.5 进程体系结构 94
4.5.1 多节点建模 94
4.5.2 进程间通信建模 95
4.5.3 状态机 95
4.5.4 多重控制线程建模 97
4.5.5 网络资源的有效利用 97
4.5.6 案例分析:MCGame进程体系结构 97
4.6 小结 99
习题 99
第5章 用户界面设计 100
5.1 用户界面 100
5.2 用户界面分析 100
5.3 用户界面设计原则 103
5.3.1 了解用户 103
5.3.2 界面设计规则 104
5.3.3 交互样式 105
5.4 界面设计步骤 110
5.4.1 定义界面对象和动作 110
5.4.2 用户界面设计模式 110
5.4.3 设计问题 111
5.5 案例分析:工资支付系统的用户界面 113
5.6 分组工作 115
5.7 班组项目用户界面设计 116
5.8 小结 117
习题 117
第6章 类设计 119
6.1 类设计过程 119
6.1.1 类构架 120
6.1.2 案例研究:工资支付系统的类构架 120
6.1.3 系统细化 121
6.2 进一步介绍UML 122
6.2.1 类图的符号修饰 122
6.2.2 交互图 123
6.2.3 案例分析:工资支付系统交互图 123
6.2.4 协作图的创建 125
6.2.5 案例分析:工资支付系统中更多的交互图 125
6.2.6 评估设计 126
6.2.7 案例分析:工资支付系统的评估设计 126
6.2.8 对象图 127
6.2.9 案例分析:工资支付系统的对象图 127
6.2.10 对象图的创建 127
6.3 类设计阶段的目标 128
6.3.1 代码重用 128
6.3.2 案例分析:工资支付系统中的代码重用 128
6.3.3 设计良好的类与方法 129
6.3.4 数据完整性 129
6.4 类设计的验证 129
6.5 设计班组项目 130
6.6 案例分析:MCGame类设计 131
6.6.1 交互图 131
6.6.2 对象图 132
6.6.3 重用 133
6.6.4 类构架 134
6.7 案例分析:MCGame方法设计 137
6.7.1 确定方法 137
6.7.2 MCGame方法设计 138
6.7.3 创建优质方法 139
习题 140
第7章 实现 143
7.1 实现途径 143
7.1.1 “大突击”实现 144
7.1.2 自顶向下与自底向上实现 144
7.1.3 自顶向下与自底向上方法结合 146
7.1.4 实现的线程方法 147
7.2 实现计划 147
7.3 实例研究:工资支付系统的实现计划 148
7.4 编程风格 151
7.4.1 越短越简单 152
7.4.2 越简单的代码判断越少 152
7.4.3 应避免过量的嵌套逻辑 153
7.5 注释和内部文档 154
7.5.1 头注释块 154
7.5.2 行注释 155
7.6 项目编码标准 156
7.7 实现班组项目 158
习题 158
第8章 测试 160
8.1 什么是测试 160
8.2 面向对象测试原理 160
8.3 定义 161
8.3.1 错误、缺陷、故障和失效 161
8.3.2 测试计划 162
8.3.3 测试喻示 163
8.3.4 测试用例 163
8.3.5 白盒测试 164
8.3.6 黑盒测试 164
8.3.7 单元测试 165
8.3.8 集成测试 166
8.3.9 确认测试 167
8.3.10 系统测试 168
8.4 测试步骤 169
8.5 测试面向对象系统的特殊论题 170
8.6 案例研究:测试工资支付系统 172
8.6.1 测试计划 172
8.6.2 单元测试阶段 173
8.6.3 系统地提出测试用例 174
8.7 测试班组项目 174
8.8 面向变化的测试:配置管理 175
8.9 小结 177
习题 177
第9章 Web应用的分析、设计和测试 179
9.1 Web工程概述 179
9.1.1 基于Web的系统及应用的特点 179
9.1.2 WebApp工程的层次 180
9.1.3 Web工程过程 181
9.1.4 Web工程工作量的度量 182
9.2 WebApp分析 182
9.2.1 WebApp的需求分析 183
9.2.2 WebApp的分析模型 184
9.2.3 关系导航分析 186
9.3 WebApp设计 187
9.3.1 Web工程的设计问题 187
9.3.2 Web工程设计 189
9.3.3 面向对象的超媒体设计方法 196
9.4 WebApp测试 197
9.4.1 概述 197
9.4.2 内容测试 200
9.4.3 用户界面测试 200
9.4.4 构件级测试 202
9.4.5 导航测试 203
9.4.6 配置测试 204
9.4.7 安全性测试 205
9.4.8 性能测试 206
9.5 小结 207
习题 207
第10章 项目管理 209
10.1 引论 209
10.2 项目经理职责 210
10.2.1 软件度量 210
10.2.2 案例研究:项目估计 214
10.2.3 质量控制度量 215
10.3 配置管理 216
10.3.1 版本控制 216
10.3.2 变更控制 217
10.3.3 配置审核 217
10.3.4 配置状态报告 218
10.4 项目计划和监督 218
10.4.1 项目演化 219
10.4.2 案例分析:MCGame演化 219
10.4.3 项目计划 220
10.4.4 案例研究:MCGame项目计划 221
10.4.5 任务调度 222
10.4.6 监督进度 223
10.5 项目组 224
10.5.1 组建项目组 224
10.5.2 团队建设的四个阶段 225
10.5.3 冲突 226
10.5.4 解决冲突 227
10.6 风险管理 227
10.6.1 技术风险起源 228
10.6.2 人员风险起源 230
10.6.3 降低风险 231
10.6.4 案例研究:工资支付系统风险分析 232
10.7 软件过程 233
10.7.1 过程框架 233
10.7.2 CMM和CMMI 236
10.8 小结 243
习题 243
第11章 软件产品评价与软件维护 245
11.1 软件质量概述 245
11.1.1 软件质量和质量特性 245
11.1.2 质量的分层定义 245
11.1.3 使用质量的质量模型 246
11.1.4 软件质量管理和软件产品评价 247
11.1.5 评价级别 247
11.2 软件产品的一般评价过程 248
11.2.1 确立评价需求 249
11.2.2 规定评价 249
11.2.3 设计和执行评价 250
11.3 评价过程 252
11.3.1 评价内容 252
11.3.2 评价过程的实施 253
11.3.3 评价报表示例 255
11.4 软件维护的基本概念 256
11.4.1 软件维护的定义 256
11.4.2 软件维护的分类 256
11.5 软件维护的特点及过程 257
11.5.1 影响软件维护的因素 257
11.5.2 软件维护的标准化 258
11.5.3 软件维护的特点 258
11.5.4 软件维护过程 259
11.5.5 软件维护策略 261
11.6 软件再工程 262
11.6.1 遗留系统 262
11.6.2 软件再工程过程模型 263
11.6.3 逆向工程 264
11.6.4 重构 264
11.6.5 正向工程 265
11.7 小结 265
习题 266
第12章 完成并展示班组项目12.1 成功完成班组项目 268
12.2 对项目的思考 269
12.3 展示项目 270
12.3.1 非技术类用户的类型 270
12.3.2 非技术展示要点 270
12.3.3 技术展示要点 271
12.3.4 项目展示 271
后记 272
参考文献 274