第1章 绪论 1
1.1 软件概述 1
1.1.1 什么是计算机软件 1
1.1.2 软件的特点 2
1.1.3 软件的分类 3
1.1.4 软件的发展 5
1.1.5 软件危机 6
1.2 软件工程概述 8
1.2.1 软件工程与方法学 8
1.2.2 软件工程的基本原理 10
1.2.3 软件工程的目标 11
1.2.4 软件工程的内容 13
1.2.5 软件工程原则 13
1.2.6 软件工程面临的问题 15
小结 15
综合练习1 16
第2章 基本理论 17
2.1 软件工程过程 17
2.2 软件生命周期 18
2.2.1 软件分析时期 19
2.2.2 软件设计时期 20
2.2.3 编码与测试时期 21
2.2.4 运行与维护时期 21
2.3 软件生命周期模型 22
2.3.1 软件生命周期模型的概念 22
2.3.2 瀑布模型 22
2.3.3 原型模型 24
2.3.4 增量模型 25
2.3.5 螺旋模型 27
2.3.6 喷泉模型 28
2.3.7 基于知识的模型 29
2.3.8 变换模型 29
2.4 软件开发方法 30
2.4.1 结构化方法 30
2.4.2 Jackson方法 31
2.4.3 维也纳开发方法 31
2.4.4 面向对象的开发方法 32
2.5 软件工具与开发 32
2.5.1 软件工具箱 32
2.5.2 软件开发环境 33
2.5.3 计算机辅助软件工程 33
小结 33
综合练习2 34
第3章 可行性研究 35
3.1 可行性研究任务与步骤 35
3.1.1 研究任务 36
3.1.2 研究步骤 39
3.2 系统分析 40
3.2.1 系统分析员 40
3.2.2 面临的问题域 41
3.2.3 通信技术 42
3.3 分析原理 43
3.3.1 信息域 44
3.3.2 建立模型 45
3.3.3 分解 45
3.4 系统模型与模拟 46
3.4.1 系统模型 46
3.4.2 系统建模和模拟 47
3.5 成本-效益分析 48
3.6 可行性研究的文档 50
3.7 项目开发计划 52
3.7.1 方案选择 52
3.7.2 制订项目开发计划 52
小结 53
综合练习3 53
第4章 软件需求分析 55
4.1 需求分析 55
4.1.1 需求分析的特点 55
4.1.2 需求分析的原则 56
4.1.3 需求分析的任务 57
4.1.4 需求分析的方法 58
4.2 结构化分析 59
4.2.1 自顶向下逐层分解 60
4.2.2 结构化分析步骤 61
4.3 系统流程图 61
4.4 数据流图 63
4.4.1 基本图形符号 64
4.4.2 画数据流图 65
4.4.3 结构化分析方法的应用 67
4.5 数据字典 73
4.5.1 内容及格式 74
4.5.2 数据字典的实现 76
小结 76
综合练习4 76
第5章 总体设计 79
5.1 软件设计的重要性 79
5.2 设计过程 80
5.3 软件总体设计 81
5.4 设计基本原理 83
5.4.1 抽象 83
5.4.2 细化 83
5.4.3 模块化 84
5.4.4 软件体系结构 85
5.4.5 程序结构 86
5.4.6 数据结构 87
5.4.7 软件过程 88
5.5 体系结构设计 89
5.5.1 软件结构图 90
5.5.2 模块的大小 91
5.5.3 扇出和扇入与深度和宽度 91
5.5.4 模块的耦合 92
5.5.5 模块的内聚 94
5.5.6 结构设计的一般准则 97
5.5.7 模块的作用域与控制域 98
5.6 结构化设计 99
5.6.1 数据流的类型 99
5.6.2 过程步骤 100
5.6.3 变换分析设计 101
5.6.4 事务分析设计 103
5.6.5 混合流设计 104
5.6.6 结构化设计方法应用示例 105
5.6.7 设计的后期处理 107
5.7 软件结构优化 107
5.7.1 软件结构设计优化准则 108
5.7.2 软件结构的HIPO图 109
小结 109
综合练习5 110
第6章 软件详细设计 111
6.1 详细设计的任务与方法 111
6.1.1 详细设计的基本任务 111
6.1.2 详细设计方法 112
6.2 设计表示法 113
6.2.1 结构化语言 113
6.2.2 判定表 114
6.2.3 判定树 115
6.3 结构化程序设计 115
6.3.1 流程图程序 116
6.3.2 三种基本控制结构 116
6.3.3 常用符号 117
6.3.4 正规程序 119
6.3.5 基本程序 120
6.3.6 结构化程序 122
6.4 结构化定理 123
6.4.1 程序函数 123
6.4.2 基本定理 124
6.4.3 非结构化转换为结构化 126
6.4.4 常见错误 127
6.5 过程设计语言 130
小结 133
综合练习6 133
第7章 面向对象分析 135
7.1 面向对象的相关概念 135
7.1.1 对象 135
7.1.2 类 136
7.1.3 属性 136
7.1.4 服务(操作或方法) 136
7.1.5 封装 136
7.1.6 继承 136
7.1.7 消息 139
7.1.8 结构与连接 139
7.2 UML的基本图标 140
7.3 对象分析 143
7.3.1 用户需求与研究问题域 144
7.3.2 发现对象方法 145
7.3.3 定义属性 147
7.3.4 定义服务 148
7.4 一般-特殊结构 149
7.5 整体-部分结构 150
7.6 实例连接 151
7.6.1 简单的实例连接 151
7.6.2 复杂的实例连接及其表示 152
7.7 消息连接 152
小结 154
综合练习7 154
第8章 面向对象设计 157
8.1 系统总体方案 157
8.2 软件体系结构 158
8.3 设计环境 161
8.3.1 为适应编程环境的调整 162
8.3.2 对象设计的步骤 165
8.4 完善对象的细节 166
8.5 设计算法 168
8.5.1 选择算法 168
8.5.2 选择数据结构 169
8.6 关联设计 169
8.6.1 单向关联 170
8.6.2 双向关联 170
8.7 设计优化 170
小结 173
综合练习8 173
第9章 用户界面设计 175
9.1 人的因素 175
9.1.1 分析活动者 176
9.1.2 从Use Case分析人机交互 177
9.1.3 分析处理异常事件的人机交互 179
9.1.4 命令的组织 180
9.1.5 输出信息的组织结构 183
9.2 界面设计风格 184
9.2.1 菜单的选择 184
9.2.2 对话框 185
9.2.3 窗口 186
9.3 人机界面的设计准则 187
9.4 人机界面设计过程 188
9.4.1 用户界面模型 188
9.4.2 界面支持系统 189
9.4.3 界面元素 190
9.4.4 设计的形式 191
9.5 描述方法与技术 193
9.5.1 灵境技术 194
9.5.2 多通道人机交互技术 195
小结 195
综合练习9 196
第10章 数据库及其接口设计 197
10.1 数据管理系统及其选择 197
10.2 技术整合 204
10.3 数据接口 205
10.4 对象存储方案和数据接口的设计策略 206
10.4.1 针对文件系统的设计 207
10.4.2 针对RDBMS的设计 211
10.4.3 使用OODBMS 220
小结 220
综合练习10 220
第11章 软件实现 222
11.1 程序设计语言的特性及选择 222
11.1.1 程序设计语言特性 222
11.1.2 程序设计语言的选择 224
11.2 程序设计风格 226
11.3 程序设计效率 228
11.3.1 代码效率 228
11.3.2 内存效率 229
11.3.3 I/O效率 229
11.4 冗余编程 230
11.5 软件容错技术 230
11.5.1 容错软件 231
11.5.2 容错的一般方法 232
11.5.3 容错软件的设计过程 234
11.5.4 软件的容错系统结构 235
小结 238
综合练习11 238
第12章 软件质量 240
12.1 软件质量概述 240
12.1.1 软件质量的定义 240
12.1.2 软件质量特性 240
12.1.3 软件质量特性之间的竞争 244
12.2 软件质量的度量和评价 246
12.2.1 软件质量的度量 246
12.2.2 软件质量度量的分类 247
12.2.3 软件质量评价 247
12.3 软件质量保证 250
12.3.1 软件质量保证的概述 250
12.3.2 软件质量保证原则 250
12.3.3 软件质量保证计划 251
12.3.4 软件质量保证的措施 251
12.3.5 软件质量管理小组 251
12.4 技术评审与审查 252
12.4.1 评审过程 252
12.4.2 选择参加评审的成员 253
12.4.3 评审的管理和组织 253
12.4.4 评审的方法 253
12.4.5 走查和审查 253
12.4.6 开发过程的评审 254
12.4.7 对评审的综合评价 255
12.5 软件的可靠性 256
小结 257
综合练习12 258
第13章 软件测试 259
13.1 软件测试概述 259
13.1.1 软件测试的目的 259
13.1.2 软件测试的原则 259
13.2 测试方法 260
13.2.1 静态测试 260
13.2.2 动态测试 260
13.3 测试用例的设计 262
13.3.1 白盒技术 262
13.3.2 黑盒技术 266
13.4 测试过程 270
13.4.1 软件测试过程中的信息 270
13.4.2 软件测试的步骤与各开发阶段的关系 271
13.4.3 单元测试 272
13.4.4 集成测试 273
13.4.5 确认测试 275
13.5 调试 276
小结 277
综合练习13 278
第14章 软件维护 280
14.1 软件维护概述 280
14.1.1 软件维护的定义 280
14.1.2 影响维护工作的因素 281
14.1.3 维护成本 281
14.2 软件可维护性 282
14.2.1 软件可维护性的定义 282
14.2.2 可维护性的度量 282
14.3 软件维护的特点 284
14.3.1 非结构化维护和结构化维护 284
14.3.2 维护的困难性 285
14.3.3 软件维护的费用 286
14.4 软件维护的实施 287
14.4.1 维护的组织 287
14.4.2 维护的流程 287
14.4.3 维护技术 289
14.4.4 维护的副作用 289
14.5 维护“老化代码” 290
14.6 逆向工程和再工程 291
14.6.1 预防性维护 291
14.6.2 逆向工程的元素 292
14.6.3 再工程中的重构技术 293
小结 296
综合练习14 297
第15章 软件项目管理与计划 298
15.1 软件项目管理概述 298
15.1.1 软件管理的对象 298
15.1.2 软件开发中的资源 299
15.1.3 分解技术 300
15.2 项目管理过程 301
15.3 软件开发成本估算 302
15.3.1 软件开发成本估算方法 302
15.3.2 软件开发成本估算的经验模型 303
15.4 风险分析 305
15.4.1 风险识别 305
15.4.2 风险估算 306
15.4.3 风险评价 306
15.4.4 风险驾驭和监控 307
15.5 进度安排 309
15.5.1 软件开发小组人数与软件生产率 309
15.5.2 任务的确定与并行性 310
15.5.3 制定开发进度计划 311
15.5.4 进度安排的图形方法 312
15.5.5 项目的追踪和控制 312
15.6 软件项目的组织 313
15.6.1 软件项目管理的特点 313
15.6.2 软件项目组织的建立 314
15.6.3 人员配备 316
小结 318
综合练习15 318
参考答案 320
参考文献 331