第1章 概述 1
1.1 软件 1
1.1.1 软件的特点及分类 1
1.1.2 软件的发展 3
1.1.3 软件危机及其表现 4
1.1.4 软件危机产生的主要原因 4
1.1.5 解决软件危机的途径 5
1.2 软件工程 5
1.2.1 软件工程的概念 5
1.2.2 软件工程的三要素 5
1.3 软件生命周期 6
1.4 软件工程的目标 8
1.5 软件工程的开发原则 9
1.6 软件工程方法学 9
1.7 计算机辅助软件工程 10
1.8 软件工程与其他相关学科的关系 11
1.9 软件工程职业道德规范 12
1.10 软件工程发展趋势 13
1.11 实战训练 13
本章小结 13
习题1 14
第2章 软件过程 16
2.1 软件过程的概念 16
2.1.1 软件过程的定义 16
2.1.2 软件过程的基本活动 16
2.1.3 软件过程的制品 16
2.2 典型的软件过程模型 17
2.2.1 瀑布模型 17
2.2.2 增量模型 18
2.2.3 快速原型模型 19
2.2.4 螺旋模型 20
2.2.5 喷泉模型 21
2.2.6 V型模型 22
2.2.7 形式化方法模型 22
2.2.8 组合模型 23
2.3 软件开发方法简述 23
2.3.1 结构化的开发方法 23
2.3.2 面向数据结构的开发方法 24
2.3.3 面向对象的开发方法 24
2.3.4 原型化开发方法 24
2.4 案例微软公司的软件开发过程 24
2.4.1 微软开发过程管理的基本原则 24
2.4.2 微软公司的软件开发过程模型 25
2.5 实战训练 26
本章小结 26
习题2 26
第3章 软件项目立项 28
3.1 软件项目立项方法 28
3.1.1 委托开发项目 28
3.1.2 自主开发项目 29
3.2 软件可行性分析 29
3.2.1 可行性分析的内容 29
3.2.2 可行性分析的步骤 29
3.3 软件项目规模成本估算 30
3.3.1 代码行估算技术 30
3.3.2 功能点估算法 31
3.3.3 类比估算法 31
3.3.4 自下而上估算法 31
3.3.5 专家估算法 32
3.4 成本—效益分析 32
3.5 制定软件项目开发计划 34
3.5.1 软件项目开发计划书的内容 34
3.5.2 项目计划编制过程 36
3.5.3 项目计划内容确定 38
3.6 软件项目立项文档 39
3.7 软件项目团队的建立 45
3.7.1 团队定义 45
3.7.2 项目组织形式 45
3.7.3 团队建设 47
3.8 实战训练 48
本章小结 50
习题3 50
第4章 需求分析 52
4.1 需求分析概述 52
4.1.1 需求的概念 52
4.1.2 需求的层次 53
4.2 需求分析的目标和任务 54
4.3 需求分析的原则与获取需求的方法 55
4.3.1 需求分析的原则 55
4.3.2 获取需求的方法 56
4.4 需求分析的过程 57
4.5 需求分析的方法 57
4.5.1 结构化分析方法 58
4.5.2 原型分析方法 63
4.6 软件需求分析文档 66
4.6.1 软件需求规格说明和需求评审 66
4.6.2 教务管理系统需求规格说明书 68
4.7 实战训练 69
本章小结 71
习题4 71
第5章 软件的总体设计 75
5.1 总体设计的目标和任务 75
5.1.1 总体设计的目标 75
5.1.2 总体设计的任务和步骤 76
5.2 设计的概念和原则 77
5.2.1 模块化 77
5.2.2 抽象 78
5.2.3 逐步求精 78
5.2.4 信息隐藏和局部化 78
5.2.5 模块独立性 79
5.3 描绘软件结构的图形工具 81
5.3.1 HIPO图 81
5.3.2 系统结构图 83
5.4 结构化设计 84
5.4.1 系统结构图中的模块 84
5.4.2 变换型数据流与变换型系统结构 85
5.4.3 事务流与事务型系统结构 86
5.4.4 变换映射 86
5.4.5 事务映射 88
5.4.6 “黑盒”技术的使用 88
5.5 数据库设计及设计原则 88
5.5.1 数据库设计 88
5.5.2 数据库设计的原则 90
5.6 接口设计 92
5.6.1 接口设计的描述 92
5.6.2 用户界面设计的主要问题 92
5.6.3 人机界面设计过程 94
5.6.4 人机界面设计实现原则及典型案例 96
5.7 总体设计说明书的编写 97
5.8 实战训练 97
本章小结 98
习题5 99
第6章 软件的详细设计 101
6.1 详细设计的任务 101
6.2 详细设计的原则 101
6.3 详细设计的方法 102
6.4 详细设计可采用的工具 102
6.5 详细设计说明书 109
6.6 实战训练 110
本章小结 113
习题6 113
第7章 软件编码 116
7.1 软件编码的目的 116
7.2 程序设计语言 116
7.2.1 程序设计语言的分类 116
7.2.2 程序设计语言特性的比较 117
7.2.3 程序设计语言的选择 119
7.3 结构化程序设计 119
7.3.1 结构化程序设计的原则 120
7.3.2 程序设计——自顶向下,逐步求精 120
7.3.3 数据结构的合理化 122
7.4 编码风格 122
7.4.1 程序的内部文档 122
7.4.2 数据说明 129
7.4.3 语句结构 129
7.4.4 输入和输出 130
7.5 程序编码优化技术 131
7.5.1 程序优化 131
7.5.2 程序优化方法 132
7.5.3 网络优化 139
7.6 代码评审和版本控制 139
7.6.1 代码评审 139
7.6.2 版本控制 140
7.7 实战训练 142
本章小结 144
习题7 144
第8章 软件测试与调试 146
8.1 概述 146
8.1.1 软件测试的定义 147
8.1.2 软件测试的目的 147
8.1.3 软件缺陷带来影响的例子 147
8.2 软件测试的任务和目标 148
8.2.1 软件测试的任务 148
8.2.2 软件测试的目标 149
8.3 软件测试的基本原则 150
8.4 软件测试的方法 151
8.4.1 测试用例 151
8.4.2 黑盒测试法 153
8.4.3 白盒测试法 156
8.5 软件测试的步骤 163
8.5.1 单元测试 163
8.5.2 集成测试 165
8.5.3 确认测试 168
8.5.4 系统测试 169
8.6 程序调试 172
8.6.1 程序调试技术 172
8.6.2 程序调试策略 173
8.7 实战训练 173
本章小结 175
习题8 176
第9章 软件维护 179
9.1 软件维护的概念 179
9.2 软件维护的特点 179
9.3 软件维护的类型 181
9.4 软件维护的步骤 183
9.5 软件的可维护性 187
9.6 软件维护的副作用 188
9.7 软件重用 189
本章小结 190
习题9 190
第10章 面向对象的方法学 193
10.1 面向对象的概念 193
10.1.1 传统开发方法存在的问题 193
10.1.2 面向对象的基本概念 194
10.1.3 面向对象的特征 196
10.1.4 面向对象的要素 196
10.1.5 面向对象的开发方法 197
10.2 面向对象的模型 197
10.2.1 对象模型 197
10.2.2 动态模型 201
10.2.3 功能模型 203
10.3 面向对象的分析 203
10.3.1 面向对象的分析过程 203
10.3.2 建立对象模型 204
10.3.3 建立动态模型 208
10.3.4 建立功能模型 211
10.3.5 确定操作 212
10.4 面向对象的设计 212
10.5 面向对象的实现 216
10.6 面向对象和基于对象的区别 217
10.7 实战训练 218
本章小结 219
习题10 219
第11章 统一建模语言(UML) 221
11.1 概述 221
11.1.1 什么是UML 221
11.1.2 UML的发展史 221
11.1.3 UML的特点 222
11.1.4 UML的应用领域 222
11.1.5 基于UML的设计过程 223
11.2 UML概念模型 223
11.2.1 UML的构成 223
11.2.2 UML的基本构造块 223
11.2.3 UML的规则 224
11.2.4 UML的公共机制 225
11.3 UML的静态建模机制 225
11.3.1 用例图 225
11.3.2 类图 227
11.3.3 对象图 228
11.3.4 包图 229
11.4 UML的动态建模机制 230
11.4.1 协作图 230
11.4.2 时序图 231
11.4.3 活动图 231
11.4.4 状态图 232
11.5 UML面向实现机制 233
11.5.1 组件图 233
11.5.2 配置图 234
11.6 UML建模工具 234
11.6.1 Rational Rose 234
11.6.2 Microsoft Office Visio 235
11.7 UML建模实例 236
11.8 实战训练 239
本章小结 243
习题11 243
第12章 软件项目管理 245
12.1 项目与项目管理 245
12.2 ISO 9000国际标准简介 247
12.3 CMMI 248
12.3.1 CMMI的基本概念 248
12.3.2 CMMI的体系结构 248
12.4 ISO 9000与CMMI的比较 250
12.5 软件项目管理过程 251
12.5.1 项目组织结构 252
12.5.2 项目启动 253
12.5.3 项目过程定义 254
12.5.4 工作分解结构 255
12.5.5 制定风险计划 255
12.5.6 制定项目文档管理 257
12.5.7 制定项目培训计划 257
12.5.8 制定项目监控过程 258
12.5.9 制定项目进度表 259
12.5.10 合成项目计划和从属计划 260
12.5.11 获得对计划的承诺 260
12.5.12 评审 261
12.5.13 跟踪项目计划估计值 262
12.5.14 跟踪风险 264
12.5.15 里程碑总结 265
12.5.16 变更管理 266
12.5.17 问题管理 266
12.5.18 项目总结 267
12.6 模板和表格 268
12.7 实战训练 268
本章小结 268
习题12 269
附录 软件开发过程中的文档 270
附录A 可行性分析报告(GB8567—88) 270
A.1 引言 270
A.2 可行性分析的前提 270
A.3 对现有系统的分析 271
A.4 所建议系统 272
A.5 可选择的其他系统方案 273
A.6 投资及效益分析 273
A.7 社会因素方面的可行性 275
A.8 结论 275
附录B 软件项目开发计划书(GB8567—88) 275
B.1 引言 275
B.2 项目概述 276
B.3 实施计划 276
B.4 支持条件 277
B.5 专题计划要点 277
附录C 软件规格说明书(GB8567—88) 277
C.1 引言 277
C.2 任务概述 278
C.3 需求规定 278
C.4 运行环境规定 279
附录D 软件总体设计说明书(GB8567—88) 280
D.1 引言 280
D.2 总体设计 280
D.3 接口设计 281
D.4 运行设计 281
D.5 系统数据结构设计 281
D.6 系统出错处理设计 282
附录E 软件详细设计说明书(GB8567—88) 282
E.1 引言 282
E.2 程序系统的结构 283
E.3 程序1(标识符)设计说明 283
E.4 程序2(标识符)设计说明 284
附录F 操作手册(GB8567—88) 284
F.1 引言 284
F.2 软件特征描述 284
F.3 安装与初始化 285
F.4 运行说明 285
F.5 非常规过程 286
F.6 远程操作 286
附录G 测试计划(GB8567—88) 286
G.1 引言 286
G.2 计划 287
G.3 测试设计说明 288
G.4 评价准则 288
附录H 测试分析报告(GB8567—88) 289
H.1 引言 289
H.2 测试概要 289
H.3 测试结果及发现 289
H.4 对软件功能的结论 289
H.5 分析摘要 290
H.6 测试资源消耗 290
附录I 开发进度月报(GB8567—88) 290
I.1 标题 290
I.2 工程进度与状态 291
I.3 资源耗用与状态 291
I.4 经费支出与状态 291
I.5 下个月的工作计划 292
I.6 建议 292
附录J 软件项目开发总结报告(GB8567—88) 292
J.1 引言 292
J.2 实际开发结果 293
J.3 开发工作评价 293
J.4 经验与教训 294
参考文献 295