第1部分 软件工程基础 3
第1章 软件工程概论 3
1.1 软件 3
1.1.1 软件的定义 3
目录 3
1.1.2 软件的特征 4
1.1.3 软件的应用 4
1.2 软件工程 5
1.2.1 软件的发展历史 5
1.2.2 软件过程的概念 7
1.2.3 软件工程的概念 8
1.2.4 软件工程的要素 8
1.3 软件工程的活动 9
1.2.5 软件工程的目标 9
1.3.1 建模 10
1.3.2 问题求解 10
1.3.3 知识获取 11
1.3.4 决策知识 11
1.4 自测练习 11
1.5 自测练习参考答案 13
第2章 软件过程 16
2.1 软件过程框架 16
2.2 软件的生存周期和瀑布模型 17
2.3 原型实现模型 19
2.4 演化软件过程模型 20
2.4.1 增量模型 20
2.5 微软解决框架过程模型 21
2.4.2 螺旋模型 21
2.5.1 过程定义 22
2.5.2 目标驱动 22
2.5.3 基于风险管理的开发调度 23
2.5.4 按产品版本发布 23
2.5.5 支持项目管理 23
2.5.6 靠改进特性与固定资源来激发创造力的战略 23
2.5.7 同步——稳定开发法 26
2.6 基于构件的开发模型 26
2.7 极限编程 27
2.7.1 目标与活动 28
2.7.2 实践方法 29
2.7.4 XP应用的限制 31
2.7.3 XP——演化模型 31
2.8 软件过程能力成熟度模型 32
2.8.1 CMM简介 32
2.8.2 关键过程域 36
2.8.3 CMM与ISO 37
2.8.4 CMM的应用 44
2.9 自测练习 47
2.10 自测练习参考答案 49
第3章 软件工程建模语言 51
3.1 建模的概念 51
3.1.1 系统及模型和视图 51
3.1.2 概念和现象 52
3.2 统一建模语言 52
3.2.1 为什么需要UML 52
3.3.1 用例图 54
3.3 UML图形符号 54
3.2.2 UML简介 54
3.3.2 类图及对象图和包 57
3.3.3 构件图和配置图 64
3.3.4 消息 65
3.3.5 状态图 66
3.3.6 顺序图 67
3.3.7 协作图 68
3.3.8 活动图 69
3.3.9 四种图的运用 71
3.4 自测练习 71
3.5 自测练习参考答案 79
第2部分 软件项目管理 87
第4章 软件项目 87
4.1.2 项目管理的发展 88
4.1 项目管理的历史及发展 88
4.1.1 项目管理的历史 88
4.1.3 项目管理的应用 89
4.1.4 软件项目管理的特点 90
4.2 软件项目的基本概念 90
4.2.1 基本概念 90
4.2.2 项目管理框架 91
4.2.3 人员 91
4.2.4 产品 92
4.2.5 过程 92
4.2.6 项目计划 92
4.3 项目生存周期 92
4.5.1 明白领导和管理的区别 93
4.5 关键管理技能 93
4.4 项目拥有者 93
4.5.2 交流技巧 94
4.5.3 谈判能力 94
4.5.4 解决问题的能力 94
4.5.5 影响组织 94
4.6 项目管理的基本思想和技术 94
4.6.1 成本/进度综合控制 94
4.6.2 蒙托卡罗模拟技术 95
4.6.3 项目进展评价技术 95
4.6.4 网络计划技术 96
4.6.5 项目管理的可视化技术 96
4.7 自测练习 97
4.8 自测练习参考答案 98
5.1.1 组织原则 100
第5章 团队管理 100
5.1 团队模型 100
5.1.2 微软解决方案框架团队模型 101
5.2 自测练习 104
5.3 自测练习参考答案 105
第6章 项目计划 106
6.1 项目计划简介 106
6.1.1 影响项目估算的因素 106
6.1.2 软件范围的确定 107
6.1.3 项目所需资源 107
6.2 项目估算 108
6.2.1 项目估算的方法 108
6.2.2 软件规模估算 109
6.2.3 经验估算模型 110
6.3 项目计划的制定与提交 112
6.4 自测练习 113
6.5 自测练习参考答案 114
第7章 风险分析和管理 116
7.1 软件风险 116
7.1.1 风险的概念 116
7.1.2 风险策略 116
7.1.3 软件风险的类别 117
7.2 风险识别 117
7.3 风险预测和评估 118
7.3.1 建立风险表 118
7.3.2 评估风险影响 120
7.4.1 建立有效处理风险策略 121
7.3.3 风险评估 121
7.4 风险的缓解和监控与管理 121
7.4.2 RMMM计划 123
7.4.3 交流风险 124
7.5 自测练习 124
7.6 自测练习参考答案 124
第8章 项目进度计划与控制 127
8.1 项目进度计划 127
8.1.1 进度计划 127
8.1.2 自顶向下与自底向上的计划 127
8.1.3 基本步骤 128
8.2 项目跟踪与控制 129
8.2.1 进度安排 129
8.2.3 跟踪进度 130
8.2.2 关键路径 130
8.2.4 百分比值分析法 131
8.2.5 赢得值法 132
8.3 Microsoft Project 2000 136
8.3.1 简介 136
8.3.2 功能 138
8.4 自测练习 140
8.5 自测练习参考答案 142
第9章 软件质量保证 144
9.1 软件质量 144
9.1.1 软件质量的定义 144
9.1.3 软件质量保证的含义 145
9.1.4 软件质量成本的含义 145
9.1.2 软件质量控制的含义 145
9.2 软件质量保证 146
9.2.1 软件质量保证的历史 146
9.2.2 SQA活动 147
9.2.3 统计软件质量保证 147
9.2.4 开发正确的产品 148
9.3 软件评审 148
9.3.1 阶段评审 149
9.3.2 正式评审 149
9.3.3 项目完成后评审 149
9.4 软件复杂性与可靠性 150
9.4.1 软件复杂性 150
9.4.2 软件可靠性 150
9.4.3 软件的容错技术 151
9.5.2 软件质量特性 152
9.5.1 不同的人对软件质量关心的重点不同 152
9.5 软件质量度量模型 152
9.6 自测练习 153
9.7 自测练习参考答案 155
第10章 软件配置管理 157
10.1 软件配置项及基线 157
10.1.1 软件配置项 157
10.1.2 基线 158
10.2 配置管理过程 159
10.2.1 配置对象标识 159
10.2.2 版本控制 160
10.2.3 变更控制 161
10.3 一个配置管理的工具——Visual Source Safe 162
10.4 自测练习 163
10.5 自测练习参考答案 164
第3部分 传统的软件工程 169
第11章 需求工程 169
11.1 基本概念 169
11.1.1 业务过程工程 170
11.1.2 产品工程 170
11.1.3 需求工程 170
11.2 需求获取 171
11.2.1 需求获取方式 172
11.2.2 提高获取的效率 173
11.2.3 原型与场景 176
11.3 需求分析建模 179
11.3.1 为什么需要建模 179
11.3.2 建模的方法 179
11.3.4 数据建模 180
11.3.3 结构化分析 180
11.3.5 功能建模 187
11.3.6 控制模型 192
11.3.7 数据字典 193
11.3.8 IDEF方法 199
11.4 软件需求规约及评审 203
11.4.1 需求规约 203
11.4.2 规约的评审 203
11.5 自测练习 204
11.6 自测练习参考答案 208
第12章 系统设计 211
12.1 系统设计的概念 211
12.1.1 软件设计模型 211
12.1.2 设计目标和原则 212
12.1.3 设计基本方法 214
12.1.4 设计文档 218
12.2 数据设计 219
12.2.1 数据三模式的概念 219
12.2.2 数据库设计的原则 220
12.2.3 数据仓库 223
12.3 体系结构设计 224
12.3.1 体系结构是通用的 224
12.3.2 主机/终端结构 225
12.3.3 客户机/服务器结构 226
12.3.4 多层分布式结构 228
12.3.5 体系结构的选择 229
12.3.6 系统模块结构 231
12.4.1 界面设计是综合艺术 235
12.4.2 界面设计的黄金规则 235
12.4 人机界面设计 235
12.4.3 界面设计 237
12.4.4 界面设计的问题 240
12.4.5 界面设计原型技巧 241
12.5 过程设计 242
12.5.1 结构化程序设计 242
12.5.2 过程设计模板 243
12.6 自测练习 245
12.7 自测练习参考答案 249
第13章 软件测试 253
13.1 测试目标和原则 253
13.1.1 测试目标 253
13.1.2 测试规则 254
13.1.3 可测试性 255
13.2.1 白盒法 257
13.1.4 测试方法 257
13.2 测试用例设计 257
13.2.2 黑盒法 263
13.2.3 针对专门环境的测试 264
13.3 测试计划 265
13.4 软件测试过程 266
13.4.1 软件测试步骤 266
13.4.2 单元测试 268
13.4.3 集成测试 269
13.4.4 确认测试 272
13.4.5 一些常见的可用性问题 274
13.5 测试和调试 275
13.5.1 调试和测试的区别 275
13.5.3 调试的方法 276
13.5.2 调试的困难 276
13.6 自测练习 277
13.5.4 测试准备 277
13.7 自测练习参考答案 280
第14章 软件技术度量 284
14.1 软件技术度量的框架 284
14.1.1 度量准则 284
14.1.2 有效软件度量的属性 285
14.2 需求分析度量 285
14.2.1 基于功能的分析模型测量 285
14.2.2 分析规约质量的度量 287
14.3 设计模型度量 287
14.3.1 体系结构度量 287
14.3.2 过程设计度量 288
14.4 源代码度量 289
14.3.3 人机界面的度量 289
14.5 对测试的度量 290
14.6 对维护的度量 290
14.7 自测练习 290
14.8 自测练习参考答案 292
第4部分 面向对象的软件工程 295
第15章 面向对象的概念 295
15.1 面向对象的概念化 295
15.1.1 项目概念化 295
15.1.2 面向对象的范型 297
15.1.3 面向对象的软件工程 298
15.1.4 面向对象的管理 298
15.2.1 对象的识别 299
15.2 类与对象 299
15.3 面向对象的要素 301
15.3.1 对象的关系 301
15.2.2 对象和类 301
15.3.2 面向对象的特性 303
15.4 面向对象的建模 304
15.4.1 目标 305
15.4.2 面向对象的模型 305
15.4.3 面向对象的开发方法 307
15.5 自测练习 308
15.6 自测练习参考答案 310
第16章 面向对象的分析 311
16.1 面向对象的分析与设计 311
16.2.1 需求规格说明 312
16.2 案例分析——图书管理系统 312
16.2.2 需求规格说明的细化 314
16.2.3 需求规格说明的验证 315
16.3 需求分析 316
16.3.1 需求分析的过程 316
16.3.2 用UML建模 322
16.4 以用例为中心的需求分析方法 326
16.5 自测练习 327
16.6 自测练习参考答案 329
第17章 面向对象的设计 331
17.1 面向对象的设计概述 331
17.1.1 面向对象的设计目标 331
17.1.2 类设计与产品设计 331
17.2.1 对象存储方法 332
17.2 对象的存储 332
17.2.2 对象序列化 333
17.2.3 对象属性的永久保留 334
17.2.4 对象存储的评价 335
17.2.5 图书管理系统的对象存储 335
17.3 进程体系结构 337
17.3.1 多节点建模与进程间的通信 337
17.3.2 实例 339
17.4 用户界面 341
17.4.1 用户界面设计 341
17.4.2 用户界面的交互样式 341
17.4.3 图书管理系统的界面 344
17.5 类设计 345
17.5.1 类架构 346
17.5.2 系统分解 348
17.5.3 类图的附加符号 348
17.5.4 交互图 349
17.6 类设计的目标及其验证 354
17.6.1 代码重用 354
17.6.2 良好设计的类与方法 355
17.6.3 数据的完整性 355
17.6.4 类设计的验证 356
17.7 方法设计 357
17.7.1 确定方法 357
17.7.2 创建优质的方法 358
17.8 自测练习 358
17.9 自测练习参考答案 360
18.1.1 程序设计的方法 363
18.1 程序设计的发展 363
第18章 编码实现 363
18.1.2 软件开发环境的发展 364
18.1.3 软件开发模式的发展 364
18.2 开发策略 365
18.2.1 自顶向下的开发与自底向上的开发 365
18.2.2 自底向上和自顶向下的结合 367
18.2.3 线程方法 368
18.3 编码计划 368
18.4 编程风格 370
18.4.1 简单性 371
18.4.2 注释和内部文档 373
18.5 编码标准 376
18.5.1 一般规则 376
18.5.4 可执行的命令 377
18.5.3 声明 377
18.5.2 模块化规则 377
18.6 超类设计和超类对象的实现 378
18.6.1 识别超类 378
18.6.2 面向对象方法的超类实现 379
18.7 自测练习 379
18.8 自测练习参考答案 381
第19章 面向对象的测试 382
19.1 基本概念 382
19.1.1 测试的定义 382
19.1.2 面向对象测试 382
19.1.3 错误及故障和失效 383
19.2 测试计划 384
19.2.1 计划内容 384
19.2.3 测试用例 386
19.2.2 预期结果 386
19.3 面向对象的测试过程 387
19.3.1 面向对象的单元测试 387
19.3.2 面向对象的集成测试 389
19.3.3 面向对象的系统测试 391
19.3.4 面向对象的测试步骤 392
19.3.5 软件内部测试的自动工具 392
19.4 面向对象系统与面向过程系统的测试 393
19.4.1 面向对象系统测试的复杂性 393
19.4.2 有关测试的一些问题 395
19.5 案例分析——测试图书馆管理系统 398
19.5.1 LMS的测试计划 399
19.5.2 LMS的单元测试 400
19.5.3 LMS的测试用例 401
19.6 配置管理的测试 402
19.7 自测练习 403
19.8 自测练习参考答案 404
第5部分 软件工程的最新技术 409
第20章 基于构件的软件工程 409
20.1 构件 409
20.1.1 构件技术 409
20.1.2 构件属性 410
20.2 基于构件的系统开发 411
20.2.1 系统结构分层和逻辑与数据分离 411
20.2.2 选择和评价已有的构件 412
20.2.3 构件的使用 412
20.2.4 实现构件技术必须具备的条件 413
20.3.1 构件的设计 414
20.3 构件的开发 414
20.3.2 领域工程 415
20.4 构件和中间件 418
20.4.1 中间件是构件存在的基础 418
20.4.2 构件思想对中间件的作用 420
20.4.3 中间件的分类 421
20.4.4 基于中间件的开发系统模型 424
20.4.5 中间件面临的一些问题 427
20.5 软件构件的标准 427
20.5.1 OMG/CORBA 427
20.5.2 EJB和J2EE 428
20.5.3 Microsoft DCOM及Windows DNA 429
20.6 自测练习 431
20.7 自测练习参考答案 432
第21章 客户服务器与Web软件工程 434
21.1 计算机系统体系结构 434
21.1.1 计算机系统结构 434
21.1.2 C/S系统结构 436
21.2 C/S系统 437
21.2.1 C/S系统构成 438
21.2.2 分布应用子系统的指导原则 441
21.2.3 分布应用举例 441
21.3 C/S系统开发 442
21.3.1 C/S系统设计 442
21.3.2 C/S系统结构设计 443
21.3.3 C/S系统数据库设计 445
21.3.4 提高C/S系统性能的方法 445
21.4.1 C/S与B/S 449
21.4 基于Web系统 449
21.4.2 B/S工程 452
21.4.3 B/S系统设计 454
21.4.4 B/S系统测试 457
21.4.5 B/S系统管理 458
21.5 自测练习 460
21.6 自测练习参考答案 461
第22章 设计模式 463
22.1 设计模式简介 463
22.1.1 设计模式产生于建筑学和人类学 463
22.1.2 再工程与模式化运动 464
22.1.3 软件模式与模式语言 465
22.1.4 面向模式的软件再工程 465
22.1.6 从再工程过程中抽象软件模式 467
22.1.5 软件再工程首先面对反面模式 467
22.2 基本设计模式 468
22.2.1 创建型模式 468
22.2.2 结构型模式 471
22.2.3 行为模式 474
22.2.4 学习设计模式的意义 479
22.3 应用设计模式 479
22.3.1 包装程序设计模式 479
22.3.2 桥接设计模式 480
22.3.3 迭代程序设计模式 483
22.3.4 单实例设计模式 484
22.4 自测练习 485
22.5 自测练习参考答案 485
参考文献 487