第1章 软件和软件工程 1
1.1 软件的本质 2
1.1.1 定义软件 3
1.1.2 软件应用领域 5
1.1.3 遗留软件 6
1.2 软件工程 7
1.3 软件过程 8
1.4 软件工程实践 10
1.4.1 实践的精髓 10
1.4.2 一般原则 11
1.5 软件神话 13
1.6 小结 14
习题与思考题 15
推荐读物与阅读信息 15
第一部分 软件过程第2章 过程模型 18
2.1 通用过程模型 19
2.1.1 定义框架活动 20
2.1.2 明确任务集 21
2.1.3 过程模式 21
2.2 惯用过程模型 23
2.2.1 瀑布模型 24
2.2.2 增量过程模型 25
2.2.3 演化过程模型 26
2.2.4 协同模型 30
2.2.5 演化模型的最终评述 31
2.3 专用过程模型 31
2.3.1 基于构件的开发 32
2.3.2 形式化方法模型 32
2.3.3 面向方面的软件开发 32
2.4 统一过程 34
2.4.1 简史 34
2.4.2 统一过程的阶段 34
2.5 过程技术 35
2.6 产品与过程 36
2.7 小结 37
习题与思考题 37
推荐读物与阅读信息 38
第3章 敏捷开发 39
3.1 什么是敏捷 40
3.2 敏捷及变更的成本费用 41
3.3 敏捷过程是什么 41
3.3.1 敏捷原则 42
3.3.2 敏捷开发的战略 42
3.3.3 人的因素 43
3.4 极限编程 44
3.4.1 极限编程的权值 44
3.4.2 极限编程过程 45
3.4.3 工业极限编程 47
3.4.4 关于XP的争论 48
3.5 其他敏捷过程模型 49
3.5.1 自适应软件开发 50
3.5.2 Scrum 51
3.5.3 动态系统开发方法 52
3.5.4 Crystal 53
3.5.5 特征驱动开发 53
3.5.6 精益软件开发 54
3.5.7 敏捷建模 54
3.5.8 敏捷统一过程 55
3.6 敏捷过程工具集 56
3.7 小结 57
习题与思考题 57
推荐读物与阅读信息 58
第二部分 建模 62
第4章 理解需求 62
4.1 需求工程 63
4.2 建立根基 67
4.2.1 确认利益相关者 67
4.2.2 识别多重观点 67
4.2.3 协同合作 67
4.2.4 首次提问 68
4.3 导出需求 68
4.3.1 协作收集需求 69
4.3.2 质量功能部署 71
4.3.3 用户场景 71
4.3.4 导出工作产品 72
4.4 开发用例 73
4.5 构建需求模型 76
4.5.1 需求模型的元素 77
4.5.2 分析模式 79
4.6 协商需求 79
4.7 确认需求 80
4.8 小结 81
习题与思考题 81
推荐读物与阅读信息 82
第5章 需求建模:场景、信息与类分析 84
5.1 需求分析 85
5.1.1 总体目标和原理 85
5.1.2 分析的经验原则 86
5.1.3 域分析 86
5.1.4 需求建模的方法 88
5.2 基于场景建模 89
5.2.1 新建初始用例 89
5.2.2 细化初始用例 91
5.2.3 编写正规的用例 92
5.3 补充用例的UML模型 94
5.3.1 开发活动图 94
5.3.2 泳道图 94
5.4 数据建模概念 95
5.4.1 数据对象 96
5.4.2 数据属性 96
5.4.3 关系 97
5.5 基于类的建模 98
5.5.1 识别分析类 98
5.5.2 描述属性 100
5.5.3 定义操作 101
5.5.4 类—职责—协作者建模 103
5.5.5 关联和依赖 107
5.5.6 分析包 108
5.6 小结 109
习题与思考题 109
推荐读物与阅读信息 110
第6章 需求建模:流程、行为和模式 111
6.1 需求建模策略 111
6.2 面向流程建模 112
6.2.1 创建数据流模型 112
6.2.2 创建控制流模型 114
6.2.3 控制规格说明 114
6.2.4 处理规格说明 116
6.3 生成行为模型 117
6.3.1 识别用例事件 118
6.3.2 状态表现 118
6.4 需求建模的模式 120
6.4.1 发现分析模式 121
6.4.2 需求模式举例:执行器—传感器 121
6.5 小结 124
习题与思考题 124
推荐读物与阅读信息 125
第7章 设计概念 126
7.1 软件工程中的设计 127
7.2 设计过程 129
7.2.1 软件质量指导原则和属性 129
7.2.2 软件设计的演化 130
7.3 设计概念 131
7.3.1 抽象 132
7.3.2 体系结构 132
7.3.3 模式 133
7.3.4 关注点分离 133
7.3.5 模块化 133
7.3.6 信息隐蔽 134
7.3.7 功能独立 134
7.3.8 求精 135
7.3.9 方面 135
7.3.10 重构 136
7.3.11 面向对象的设计概念 137
7.3.12 设计类 137
7.4 设计模型 139
7.4.1 数据设计元素 140
7.4.2 体系结构设计元素 140
7.4.3 接口设计元素 140
7.4.4 构件级设计元素 142
7.4.5 部署级设计元素 142
7.5 小结 143
习题与思考题 143
推荐读物与阅读信息 144
第8章 体系结构设计 145
8.1 软件体系结构 145
8.1.1 什么是体系结构 146
8.1.2 体系结构为什么重要 147
8.1.3 体系结构描述 147
8.1.4 体系结构决策 148
8.2 体系结构类型 148
8.3 体系结构风格 150
8.3.1 体系结构风格的简单分类 151
8.3.2 体系结构模式 153
8.3.3 组织和求精 154
8.4 体系结构设计 154
8.4.1 系统环境的表示 154
8.4.2 定义原型 155
8.4.3 将体系结构精化为构件 156
8.4.4 描述系统实例 157
8.5 评估可选的体系结构设计 158
8.5.1 体系结构权衡分析方法 158
8.5.2 体系结构复杂性 160
8.5.3 体系结构描述语言 160
8.6 使用数据流进行体系结构映射 161
8.6.1 变换映射 161
8.6.2 精化体系结构设计 166
8.7 小结 167
习题与思考题 167
推荐读物与阅读信息 167
第9章 构件级设计 169
9.1 什么是构件 170
9.1.1 面向对象的观点 170
9.1.2 传统观点 171
9.1.3 过程相关的观点 172
9.2 设计基于类的构件 173
9.2.1 基本设计原则 173
9.2.2 构件级设计指导方针 176
9.2.3 内聚性 176
9.2.4 耦合性 178
9.3 实施构件级设计 179
9.4 设计传统构件 183
9.4.1 图形化设计表示 183
9.4.2 表格式设计表示 184
9.4.3 程序设计语言 185
9.5 基于构件的开发 186
9.5.1 领域工程 187
9.5.2 构件合格性检验、适应性修改与组合 187
9.5.3 复用的分析与设计 189
9.5.4 构件分类与检索 189
9.6 小结 190
习题与思考题 191
推荐读物与阅读信息 191
第10章 用户界面设计 193
10.1 黄金规则 194
10.1.1 用户操纵控制 194
10.1.2 减轻用户记忆负担 195
10.1.3 保持界面一致 196
10.2 用户界面的分析与设计 197
10.2.1 用户界面分析和设计模型 197
10.2.2 过程 198
10.3 界面分析 199
10.3.1 用户分析 199
10.3.2 任务分析和建模 200
10.3.3 显示内容分析 204
10.3.4 工作环境分析 204
10.4 界面设计步骤 205
10.4.1 应用界面设计步骤 205
10.4.2 用户界面设计模式 207
10.4.3 设计问题 207
10.5 设计评估 209
10.6 小结 210
习题与思考题 211
推荐读物与阅读信息 211
第三部分 质量管理第11章 质量概念 214
11.1 什么是质量 215
11.2 软件质量 215
11.2.1 Garvin的质量维度 216
11.2.2 McCall的质量因素 217
11.2.3 ISO 9126质量因素 217
11.2.4 定向质量因素 218
11.2.5 过渡到量化观点 219
11.3 软件质量困境 219
11.3.1 “足够好”的软件 219
11.3.2 质量成本 220
11.3.3 风险 221
11.3.4 疏忽和责任 222
11.3.5 质量和安全 222
11.3.6 管理活动的影响 222
11.4 实现软件质量 223
11.4.1 软件工程方法 223
11.4.2 项目管理技术 223
11.4.3 质量控制 224
11.4.4 质量保证 224
11.5 小结 224
习题与思考题 224
推荐读物与阅读信息 225
第12章 评审技术 226
12.1 软件缺陷对成本的影响 227
12.2 缺陷放大和消除 227
12.3 评审度量及其应用 229
12.3.1 分析度量数据 229
12.3.2 评审的成本效益 230
12.4 评审:正式程度 231
12.5 非正式评审 231
12.6 正式技术评审 233
12.6.1 评审会议 233
12.6.2 评审报告和记录保存 234
12.6.3 评审指导原则 234
12.6.4 样本驱动评审 235
12.7 小结 236
习题与思考题 236
推荐读物与阅读信息 237
第13章 软件质量保证 238
13.1 背景问题 239
13.2 软件质量保证的要素 239
13.3 软件质量保证的任务、目标和度量 241
13.3.1 软件质量保证任务 241
13.3.2 目标、属性和度量 241
13.4 软件质量保证的形式化方法 242
13.5 统计软件质量保证 243
13.5.1 一个普通的例子 243
13.5.2 软件工程中的六西格玛 244
13.6 软件可靠性 244
13.6.1 可靠性和可用性的测量 245
13.6.2 软件安全 246
13.7 ISO 9000质量标准 246
13.8 SQA计划 247
13.9 产品度量框架 248
13.9.1 测度、度量和指标 249
13.9.2 产品度量的挑战 249
13.9.3 测量原则 250
13.9.4 面向目标的软件测量 250
13.9.5 有效软件度量的属性 251
13.10 基于功能的度量 251
13.11 小结 254
习题与思考题 254
推荐读物与阅读信息 255
第14章 软件测试策略 256
14.1 软件测试的策略性方法 257
14.1.1 验证与确认 257
14.1.2 软件测试的组织 258
14.1.3 软件测试策略——宏观 258
14.1.4 测试完成的标准 260
14.2 策略问题 260
14.3 传统软件的测试策略 261
14.3.1 单元测试 261
14.3.2 集成测试 263
14.4 面向对象软件的测试策略 267
14.4.1 面向对象环境中的单元测试 267
14.4.2 面向对象环境中的集成测试 268
14.5 确认测试 268
14.5.1 确认测试准则 268
14.5.2 配置评审 269
14.5.3 α测试与β测试 269
14.6 系统测试 270
14.6.1 恢复测试 270
14.6.2 安全测试 270
14.6.3 压力测试 271
14.6.4 性能测试 271
14.6.5 部署测试 271
14.7 调试技巧 272
14.7.1 调试过程 272
14.7.2 心理因素 273
14.7.3 调试策略 274
14.7.4 纠正错误 275
14.8 小结 275
习题与思考题 276
推荐读物与阅读信息 276
第15章 测试传统的应用系统 278
15.1 软件测试基础 279
15.2 测试的内部视角和外部视角 280
15.3 白盒测试 281
15.4 基本路径测试 281
15.4.1 流图表示 281
15.4.2 独立程序路径 282
15.4.3 导出测试用例 284
15.5 控制结构测试 285
15.5.1 条件测试 285
15.5.2 数据流测试 286
15.5.3 循环测试 286
15.6 黑盒测试 287
15.6.1 等价类划分 287
15.6.2 边界值分析 288
15.7 小结 289
习题与思考题 289
推荐读物与阅读信息 289
第16章 测试面向对象的应用系统 291
16.1 扩展测试的视野 291
16.2 测试OOA和OOD模型 292
16.2.1 OOA和OOD模型的正确性 292
16.2.2 面向对象模型的一致性 293
16.3 面向对象测试策略 294
16.3.1 面向对象环境中的单元测试 294
16.3.2 面向对象环境中的集成测试 295
16.3.3 面向对象环境中的确认测试 295
16.4 面向对象测试方法 295
16.4.1 面向对象概念的测试用例设计的含义 296
16.4.2 传统测试用例设计方法的可应用性 296
16.4.3 基于故障的测试 296
16.4.4 测试用例与类层次 297
16.4.5 基于场景的测试设计 297
16.4.6 表层结构和深层结构的测试 298
16.5 类级可应用的测试方法 299
16.5.1 面向对象类的随机测试 299
16.5.2 类级的划分测试 300
16.6 类间测试用例设计 300
16.6.1 多类测试 301
16.6.2 从行为模型导出的测试 301
16.7 小结 302
习题与思考题 303
推荐读物与阅读信息 303
第17章 软件配置管理 304
17.1 软件配置管理概述 305
17.1.1 SCM场景 305
17.1.2 配置管理系统元素 306
17.1.3 基线 306
17.1.4 软件配置项 307
17.2 SCM中心存储库 308
17.2.1 中心存储库的作用 308
17.2.2 一般特征和内容 308
17.2.3 SCM特征 309
17.3 SCM过程 310
17.3.1 软件配置中的对象标识 311
17.3.2 版本控制 311
17.3.3 变更控制 312
17.3.4 配置审核 315
17.3.5 状态报告 315
17.4 小结 316
习题与思考题 316
推荐读物与阅读信息 317
第四部分 软件项目管理第18章 项目管理概念 320
18.1 管理涉及的范围 321
18.1.1 人员 321
18.1.2 产品 321
18.1.3 过程 321
18.1.4 项目 322
18.2 人员 322
18.2.1 利益相关者 322
18.2.2 团队负责人 322
18.2.3 软件团队 323
18.2.4 敏捷团队 325
18.2.5 协调与沟通问题 326
18.3 产品 327
18.3.1 软件范围 327
18.3.2 问题分解 327
18.4 过程 328
18.4.1 合并产品和过程 328
18.4.2 过程分解 328
18.5 项目 329
18.6 W5HH原则 330
18.7 关键实践 331
18.8 小结 331
习题与思考题 332
推荐读物与阅读信息 332
第19章 过程度量和项目度量 334
19.1 过程领域和项目领域中的度量 335
19.1.1 过程度量和软件过程改进 335
19.1.2 项目度量 336
19.2 软件测量 337
19.2.1 面向规模的度量 338
19.2.2 面向功能的度量 339
19.2.3 调和代码行度量和功能点度量 339
19.2.4 面向对象的度量 341
19.2.5 面向用例的度量 342
19.3 软件质量度量 342
19.3.1 测量质量 343
19.3.2 缺陷排除效率 344
19.4 小结 345
习题与思考题 345
推荐读物与阅读信息 346
第20章 软件项目估算 347
20.1 对估算的观察 348
20.2 项目策划过程 349
20.3 软件范围和可行性 349
20.4 资源 350
20.4.1 人力资源 350
20.4.2 可复用软件资源 351
20.4.3 环境资源 351
20.5 软件项目估算 351
20.6 分解技术 352
20.6.1 软件规模估算 352
20.6.2 基于问题的估算 353
20.6.3 基于LOC估算的实例 354
20.6.4 基于FP估算的实例 356
20.6.5 基于过程的估算 356
20.6.6 基于过程估算的实例 357
20.6.7 基于用例的估算 358
20.6.8 基于用例的估算实例 359
20.6.9 协调不同的估算方法 359
20.7 经验估算模型 360
20.7.1 估算模型的结构 360
20.7.2 COCOMO Ⅱ模型 361
20.7.3 软件方程 362
20.8 面向对象项目的估算 363
20.9 小结 363
习题与思考题 364
推荐读物与阅读信息 365
第21章 项目进度安排 366
21.1 基本概念 367
21.2 项目进度的安排 368
21.2.1 基本原则 369
21.2.2 人员与工作量之间的关系 369
21.2.3 工作量分配 371
21.3 为软件项目定义任务集 371
21.3.1 任务集举例 372
21.3.2 软件工程活动求精 372
21.4 定义任务网络 373
21.5 进度安排 374
21.5.1 时序图 374
21.5.2 跟踪进度 376
21.5.3 跟踪OO项目的进展 377
21.6 挣值分析 378
21.7 小结 379
习题与思考题 379
推荐读物与阅读信息 380
第22章 风险管理 382
22.1 被动风险策略和主动风险策略 383
22.2 软件风险 383
22.3 风险识别 384
22.3.1 评估整体项目风险 385
22.3.2 风险因素和驱动因子 385
22.4 风险预测 386
22.4.1 建立风险表 387
22.4.2 评估风险影响 388
22.5 风险求精 390
22.6 风险缓解、监测和管理 390
22.7 RMMM计划 391
22.8 小结 393
习题与思考题 393
推荐读物与阅读信息 393