前言
第一部分 软件工程基础
第1章 软件工程概述2
1.1 引言2
1.2 什么是软件2
1.2.1 软件的定义与特性2
1.2.2 软件技术的演化3
1.3 什么是软件工程4
1.3.1 软件危机4
1.3.2 解决软件危机的途径5
1.3.3 软件工程的定义5
1.4 软件工程的基本原理与基本原则7
1.4.1 基本原理7
1.4.2 基本原则8
1.5 软件工程开发方法学8
1.5.1 结构化开发方法学9
1.5.2 面向对象开发方法学9
1.5.3 重型软件工程与轻型软件工程10
1.6 小结10
习题11
第2章 软件过程12
2.1 引言12
2.2 什么是软件过程12
2.2.1 软件过程的定义12
2.2.2 软件过程框架13
2.3 软件产品与过程15
2.4 软件生存周期17
2.5 软件工程活动18
2.6 小结20
习题21
第3章 软件过程模型22
3.1 引言22
3.2 什么是软件过程模型22
3.3 传统的软件过程模型22
3.3.1 瀑布模型22
3.3.2 增量模型24
3.3.3 螺旋模型25
3.4 面向对象模型26
3.4.1 构件集成模型26
3.4.2 统一过程模型27
3.5 小结29
习题29
第4章 敏捷软件开发方法30
4.1 引言30
4.2 敏捷软件开发过程30
4.2.1 敏捷过程30
4.2.2 敏捷开发原则31
4.3 Scrum开发过程31
4.3.1 Scrum的特点31
4.3.2 Scrum模型与过程32
4.4 极限编程 33
4.4.1 什么是极限编程33
4.4.2 极限编程的要素34
4.5 结对编程35
4.5.1 什么是结对编程36
4.5.2 结对编程的优势分析37
4.5.3 结对编程的分类39
4.5.4 结对编程的方式39
4.6 小结41
习题41
第二部分 结构化分析、设计与测试
第5章 软件需求分析44
5.1 引言44
5.2 什么是软件需求44
5.3 需求分析过程45
5.4 会谈技术49
5.4.1 非正式会谈49
5.4.2 正式会谈49
5.5 调查技术50
5.5.1 确定调查内容50
5.5.2 可靠可信分析51
5.6 场景分析技术51
5.7 小结52
习题52
第6章 结构化分析53
6.1 引言53
6.2 结构化分析模型53
6.3 面向数据流的建模方法54
6.3.1 数据流建模方法54
6.3.2 实例分析57
6.4 面向数据的建模方法58
6.4.1 数据建模方法58
6.4.2 实例分析59
6.5 面向状态的建模方法60
6.5.1 状态建模方法60
6.5.2 实例分析61
6.6 规格说明书编写示例62
6.7 小结70
习题70
第7章 结构化设计71
7.1 引言71
7.2 软件设计过程71
7.3 软件模块化设计75
7.4 软件结构78
7.5 结构化概要设计79
7.5.1 数据流模型79
7.5.2 数据流设计方法80
7.5.3 实例分析81
7.6 概要设计文档编写示例83
7.7 详细设计90
7.8 结构化详细设计91
7.9 详细设计文档编写示例98
7.10 编码实现101
7.10.1 编码语言101
7.10.2 编码风格102
7.11 小结103
习题103
第8章 结构化软件测试106
8.1 引言106
8.2 软件测试的目的和原则106
8.3 软件测试的基本过程108
8.3.1 单元测试108
8.3.2 集成测试110
8.3.3 确认测试110
8.3.4 系统测试111
8.4 测试用例设计111
8.5 黑盒测试技术112
8.5.1 等价类划分112
8.5.2 边界值分析113
8.5.3 错误推测114
8.5.4 因果图114
8.6 白盒测试技术117
8.6.1 逻辑覆盖117
8.6.2 路径覆盖120
8.6.3 循环路径测试策略122
8.7 集成测试技术123
8.7.1 集成策略123
8.7.2 性能测试125
8.7.3 实例分析127
8.8 调试技术133
8.8.1 调试过程133
8.8.2 调试策略134
8.9 软件测试文档135
8.9.1 软件测试计划文档135
8.9.2 集成测试文档137
8.10 小结139
习题139
第9章 高要求系统的分析与设计140
9.1 引言140
9.2 什么是高要求系统140
9.3 高要求系统的需求分析142
9.3.1 风险需求描述143
9.3.2 安全性描述146
9.3.3 信息安全描述146
9.3.4 软件可靠性描述146
9.3.5 胰岛素输送系统完整的需求描述147
9.4 形式化描述方法149
9.4.1 软件过程中的形式化描述149
9.4.2 接口描述方法150
9.4.3 行为描述153
9.5 高要求系统的设计155
9.6 高要求系统的开发156
9.7 系统验证160
9.7.1 可靠性验证160
9.7.2 安全性保证161
9.7.3 信息安全评估164
9.8 小结165
习题166
第三部分 面向对象分析、设计与测试
第10章 面向对象分析168
10.1 引言168
10.2 面向对象模型168
10.3 UML170
10.3.1 UML的组成170
10.3.2 UML的视图171
10.4 面向对象分析过程172
10.5 用例驱动分析173
10.5.1 用例建模分析173
10.5.2 开发活动图177
10.5.3 开发泳道图178
10.6 领域与业务建模179
10.6.1 识别业务类和领域类179
10.6.2 业务类图180
10.6.3 识别属性和操作181
10.6.4 开发协作图182
10.6.5 开发包图182
10.6.6 逻辑架构183
10.7 系统行为建模185
10.7.1 系统顺序图185
10.7.2 建立操作契约186
10.7.3 建立顺序图187
10.7.4 系统状态图188
10.8 POS机系统案例分析188
10.9 分布式结对编程系统分析191
10.9.1 项目概述191
10.9.2 功能描述192
10.9.3 逻辑分析与建模200
10.10 小结204
习题205
第11章 面向对象设计206
11.1 引言206
11.2 面向对象设计模型206
11.3 构件设计207
11.3.1 构件设计的步骤207
11.3.2 构件设计的原则208
11.4 并发性设计209
11.5 设计模式211
11.5.1 基于职责的设计211
11.5.2 常见的设计模式212
11.6 面向对象详细设计215
11.6.1 模型精化216
11.6.2 逻辑架构精化设计219
11.6.3 分层设计221
11.6.4 类操作设计223
11.7 方法设计229
11.8 精化设计234
11.9 数据存储与持久性设计238
11.10 部署设计与构件图243
11.11 小结244
习题245
第12章 面向对象实现与测试246
12.1 引言246
12.2 面向对象实现246
12.3 POS机系统实现247
12.4 分布式结对编程系统实现253
12.5 面向对象测试256
12.6 面向对象测试策略258
12.7 测试驱动开发261
12.7.1 什么是测试驱动开发261
12.7.2 测试驱动开发的步骤264
12.7.3 编写测试程序266
12.7.4 代码重构270
12.8 小结271
习题271
第四部分 软件维护与项目管理
第13章 软件维护274
13.1 引言274
13.2 软件的可维护性275
13.3 软件维护的类型275
13.4 软件维护方法277
13.5 提高软件的可维护性279
13.5.1 结构化维护与非结构化维护279
13.5.2 提高软件可维护性的技术途径280
13.6 小结281
习题281
第14章 软件项目管理283
14.1 引言283
14.2 软件项目组织285
14.3 软件过程管理287
14.3.1 软件过程度量287
14.3.2 软件过程改进288
14.3.3 软件项目度量289
14.4 软件项目风险管理289
14.4.1 风险识别289
14.4.2 风险预测290
14.4.3 风险管理290
14.5 软件配置管理291
14.5.1 基本概念291
14.5.2 软件配置管理过程292
14.6 软件项目估算293
14.6.1 软件项目资源293
14.6.2 软件规模度量294
14.6.3 估算管理296
14.7 分解技术296
14.7.1 基于问题分解的估算296
14.7.2 基于过程分解的估算298
14.8 经验估算技术299
14.8.1 专家类比推断299
14.8.2 中级COCOMO估算模型300
14.9 软件质量管理303
14.9.1 软件质量保证303
14.9.2 软件质量度量305
14.10 项目进度管理308
14.10.1 项目进度管理计划308
14.10.2 进度安排309
14.10.3 进度跟踪管理311
14.11 小结311
习题312
参考文献314