第1章 软件工程概述 1
1.1 软件 1
1.1.1 软件与程序 1
1.1.2 软件的分类 1
1.1.3 软件的特征 2
1.1.4 软件开发技术的发展 3
1.2 软件工程 4
1.2.1 软件危机 4
1.2.2 软件工程的定义 6
1.2.3 软件工程的目标 6
1.3 软件生命周期 7
1.3.1 软件生命周期的概念 7
1.3.2 软件生命周期各阶段的基本任务 7
1.4 软件开发模型 10
1.4.1 瀑布模型 10
1.4.2 原型模型 11
1.4.3 螺旋模型 12
1.4.4 基于第四代技术的模型 13
1.4.5 形式化方法模型 14
小结 14
习题 15
第2章 需求分析 16
2.1 可行性研究 16
2.1.1 可行性研究的任务 16
2.1.2 可行性研究的步骤 18
2.2 需求获取 20
2.2.1 需求获取的内容 20
2.2.2 需求获取的技术 22
2.2.3 需求分析的原则 23
2.3 开发原型系统 25
2.4 需求分析规格说明书 25
2.5 需求验证 27
小结 29
习题 29
第3章 分析建模 31
3.1 数据建模 31
3.1.1 基本概念 32
3.1.2 实体关系图 33
3.2 功能建模 35
3.2.1 数据流图的基本成分 35
3.2.2 数据流图的画法 37
3.2.3 画数据流图的注意事项 39
3.3 数据字典 41
3.3.1 数据字典的成分 41
3.3.2 数据字典的用途 44
3.4 加工小说明 45
3.4.1 结构化语言 46
3.4.2 判定表 46
3.4.3 判定树 47
小结 48
习题 48
第4章 总体设计 50
4.1 总体设计的过程 50
4.2 表示软件结构的图形工具 52
4.2.1 层次图和HIPO图 52
4.2.2 结构图 53
4.3 软件设计的概念和原理 54
4.3.1 模块化 55
4.3.2 抽象 56
4.3.3 信息隐藏 57
4.3.4 模块独立 57
4.4 软件结构设计优化准则 60
4.5 面向数据流的设计方法 62
4.5.1 两类基本的数据流图 62
4.5.2 面向数据流的设计方法的步骤 63
4.5.3 变换分析 64
4.5.4 事务分析 66
4.5.5 设计优化 68
小结 68
习题 69
第5章 详细设计 71
5.1 详细设计概述 71
5.2 结构化程序设计 72
5.3 详细设计工具 73
5.3.1 程序流程图 73
5.3.2 N-S图(盒状图) 74
5.3.3 问题分析图 75
5.3.4 过程设计语言 76
5.3.5 判定表与判定树 77
5.4 Jackson程序设计方法 78
5.4.1 Jackson图 78
5.4.2 Jackson方法 79
小结 82
习题 83
第6章 程序设计语言与编码 84
6.1 程序设计语言概述 84
6.1.1 程序设计语言的分类 84
6.1.2 程序设计语言的机制 86
6.1.3 程序设计语言的选择 89
6.2 程序设计风格 90
6.3 程序设计方法 91
6.4 程序设计工具和环境 93
小结 95
习题 95
第7章 软件测试 97
7.1 软件测试概述 97
7.1.1 软件测试的概念 97
7.1.2 软件测试的原则 98
7.1.3 软件测试流程 99
7.2 软件测试方法与技术 100
7.3 软件测试的过程 101
7.3.1 单元测试 102
7.3.2 集成测试 104
7.3.3 验收测试 108
7.4 测试用例设计 109
7.4.1 逻辑覆盖 109
7.4.2 黑盒测试用例设计 113
7.4.3 实用测试策略 117
7.5 调试技术和策略 120
7.5.1 调试技术 121
7.5.2 调试策略 122
7.6 软件测试工具 123
7.6.1 静态分析工具 123
7.6.2 动态分析程序 124
7.6.3 测试数据生成程序 124
7.6.4 文件比较程序 125
小结 125
习题 126
第8章 软件维护 128
8.1 软件维护的基本认识 128
8.1.1 软件维护的定义 128
8.1.2 维护分类及策略 129
8.1.3 软件维护的代价 131
8.2 软件可维护性 132
8.2.1 软件可维护性的度量 132
8.2.2 提高可维护性的方法 134
8.3 维护过程 136
8.3.1 维护过程的事件流 136
8.3.2 维护团队组织 137
8.3.3 维护报告 138
8.3.4 维护任务 138
8.3.5 保存维护记录 140
8.3.6 评价维护活动 141
小结 141
习题 141
第9章 面向对象方法学 143
9.1 面向对象方法学引论 143
9.1.1 传统方法学的不足与模型进化 143
9.1.2 面向对象方法学的技术要点 145
9.1.3 面向对象的基本概念 148
9.1.4 类及对象的主要特性 149
9.1.5 类及对象的基本图形符号 151
9.1.6 面向对象的软件开发过程 153
9.2 面向对象分析 154
9.2.1 标识类与对象及其相互联系 154
9.2.2 3种子模型与5个层次 157
9.2.3 建立对象模型 159
9.2.4 建立动态模型 161
9.2.5 建立功能模型 162
9.3 面向对象设计 163
9.3.1 面向对象设计概要 164
9.3.2 面向对象设计的准则 165
9.3.3 软件重用的设计 166
9.3.4 问题论域子系统的设计 167
9.3.5 人机交互子系统的设计 167
9.3.6 任务管理子系统的设计 168
9.3.7 数据管理子系统的设计 168
9.4 面向对象编程 169
9.4.1 面向对象程序设计语言 169
9.4.2 面向对象语言的技术特点 170
9.4.3 选择面向对象语言 171
9.5 面向对象测试 172
9.5.1 对象级的软件测试 172
9.5.2 系统级的软件测试 173
9.6 面向对象方法与统一建模语言 174
9.6.1 UML建模基本要素 174
9.6.2 UML建模图形的应用 176
9.6.3 UML建模过程要点 183
小结 186
习题 187
第10章 软件度量 188
10.1 软件度量的基本概念 188
10.2 软件复杂性度量 190
10.2.1 软件复杂性及其度量标准 191
10.2.2 程序复杂性的度量 191
10.3 软件可靠性度量 195
10.3.1 软件可靠性的定义 195
10.3.2 软件可靠性估算 196
10.4 软件质量的度量 198
10.4.1 软件质量定义 199
10.4.2 软件质量要素 200
10.4.3 软件质量评审 203
小结 204
习题 205
第11章 软件工程管理 206
11.1 成本管理 206
11.1.1 成本估算模型 206
11.1.2 成本估算方法 209
11.2 风险管理 210
11.2.1 风险标识 210
11.2.2 风险估算 211
11.2.3 风险评价 212
11.2.4 风险驾驭 213
11.3 进度安排 214
11.3.1 甘特图法 214
11.3.2 工程网络图法 215
11.4 质量管理 218
11.4.1 软件质量 218
11.4.2 软件质量保证 219
11.5 人员管理 221
11.5.1 软件开发人员特点及分配规律 221
11.5.2 项目组的组织形式 222
11.6 软件配置管理 224
11.6.1 软件配置项及其标识 224
11.6.2 基线技术 225
11.6.3 变更控制 226
11.6.4 版本管理 227
11.6.5 配置审核与配置状态报告 228
小结 229
习题 230
第12章 软件工程标准化 231
12.1 软件工程标准化及其意义 231
12.2 软件工程标准的类型与层次 232
12.3 软件文档标准化 236
12.4 ISO 9000质量标准简介 240
12.5 软件能力成熟度模型CMM概要 242
小结 245
习题 246