第1章 软件工程概述 1
1.1 软件的概念 1
1.1.1 软件的含义 1
1.1.2 软件的特点 1
1.1.3 软件的分类 1
1.2 软件工程的产生和概念 2
1.2.1 软件危机 2
1.2.2 软件工程的定义和内容 3
1.3 软件工程的目标和原理 4
1.3.1 软件工程的基本目标 4
1.3.2 软件工程的基本原理 5
1.4 软件生命周期和开发模型 5
1.4.1 软件生命周期 5
1.4.2 软件开发模型 6
1.5 软件开发方法和开发工具 10
1.5.1 软件开发方法的概念 10
1.5.2 软件开发的基本方法 10
1.5.3 软件开发工具 12
1.6 软件开发文档 13
1.6.1 软件开发文档综述 13
1.6.2 文件编制中的考虑因素 14
1.6.3 文件编制的管理工作 15
1.6.4 文件编制实施规定的实例 16
1.7 小结 17
1.8 习题 18
第2章 制定计划 19
2.1 问题定义 19
2.1.1 问题定义的任务 19
2.1.2 问题定义报告的内容 19
2.2 可行性研究 20
2.2.1 可行性研究的主要任务 20
2.2.2 可行性研究的步骤 21
2.2.3 可行性研究报告编写提示 22
2.3 系统流程图 26
2.3.1 系统流程图符号 26
2.3.2 系统流程图举例 27
2.4 成本-效益分析 27
2.4.1 系统的成本 27
2.4.2 系统的效益 28
2.4.3 成本-效益分析方法 28
2.5 工程量估算 29
2.5.1 常用估算技术 29
2.5.2 估算模型 30
2.6 项目开发计划 32
2.6.1 制定项目开发计划的主要任务 33
2.6.2 复审项目开发计划 34
2.6.3 项目开发计划编写提示 34
2.7 小结 36
2.8 习题 36
第3章 需求分析 38
3.1 需求分析概述 38
3.1.1 需求分析的任务 38
3.1.2 需求分析的过程 39
3.1.3 需求获取的方法 40
3.1.4 需求分析的原则 41
3.2 结构化分析 41
3.2.1 结构化分析方法的基本思想 41
3.2.2 数据流图 42
3.2.3 数据词典 44
3.2.4 加工逻辑说明 46
3.2.5 其他图形工具 48
3.3 面向对象分析 50
3.3.1 面向对象技术 50
3.3.2 需求陈述 55
3.3.3 用例分析 56
3.3.4 对象模型 57
3.3.5 动态模型 61
3.3.6 功能模型 63
3.4 需求规格说明书 64
3.4.1 需求规格说明书的作用 64
3.4.2 软件需求说明书编写提示 64
3.5 小结 66
3.6 习题 66
第4章 软件设计 70
4.1 软件设计概述 70
4.1.1 软件设计的任务 70
4.1.2 软件设计的原则 73
4.2 结构化设计 76
4.2.1 结构化设计图形工具 76
4.2.2 数据流图的类型 78
4.2.3 设计过程 79
4.2.4 变换分析 79
4.2.5 事务分析 80
4.2.6 结构图的改进 80
4.3 结构化程序设计 81
4.3.1 程序流程图 82
4.3.2 N-S图 84
4.3.3 问题分析图 84
4.3.4 程序设计语言 85
4.4 面向对象系统设计 85
4.4.1 系统设计概述 85
4.4.2 问题域子系统设计 87
4.4.3 人机交互子系统设计 87
4.4.4 任务管理子系统设计 89
4.4.5 数据管理子系统设计 90
4.5 对象设计 91
4.5.1 确定类中应有的服务 91
4.5.2 对象描述 92
4.5.3 服务算法设计 92
4.5.4 面向对象设计的启发规则 92
4.6 Jackson方法 93
4.6.1 Jackson方法概述 93
4.6.2 三种基本结构 94
4.6.3 设计过程 95
4.7 软件复用技术 97
4.7.1 软件复用技术概述 97
4.7.2 面向对象的软件复用技术 98
4.8 软件设计阶段文档 100
4.8.1 概要设计说明书编写提示 100
4.8.2 详细设计说明书编写提示 101
4.9 小结 103
4.10 习题 103
第5章 程序编码 107
5.1 程序设计语言 107
5.1.1 程序设计语言的分类 107
5.1.2 程序设计语言的选择 108
5.2 程序设计风格 108
5.2.1 程序内部的文档 109
5.2.2 数据说明 110
5.2.3 语句构造 110
5.2.4 输入和输出 111
5.2.5 面向对象程序设计风格 111
5.3 程序的效率 113
5.3.1 程序运行时间 113
5.3.2 存储器效率 113
5.3.3 输入/输出的效率 113
5.4 程序复杂性度量 114
5.4.1 McCabe度量法 114
5.4.2 Halstead方法 115
5.5 用户手册和操作手册 116
5.5.1 用户手册编写提示 116
5.5.2 操作手册编写提示 118
5.6 小结 119
5.7 习题 119
第6章 软件检验 121
6.1 软件检验概述 121
6.1.1 检验的手段 121
6.1.2 软件测试的目标和原则 122
6.1.3 软件测试常用方法 123
6.1.4 测试信息流 124
6.2 软件评审 124
6.2.1 软件评审条款 125
6.2.2 软件评审特点 126
6.3 测试用例设计 126
6.3.1 白盒法 126
6.3.2 黑盒法 129
6.4 测试的过程与策略 131
6.4.1 单元测试 132
6.4.2 集成测试 133
6.4.3 确认测试 135
6.4.4 系统测试 136
6.5 面向对象测试 137
6.5.1 测试策略和过程 137
6.5.2 测试用例设计 138
6.6 程序调试 139
6.6.1 调试技术 140
6.6.2 调试原则 141
6.7 软件测试文档 142
6.7.1 测试计划编写提示 142
6.7.2 测试分析报告编写提示 143
6.8 小结 144
6.9 习题 144
第7章 软件维护 147
7.1 软件维护概述 147
7.1.1 软件维护的类型 147
7.1.2 软件维护的特点 148
7.1.3 软件维护的副作用 149
7.2 软件维护活动 151
7.2.1 维护机构 151
7.2.2 维护申请 151
7.2.3 维护工作流程 152
7.2.4 程序修改的步骤 153
7.2.5 维护记录 153
7.2.6 维护评价 154
7.3 软件的可维护性 154
7.3.1 决定软件可维护性的因素 154
7.3.2 提高可维护性的方法 155
7.3.3 可维护性复审 156
7.4 软件再工程 157
7.4.1 逆向工程 157
7.4.2 软件重构 157
7.4.3 正向工程 158
7.5 小结 158
7.6 习题 158
第8章 软件开发工具和环境 160
8.1 软件开发工具和环境简介 160
8.1.1 软件开发工具 160
8.1.2 软件开发环境 162
8.1.3 CASE技术 163
8.2 常用软件开发工具简介 164
8.2.1 Rational Rose 164
8.2.2 Project 2000 165
8.2.3 Visual SourceSafe 166
8.3 小结 167
8.4 习题 167
第9章 软件项目管理 169
9.1 软件项目管理概述 169
9.1.1 软件项目的特点 169
9.1.2 软件管理的主要职能 169
9.1.3 软件度量 170
9.2 人员组织与管理 170
9.2.1 组织结构 170
9.2.2 人员配备 172
9.2.3 指导与检验 173
9.3 进度安排与控制 174
9.3.1 任务的确定与并行性 175
9.3.2 制定开发进度计划 175
9.3.3 进度安排的方法 176
9.3.4 进度跟踪和控制 177
9.4 风险管理 178
9.4.1 风险类型 178
9.4.2 风险识别 180
9.4.3 风险评估 181
9.4.4 风险应对策略 182
9.5 软件配置管理 184
9.5.1 软件配置 184
9.5.2 软件配置管理过程 186
9.6 软件质量和质量保证 187
9.6.1 软件质量概述 188
9.6.2 软件质量标准 188
9.6.3 软件质量保证 191
9.7 软件过程能力成熟度模型(CMM) 193
9.7.1 CMM概述 193
9.7.2 CMM的5个等级 194
9.7.3 CMM的内部结构 195
9.7.4 软件过程改进 196
9.7.5 CMMI简介 196
9.8 小结 197
9.9 习题 197
第10章 软件开发文档实例 200
10.1 可行性研究报告 200
10.2 项目开发计划 202
10.3 软件需求说明书 204
10.4 概要设计说明书 206
10.5 详细设计说明书 212
10.6 使用说明 213
10.7 测试计划 214
10.8 测试分析报告 215
附录 统一建模语言(UML) 216
参考文献 237