第1章 软件和软件工程 1
1.1软件的本质 2
1.1.1定义软件 3
1.1.2软件应用领域 5
1.1.3遗留软件 6
1.2 WebApp的特性 7
1.3软件工程 8
1.4软件过程 9
1.5软件工程实践 11
1.5.1实践的精髓 11
1.5.2一般原则 12
1.6软件神话 14
1.7这一切是如何开始的 15
1.8 小结 16
习题与思考题 17
推荐读物与阅读信息 17
第一部分 软件过程 20
第2章 过程模型 20
2.1通用过程模型 21
2.1.1定义框架活动 22
2.1.2明确任务集 23
2.1.3过程模式 23
2.2过程评估与改进 25
2.3惯用过程模型 26
2.3.1瀑布模型 26
2.3.2增量过程模型 28
2.3.3演化过程模型 29
2.3.4协同模型 33
2.3.5演化模型的最终评述 34
2.4专用过程模型 34
2.4.1基于构件的开发 35
2.4.2形式化方法模型 35
2.4.3面向方面的软件开发 35
2.5统一过程 37
2.5.1简史 37
2.5.2统一过程的阶段 37
2.6个人过程模型和团队过程模型 38
2.6.1个人软件过程 39
2.6.2团队软件过程 39
2.7过程技术 40
2.8产品与过程 41
2.9小结 42
习题与思考题 42
推荐读物与阅读信息 43
第3章 敏捷开发 45
3.1什么是敏捷 46
3.2敏捷及变更的成本费用 47
3.3敏捷过程是什么 47
3.3.1敏捷原则 48
3.3.2敏捷开发的战略 48
3.3.3人的因素 49
3.4极限编程 50
3.4.1极限编程的权值 50
3.4.2极限编程过程 51
3.4.3工业极限编程 53
3.4.4关于XP的争论 54
3.5其他敏捷过程模型 55
3.5.1自适应软件开发 56
3.5.2 Scrum 57
3.5.3动态系统开发方法 58
3.5.4 Crystal 59
3.5.5特征驱动开发 59
3.5.6精益软件开发 60
3.5.7敏捷建模 60
3.5.8敏捷统一过程 61
3.6 敏捷过程工具集 62
3.7小结 63
习题与思考题 63
推荐读物与阅读信息 64
第二部分 建模 68
第4章 指导实践的原则 68
4.1软件工程知识 69
4.2核心原则 69
4.2.1指导过程的原则 69
4.2.2指导实践的原则 70
4.3指导每个框架活动的原则 71
4.3.1沟通原则 71
4.3.2策划原则 73
4.3.3建模原则 74
4.3.4构造原则 77
4.3.5部署原则 79
4.4小结 80
习题与思考题 81
推荐读物与阅读信息 81
第5章 理解需求 83
5.1需求工程 84
5.2建立根基 88
5.2.1确认利益相关者 88
5.2.2识别多重观点 88
5.2.3协同合作 88
5.2.4首次提问 89
5.3导出需求 89
5.3.1协作收集需求 90
5.3.2质量功能部署 92
5.3.3用户场景 92
5.3.4导出工作产品 93
5.4开发用例 94
5.5构建需求模型 97
5.5.1需求模型的元素 98
5.5.2分析模式 100
5.6协商需求 100
5.7确认需求 101
5.8小结 102
习题与思考题 102
推荐读物与阅读信息 103
第6章 需求建模:场景、信息与类分析 105
6.1需求分析 106
6.1.1总体目标和原理 106
6.1.2分析的经验原则 107
6.1.3域分析 107
6.1.4需求建模的方法 109
6.2基于场景建模 110
6.2.1新建初始用例 110
6.2.2细化初始用例 112
6.2.3编写正规的用例 113
6.3补充用例的UML模型 115
6.3.1开发活动图 115
6.3.2泳道图 115
6.4数据建模概念 116
6.4.1数据对象 117
6.4.2数据属性 117
6.4.3关系 118
6.5基于类的建模 119
6.5.1识别分析类 119
6.5.2描述属性 121
6.5.3定义操作 122
6.5.4类-职责-协作者建模 124
6.5.5关联和依赖 128
6.5.6分析包 129
6.6小结 130
习题与思考题 130
推荐读物与阅读信息 131
第7章 需求建模:流程、行为、模式和Web应用 132
7.1需求建模策略 132
7.2面向数建模 133
7.2.1创建数据流模型 133
7.2.2创建控制流模型 135
7.2.3控制规格说明 135
7.2.4处理规格说明 137
7.3生成行为模型 138
7.3.1识别用例事件 139
7.3.2状态表现 139
7.4需求建模的模式 141
7.4.1发现分析模式 142
7.4.2需求模式举例:执行器-传感器 142
7.5 Web应用系统的需求建模 145
7.5.1如何分析 145
7.5.2需求建模的输入 146
7.5.3需求建模的输出 146
7.5.4 Web应用系统内容建模 147
7.5.5 Web应用系统的交互模型 148
7.5.6 Web应用系统的功能模型 148
7.5.7 Web应用系统的配置模型 149
7.5.8导航建模 150
7.6小结 150
习题与思考题 151
推荐读物与阅读信息 151
第8章 设计概念 152
8.1软件工程中的设计 153
8.2设计过程 155
8.2.1软件质量指导原则和属性 155
8.2.2软件设计的演化 156
8.3设计概念 157
8.3.1抽象 158
8.3.2体系结构 158
8.3.3模式 159
8.3.4关注点分离 159
8.3.5模块化 159
8.3.6信息隐蔽 160
8.3.7功能独立 160
8.3.8求精 161
8.3.9方面 161
8.3.10重构 162
8.3.11面向对象的设计概念 163
8.3.12设计类 163
8.4设计模型 165
8.4.1数据设计元素 166
8.4.2体系结构设计元素 166
8.4.3接口设计元素 166
8.4.4构件级设计元素 168
8.4.5部署级设计元素 168
8.5小结 169
习题与思考题 169
推荐读物与阅读信息 170
第9章 体系结构设计 172
9.1软件体系结构 172
9.1.1什么是体系结构 173
9.1.2体系结构为什么重要 174
9.1.3体系结构描述 174
9.1.4体系结构决策 175
9.2体系结构类型 175
9.3体系结构风格 177
9.3.1体系结构风格的简单分类 178
9.3.2体系结构模式 180
9.3.3组织和求精 181
9.4体系结构设计 181
9.4.1系统环境的表示 181
9.4.2定义原型 182
9.4.3将体系结构精化为构件 183
9.4.4描述系统实例 184
9.5评估可选的体系结构设计 185
9.5.1体系结构权衡分析方法 185
9.5.2体系结构复杂性 187
9.5.3体系结构描述语言 187
9.6使用数据流进行体系结构映射 188
9.6.1变换映射 188
9.6.2精化体系结构设计 193
9.7小结 194
习题与思考题 194
推荐读物与阅读信息 195
第10章 构件级设计 196
10.1什么是构件 197
10.1.1面向对象的观点 197
10.1.2传统观点 198
10.1.3过程相关的观点 199
10.2设计基于类的构件 200
10.2.1基本设计原则 200
10.2.2构件级设计指导方针 203
10.2.3内聚性 203
10.2.4耦合性 205
10.3实施构件级设计 206
10.4 WebApp的构件级设计 210
10.4.1构件级内容设计 210
10.4.2构件级功能设计 211
10.5设计传统构件 211
10.5.1图形化设计表示 211
10.5.2表格式设计表示 212
10.5.3程序设计语言 213
10.6基于构件的开发 214
10.6.1领域工程 215
10.6.2构件合格性检验、适应性修改与组合 215
10.6.3复用的分析与设计 217
10.6.4构件分类与检索 217
10.7小结 218
习题与思考题 219
推荐读物与阅读信息 220
第11章 用户界面设计 221
11.1黄金规则 222
11.1.1用户操纵控制 222
11.1.2减轻用户记忆负担 223
11.1.3保持界面一致 224
11.2用户界面的分析与设计 225
11.2.1用户界面分析和设计模型 225
11.2.2过程 226
11.3界面分析 227
11.3.1用户分析 227
11.3.2任务分析和建模 228
11.3.3显示内容分析 232
11.3.4工作环境分析 232
11.4界面设计步骤 233
11.4.1应用界面设计步骤 233
11.4.2用户界面设计模式 235
11.4.3设计问题 235
11.5 WebApp界面设计 237
11.5.1界面设计原则与指导方针 238
11.5.2 WebApp的界面设计工作流 241
11.6设计评估 242
11.7小结 243
习题与思考题 244
推荐读物与阅读信息 245
第12章 基于模式的设计 246
12.1设计模式 247
12.1.1模式的种类 248
12.1.2框架 249
12.1.3描述模式 250
12.1.4模式语言和存储库 251
12.2基于模式的软件设计 251
12.2.1不同环境下基于模式的设计 252
12.2.2在模式中思考 252
12.2.3设计任务 253
12.2.4建立模式组织表 254
12.2.5常见设计错误 255
12.3体系结构模式 255
12.4构件级设计模式 257
12.5用户界面设计模式 259
12.6 WebApp设计模式 261
12.6.1设计焦点 261
12.6.2设计粒度 261
12.7小结 262
习题与思考题 263
推荐读物与阅读信息 263
第13章WebApp设计 265
13.1 WebApp设计质量 266
13.2设计目标 268
13.3 WebApp设计金字塔 269
13.4 WebApp界面设计 269
13.5美学设计 270
13.5.1布局问题 270
13.5.2美术设计问题 271
13.6内容设计 271
13.6.1内容对象 271
13.6.2内容设计问题 272
13.7体系结构设计 272
13.7.1内容体系结构 273
13.7.2 WebApp体系结构 274
13.8导航设计 275
13.8.1导航语义 275
13.8.2导航语法 276
13.9构件级设计 277
13.10面向对象的超媒体设计方法 277
13.10.1 OOHDM的概念设计 278
13.10.2 OOHDM的导航设计 279
13.10.3抽象界面设计与实现 279
13.11小结 279
习题与思考题 280
推荐读物与阅读信息 280
第三部分 质量管理 284
第14章 质量概念 284
14.1什么是质量 285
14.2软件质量 285
14.2.1 Garvin的质量维度 286
14.2.2 McCall的质量因素 287
14.2.3 ISO 9126质量因素 287
14.2.4定向质量因素 288
14.2.5过渡到量化观点 289
14.3软件质量困境 289
14.3.1“足够好”的软件 289
14.3.2质量成本 290
14.3.3风险 291
14.3.4疏忽和责任 292
14.3.5质量和安全 292
14.3.6管理活动的影响 292
14.4实现软件质量 293
14.4.1软件工程方法 293
14.4.2项目管理技术 293
14.4.3质量控制 294
14.4.4质量保证 294
14.5小结 294
习题与思考题 294
推荐读物与阅读信息 295
第15章 评审技术 296
15.1软件缺陷对成本的影响 297
15.2缺陷放大和消除 297
15.3评审度量及其应用 299
15.3.1分析度量数据 299
15.3.2评审的成本效益 300
15.4评审:正式程度 301
15.5非正式评审 301
15.6正式技术评审 303
15.6.1评审会议 303
15.6.2评审报告和记录保存 304
15.6.3评审指导原则 304
15.6.4样本驱动评审 305
15.7小结 306
习题与思考题 306
推荐读物与阅读信息 307
第16章 软件质量保证 308
16.1背景问题 309
16.2软件质量保证的要素 309
16.3软件质量保证的任务、目标和度量 311
16.3.1软件质量保证任务 311
16.3.2目标、属性和度量 311
16.4软件质量保证的形式化方法 312
16.5统计软件质量保证 313
16.5.1一个普通的例子 313
16.5.2软件工程中的六西格玛 314
16.6软件可靠性 314
16.6.1可靠性和可用性的测量 315
16.6.2软件安全 316
16.7 ISO 9000质量标准 316
16.8 SQA计划 317
16.9小结 318
习题与思考题 318
推荐读物与阅读信息 319
第17章 软件测试策略 320
17.1软件测试的策略性方法 321
17.1.1验证与确认 321
17.1.2软件测试的组织 322
17.1.3软件测试策略——宏观 322
17.1.4测试完成的标准 324
17.2策略问题 324
17.3传统软件的测试策略 325
17.3.1单元测试 325
17.3.2集成测试 327
17.4面向对象软件的测试策略 331
17.4.1面向对象环境中的单元测试 331
17.4.2面向对象环境中的集成测试 332
17.5 WebApp的测试策略 332
17.6确认测试 333
17.6.1确认测试准则 333
17.6.2配置评审 333
17.6.3 α测试与β测试 333
17.7系统测试 334
17.7.1恢复测试 335
17.7.2安全测试 335
17.7.3压力测试 335
17.7.4性能测试 336
17.7.5部署测试 336
17.8调试技巧 337
17.8.1调试过程 337
17.8.2心理因素 338
17.8.3调试策略 338
17.8.4纠正错误 340
17.9小结 340
习题与思考题 340
推荐读物与阅读信息 341
第18章 测试传统的应用系统 343
18.1软件测试基础 344
18.2测试的内部视角和外部视角 345
18.3白盒测试 346
18.4基本路径测试 346
18.4.1流图表示 346
18.4.2独立程序路径 347
18.4.3导出测试用例 349
18.4.4图矩阵 350
18.5控制结构测试 351
18.5.1条件测试 351
18.5.2数据流测试 351
18.5.3循环测试 352
18.6黑盒测试 353
18.6.1基于图的测试方法 353
18.6.2等价类划分 354
18.6.3边界值分析 355
18.6.4正交数组测试 355
18.7基于模型的测试 357
18.8针对特定环境、体系结构和应用系统的测试 358
18.8.1图形用户界面测试 358
18.8.2客户/服务器体系结构测试 358
18.8.3文档测试和帮助设施测试 359
18.8.4实时系统的测试 360
18.9软件测试模式 361
18.10小结 362
习题与思考题 362
推荐读物与阅读信息 363
第19章 测试面向对象的应用系统 364
19.1扩展测试的视野 364
19.2测试OOA和OOD模型 365
19.2.1 OOA和OOD模型的正确性 365
19.2.2面向对象模型的一致性 366
19.3面向对象测试策略 367
19.3.1面向对象环境中的单元测试 367
19.3.2面向对象环境中的集成测试 368
19.3.3面向对象环境中的确认测试 368
19.4面向对象测试方法 368
19.4.1面向对象概念的测试用例设计的含义 369
19.4.2传统测试用例设计方法的可应用性 369
19.4.3基于故障的测试 369
19.4.4测试用例与类层次 370
19.4.5基于场景的测试设计 370
19.4.6表层结构和深层结构的测试 371
19.5类级可应用的测试方法 372
19.5.1面向对象类的随机测试 372
19.5.2类级的划分测试 373
19.6 类间测试用例设计 373
19.6.1多类测试 374
19.6.2从行为模型导出的测试 374
19.7小结 375
习题与思考题 376
推荐读物与阅读信息 376
第20章 测试Web应用系统 377
20.1 WebApp的测试概念 377
20.1.1质量维度 378
20.1.2 WebApp环境中的错误 378
20.1.3 测试策略 379
20.1.4测试策划 379
20.2测试过程概述 380
20.3内容测试 380
20.3.1内容测试的目标 381
20.3.2数据库测试 381
20.4用户界面测试 383
20.4.1界面测试策略 383
20.4.2测试界面机制 383
20.4.3测试界面语义 385
20.4.4可用性测试 385
20.4.5兼容性测试 386
20.5构件级测试 387
20.6导航测试 388
20.6.1测试导航语法 388
20.6.2测试导航语义 389
20.7配置测试 390
20.7.1服务器端问题 390
20.7.2客户端问题 390
20.8安全性测试 391
20.9性能测试 392
20.9.1性能测试的目标 392
20.9.2负载测试 393
20.9.3压力测试 393
20.10小结 395
习题与思考题 396
推荐读物与阅读信息 396
第21章 形式化建模与验证 398
21.1净室策略 399
21.2功能规格说明 400
21.2.1黑盒规格说明 401
21.2.2状态盒规格说明 401
21.2.3清晰盒规格说明 402
21.3净室设计 402
21.3.1设计求精 402
21.3.2设计验证 403
21.4净室测试 404
21.4.1统计使用测试 404
21.4.2认证 405
21.5形式化方法的概念 406
21.6应用数学表示法描述形式化规格说明 408
21.7形式化规格说明语言 409
21.7.1对象约束语言 409
21.7.2 Z规格说明语言 412
21.8小结 414
习题与思考题 415
推荐读物与阅读信息 415
第22章 软件配置管理 417
22.1软件配置管理概述 418
22.1.1 SCM场景 418
22.1.2配置管理系统元素 419
22.1.3基线 419
22.1.4软件配置项 420
22.2 SCM中心存储库 421
22.2.1中心存储库的作用 421
22.2.2一般特征和内容 421
22.2.3 SCM特征 422
22.3 SCM过程 423
22.3.1软件配置中的对象标识 424
22.3.2版本控制 424
22.3.3变更控制 425
22.3.4配置审核 428
22.3.5状态报告 428
22.4 WebApp配置管理 429
22.4.1 WebApp配置管理的主要问题 429
22.4.2 WebApp的配置对象 430
22.4.3内容管理 430
22.4.4变更管理 432
22.4.5版本控制 434
22.4.6审核和报告 435
22.5小结 436
习题与思考题 436
推荐读物与阅读信息 437
第23章 产品度量 438
23.1产品度量框架 439
23.1.1测度、度量和指标 439
23.1.2产品度量的挑战 439
23.1.3 测量原则 440
23.1.4面向目标的软件测量 440
23.1.5有效软件度量的属性 441
23.2需求模型的度量 442
23.2.1基于功能的度量 443
23.2.2规格说明质量的度量 445
23.3设计模型的度量 446
23.3.1体系结构设计度量 446
23.3.2面向对象设计度量 447
23.3.3面向类的度量——CK度量集 448
23.3.4面向类的度量——MOOD度量集 450
23.3.5 Lorenz与Kidd提出的面向对象度量 451
23.3.6构件级设计度量 451
23.3.7面向操作的度量 453
23.3.8用户界面设计度量 453
23.4 WebApp的设计度量 453
23.5源代码度量 455
23.6测试的度量 456
23.6.1用于测试的Halstead度量 456
23.6.2面向对象测试的度量 457
23.7维护的度量 457
23.8小结 458
习题与思考题 459
推荐读物与阅读信息 459
第四部分 软件项目管理 462
第24章 项目管理概念 462
24.1管理涉及的范围 463
24.1.1人员 463
24.1.2产品 463
24.1.3过程 463
24.1.4项目 464
24.2人员 464
24.2.1利益相关者 464
24.2.2团队负责人 464
24.2.3软件团队 465
24.2.4敏捷团队 467
24.2.5协调与沟通问题 468
24.3产品 469
24.3.1软件范围 469
24.3.2问题分解 469
24.4过程 470
24.4.1合并产品和过程 470
24.4.2过程分解 470
24.5项目 471
24.6 W5HH原则 472
24.7关键实践 473
24.8小结 474
习题与思考题 474
推荐读物与阅读信息 474
第25章 过程度量和项目度量 477
25.1过程领域和项目领域中的度量 478
25.1.1过程度量和软件过程改进 478
25.1.2项目度量 479
25.2软件测量 480
25.2.1面向规模的度量 481
25.2.2 面向功能的度量 482
25.2.3调和代码行度量和功能点度量 482
25.2.4面向对象的度量 484
25.2.5面向用例的度量 485
25.2.6 Web应用项目度量 485
25.3软件质量度量 486
25.3.1测量质量 487
25.3.2缺陷排除效率 488
25.4在软件过程中集成度量 489
25.4.1支持软件度量的论点 489
25.4.2建立基线 490
25.4.3度量收集、计算和评估 490
25.5小型组织的度量 490
25.6制定软件度量大纲 491
25.7小结 493
习题与思考题 493
推荐读物与阅读信息 494
第26章 软件项目估算 496
26.1对估算的观察 497
26.2项目策划过程 498
26.3软件范围和可行性 498
26.4资源 499
26.4.1人力资源 499
26.4.2可复用软件资源 500
26.4.3环境资源 500
26.5软件项目估算 500
26.6分解技术 501
26.6.1软件规模估算 501
26.6.2基于问题的估算 502
26.6.3基于LOC估算的实例 503
26.6.4基于FP估算的实例 505
26.6.5基于过程的估算 505
26.6.6基于过程估算的实例 506
26.6.7基于用例的估算 507
26.6.8基于用例的估算实例 508
26.6.9协调不同的估算方法 508
26.7经验估算模型 509
26.7.1估算模型的结构 509
26.7.2 COCOMOⅡ模型 510
26.7.3软件方程 511
26.8面向对象项目的估算 512
26.9特殊的估算技术 512
26.9.1敏捷开发的估算 512
26.9.2 Web应用项目的估算 513
26.10自行开发或购买的决策 514
26.10.1创建决策树 514
26.10.2外包 515
26.11小结 517
习题与思考题 517
推荐读物与阅读信息 518
第27章 项目进度安排 519
27.1基本概念 520
27.2项目进度的安排 521
27.2.1基本原则 522
27.2.2人员与工作量之间的关系 522
27.2.3工作量分配 524
27.3为软件项目定义任务集 524
27.3.1任务集举例 525
27.3.2软件工程活动求精 525
27.4定义任务网络 526
27.5进度安排 527
27.5.1时序图 528
27.5.2跟踪进度 529
27.5.3跟踪OO项目的进展 530
27.5.4 WebApp项目进度安排 530
27.6挣值分析 533
27.7小结 534
习题与思考题 534
推荐读物与阅读信息 535
第28章 风险管理 537
28.1被动风险策略和主动风险策略 538
28.2软件风险 538
28.3风险识别 539
28.3.1评估整体项目风险 540
28.3.2风险因素和驱动因子 540
28.4风险预测 541
28.4.1建立风险表 542
28.4.2评估风险影响 543
28.5风险求精 545
28.6风险缓解、监测和管理 545
28.7 RMMM计划 546
28.8小结 548
习题与思考题 548
推荐读物与阅读信息 549
第29章 维护与再工程 550
29.1软件维护 551
29.2软件可支持性 552
29.3再工程 552
29.4业务过程再工程 553
29.4.1业务过程 553
29.4.2 BPR模型 554
29.5软件再工程 555
29.5.1软件再工程过程模型 555
29.5.2软件再工程活动 556
29.6逆向工程 557
29.6.1理解数据的逆向工程 558
29.6.2理解处理的逆向工程 559
29.6.3用户界面的逆向工程 559
29.7重构 560
29.7.1代码重构 560
29.7.2数据重构 560
29.8正向工程 561
29.8.1客户/服务器体系结构的正向工程 562
29.8.2面向对象体系结构的正向工程 563
29.9再工程经济学 563
29.10小结 564
习题与思考题 564
推荐读物与阅读信息 565
第五部分 软件工程高级课题 568
第30章 软件过程改进 568
30.1什么是SPI 569
30.1.1 SPI的方法 569
30.1.2成熟度模型 570
30.1.3 SPI适合每个人吗 571
30.2 SPI过程 571
30.2.1评估和差距分析 572
30.2.2教育和培训 573
30.2.3选择和合理性判定 573
30.2.4设置/迁移 574
30.2.5评价 574
30.2.6 SPI的风险管理 574
30.2.7关键的成功因素 575
30.3 CMMI 576
30.4人员CMM 579
30.5其他SPI框架 580
30.6 SPI的投资收益率 581
30.7 SPI趋势 582
30.8小结 582
习题与思考题 583
推荐读物与阅读信息 583
第31章 软件工程的新趋势 584
31.1技术演变 585
31.2观察软件工程的发展趋势 586
31.3识别“软趋势” 587
31.3.1管理复杂性 588
31.3.2开放世界的软件 589
31.3.3意外需求 589
31.3.4人才结构 590
31.3.5软件构造块 590
31.3.6对“价值”认识的转变 591
31.3.7开源 591
31.4技术方向 592
31.4.1过程趋势 592
31.4.2巨大的挑战 593
31.4.3协同开发 594
31.4.4需求工程 595
31.4.5模型驱动的软件开发 595
31.4.6后现代设计 596
31.4.7测试驱动的开发 596
31.5相关工具的趋势 597
31.5.1顺应软趋势的工具 598
31.5.2涉及技术趋势的工具 599
31.6小结 599
习题与思考题 599
推荐读物与阅读信息 600
第32章 结束语 601
32.1再论软件的重要性 601
32.2人员及其构造系统的方式 602
32.3表示信息的新模式 602
32.4远景 603
32.5软件工程师的责任 604
32.6结束语 605
附录1UML简介 607
附录2面向对象概念 620
参考文献 625