绪论 1
目录 1
第1章过程 19
第1部分:基础篇 20
1.1软件工程开发过程简介 20
1.1.1一个典型的软件工程路线图 21
1.2软件工程的过去和现在 22
1.2.1软件工程 22
1.2.2结构化和面向对象的方法产生的影响 23
1.2.3重用和构件 24
1.2.5可用性 26
1.3对过程、项目、产品和人的期望 26
1.2.4形式方法 26
1.3.1工件和角色 28
1.4可供选择的过程 28
1.4.1瀑布过程模型 28
1.4.2螺旋过程模型 30
1.4.3增量过程模型 31
1.4.4统一软件开发过程 32
1.4.5过程的对比 36
1.5文档 37
1.5.1文档简介 37
1.5.2文档标准 39
第2部分:提高篇 43
1.6质量 43
1.6.1度量 44
1.6.2质量保障过程 45
1.6.3黑盒和白盒技术 46
1.6.4检查简介 46
1.6.5软件质量保障计划(SQAP)的IEEE标准 51
1.6.6验证和确认 52
1.7文档管理 55
1.7.1文档管理简介 55
1.7.2一致性和单一来源文档 55
1.7.3配置管理 57
1.8能力评估简介 61
1.8.1个人软件过程(PSP)简介 61
1.8.2小组软件过程(TSP)简介 63
1.8.3能力成熟度模型(CMM)简介 64
1.8.4 PSP,TSP和CMM的关系 66
1.9总结 67
练习题 68
案例1:软件配置管理计划 70
案例2:软件质量保障计划第1部分(第2部分见第2章) 77
第2章项目管理 83
第1部分:基础篇 84
2.1项目管理简介 84
2.1.1项目管理的含义 84
2.1.2项目管理的要素 84
2.1.3主要变量:成本、性能、质量和进度 84
2.1.4项目管理过程的典型路线图 86
2.2.1专业精神 87
2.2管理项目的人员 87
2.2.2人员管理的重要性 88
2.2.3企业的视角 89
2.2.4管理层的视角 89
2.2.5工程师的视角 91
2.3组织人员的选择 91
2.3.1沟通管理 92
2.3.2职责结构的选择 93
2.3.3项目人员的来源 95
2.4识别和规避风险 96
2.4.1风险定义 96
2.4.2风险管理概论 97
2.4.3风险识别 98
2.4.4风险规避 99
2.5选择开发工具和支持 102
2.5.1过程方法 102
2.5.2工具 102
2.5.3抉择:开发还是购买 103
2.5.4语言选择 104
2.5.5文档 104
2.5.6支持服务 104
2.6创建时间表:概要的计划 105
第2部分:提高篇 107
2.7集成遗留系统 107
2.8成本估计:早期的计算 109
2.8.1简介 109
2.8.2无功能点过程的代码行数的估计 111
2.8.3功能点和代码行数 113
2.8.4功能点转换为代码行数 117
2.8.5功能点的进一步的例子 117
2.8.6关于功能点的参考资料 118
2.9 由代码行数估计工作量和工期 119
2.10小组软件过程 121
2.11软件项目管理计划 123
2.12项目管理的质量 125
2.12.1过程度量 126
2.12.2 IEEE 739-1989 SQAP:第2部分 127
2.13过程改进和能力成熟度模型 130
2.13.1改进组织使用的过程 130
2.13.2改进项目中正在使用的过程 131
2.14.1远距离小组和跨国小组 132
2.14项目管理技术和各种工具 132
2.14.2极限编程 133
2.14.3分类法决策 134
2.15项目管理过程总结 135
学生项目指南(SPG):Encounter案例的项目管理计划 136
SPG1.准备项目策划会议 136
SPG2.最初的项目策划会议 137
SPG3.完成项目管理计划 138
练习题 138
复习题 139
小组练习题 139
复习题提示 140
复习题答案 140
案例1:Encounter视频游戏SPMP 142
案例2:软件质量保障计划第2部分 152
第3章需求分析(一) 157
3.1需求分析简介 158
3.1.1需求分析的含义 158
3.1.2 C需求和D需求 158
3.1.3为什么必须书写需求 159
3.1.4典型的需求分析过程路线图 160
3.1.5需求分析的挑战和益处 162
3.2客户交互 163
3.2.1需求的来源 163
3.2.2识别风险承担者 164
3.2.3客户需求实例 165
3.2.4访谈和文档记录过程 166
3.3描述客户(C)需求 168
3.3.1操作的概念 168
3.3.2用例 168
3.3.3数据流图(为与客户沟通所用) 171
3.3.4状态变迁图(为与客户沟通所用) 173
3.3.5草拟用户界面和其他接口 174
3.3.6 C需求表述总结和指南 183
3.4应用于C需求的方法论、工具和网络 185
3.5快速原型、可行性研究和概念证明 185
3.5.1快速原型 186
3.5.2可行性研究 189
3.6.2 C需求分析对于项目计划的影响 190
3.6.1 C需求和项目规模 190
3.6更新项目以反映C需求分析 190
3.7未来发展方向和C需求总结 193
3.7.1未来发展方向 193
3.7.2总结 193
学生项目指南:Encounter案例的C需求 194
SPG1.准备 194
SPG2.访谈客户 196
SPG3.撰写软件需求规格说明书 197
SPG4.补充 198
SPG5.度量和总结 198
练习题 199
小组练习题 200
综合练习题 200
练习题提示 201
练习题答案 201
案例:Encounter视频游戏软件需求规格说明书(SRS)第1部分 201
第4章需求分析(二) 211
第1部分:基础篇 212
4.1详细(D)需求简介 212
4.1.1详细(D)需求的含义 212
4.1.2 D需求分析的典型路线图 213
4.2 D需求的类型 213
4.2.1功能性需求 214
4.2.2非功能性需求:性能需求 215
4.2.3非功能性需求:可靠性和易用性 215
4.2.4非功能性需求:出错处理 215
4.2.6非功能性需求:限制 216
4.2.5非功能性需求:接口需求 216
4.2.7反面需求 217
4.2.8需求类型与IEEE SRS标准IEEE 830-1993的对应 217
4.3 D需求的预期属性 217
4.3.1可追溯性 218
4.3.2可测试性和清晰性 222
4.3.3优先级 222
4.3.4完整性 224
4.3.5出错条件 225
4.3.6一致性 226
4.3.7总结详细需求的撰写过程 227
4.4序列图 228
4.5.1组织详细需求的重要性 231
4.5组织D需求的方式 231
4.5.2组织详细需求的方法 232
4.5.3基于用例组织详细需求 235
4.5.4基于类组织详细需求 236
4.5.5类的识别 238
4.5.6对给定的需求选择正确的类 243
4.5.7划分实体(实例)的类别 244
4.5.8连接到测试文档 244
第2部分:提高篇 245
4.6详细需求的质量 245
4.6.1 QA在D需求分析中的职责 245
4.6.2 D需求分析中的度量 246
4.6.3对D需求分析的检查 247
4.7在需求分析中使用工具和网络 252
4.8.1形式规格说明简介 253
4.8需求规格说明中的形式方法 253
4.8.2形式规格说明示例 255
4.8.3何时应该使用形式规格说明 259
4.8.4前置条件和后置条件 260
4.9 D需求过程对项目的作用 261
4.9.1对SPMP的作用 261
4.9.2 D需求的规模效应 261
4.10 D需求过程总结 262
学生项目指南:Encounter案例的D需求 262
SPG1.准备 263
SPG2.D需求分类 264
SPG3.撰写D需求 264
练习题 265
SPG4.补充:度量和总结 265
综合练习题 266
小组练习题 266
练习题提示 267
练习题答案 267
案例:Encounter视频游戏软件需求规格说明书(SRS)第2部分 267
第5章软件体系结构 285
第1部分:基础篇 286
5.1 介绍系统工程和软件体系结构 286
5.1.1宏图:系统工程 286
5.1.2 “软件体系结构”的含义 288
5.1.3体系结构选择的目标 288
5.1.4分解 289
5.2模型、框架和设计模式 292
第2部分:提高篇 292
5.2.1使用“模型” 293
5.2.2统一建模语言 294
5.2.3框架 296
5.2.4体系结构的分类 299
5.2.5设计模式Ⅰ:引言 299
5.2.6构件 301
5.3软件体系结构的方案及其类模型 301
5.3.1数据流结构 302
5.3.2独立构件 305
5.3.3虚拟机 314
5.3.4仓库(Repository)结构 318
5.3.5分层体系结构 320
5.3.6在同一应用系统中应用多种体系结构 322
5.3.7本节小结及选择体系结构的实际步骤 323
5.4用于体系结构的符号、工具和标准 324
5.4.1符号 324
5.4.2工具 324
5.4.3 IEEE/ANSI表述设计的标准 325
5.5选择体系结构的质量保证(QA) 325
5.5.1选择体系结构的质量 326
5.5.2从备选方案中选择一种体系结构 328
5.5.3使用用例来检查体系结构 331
5.5.4体系结构选择方案的评审 331
5.5.5软件体系结构的选择对SPMP的影响 332
5.6小结 333
SPG1.准备工作 334
学生项目指南:Encounter案例的体系结构 334
SPG2.选择体系结构 335
SPG3.小组会议(“初始设计的评审”) 336
SPG4.体系结构细化 337
SPG5.编制体系结构文档 338
练习题 338
复习题 338
一般练习题 338
小组练习题 339
问题解答 339
案例分析 340
Ⅰ.角色扮演游戏的体系结构框架 340
第1部分(第6章中的案例研究为第2部分) 343
Ⅱ.Encounter角色扮演类游戏的体系结构框架软件设计文档的 343
第6章详细设计 351
第1部分:基础篇 352
6.1详细设计简介 352
6.1.1“详细设计”的含义 352
6.1.2详细设计与用例、体系结构的关系 352
6.1.3“详细设计”过程的一个典型路线图 353
6.1.4统一开发过程中的设计 355
6.1.5面向接口的设计 356
6.1.6构件重用 357
6.2详细设计中的序列图和数据流图 358
6.2.1详细的序列图 359
6.2.2详细的数据流图 360
6.3类和函数的说明 362
6.3.1类不变量 363
6.3.2函数不变量、前置条件和后置条件 364
6.4算法说明 364
6.4.1流程图 365
6.4.2伪码 367
6.4.3何时使用流程图和伪码 368
第2部分:提高篇 369
6.5设计模式Ⅱ:详细设计的技巧 369
6.5.1详细设计中的创建型模式 370
6.5.2详细设计中的结构型设计模式 376
6.5.3详细设计中的行为型设计模式 382
6.7详细设计的标准、符号和工具 385
6.7.1关于详细设计的IEEE 890标准 385
6.6标准模板库 385
6.7.2详细对象模型中的统一建模语言(UML) 386
6.7.3基于源代码的工具:JavaDoc 386
6.8详细设计对项目的影响 388
6.8.1根据详细设计估计规模 389
6.9详细设计的质量 391
6.9.1详细设计的质量和度量指标 393
6.9.2详细设计的评审 394
6.10小结 396
练习题 397
复习题 397
一般练习题 397
小组练习题 397
案例分析 398
问题答案 398
Ⅰ.角色扮演视频游戏框架的详细设计续(软件设计文档的遗留部分) 399
Ⅱ.Encounter应用的详细设计续(软件设计文档的遗留部分) 401
第7章单元实现 413
7.1简介 414
7.1.1单元实现的含义 414
7.1.2实现的目标 414
7.1.3单元实现过程的典型路线图 414
7.1.4统一软件开发过程中的实现 416
7.1.5编程语言 418
7.2编程语言和风格 419
7.2.1实现的一般原则 420
7.2.2指针和引用 421
7.2.4异常 422
7.2.3函数 422
7.2.5错误处理 423
7.2.6其他经验 427
7.3.编程标准 427
7.3.1命名约定——以Java为例 427
7.3.2属性说明(源自【Am】) 429
7.3.3常量 429
7.3.4属性初始化 430
7.4可证明正确性的程序 431
7.5编程的工具和环境 435
7.6.实现的质量 436
7.6.1源代码的度量指标 438
7.6.3代码检查 440
7.6.2可定制的源代码度量指标 440
7.6.4个人的软件文档 442
7.7.实现过程总结 443
练习题 443
复习题 443
一般练习题 444
小组练习题 444
问题答案 444
案例分析 445
Ⅰ.更新SQAP 445
Ⅱ.更新SCMP附录:实现模型 446
Ⅲ.个人的软件文档(两部分之一) 446
Ⅳ.源代码(不包括测试代码):ENCOUNTERCHARACTER 448
第8章单元测试 455
8.1单元测试的介绍 456
8.1.1测试的目的 456
8.1.2单元测试的含义 457
8.1.3典型的单元测试路线图 458
8.2.测试类型 459
8.2.1黑盒测试、白盒测试及灰盒测试 460
8.2.2黑盒测试的等价划分 461
8.2.3黑盒测试的边界值分析 462
8.2.4白盒测试的语句覆盖 463
8.2.5白盒测试的决策覆盖 463
8.2.6基于断言的测试 465
8.2.7测试的随机性 467
8.3.规划单元测试 468
8.4方法测试的清单和实例 471
8.4.1方法的单元测试 471
8.4.2方法测试的实例 473
8.5类测试的清单及实例 481
8.5.1方法组合的测试实例 482
8.5.2面向属性的测试 483
8.5.3测试类不变量 483
8.5.4基于状态的测试 484
8.6总结 485
练习题 485
复习题 485
小组练习题 486
问题答案 487
一般练习题 487
案例分析:Encounter CharacterJAVA个人文件文档(PSD)的 488
第2部分 488
第9章系统集成、验证和确认 501
9.1 引言 501
9.1.1集成的含义 501
9.1.2验证、确认和系统测试 503
9.2集成过程 506
9.2.1 “集成”说明 506
9.2.2集成和系统测试过程的典型路线图 510
9.3测试过程 514
9.3.1集成测试 514
9.3.2测试工作人员和工件 516
9.3.3接口测试 517
9.3.4系统测试 519
9.3.5可用性测试 521
9.3.6回归测试 522
9.3.7验收测试 523
9.3.8安装测试 523
9.4编制集成和测试文档 523
9.4.1测试文档标准 523
9.4.2集成和测试文档的组织 525
9.5移交阶段 526
9.5.1Alpha版本和Beta版本 527
9.5.2移交迭代的路线图 528
9.6.1质量目标 530
9.6.2集成和系统测试的度量指标 530
9.6集成、验证和确认的质量 530
9.6.3集成和系统测试的检查 531
9.6.4在集成和系统测试中涉及到的质量保障工作 531
9.6.5系统集成和能力成熟度模型 532
9.7集成和系统测试工具 533
9.8 总结 536
练习题 536
复习题 537
小组练习题 537
一般练习题 537
复习题答案 538
案例分析 539
第10章维护 555
10.1 引言 555
10.1.1 “软件维护”的含义 556
10.1.2软件维护中存在的各种问题 557
10.1.3建立维护过程的典型路线图 559
10.2软件维护的不同类型 560
10.3维护技术 561
10.3.1影响分析 561
10.3.2逆向工程 562
10.3.3 工程再造 563
10.3.4原有应用系统 565
10.3.5更新文档 567
10.4 IEEE标准1219-1992 567
10.4.1维护问题的确定 568
10.4.2维护问题分析 569
10.4.3维护请求的设计 570
10.4.4维护请求的编码实现 574
10.5维护管理 575
10.6维护质量 578
10.6.1维护度量指标 578
10.6.2维护度量指标的应用 579
10.6.3易维护性 581
10.7总结 583
练习题 583
小组练习题 584
案例分析:Encounter的维护 585
维护请求4593 585
缩略语 593
附录A UML图示1 597
附录B UML图示2 599