第1章 概论 1
1.1 软件工程简述 1
1.1.1 软件工程发展史 1
1.1.2 软件危机 2
1.1.3 软件、软件工程 3
1.1.4 软件工程的基本原理 3
1.1.5 软件工程学 4
1.2 软件过程 6
1.2.1 软件生存周期 6
1.2.2 软件开发模型 8
1.3 软件开发方法 13
1.3.1 面向数据流设计方法 13
1.3.2 面向数据结构设计方法 16
1.3.3 面向对象设计方法 21
小结 23
习题1 24
第2章 需求分析 26
2.1 需求分析的任务 26
2.1.1 确定目标系统的具体要求 26
2.1.2 建立目标系统的逻辑模型 27
2.1.3 软件需求规格说明 28
2.1.4 修正系统开发计划 28
2.1.5 制定初步的系统测试计划 28
2.1.6 编写用户手册 29
2.2 需求分析步骤 29
2.2.1 进行调查研究 29
2.2.2 分析和描述系统的逻辑模型 29
2.3.1 数据对象 30
2.3 实体-关系图 30
2.2.3 复审 30
2.3.2 属性 31
2.3.3 关系 31
2.3.4 实体-关系图 31
2.4 数据流图 32
2.4.1 数据流图的4种基本符号 32
2.4.2 数据流图的几种附加符号 33
2.4.3 画数据流图的步骤 33
2.4.4 几点注意事项 34
2.5 状态转换图 36
2.5.1 画状态转换图的步骤 36
2.5.2 状态转换图的符号 36
2.6 数据字典 37
2.6.2 数据字典使用的符号 38
2.6.1 数据字典的内容 38
2.6.3 数据字典与数据流图 40
2.7 需求分析图形工具 40
2.7.1 层次图 40
2.7.2 Warnier图 41
2.7.3 IPO图 41
小结 41
习题2 42
第3章 系统设计与实现 43
3.1 概要设计步骤 43
3.1.1 确定设计方案 43
3.1.2 软件结构设计 44
3.1.3 数据文件设计 44
3.1.4 测试方案设计 44
3.2.2 模块化 45
3.2 模块和模块化 45
3.2.1 模块 45
3.2.3 模块分割评价标准 46
3.2.4 模块设计规则 50
3.3 软件结构设计的图形工具 51
3.3.1 层次图 51
3.3.2 结构图 51
3.4 系统人-机界面设计 53
3.4.1 人-机界面设计问题 53
3.4.2 人-机界面设计过程 54
3.4.3 评估界面设计的标准 54
3.4.4 界面设计指南 54
3.6 详细设计工具 56
3.6.1 流程图 56
3.5 过程设计 56
3.6.2 盒图 61
3.6.3 PAD图 62
3.6.4 判定表 64
3.6.5 判定树 64
3.6.6 过程设计语言 65
3.7 结构化设计方法 65
3.7.1 变换型 66
3.7.2 事务型 66
3.8 结构化程序设计 67
3.8.1 程序设计语言的选择 68
3.8.2 程序设计风格 69
3.9 程序结构复杂程度的度量 70
3.9.1 McCabe方法 70
小结 72
3.9.2 Halstead方法 72
习题3 73
第4章 软件测试、验证与确认 76
4.1 软件测试目标 76
4.2 测试方法 76
4.2.1 静态分析与动态测试 76
4.2.2 黑盒法与白盒法 77
4.2.3 测试原则 78
4.3 测试步骤 79
4.3.1 模块测试 79
4.3.2 集成测试 79
4.3.3 程序审查会和人工运行 80
4.3.4 确认测试 80
4.3.5 平行运行 81
4.4.2 边界值分析法 82
4.4 设计测试方案、实用测试策略 82
4.4.1 等价类划分法 82
4.4.3 错误推测法 83
4.4.4 逻辑覆盖法 83
4.4.5 因果图法 86
4.4.6 实用测试策略 89
4.4.7 软件调试 90
4.5 软件验证与确认 91
4.5.1 软件验证 91
4.5.2 软件确认 91
小结 92
习题4 92
5.1 维护的定义、特点、过程 96
5.1.1 维护的定义 96
第5章 软件维护 96
5.1.2 维护的特点 97
5.1.3 维护的过程 98
5.2 可维护性 101
5.2.1 决定可维护性的因素 101
5.2.2 可维护性的度量 101
5.2.3 如何提高程序的可维护性 103
小结 103
习题5 104
第6章 面向对象方法学 106
6.1 面向对象技术的概念 106
6.1.1 面向对象方法学概述 106
6.1.2 面向对象的概念 107
6.2.1 对象模型 109
6.2 面向对象分析 109
6.2.2 对象抽象的原则 114
6.2.3 划分主题 114
6.2.4 建立对象模型的基本方法 115
6.2.5 动态模型 118
6.2.6 功能模型 120
6.2.7 UML图 121
6.3 面向对象设计 125
6.3.1 系统设计 125
6.3.2 对象设计 128
6.3.3 面向对象设计的准则 129
6.3.4 面向对象设计的启发规则 130
6.4 面向对象系统实现 130
小结 131
习题6 132
7.1 成本估计技术 133
7.1.1 代码行技术 133
第7章 软件工程管理技术 133
7.1.2 任务估算技术 134
7.2 人员组织 134
7.2.1 Brooks定律 134
7.2.2 软件开发组织的管理结构 134
7.2.3 程序设计小组的组织 135
7.3 计划管理 135
7.3.1 Gantt图 135
7.3.2 工程网络技术 136
7.4 软件配置管理 139
7.4.1 配置标识 139
7.4.2 变动控制 139
7.5 软件质量保证 140
7.5.1 软件质量的特性 140
7.4.3 配置审计 140
7.4.4 配置状态报告 140
7.5.2 软件质量的保证 141
7.6 软件工程文件规范 142
7.6.1 总体要求 143
7.6.2 可行性研究报告的编写提示 143
7.6.3 项目开发计划的编写提示 147
7.6.4 软件需求说明书的编写提示 149
7.6.5 数据要求说明书的编写提示 151
7.6.6 概要设计说明书的编写提示 152
7.6.7 详细设计说明书的编写提示 154
7.6.8 数据库设计说明书的编写提示 155
7.6.9 用户手册的编写提示 157
7.6.10 操作手册的编写提示 159
7.6.11 模块开发卷宗的编写提示 160
7.6.12 测试计划的编写提示 162
7.6.13 测试分析报告的编写提示 163
7.6.14 开发进度月报的编写提示 165
7.6.15 项目开发总结报告的编写提示 166
小结 167
习题7 167
第8章 软件开发工具与集成化环境 169
8.1 CASE技术 169
8.1.1 CASE的基本组成部分 169
8.1.2 CASE的软件平台 170
8.1.3 CASE的硬件平台 170
8.2 软件开发工具 170
8.2.2 软件开发工具的性能 171
8.2.1 软件开发工具的功能 171
8.2.3 软件开发工具的分类 172
8.3 集成化环境 174
8.3.1 软件工程环境的定义 174
8.3.2 软件工程环境的分类 175
8.3.3 软件工程环境的构成和特性 175
8.3.4 集成化环境 176
8.3.5 集成化的层次 176
小结 177
习题8 177
第9章 实例——招干考试成绩管理系统 178
9.1 问题定义 178
9.2 可行性研究 178
9.2.1 技术可行性 178
9.3.3 录用 179
9.3.2 成绩输入 179
9.3.4 输出需求 179
9.2.2 经济可行性 179
9.3 需求分析 179
9.3.1 考生情况分析 179
9.3.5 数据流图和数据字典 180
9.3.6 IPO图 180
9.4 概要设计 181
9.4.1 数据库结构设计 181
9.4.2 系统结构设计 181
9.4.3 测试方案设计 182
9.5 详细设计 183
9.5.1 系统界面设计 183
9.5.2 考前处理 185
9.5.3 输入设计 186
9.5.5 录用过程设计 188
9.5.4 成绩处理 188
9.5.6 输出设计 189
9.5.7 测试用例设计 192
9.6 程序设计提示 193
9.6.1 进入系统时密码设置 193
9.6.2 考前处理 194
9.6.3 成绩输入设计 194
9.6.4 成绩处理 194
9.6.5 录用过程设计 194
9.6.6 初始化程序 194
9.7 软件测试 195
习题9 195
参考文献 196