第1章 软件工程概论 1
1.1 软件综述 1
1.1.1 软件的发展 1
1.1.2 软件的定义 3
1.1.3 软件的特性 3
1.1.4 软件的分类 4
1.2 软件危机 6
1.3 软件工程 7
1.3.1 软件工程的概念 7
1.3.2 软件工程的基本原理 7
1.3.3 软件工程研究的内容 8
1.3.4 软件工程方法学 9
1.4 软件生命周期 10
1.5 软件开发模型 11
1.5.1 瀑布模型 11
1.5.2 快速原型模型 13
1.5.3 增量模型 14
1.5.4 螺旋模型 15
1.5.5 基于构件的开发模型 16
1.5.6 智能模型 17
1.6 小结 18
习题1 18
第2章 软件计划与可行性研究 19
2.1 软件计划 19
2.1.1 软件的作用范围 19
2.1.2 资源需求 20
2.1.3 进度安排 22
2.2 可行性研究 25
2.2.1 可行性研究的任务 25
2.2.2 可行性研究的步骤 26
2.2.3 可行性研究的CASE工具 27
2.3 成本/效益分析 39
2.3.1 软件开发成本估计 39
2.3.2 效益度量方法 42
2.3.3 效益分析方法 43
2.4 可行性研究报告的书写 45
2.5 小结 46
习题2 47
第3章 软件需求分析 48
3.1 需求分析的任务 48
3.2 需求分析的步骤 50
3.3 需求分析方法和原则 51
3.4 需求分析的CASE工具 56
3.4.1 层次方框图 57
3.4.2 Warnier图 57
3.4.3 IPO图 58
3.4.4 E-R图 58
3.4.5 状态迁移图 62
3.4.6 Petri网 63
3.5 软件需求验证 65
3.5.1 软件需求规格说明的主要内容 65
3.5.2 软件需求的验证 65
3.6 小结 67
习题3 68
第4章 软件结构设计 69
4.1 概述 69
4.1.1 软件设计的过程 69
4.1.2 软件结构设计的目标 71
4.1.3 软件结构设计的任务 71
4.1.4 软件结构设计的方法 73
4.2 结构化设计的概念和原理 74
4.2.1 抽象和细化 74
4.2.2 自顶向下,逐步求精 74
4.2.3 信息隐藏和局部化 75
4.2.4 模块化 76
4.2.5 模块独立性 77
4.3 结构设计的原则 82
4.4 结构设计的图形工具 85
4.4.1 层次图和HIPO图 85
4.4.2 结构图 86
4.5 面向数据流的设计方法 87
4.5.1 数据流图的类型 88
4.5.2 结构设计过程 89
4.5.3 变换分析 90
4.5.4 事务分析 92
4.5.5 软件结构的优化 94
4.6 小结 94
习题4 95
第5章 软件详细设计 96
5.1 结构化程序设计 96
5.1.1 结构化的控制结构 96
5.1.2 逐步细化的实现方法 98
5.1.3 结构化程序设计的特点 99
5.2 详细设计的工具 100
5.2.1 程序流程图 100
5.2.2 盒图(N-S)图 101
5.2.3 问题分析图(PAD图) 102
5.2.4 判定表 104
5.2.5 判定树 105
5.2.6 过程设计语言(PDL) 105
5.3 面向数据结构的设计方法 108
5.3.1 Jackson图 109
5.3.2 Jackson方法 110
5.4 程序复杂度的概念及度量方法 112
5.4.1 程序图 113
5.4.2 程序复杂度的度量方法 114
5.5 小结 117
习题5 117
第6章 软件编码设计 119
6.1 编码设计的目的 119
6.2 编码的工具语言 120
6.2.1 程序设计语言的分类 120
6.2.2 程序设计语言的特性 121
6.2.3 程序设计语言的选择 123
6.3 编码风格及软件效率 124
6.3.1 编码风格 124
6.3.2 软件效率 128
6.4 小结 129
习题6 130
第7章 软件测试 131
7.1 软件测试概述 131
7.1.1 软件测试的概念 131
7.1.2 软件测试的目的 132
7.1.3 软件测试的原则 132
7.1.4 软件测试方法 134
7.2 软件测试过程模型 137
7.3 软件开发过程的测试步骤 139
7.3.1 单元测试 140
7.3.2 集成测试 141
7.3.3 系统测试 144
7.3.4 验收测试 145
7.4 软件测试用例的设计 146
7.4.1 测试用例概述 146
7.4.2 白盒测试法的用例设计 146
7.4.3 黑盒测试法的用例设计 150
7.5 软件调试 153
7.5.1 调试原则 154
7.5.2 软件调试的步骤 154
7.5.3 软件调试的策略 154
7.6 小结 155
习题7 156
第8章 软件维护 157
8.1 软件维护的任务和分类 157
8.1.1 改正性维护(corrective maintenance) 157
8.1.2 适应性维护(adaptive maintenance) 158
8.1.3 完善性维护(perfective maintenance) 158
8.1.4 预防性维护(preventive maintenance) 158
8.2 软件维护的特点 159
8.2.1 非结构化维护和结构化维护 159
8.2.2 软件维护的困难性 159
8.2.3 软件维护的费用 160
8.3 软件的可维护性 160
8.3.1 软件可维护性的定义 160
8.3.2 影响软件可维护性的因素 161
8.3.3 文档 161
8.3.4 软件可维护性的定量度量 162
8.3.5 提高软件可维护性的方法 163
8.4 软件维护活动 167
8.4.1 软件维护组织机构 167
8.4.2 软件维护申请报告 167
8.4.3 软件维护工作流程 168
8.4.4 维护档案记录 169
8.4.5 维护评价 169
8.5 小结 170
习题8 170
第9章 面向对象的软件开发技术概述 171
9.1 面向对象的概念 172
9.2 面向对象的建模 177
9.2.1 面向对象方法的开发模型 177
9.2.2 面向对象方法 177
9.2.3 面向对象模型 181
9.3 面向对象的分析 188
9.3.1 面向对象分析的3个模型与5个层次 189
9.3.2 构造对象模型 190
9.3.3 构造对象动态模型 200
9.3.4 建立功能模型 205
9.3.5 定义服务 207
9.4 面向对象的设计 208
9.4.1 面向对象设计的概念 208
9.4.2 问题域子系统设计 211
9.4.3 人机交互子系统设计 213
9.4.4 任务管理子系统设计 214
9.4.5 数据管理子系统设计 216
9.4.6 服务与关联的设计 218
9.4.7 面向对象设计的优化 221
9.5 面向对象的实现 224
9.5.1 面向对象实现的技术支持 225
9.5.2 面向对象语言选择 228
9.5.3 程序设计风格 229
9.5.4 面向对象的测试 231
9.6 组件技术简介 234
9.6.1 组件的概念及特点 235
9.6.2 组件模型 237
9.6.3 组件开发模式 240
9.7 小结 240
习题9 241
参考文献 242