第一部分 传统的软件工程
第1章 软件工程概述31.1 软件的概念和特征 3
1.1.1 软件的概念 3
1.1.2 软件的分类 4
1.2 软件危机 5
1.2.1 软件危机的主要表现 6
1.2.2 产生软件危机的原因 7
1.2.3 解决软件危机的途径 8
1.3 软件工程 8
1.3.1 软件工程的定义 9
1.3.2 软件工程的目标 10
1.3.3 软件工程的研究内容 10
1.3.4 软件工程的基本原理 11
1.4 软件生存周期 13
1.4.1 软件生存周期定义 13
1.4.2 软件生存周期的基本任务 13
1.5 软件生存周期模型 14
1.5.1 瀑布模型 14
1.5.2 原型模型 15
1.5.3 增量模型 16
1.5.4 螺旋模型 17
1.5.5 喷泉模型 17
1.5.6 形式化方法模型 18
1.5.7 基于组件的开发模型 19
1.5.8 第四代技术模型 19
1.5.9 混合模型 20
1.6 小结 20
习题 20 软件工程实用教程 目 录 第2章 可行性研究与软件开发计划21
2.1 可行性研究的任务 21
2.2 可行性研究的过程 22
2.3 成本/效益分析 23
2.3.1 成本估计方法 23
2.3.2 成本/效益分析方法 24
2.4 可行性研究报告 26
2.5 软件开发计划 26
2.5.1 软件作用范围 27
2.5.2 资源需求 27
2.5.3 进度安排 27
2.6 软件开发计划说明书 27
2.7 小结 28
习题 28
第3章 需求工程30
3.1 软件需求 30
3.1.1 业务需求 30
3.1.2 用户需求 31
3.1.3 功能需求 31
3.1.4 非功能需求 31
3.2 需求工程过程 32
3.3 需求的获取 33
3.3.1 需求获取的过程 33
3.3.2 需求获取的常用方法 34
3.4 需求分析 36
3.4.1 需求分析的特点 36
3.4.2 需求分析的原则 36
3.4.3 需求分析的任务 37
3.4.4 需求分析的方法 38
3.4.5 需求分析过程 39
3.5 需求定义 39
3.6 需求验证 41
3.7 需求管理 43
3.8 案例: 小型教学管理系统 45
3.9 小结 47
习题 48
第4章 结构化分析49
4.1 结构化分析方法 49
4.1.1 结构化分析策略 49
4.1.2 SA的描述工具 50
4.1.3 SA的分析步骤 50
4.2 数据流图DFD 51
4.2.1 数据流图符号 51
4.2.2 绘制分层数据流图的方法 52
4.2.3 实例 54
4.2.4 数据流图的绘制与其他流程图的差别 56
4.3 数据字典 56
4.3.1 数据字典的内容 56
4.3.2 数据字典使用符号 58
4.3.3 数据字典条目实例 58
4.4 数据加工逻辑 59
4.4.1 结构化语言 59
4.4.2 判定表 60
4.4.3 判定树 62
4.5 实体关系图 62
4.6 结构化分析实例 64
4.7 小结 69
习题 69
第5章 总体设计70
5.1 软件设计基础 70
5.1.1 软件设计的目标 70
5.1.2 软件设计的任务 71
5.1.3 总体设计过程 71
5.2 软件设计的基本原理 72
5.2.1 模块化设计原理 72
5.2.2 抽象和逐步求精 74
5.2.3 信息隐蔽和局部化 75
5.2.4 模块独立性 75
5.2.5 软件结构设计优化原则 77
5.3 表示软件结构的图形 79
5.3.1 层次图和HIPO图 79
5.3.2 软件结构图 80
5.4 结构化设计方法 82
5.4.1 结构化设计的流程 82
5.4.2 典型的数据流类型和系统结构 83
5.4.3 变换分析 84
5.4.4 事物分析 88
5.5 总体设计文档及复审 91
5.6 小结 92
习题 92
第6章 详细设计93
6.1 结构化程序设计 93
6.2 详细设计的任务 93
6.3 详细设计的原则 94
6.4 详细设计工具 94
6.4.1 程序流程图 94
6.4.2 盒图(N-S图) 95
6.4.3 PAD图 96
6.4.4 过程设计语言 98
6.4.5 详细设计工具的选择 100
6.5 程序复杂性度量 101
6.6 详细设计文档及设计复审 103
6.7 小结 105
习题 105
第7章 软件编码107
7.1 程序设计语言 107
7.1.1 程序设计语言的特性 107
7.1.2 程序设计语言的分类 108
7.1.3 程序设计的选择 110
7.2 程序设计的风格 111
7.2.1 源程序文档化 111
7.2.2 数据说明 112
7.2.3 语句结构 112
7.2.4 输入和输出 113
7.2.5 重用 114
7.3 效率 114
7.4 小结 115
习题 116
第8章 软件测试117
8.1 软件测试基本理论 117
8.1.1 软件测试的概念 117
8.1.2 软件测试的原则 117
8.1.3 软件测试过程 119
8.1.4 软件测试方法 119
8.2 白盒测试技术 120
8.2.1 逻辑覆盖法 120
8.2.2 基本路径测试法 124
8.2.3 循环测试法 128
8.3 黑盒测试技术 129
8.3.1 等价类划分法 129
8.3.2 边界值分析法 132
8.3.3 错误推测法 134
8.3.4 因果图法 135
8.4 软件测试策略 135
8.4.1 单元测试 136
8.4.2 集成测试 137
8.4.3 确认测试 139
8.4.4 系统测试 140
8.5 小结 142
习题 142
第9章 软件维护143
9.1 软件维护概述 143
9.1.1 软件维护分类 143
9.1.2 软件维护成本 144
9.2 软件维护过程 146
9.2.1 软件维护活动 146
9.2.2 软件维护技术 149
9.3 软件可维护性 149
9.3.1 影响软件可维护性的因素 150
9.3.2 软件可维护性度量 150
9.3.3 提高可维护性的方法 152
9.4 软件维护的副作用 153
9.4.1 代码的副作用 153
9.4.2 数据副作用 153
9.4.3 文档副作用 154
9.5 软件再工程 154
9.5.1 软件再工程概述 154
9.5.2 软件再工程过程 155
9.5.3 软件再工程方法 157
9.6 小结 157
习题 157
第二部分 面向对象的软件工程
第10章 面向对象基础16110.1 面向对象方法论概述 161
10.1.1 传统软件开发方法中存在的问题 161
10.1.2 面向对象方法主要优点 163
10.1.3 面向对象方法的发展史及现状简介 165
10.2 面向对象的基本概念 166
10.2.1 对象 166
10.2.2 类 166
10.2.3 消息 166
10.2.4 封装性 166
10.2.5 继承性 167
10.2.6 多态性 167
10.3 面向对象软件工程 168
10.3.1 面向对象的开发方法 168
10.3.2 统一建模语言UML 169
10.3.3 RUP过程 169
10.3.4 工具 173
10.4 小结 174
习题 174
第11章 UML建模语言175
11.1 UML统一建模语言简介 175
11.1.1 UML的发展历史 175
11.1.2 UML的特点 176
11.1.3 UML用于软件的开发 176
11.2 UML的基本模型 177
11.2.1 UML的事物 177
11.2.2 UML的关系 179
11.2.3 UML的图 182
11.3 用例图 184
11.3.1 用例图描述 184
11.3.2 建立用例模型 187
11.3.3 用例图示例 189
11.4 类图 189
11.4.1 类图描述 189
11.4.2 类的表示方法 189
11.4.3 类的关系 191
11.4.4 类图示例 191
11.5 对象图 192
11.5.1 对象图描述 192
11.5.2 对象的表示方法 192
11.5.3 对象图示例 192
11.6 包图 193
11.6.1 包图描述 193
11.6.2 包的表示方法 193
11.6.3 包之间的关系 194
11.6.4 包图示例 194
11.7 状态机图 195
11.7.1 状态机图描述 195
11.7.2 状态的表示方法 195
11.7.3 转换 196
11.7.4 事件 196
11.7.5 状态图示例 197
11.8 活动图 198
11.8.1 活动图描述 198
11.8.2 活动的表示方法 198
11.8.3 泳道 199
11.8.4 对象流和控制流 199
11.8.5 活动图示例 200
11.9 顺序图 200
11.9.1 顺序图描述 200
11.9.2 顺序图表示方法 201
11.9.3 顺序图示例 202
11.10 通信图 202
11.10.1 通信图描述 202
11.10.2 通信图表示方法 203
11.10.3 通信图示例 204
11.11 构件图 205
11.11.1 构件图描述 205
11.11.2 构件的表示方法 205
11.11.3 接口 206
11.11.4 依赖关系 206
11.11.5 构件图示例 207
11.12 部署图 208
11.12.1 部署图描述 208
11.12.2 部署图表示方法 209
11.12.3 部署图示例 210
11.13 小结 211
习题 211
第12章 面向对象分析212
12.1 面向对象分析过程 212
12.2 建立用例模型 213
12.2.1 确定系统的执行者 213
12.2.2 确定用例 213
12.2.3 确定用例模型 214
12.2.4 用例模型说明 215
12.2.5 用例模型评价 217
12.2.6 优化用例模型 218
12.2.7 构造系统原型 218
12.3 建立对象模型 218
12.3.1 补充用例说明 219
12.3.2 识别分析类 219
12.3.3 描述类的职责 221
12.3.4 建立分析类之间的关系 222
12.3.5 描述每个类的属性 223
12.4 建立动态模型 223
12.5 评审分析模型 225
12.6 小结 226
习题 226
第13章 面向对象的设计227
13.1 面向对象设计准则 227
13.1.1 设计准则 227
13.1.2 设计策略 228
13.1.3 系统分解与组织 230
13.2 问题域子系统设计 232
13.3 人机交互子系统设计 233
13.4 任务管理子系统设计 235
13.5 数据管理子系统设计 237
13.5.1 选择数据存储管理模式 237
13.5.2 设计数据管理子系统 238
13.6 对象设计 240
13.6.1 使用模式设计对象 241
13.6.2 接口规格说明设计 241
13.6.3 重构对象设计模型 243
13.6.4 优化对象设计模型 243
13.7 小结 244
习题 244
第14章 面向对象实现245
14.1 面向对象程序设计语言 245
14.2 面向对象的程序实现特征 246
14.3 面向对象测试 247
14.3.1 面向对象测试模型 248
14.3.2 面向对象分析的测试 248
14.3.3 面向对象设计的测试 249
14.3.4 面向对象编程的测试 250
14.3.5 面向对象的单元测试 251
14.3.6 面向对象的集成测试 253
14.3.7 面向对象的系统测试 254
14.4 小结 255
习题 255
第三部分 软件工程管理
第15章 软件工程管理25915.1 软件项目管理 259
15.1.1 软件项目管理的特点 259
15.1.2 软件项目管理活动 260
15.1.3 软件项目计划 261
15.2 软件风险管理 272
15.2.1 风险识别 272
15.2.2 风险分析 276
15.2.3 风险规划 277
15.2.4 风险控制 278
15.3 软件质量管理 278
15.3.1 软件质量基础 279
15.3.2 软件质量控制 279
15.4 软件配置管理 280
15.4.1 软件配置管理概述 281
15.4.2 软件配置管理过程 282
15.5 软件过程管理 283
15.5.1 ISO 9000体系 283
15.5.2 能力成熟度模型 284
15.6 小结 286
习题 287