第1章 软件工程概述 1
1.1 软件的发展和软件危机 1
1.1.1 软件的发展 1
目 录 1
1.1.2 软件危机 2
1.2 软件开发工程化和软件生存周期 4
1.2.1 问题定义 5
1.2.2 可行性研究 5
1.2.3 需求分析 5
1.2.4 总体设计 5
1.2.7 综合测试 6
1.2.8 软件维护 6
1.2.6 编码和单元测试 6
1.2.5 详细设计 6
1.3 软件开发方法 7
1.3.1 瀑布型 7
1.3.2 渐增型 7
1.3.3 变换型 8
1.4 软件质量的评价 8
1.5 技术审查和管理复审 9
1.5.1 进行审查和复审的必要性 9
1.5.2 技术审查的标准 9
习题 10
2.2 系统的可行性 11
2.2.1 可行性论证 11
第2章 可行性研究 11
2.1 现状调查和问题定义 11
2.2.2 可行性研究的步骤 12
2.3 系统流程图 13
2.3.1 符号 13
2.3.2 用途 14
2.4 数据流图 15
2.4.1 符号 15
2.4.2 数据流图画法 15
2.5 数据词典 18
2.5.1 数据流表示 18
2.5.2 文件表示 18
2.5.3 加工表示 18
2.6.2 成本/效益分析的方法 20
2.6 成本/效益分析 20
2.6.1 成本估计 20
习题 22
第3章 需求分析 23
3.1 需求分析的任务 23
3.1.1 确定对系统的综合要求 23
3.1.2 分析系统的数据要求 23
3.1.3 导出系统的逻辑模型 23
3.1.4 修正开发计划 24
3.1.5 开发模型系统 24
3.1.6 写出需求规格说明书 24
3.2 需求分析的方法 24
3.2.1 结构化分析技术 24
3.2.2 面向对象的分析(OOA)技术 29
3.2.3 原型开发技术 34
3.3 需求分析阶段的描述工具 35
3.3.1 层次方框图 35
3.3.2 Warnier图 36
3.3.3 IPO图 36
3.4 需求分析的工具 37
习题 39
第4章 总体设计 40
4.1 总体设计阶段的过程和任务 40
4.1.1 设想供选择的方案 40
4.1.6 设计数据库 41
4.1.5 设计软件结构 41
4.1.4 功能的抽像与分解 41
4.1.3 选择最佳方案 41
4.1.2 选取合理方案 41
4.1.7 确定测试计划 42
4.1.8 书写文档 42
4.1.9 复审 42
4.2 结构化设计的概念与原理 42
4.2.1 模块化 42
4.2.2 模块独立性 44
4.2.3 模块设计准则 46
4.3 总体设计阶段的图形工具 48
4.3.1 层次图 48
4.4 结构化设计技术 49
4.4.1 数据流图的类型 49
4.3.2 HIPO图 49
4.3.3 结构图 49
4.4.2 设计过程 50
4.4.3 实例 51
4.5 面向对象设计(OOD)技术 55
4.6 设计优化 60
4.7 界面设计技术 61
习题 62
第5章 详细设计 64
5.1 详细设计阶段的任务 64
5.2 结构化程序设计 64
5.3 详细设计的描述工具 66
5.3.1 程序流程图 66
5.3.3 PAD图 67
5.3.2 N-S图(盒图) 67
5.3.4 判定表和判定树 68
5.3.5 伪码和过程设计语言(PDL) 68
5.4 Jackson程序设计方法 73
5.4.1 Jackson图 73
5.4.2 改进的Jackson图 74
5.4.3 Jackson结构程序设计方法 74
5.5 Warnier程序设计方法 81
5.5.1 Warnier方法 82
5.5.2 实例 82
5.5.3 Warnier方法的补充技术 86
5.6 程序复杂性的度量 89
5.6.1 程序图 89
5.6.2 McCabe方法 90
5.6.3 HaIstead方法 91
习题 92
第6章 编码 95
6.1 对源程序的质量要求 95
6.2 程序设计语言 96
6.2.1 程序设计语言的分类 96
6.2.2 程序设计语言的特点 97
6.2.3 选择语言进行编码 99
6.3 程序设计风格 100
6.3.1 结构化程序编码 101
6.3.2 写程序的风格 101
6.4.3 代码管理系统 104
6.4.2 编译程序 104
6.4.1 书写源程序的工具 104
6.4 软件编码工具 104
6.4.4 程序设计自动化 105
习题 106
第7章 软件测试 108
7.1 软件测试原则 108
7.1.1 设计测试用例 109
7.1.2 成立测试小组 109
7.1.3 设计非法输入的测试用例 109
7.1.4 进行回归测试 109
7.1.5 集中测试容易出错的程序段 109
7.2 软件测试的常用方法 109
7.3.1 概述 110
7.3 测试过程和步骤 110
7.2.2 白盒法 110
7.2.1 黑盒法 110
7.3.2 软件测试过程 111
7.3.3 测试中遇到的错误类型 112
7.3.4 单元测试 113
7.3.5 集成测试 115
7.3.6 验收测试 117
7.4 测试用例的设计 118
7.4.1 逻辑覆盖 118
7.4.2 等价类划分 120
7.4.3 边界值分析 122
7.4.4 图形技术 122
7.5.2 消去原因法 126
7.5 纠错技术 126
7.5.1 静态查找 126
7.5.3 回溯纠错 127
7.6 测试工具 127
7.6.1 静态分析工具 128
7.6.2 动态分析工具 128
7.6.3 综合测试评估工具 129
7.7 软件可靠性 129
7.7.1 概念 129
7.7.2 估算平均无故障时间的方法 129
习题 131
8.1.1 完善性维护 132
8.1.2 适应性维护 132
第8章 软件维护 132
8.1 软件维护的种类 132
8.1.3 纠错性维护 133
8.1.4 预防性维护 133
8.2 软件维护的特点 133
8.2.1 结构化维护与非结构化维护 133
8.2.2 软件维护的问题和代价 134
8.3 软件维护的过程 135
8.3.1 维护组织 135
8.3.2 维护报告 135
8.3.3 维护的事件流 136
8.3.4 保存维护记录和评价维护活动 137
8.4 软件可维护性 137
8.4.2 文档 138
8.4.1 决定软件可维护性的因素 138
8.4.3 可维护性复审 139
8.5 软件再用 139
8.5.1 概念 139
8.5.2 软件再用实例介绍 141
8.6 软件维护工具 145
习题 146
第9章 软件工程管理 147
9.1 软件项目的特点和软件管理的职能 147
9.1.1 软件项目的规模 147
9.1.2 软件项目的特点 149
9.1.3 软件管理的特殊困难 149
9.2.1 参数方程 150
9.2 成本估算 150
9.1.4 软件管理的职能 150
9.2.2 标准值法 151
9.2.3 COCOMO模型 152
9.3 进度计划 154
9.3.1 Gantt图法 154
9.3.2 工程网络图 154
9.3.3 关键路径 156
9.3.4 机动时间 156
9.4 人员管理 157
9.4.1 Rayleigh-Norden曲线 157
9.4.2 人员-时间权衡定律和Brooks定律 158
9.4.3 人员组织 158
9.5.1 软件质量 160
9.5 质量保证 160
9.5.2 质量保证 161
9.6 项目计划 161
9.7 软件管理工具 162
习题 162
第10章 软件工程环境 164
10.1 软件开发环境 164
10.1.1 程序设计环境 164
10.1.2 集成化项目支持环境 172
10.2 用户软件工程方法和环境 174
10.2.1 自外向内和界面原型 174
10.2.2 交互式信息处理系统的设计 175
习题 183
附录 文档格式 184