第1章 软件工程概述 /1
1.1 软件的概念、特点和分类 /1
1.1.1 软件的概念及特点 /1
1.1.2 软件的分类 /2
1.1.3 软件的发展及软件危机 /3
1.2 软件工程 /5
1.2.1 软件工程的定义 /5
1.2.2 软件工程的框架 /6
1.2.3 软件工程知识体系及知识域 /7
1.2.4 软件工程的基本原理 /10
1.3 软件生存周期与软件过程 /11
1.3.1 软件生存周期的基本任务 /11
1.3.2 软件过程 /13
1.4 软件过程模型 /13
1.4.1 瀑布模型 /14
1.4.2 快速原型模型 /15
1.4.3 形式化系统开发模型 /16
1.4.4 面向复用的开发模型 /17
1.4.5 增量模型 /18
1.4.6 螺旋模型 /19
1.4.7 喷泉模型 /21
1.4.8 智能模型 /21
1.4.9 快速应用开发模型 /22
1.4.10 Rational统一开发过程 /24
1.5 问题解决和范型 /26
1.5.1 范型 /27
1.5.2 流行的范型 /27第2章 计算机系统工程 /32
2.1 基于计算机的系统 /32
2.2 计算机系统工程 /33
2.2.1 识别用户的要求 /33
2.2.2 系统分析和结构设计 /35
2.2.3 可行性研究 /36
2.2.4 建立成本和进度的限制 /36
2.2.5 生成系统需求规格说明 /36
2.3 系统分析与结构设计 /38
2.3.1 系统分析的层次 /38
2.3.2 业务过程工程和产品工程建模 /39
2.3.3 系统模型模板 /41
2.3.4 系统文档与评审 /45
2.4 可行性研究 /46
2.4.1 经济可行性 /46
2.4.2 技术可行性 /49
2.4.3 法律可行性 /50
2.4.4 用户操作可行性 /50
2.4.5 方案的选择和折衷 /50
2.4.6 可行性研究报告 /51
2.5 其他系统描述方法 /52
2.5.1 系统框图和系统流程图 /52
2.5.2 HIPO建模 /53第3章 面向对象方法与UML /57
3.1 面向对象系统的概念 /57
3.1.1 面向对象系统的概念 /57
3.1.2 对象 /58
3.1.3 类与封装 /59
3.1.4 继承 /60
3.1.5 多态性和动态绑定 /61
3.1.6 消息通信 /62
3.1.7 对象生存周期 /63
3.2 统一建模语言UML概述 /63
3.2.1 什么是建模 /63
3.2.2 UML发展历史 /64
3.2.3 UML的特点 /65
3.2.4 UML的视图 /66
3.3 UML的模型元素 /67
3.3.1 UML的事物 /68
3.3.2 UML中的关系 /69
3.4 UML中的图 /75
3.4.1 外部视图 /75
3.4.2 内部视图 /80
3.5 UML的元模型结构 /86
3.6 UML建模工具Rational Rose /87
3.6.1 Rose的特点 /88
3.6.2 Rose简介 /89
3.6.3 Rose的基本操作 /90
3.6.4 在Rose环境下建立UML模型 /93第4章 软件需求工程 /108
4.1 软件需求工程基础 /108
4.1.1 软件需求的定义和层次 /108
4.1.2 软件需求工程过程 /111
4.1.3 需求工程方法 /114
4.2 需求获取 /115
4.2.1 需求获取的任务和原则 /115
4.2.2 需求获取的过程 /116
4.2.3 需求的表达 /120
4.2.4 用逆向沟通改善需求的质量 /123
4.3 传统的分析建模方法 /124
4.3.1 数据建模 /125
4.3.2 功能建模 /127
4.3.3 行为建模 /132
4.3.4 数据字典 /136
4.3.5 基本加工逻辑说明 /139
4.4 面向对象的分析建模方法 /142
4.4.1 面向对象分析建模概述 /142
4.4.2 识别类或对象 /143
4.4.3 识别关系(结构) /149
4.4.4 标识类的属性和服务 /150
4.4.5 分析模型评审 /152
4.5 原型化方法 /153
4.5.1 软件原型的分类 /153
4.5.2 快速原型开发模型 /154
4.5.3 原型开发技术 /157
4.6 需求规格说明 /159
4.6.1 软件需求规格说明的目标 /159
4.6.2 软件需求规格说明编制的原则 /159
4.6.3 软件需求规格说明模板 /161
4.6.4 SRS和DRD的质量要求 /163
4.7 软件需求评审 /165
4.7.1 正式的需求评审 /165
4.7.2 需求评审中的常见风险 /167
4.8 软件需求管理 /167
4.8.1 需求管理的概念 /167
4.8.2 需求规格说明的版本控制 /168
4.8.3 需求跟踪 /169
4.8.4 需求变更请求的管理 /172第5章 软件设计工程 /175
5.1 软件设计的目标与准则 /175
5.1.1 性能准则 /175
5.1.2 可靠性准则 /175
5.1.3 成本准则 /176
5.1.4 维护准则 /176
5.1.5 最终用户准则 /177
5.2 软件设计工程的任务 /177
5.2.1 软件设计的概念 /177
5.2.2 软件设计的阶段与任务 /178
5.2.3 软件设计的过程 /179
5.3 创建良好设计的原则 /180
5.3.1 分而治之和模块化 /180
5.3.2 模块独立性 /181
5.3.3 尽量降低耦合性 /181
5.3.4 尽量提高内聚性 /184
5.3.5 提高抽象层次 /186
5.3.6 复用性设计 /187
5.3.7 灵活性设计 /187
5.3.8 预防过期 /188
5.3.9 可移植性设计 /188
5.3.10 可测试性设计 /188
5.3.11 防御性设计 /189
5.4 传统的面向过程的设计方法 /189
5.4.1 结构化设计与结构化分析的关系 /190
5.4.2 软件结构及表示工具 /190
5.4.3 典型的数据流类型和系统结构 /194
5.4.4 变换流映射 /197
5.4.5 事务流映射 /200
5.4.6 软件模块结构改进的方法 /201
5.4.7 接口设计 /205
5.5 面向对象的系统设计 /205
5.5.1 子系统分解 /206
5.5.2 问题域部分的设计 /208
5.5.3 人机交互部分的设计 /210
5.5.4 任务管理部分的设计 /213
5.5.5 数据管理部分的设计 /214
5.6 对象设计 /216
5.6.1 使用模式设计对象 /216
5.6.2 接口规格说明设计 /220
5.6.3 重构对象设计模型 /222
5.6.4 优化对象设计模型 /222
5.7 处理过程设计 /223
5.7.1 结构化程序设计 /223
5.7.2 程序流程图 /224
5.7.3 N-S图 /227
5.7.4 PAD图 /228
5.7.5 程序设计语言PDL /230
5.7.6 判定表 /230
5.7.7 HIPO /232
5.8 软件设计规格说明 /232
5.8.1 软件(结构)设计说明(SDD) /232
5.8.2 数据库(顶层)设计说明(DBDD) /233
5.8.3 接口设计说明(IDD) /234
5.9 软件设计评审 /235
5.9.1 概要设计评审的检查内容 /235
5.9.2 详细设计评审的检查内容 /236第6章 体系结构设计与设计模式 /238
6.1 软件体系结构的概念 /238
6.1.1 什么是体系结构 /238
6.1.2 体系结构的重要作用 /239
6.1.3 构件的定义与构件之间的关系 /239
6.2 体系结构设计与风格 /241
6.2.1 体系结构设计的过程 /241
6.2.2 系统环境表示 /241
6.2.3 体系结构的结构风格 /242
6.2.4 体系结构的控制模型 /247
6.2.5 体系结构的模块分解 /249
6.3 特定领域的软件体系结构 /250
6.3.1 类属模型 /250
6.3.2 参考模型 /251
6.4 分布式系统结构 /252
6.4.1 多处理器体系结构 /252
6.4.2 客户机/服务器体系结构 /252
6.4.3 分布式对象体系结构 /256
6.4.4 代理 /257
6.4.5 聚合和联邦体系 /258
6.5 软件体系结构的评价 /260
6.6 体系结构描述语言 /261
6.7 设计模式 /262
6.7.1 什么是设计模式 /263
6.7.2 设计模式分类 /264
6.7.3 创建型设计模式 /264
6.7.4 结构型设计模式 /271
6.7.5 行为型设计模式 /281
6.7.6 设计模式如何解决设计问题 /294
6.7.7 如何使用设计模式 /298第7章 软件实现 /300
7.1 软件实现的过程与任务 /300
7.2 程序设计方法概述 /301
7.2.1 结构化程序设计 /302
7.2.2 面向对象的程序设计方法 /304
7.2.3 极限编程 /308
7.3 编程风格与编码标准 /312
7.3.1 源程序文档化 /312
7.3.2 数据说明规范化 /314
7.3.3 程序代码结构化 /315
7.3.4 输入/输出风格可视化 /318
7.3.5 编程规范 /320
7.4 编程语言 /324
7.4.1 编程语言特性的比较 /325
7.4.2 编程语言的分类 /328
7.4.3 编程语言的选择 /334
7.5 程序效率与性能分析 /335
7.5.1 算法对效率的影响 /335
7.5.2 影响存储器效率的因素 /336
7.5.3 影响输入/输出的因素 /336
7.6 程序复杂性 /336
7.6.1 代码行度量法 /337
7.6.2 McCabe度量法 /337
7.6.3 Henry-Kafura的信息流度量 /339
7.6.4 Thayer复杂性度量 /339
7.6.5 Halstead的软件科学 /341
7.6.6 软件复杂性的综合度量 /343第8章 软件测试工程 /344
8.1 软件测试的任务 /344
8.1.1 软件测试的目的和定义 /344
8.1.2 软件测试的原则 /345
8.1.3 软件测试的对象 /347
8.1.4 测试信息流 /347
8.1.5 软件测试的生存周期模型 /348
8.1.6 软件的确认和验证 /349
8.1.7 软件测试文档 /349
8.2 软件错误 /352
8.2.1 按错误的影响和后果分类 /352
8.2.2 按错误的性质和范围分类 /352
8.2.3 按软件生存周期阶段分类 /353
8.2.4 错误统计 /354
8.3 人工测试 /354
8.3.1 桌面检查 /354
8.3.2 代码检查 /356
8.3.3 走查 /358
8.4 软件开发生存周期中的测试活动 /359
8.4.1 软件需求分析阶段的测试活动 /360
8.4.2 软件设计阶段的测试活动 /361
8.4.3 编程及单元测试阶段的测试活动 /363
8.4.4 集成测试阶段的测试活动 /364
8.4.5 系统测试阶段的测试活动 /366
8.4.6 验收测试 /366
8.4.7 运行和维护阶段的测试活动 /367
8.4.8 回归测试 /368
8.5 面向对象的测试 /369
8.5.1 面向对象软件测试的问题 /369
8.5.2 面向对象软件测试的模型 /371
8.5.3 面向对象分析的测试 /372
8.5.4 面向对象设计的测试 /372
8.5.5 面向对象编程的测试 /373
8.5.6 面向对象程序的单元测试 /373
8.5.7 面向对象程序的集成测试 /373
8.5.8 面向对象软件的系统测试 /374
8.6 单元测试 /374
8.6.1 单元测试的定义和目标 /374
8.6.2 单元测试环境 /375
8.6.3 单元测试策略 /376
8.6.4 单元测试分析 /377
8.6.5 面向对象程序的单元测试 /379
8.7 集成测试 /381
8.7.1 集成测试的定义和目标 /381
8.7.2 集成测试环境 /381
8.7.3 集成测试策略 /382
8.7.4 集成测试分析 /387
8.7.5 面向对象程序的集成测试 /390
8.8 系统测试 /391
8.8.1 系统测试的定义与目标 /391
8.8.2 系统测试环境 /391
8.8.3 系统测试策略 /392
8.8.4 系统测试分析 /400
8.9 程序调试 /401
8.9.1 程序调试的步骤 /401
8.9.2 几种主要的调试方法 /402
8.9.3 调试的原则 /404第9章 软件测试用例设计 /406
9.1 测试用例设计概述 /406
9.1.1 测试用例的重要性 /406
9.1.2 测试用例数和软件规模的关系 /407
9.1.3 测试用例设计说明的书写规范 /407
9.2 软件测试用例设计方法 /409
9.2.1 黑盒测试方法(Black-Box Testing) /409
9.2.2 白盒测试方法(White-Box Testing) /410
9.3 白盒测试用例设计方法 /411
9.3.1 逻辑覆盖 /411
9.3.2 判定和循环结构测试 /416
9.3.3 基本路径测试 /418
9.4 黑盒测试用例设计方法 /420
9.4.1 等价类划分 /420
9.4.2 边界值分析 /424
9.4.3 判定表法 /426
9.4.4 因果图法 /428
9.4.5 其他黑盒测试用例设计方法 /431
9.4.6 选择测试方法的综合策略及工作
步骤 /432
9.5 单元测试用例设计 /433
9.5.1 单元测试用例设计的步骤 /433
9.5.2 单元测试用例设计方法 /434
9.5.3 构建类声明的测试用例 /437
9.5.4 根据状态图构建测试用例 /440
9.6 集成测试的测试用例设计 /442
9.6.1 集成测试用例设计的步骤 /442
9.6.2 基于协作图生成集成测试用例
设计 /443
9.6.3 继承关系的测试用例设计 /449
9.7 系统测试用例的设计 /450
9.7.1 基于场景设计测试用例 /450
9.7.2 基于功能图设计测试用例 /455
9.7.3 基于有限状态机的系统级线索设计测试
用例 /457
9.7.4 基于UML的系统级线索测试用例
设计 /461第10章 软件维护 /462
10.1 软件维护的概念 /462
10.1.1 软件维护的定义 /462
10.1.2 影响维护工作量的因素 /463
10.1.3 软件维护的策略 /464
10.1.4 维护成本 /465
10.2 软件维护的活动 /466
10.2.1 维护机构 /466
10.2.2 软件维护申请报告 /466
10.2.3 软件维护过程模型 /467
10.2.4 软件维护的一般工作流程 /468
10.2.5 维护记录文档 /469
10.2.6 维护评价 /469
10.3 程序修改的步骤及修改的副作用 /470
10.3.1 结构化维护与非结构化维护 /470
10.3.2 软件维护面临的问题 /471
10.3.3 分析和理解程序 /472
10.3.4 评估修改范围 /474
10.3.5 修改程序 /474
10.3.6 重新验证程序 /476
10.4 面向对象软件的维护 /478
10.5 软件可维护性 /480
10.5.1 可维护性的外部视图 /480
10.5.2 影响可维护性的内部质量属性 /481
10.5.3 其他可维护性的度量 /483
10.6 提高可维护性的方法 /488
10.6.1 建立明确的软件质量目标和优
先级 /488
10.6.2 使用提高软件质量的技术和
工具 /488
10.6.3 进行明确的质量保证审查 /492
10.6.4 选择可维护的程序设计语言 /495
10.6.5 改进程序的文档 /496
10.7 遗留系统的再工程 /496
10.7.1 遗留系统的演化 /496
10.7.2 软件再工程 /498
10.7.3 遗留系统的现代化改造的过程 /501
10.7.4 重构与逆向工程 /502
10.7.5 系统体系结构的重构 /505
10.7.6 程序理解策略和模型 /507
10.7.7 影响程序理解的因素及对策 /509参考文献 /511
