目录 1
第1章 绪论 1
1.1 软件工程的产生 1
1.1.1 软件的特征 1
1.1.2 软件危机的出现 3
1.1.3 软件工程的提出 3
1.2 软件工程的研究对象与基本原理 3
1.2.2 软件工程的层次结构 4
1.2.1 软件工程的研究对象 4
1.2.3 软件工程的基本原理 5
1.3 软件开发方法 5
1.3.1 结构化方法 5
1.3.2 面向对象方法 6
1.3.3 形式化方法 7
1.3.4 结构化方法、面向对象方法和形式化方法的结合研究 7
1.4 软件工程工具和环境 8
1.4.1 软件工具 8
1.4.2 CASE集成环境 9
1.5 软件生存期过程 11
1.6.1 瀑布模型 12
1.6 软件工程常用生存周期模型 12
1.6.2 快速原型化模型 14
1.6.3 快速应用开发模型 15
1.6.4 渐增模型 17
1.6.5 螺旋模型 18
1.7 软件工程的并行工程 19
1.7.1 簇的基本概念 19
1.7.3 簇的基本步骤和任务 20
1.7.2 并行工程的提出 20
1.7.4 簇模型与并行工程 21
1.7.5 无缝开发和可逆性的基本概念 22
1.8 小结 23
习题1 23
第2章 需求分析 25
2.1 需求分析的目标 25
2.2 可行性分析 25
2.2.1 可行性分析内容 26
2.2.3 系统流程图 27
2.2.2 可行性分析基本步骤 27
2.3 需求收集 29
2.3.1 需求收集的内容 29
2.3.2 需求收集的方法 29
2.4 需求规格说明 30
2.5 数据流建模 31
2.5.1 数据流图中的常用符号 31
2.5.2 数据流图的用途 34
2.5.3 数据词典和加工说明 35
2.6.1 实体-关系图 38
2.6 实体-关系建模 38
2.6.2 基数和模态 39
2.6.3 实体-关系图的例子 40
2.7 系统行为建模 41
2.7.1 处理模型和控制模型的关系 42
2.7.2 一个控制流图的例子 42
2.7.3 一个状态转换图的例子 44
2.8 IDEF0功能建模 44
2.8.1 IDEF0图 45
2.8.2 IDEF0建模步骤 49
2.8.3 有关注意事项 50
2.9 IDEF1X数据建模 51
2.9.1 IDEF1X图 51
2.9.2 IDEF1X建模步骤 55
2.10 用例建模 56
2.10.1 用例图 56
2.10.2 参与者及用例的描述 60
2.10.3 用例建模步骤 62
2.11 面向对象建模 63
2.11.1 面向对象建模的发展 64
2.11.2 面向对象基础 65
2.11.3 面向对象分析模型 72
2.11.4 对象模型的建立 72
2.11.5 行为模型的建立 75
2.11.6 功能模型的建立 79
2.12 统一建模语言UML 82
2.12.1 UML的基本实体 83
2.12.2 UML的目标 84
2.12.3 UML的范畴 84
2.12.4 UML图的使用实例 85
2.13 小结 89
习题2 90
第3章 概要设计 92
3.1 概要设计的任务和过程 92
3.1.1 数据设计(对象设计) 93
3.1.2 软件结构设计(子系统设计) 93
3.2.1 抽象与求精 94
3.2 软件设计基本原则 94
3.1.4 过程设计(方法设计) 94
3.1.3 接口设计(消息设计) 94
3.2.2 模块化和信息隐藏 96
3.2.3 模块独立性 97
3.3 面向数据流图的设计方法 100
3.3.1 软件结构的图形表示 100
3.3.2 数据流分析 101
3.3.3 事务分析 103
3.3.4 软件结构的改进 105
3.4.1 软件复用 106
3.4 面向对象的设计方法 106
3.4.2 面向对象设计 109
3.5 面向对象软件设计模式 114
3.5.1 设计模式的描述与分类 115
3.5.2 创建型模式 116
3.5.3 结构型模式 119
3.5.4 行为型模式 120
3.6 模型-视图-控制器框架 124
习题3 125
3.7 小结 125
第4章 详细设计 127
4.1 详细设计的目标与任务 127
4.1.1 详细设计的目标 127
4.1.2 详细设计的任务 127
4.2 结构化程序的详细设计技术与工具 128
4.2.1 结构化程序的详细设计技术 128
4.2.2 结构化程序的详细设计工具 129
4.3 Jackson程序设计方法………………………………………………………………?4.3.1 Jackson图…………………………………………………………………………………………1?4.3.2 Jackson伪代码 134
4.3.3 Jackson程序设计方法的步骤 135
4.4.1 Warnier图 139
4.4 Warnier程序设计方法 139
4.4.2 Warnier程序设计步骤 140
4.5 面向对象程序的详细设计 144
4.5.1 面向对象程序的特性 144
4.5.2 设计原则 151
4.6 基于组件的程序设计方法 153
4.6.1 三层应用体系结构 153
4.6.2 CORBA对象总线技术 155
4.6.3 COM对象总线技术 158
4.6.4 组件库技术 160
4.7 小结 164
习题4 164
第5章 软件验证技术 166
5.1 软件测试基础 166
5.1.1 测试观点 166
5.1.2 测试原则 167
5.1.3 测试工具 167
5.1.4 测试组织 168
5.1.6 动态测试步骤 169
5.1.5 测试与调试 169
5.2 代码复审 170
5.2.1 代码复审内容 170
5.2.2 代码会审 171
5.2.3 走查 171
5.2.4 办公桌检查 171
5.3 白盒测试 172
5.3.1 逻辑覆盖法 172
5.3.2 基本路径覆盖法 173
5.3.3 循环覆盖法 176
5.4 黑盒测试 177
5.4.1 等价分类法 177
5.4.2 边界值分析法 179
5.4.3 猜错法 180
5.4.4 因果图法 181
5.5 单元测试 184
5.5.1 测试策略 184
5.5.2 测试内容 184
5.5.3 测试的阶段及活动 186
5.6.1 测试内容 187
5.6 集成测试 187
5.5.4 测试软件 187
5.6.2 测试策略 188
5.6.3 非渐增式测试 188
5.6.4 渐增式测试 188
5.6.5 回归测试 191
5.7 确认测试 191
5.7.1 确认测试内容 191
5.7.2 α测试和β测试 192
5.8.2 安全性测试 193
5.8 系统测试 193
5.8.1 恢复测试 193
5.8.3 可用性测试 194
5.8.4 安装测试 194
5.8.5 互连测试 194
5.9 程序正确性证明 194
5.9.1 程序正确性定义 195
5.9.2 Floyd不变式断言法 196
5.9.3 Floyd良序集方法 198
5.9.4 程序正确性证明的局限性 200
5.10 调试 200
5.10.1 调试的步骤 201
5.10.2 调试的策略 201
5.10.3 调试的原则 202
5.11 小结 202
习题5 203
6.1.1 软件质量特性 205
6.1 软件质量 205
第6章 软件质量和软件质量保证体系 205
6.1.2 软件质量评价 206
6.1.3 软件质量保证 207
6.1.4 软件质量管理 207
6.2 软件复杂性分析 209
6.2.1 基于需求分析的复杂性分析 209
6.2.2 基于软件设计的复杂性分析 213
6.2.3 基于源程序代码的复杂性分析 216
6.2.4 基于软件维护的复杂性分析 217
6.3.1 软件可靠性三要素 218
6.3 软件可靠性分析 218
6.3.2 软件可靠性模型 220
6.3.3 软件可靠性工程 223
6.4 ISO 9000软件质量体系 225
6.4.1 ISO 9000族国际标准 225
6.4.2 企业软件质量体系的建立和实施 227
6.5.1 软件配置项 230
6.5.2 软件配置管理 230
6.5 软件配置管理 230
6.6 软件过程能力成熟度模型简介 233
6.6.1 基本概念 234
6.6.2 软件过程能力成熟度等级 235
6.6.3 关键过程域 236
6.6.4 关键实践 238
6.6.5 软件过程能力成熟度模型的应用 239
6.7 小结 240
习题6 240
7.1 软件维护的基本概念 243
7.1.1 软件维护类型 243
第7章 软件维护技术 243
7.1.2 软件维护策略 244
7.1.3 软件维护成本 244
7.1.4 软件维护的副作用 246
7.1.5 软件维护的困难 246
7.2 软件维护过程 247
7.2.1 维护组织 247
7.2.2 维护申请 248
7.2.3 维护工作流程 248
7.3.1 影响软件可维护性的软件属性 250
7.2.4 维护记录与评价 250
7.3 软件可维护性 250
7.3.2 软件可维护性的定量度量 251
7.3.3 提高可维护性的方法 251
7.4 软件再工程技术 252
7.4.1 逆向工程 253
7.4.2 重构 253
7.4.3 正向工程 254
7.4.4 再工程成本/效益分析 254
7.4.5 再工程风险分析 254
习题7 255
7.5 小结 255
第8章 软件项目计划 256
8.1 成本估计 256
8.1.1 自顶向下成本估计 256
8.1.2 自底向上成本分析 257
8.1.3 基于经验模型的成本估计 259
8.2 效益分析 263
8.2.1 度量方法 263
8.2.2 效益分析 264
8.3.1 风险标识 266
8.3 风险分析 266
8.3.2 风险估计 267
8.3.3 风险评价 268
8.3.4 风险管理与监控 268
8.4 进度安排 269
8.4.1 进度安排原则 269
8.4.2 工作量分配 269
8.4.3 进度安排方法 270
8.5.1 人员组织规律 273
8.5 项目组织与计划 273
8.5.2 人员组织形式 275
8.5.3 项目计划 277
8.6 小结 278
习题8 278
第9章 软件工程标准化与文档写作 280
9.1 软件工程标准 280
9.1.1 软件工程标准的类型 280
9.1.2 软件工程标准的层次 281
9.1.3 软件工程国家标准 282
9.2 软件文档编写步骤 283
9.2.1 软件文档的含义及要求 283
9.2.2 软件文档的种类 283
9.2.3 软件文档的编写步骤 285
9.3 软件文档的主要内容及写作要求 286
9.3.1 可行性研究报告的主要内容及写作要求 286
9.3.2 项目开发计划的主要内容及写作要求 287
9.3.3 软件需求说明书的主要内容及写作要求 288
9.3.5 详细设计说明书的主要内容及写作要求 289
9.3.4 概要设计说明书的主要内容及写作要求 289
9.3.6 其他文档 290
9.4 软件文档的管理 291
9.4.1 软件文档编写过程的管理 291
9.4.2 软件文档使用过程的管理 292
9.5 小结 293
习题9 293
10.1.1 知识产权的概念 294
10.1 知识产权 294
第10章 软件知识产权保护与道德规范 294
10.1.2 知识产权的法律体系 295
10.1.3 知识产权的主要特点 295
10.1.4 知识产权的国际保护 295
10.1.5 计算机软件知识产权的保护 296
10.2 软件著作权 296
10.2.1 计算机软件著作权法 296
10.2.2 软件著作权的客体 297
10.2.3 软件著作权的主体 297
10.2.5 软件著作权的权利限制 298
10.2.4 软件著作权的权利内容 298
10.2.6 软件著作权的取得 299
10.2.7 软件著作权的归属 299
10.2.8 软件著作权的行使 300
10.2.9 案例分析 300
10.3 软件著作权登记 301
10.3.1 实施计算机软件著作权登记的作用 301
10.3.2 软件著作权登记的形式 301
10.3.3 软件著作权登记程序 302
10.4.1 商业秘密 304
10.4 软件商业秘密 304
10.4.2 计算机软件商业秘密 305
10.5 软件工程师职业道德规范 305
10.5.1 职业道德 305
10.5.2 软件工程师职业道德规范 306
10.6 小结 307
习题10 307
附录A COM开发实例 310
附录B 设计模式实例 331
附录C 中英文术语对照表 344
参考文献 352