第1章 软件工程概述 1
1.1 软件 1
1.1.1 软件的定义 1
1.1.2 软件的特性 2
1.1.3 软件的发展 3
1.2 软件危机 4
1.3 软件工程 6
1.3.1 软件工程的概念 6
1.3.2 软件工程的三要素 6
1.3.3 软件质量的特性 7
1.3.4 软件工程方法 7
1.4 软件工程知识体系(SWEBOK) 8
1.4.1 SWEBOK项目介绍 8
1.4.2 SWEBOK的组成 9
1.4.3 软件工程与其他相关学科的关系 13
1.5 软件过程 13
1.5.1 软件过程的概念 14
1.5.2 软件过程模型 17
1.6 软件项目管理基础 24
1.7 小结 28
第2章 软件体系结构 29
2.1 软件体系结构的产生与发展 29
2.1.1 软件体系结构的定义 30
2.1.2 软件体系结构的发展史 31
2.1.3 软件体系结构的研究现状 31
2.1.4 软件体系结构的影响 33
2.1.5 软件体系结构的发展方向 33
2.2 软件体系结构建模 34
2.2.1 “4+1”视图模型 34
2.2.2 软件体系结构的核心模型 40
2.2.3 软件体系结构的生命周期模型 41
2.3 基于体系结构的描述 44
2.3.1 软件体系结构的描述方法 44
2.3.2 软件体系结构的描述框架标准 46
2.3.3 软件体系结构的描述语言 47
2.4 基于体系结构的软件设计 51
2.4.1 基于体系结构的设计模式 51
2.4.2 基于体系结构的设计方法 58
2.4.3 体系结构的设计与演化 68
2.5 小结 71
第3章 统一建模语言UML基础 73
3.1 UML概述 73
3.1.1 UML的发展历程 73
3.1.2 UML的内容 74
3.1.3 UML的特点 75
3.1.4 UML的应用领域 75
3.2 通用模型元素 76
3.2.1 模型元素 76
3.2.2 约束 77
3.2.3 依赖关系 77
3.2.4 细化 78
3.2.5 注释 78
3.3 用例模型 79
3.3.1 用例图 79
3.3.2 画用例图 80
3.3.3 用例图的示例 81
3.4 静态模型 82
3.4.1 类图 82
3.4.2 对象图 86
3.4.3 包图 87
3.5 动态模型 88
3.5.1 状态图 88
3.5.2 活动图 91
3.5.3 顺序图 94
3.5.4 协作图 96
3.6 实现模型 97
3.6.1 构件图 98
3.6.2 配置图 99
3.7 从UML 1.x到UML 2.0 100
3.7.1 UML 2.0提案需求 100
3.7.2 被采纳的UML 2.0提案 101
3.7.3 UML 2.0概况 101
3.7.4 进步与不足 105
3.8 小结 106
第4章 软件需求工程 107
4.1 软件需求概述 107
4.1.1 业务需求 108
4.1.2 用户需求 109
4.1.3 功能需求和非功能需求 110
4.1.4 系统需求 111
4.2 需求工程过程 111
4.2.1 需求获取 111
4.2.2 需求分析 112
4.2.3 需求规格说明 113
4.2.4 需求验证 116
4.2.5 需求管理 118
4.3 需求获取技术 120
4.3.1 面谈 120
4.3.2 需求专题讨论会 122
4.3.3 观察用户工作流程 123
4.3.4 原型化方法 123
4.3.5 基于用例的方法 124
4.4 可行性研究 124
4.4.1 意义 124
4.4.2 可行性研究的内容 125
4.4.3 可行性研究报告 127
4.5 需求建模 128
4.5.1 需求建模方法 128
4.5.2 实体—关系图 129
45.3 数据流图 131
4.5.4 状态转换图 136
4.5.5 数据字典 138
4.6 小结 139
第5章 软件设计工程 141
5.1 软件工程中的设计 141
5.2 设计过程和设计质量 143
5.3 设计概念 145
5.3.1 抽象 145
5.3.2 体系结构 145
5.3.3 模式 145
5.3.4 模块化 146
5.3.5 信息隐蔽 147
5.3.6 功能独立 147
5.3.7 求精 148
5.3.8 重构 148
5.3.9 设计类 148
5.4 设计模型 149
5.4.1 数据设计元素 150
5.4.2 体系结构设计元素 150
5.4.3 接口设计元素 150
5.4.4 构件级设计元素 152
5.4.5 部署级设计元素 152
5.5 基于模式的软件设计 153
5.5.1 描述设计模式 153
5.5.2 在设计中使用模式 154
5.5.3 框架 154
5.6 小结 154
第6章 软件总体设计 156
6.1 软件设计的重要性 156
6.2 设计过程 157
6.3 软件总体设计 158
6.4 设计基本原理 160
6.4.1 抽象 160
6.4.2 细化 161
6.4.3 模块化 161
6.4.4 软件体系结构 162
6.4.5 程序结构 163
6.4.6 数据结构 164
6.4.7 软件过程 165
6.5 体系结构设计 167
6.5.1 软件结构图 167
6.5.2 模块的大小 168
6.5.3 扇出和扇入与深度和宽度 169
6.5.4 模块的耦合 170
6.5.5 模块的内聚 171
6.5.6 结构设计的一般准则 174
6.5.7 模块的作用域与控制域 175
6.6 结构化设计 176
6.6.1 数据流的类型 176
6.6.2 过程步骤 177
6.6.3 变换分析设计 178
6.6.4 事务分析设计 180
6.6.5 混合流设计 181
6.6.6 结构化设计方法应用示例 182
6.6.7 设计的后期处理 183
6.7 软件结构优化 184
6.7.1 软件结构设计优化准则 184
6.7.2 软件结构的HIPO图 185
6.8 小结 186
第7章 结构化软件详细设计 187
7.1 细节设计的任务与方法 187
7.1.1 细节设计的基本任务 187
7.1.2 细节设计方法 188
7.2 设计表示法 189
7.2.1 结构化语言 189
7.2.2 判定表 190
7.2.3 判定树 191
7.3 结构化程序设计 191
7.3.1 程序流程图 191
7.3.2 三种基本控制结构 192
7.3.3 常用符号 194
7.4 结构化定理 195
7.4.1 程序函数 195
7.4.2 基本定理 196
7.4.3 过程设计语言 197
7.5 面向数据结构的设计 201
7.5.1 Jackson图 201
7.5.2 纲要逻辑 203
7.5.3 Jackson方法 203
7.5.4 JSP应用 204
7.5.5 JSD方法 207
7.6 小结 212
第8章 面向对象软件详细设计 213
8.1 面向对象简介 213
8.1.1 面向对象的概念 213
8.1.2 面向对象方法的历史及现状 215
8.2 面向对象的相关概念 215
8.2.1 对象 216
8.2.2 类 217
8.2.3 对象图 218
8.2.4 属性 218
8.2.5 服务(操作或方法) 219
8.2.6 封装 219
8.2.7 继承 220
8.2.8 多重继承 223
8.2.9 消息 225
8.2.10 结构与连接 226
8.2.11 多态性 228
8.2.12 永久对象 228
8.2.13 主动对象 229
8.2.14 对象类的表示方法 230
8.3 链接与关联 230
8.3.1 一般概念 230
8.3.2 重数 231
8.3.3 关联的重要性 231
8.3.4 三元关联 232
8.3.5 关联的候选关键字 232
8.3.6 异或关联 233
8.3.7 资格关联 233
8.3.8 链接属性 233
8.3.9 将关联模型化为类 233
8.3.10 角色名 234
8.3.11 排序 235
8.3.12 资格符 235
8.4 聚合 235
8.4.1 聚合与关联 236
8.4.2 聚合与概括 236
8.4.3 递归聚合 237
8.4.4 操作的传播 237
8.4.5 物理聚合与分类聚合 238
8.4.6 物理聚合的语义扩展 238
8.4.7 分类聚合的语义扩展 239
8.5 概括 239
8.5.1 一般概念 239
8.5.2 重写特征 239
8.5.3 抽象类和具体类 240
8.5.4 概括与其他对象建模结构 240
8.6 构造分组 241
8.6.1 模块 241
8.6.2 表 241
8.7 小结 241
第9章 面向对象分析 242
9.1 分析过程 242
9.1.1 概述 242
9.1.2 三个子模型与五个层次 243
9.2 需求陈述 244
9.2.1 书写要点 244
9.2.2 例子 245
9.3 建立对象模型 246
9.3.1 确定类与对象 246
9.3.2 确定关联 248
9.3.3 划分主题 251
9.3.4 确定属性 252
9.3.5 识别继承关系 253
9.3.6 反复修改 254
9.4 建立动态模型 256
9.4.1 编写脚本 256
9.4.2 设想用户界面 257
9.4.3 画事件跟踪图 258
9.4.4 画状态图 260
9.4.5 审查动态模型 262
9.5 建立功能模型 262
9.5.1 画出基本系统模型图 262
9.5.2 画出功能级数据流图 263
9.5.3 描述处理框功能 263
9.6 定义服务 264
9.6.1 常规行为 264
9.6.2 从事件导出的操作 264
9.6.3 与数据流图中处理框对应的操作 264
9.6.4 利用继承减少冗余操作 265
9.7 面向对象分析实例 265
9.7.1 需求陈述 265
9.7.2 建立对象模型 265
9.7.3 建立动态模型 267
9.7.4 建立功能模型 268
9.7.5 进一步完善 269
9.8 小结 270
第10章 面向对象设计 271
10.1 面向对象设计的准则 271
10.1.1 模块化 272
10.1.2 抽象 272
10.1.3 信息隐藏 272
10.1.4 弱耦合 272
10.1.5 强内聚 273
10.1.6 可重用 273
10.2 启发规则 273
10.2.1 设计结果应该清晰易懂 274
10.2.2 一般—特殊结构的深度应适当 274
10.2.3 设计简单的类 274
10.2.4 使用简单的协议 274
10.2.5 使用简单的服务 275
10.2.6 把设计变动减至最小 275
10.3 系统分解 275
10.3.1 子系统之间的两种交互方式 276
10.3.2 组织系统的两种方案 276
10.3.3 设计系统的拓扑结构 277
10.4 设计问题域子系统 277
10.4.1 调整需求 278
10.4.2 重用已有的类 278
10.4.3 把问题域类组合在一起 278
10.4.4 增添一般化类以建立协议 279
10.4.5 ATM系统之例 279
10.5 设计人机交互子系统 279
10.5.1 设计人机交互界面的准则 280
10.5.2 设计人机交互子系统的策略 280
10.6 设计任务管理子系统 281
10.6.1 分析并发性 282
10.6.2 设计任务管理子系统 282
10.7 设计数据管理子系统 283
10.7.1 选择数据存储管理模式 283
10.7.2 设计数据管理子系统 284
10.7.3 例子 286
10.8 设计类中的服务 286
10.8.1 确定类中应有的服务 286
10.8.2 设计实现服务的方法 287
10.9 设计关联 288
10.9.1 关联的遍历 288
10.9.2 实现单向关联 288
10.9.3 实现双向关联 289
10.9.4 关联对象的实现方法 289
10.10 设计优化 289
10.10.1 确定优先级 289
10.10.2 提高效率的几项技术 290
10.10.3 调整继承关系 291
10.11 面向对象分析与设计实例 293
10.11.1 面向对象分析 293
10.11.2 面向对象设计 295
10.12 小结 300
第11章 编码设计与规范 301
11.1 程序设计语言 301
11.1.1 程序设计语言的基本概念 301
11.1.2 程序设计语言的发展及种类 303
11.1.3 程序设计语言的基本成分 308
11.1.4 程序设计语言的要素 312
11.1.5 编程语言的选择 314
11.1.6 面向对象语言的优点 316
11.1.7 面向对象语言的技术特点 317
11.2 编码规范 319
11.2.1 源程序文档化 320
11.2.2 数据说明 325
11.2.3 语句结构 326
11.2.4 输入/输出 328
11.3 编码风格 329
11.3.1 提高可重用性 330
11.3.2 提高可扩充性 331
11.3.3 提高健壮性 332
11.4 程序效率 332
11.4.1 程序效率的原则 333
11.4.2 算法对效率的影响 333
11.4.3 存储器效率 335
11.4.4 输入/输出效率 335
11.5 编程安全 336
11.5.1 冗余程序设计 336
11.5.2 防错性程序设计 337
11.6 小结 338
第12章 软件测试 339
12.1 软件测试概述 339
12.1.1 软件测试的定义 339
12.1.2 软件测试的基本策略 340
12.1.3 软件测试的基本原则 342
12.1.4 软件测试与软件开发各阶段的关系 343
12.1.5 测试文档 344
12.2 软件测试过程 346
12.2.1 单元测试 346
12.2.2 集成测试 348
12.2.3 系统测试 352
12.2.4 验收测试 360
12.3 测试技术 365
12.3.1 软件测试的目标 365
12.3.2 黑盒测试和白盒测试 365
12.3.3 逻辑覆盖 367
12.3.4 关于控制结构测试的一些讨论 368
12.3.5 基本路径测试 370
12.3.6 等价类划分 373
12.3.7 边界值分析 374
12.3.8 因果图 374
12.3.9 错误推测法 375
12.4 测试用例设计 375
12.5 测试计划 376
12.6 面向对象软件测试 379
12.6.1 测试策略 379
12.6.2 设计测试用例 380
12.7 小结 383
参考文献 385