第1章 概述 1
1.1 软件工程学的几个基本概念 1
1.1.1 软件与软件工程 1
1.1.2 软件生存周期 3
1.1.3 软件开发模型 4
1.1.4 软件工程的任务及其研究范围 9
1.2 软件开发的原则和方法 11
1.2.1 软件开发原则概述 12
1.2.2 软件开发的方法 12
小结 13
习题 13
第2章 软件计划 14
2.1 问题定义和可行性研究 14
2.1.1 问题定义 14
2.1.2 可行性研究 15
2.2 软件计划 18
2.2.1 软件工作范围 18
2.2.2 资源 18
2.2.3 软件成本估算 20
2.2.4 软件计划任务书 20
2.2.5 案例:“学分管理系统” 21
2.2.6 项目开发进度月报编写规范 22
小结 24
习题 24
第3章 软件需求分析 25
3.1 软件需求分析的目标和任务 25
3.1.1 软件需求分析的目标 25
3.1.2 软件需求分析的任务 25
3.2 结构化分析 27
3.2.1 结构化分析方法的策略 27
3.2.2 数据流程图 28
3.2.3 分层数据流程图案例:简易库存管理系统数据流程图 35
3.2.4 数据字典 36
3.2.5 结构化分析步骤 42
3.3 按功能逐层分解法 44
3.3.1 层次图 44
3.3.2 IPO图 45
3.4 软件需求分析报告书写规范 46
3.5 软件需求分析报告的案例 51
小结 64
习题 64
第4章 软件总体设计 66
4.1 软件总体设计的任务和目标 66
4.2 软件总体设计基础 67
4.2.1 软件结构 67
4.2.2 结构图 68
4.2.3 软件模块 71
4.3 软件总体设计准则 78
4.4 结构化软件设计 82
4.4.1 变换设计 82
4.4.2 事务设计 85
4.4.3 综合设计 86
4.4.4 结构化软件设计步骤 87
4.4.5 案例 88
4.5 Jackson设计方法 95
4.5.1 Jackson方法中的数据结构 95
4.5.2 Jackson设计方法案例 96
4.6 概要设计说明书编写规范 98
4.7 概要设计说明书案例:简易库存管理系统概要设计 101
4.7.1 数据库的结构设计 101
4.7.2 数据表之间的关系的设计 102
4.7.3 系统模块结构设计 103
小结 104
习题 105
第5章 软件详细设计 106
5.1 结构化程序设计 106
5.1.1 基本逻辑结构 107
5.1.2 基本结构嵌套 108
5.2 详细设计工具 109
5.2.1 流程图 109
5.2.2 N-S结构流程图(盒图) 110
5.2.3 HIPO图 113
5.2.4 判定表 113
5.2.5 伪码 114
5.2.6 判定树 118
5.2.7 PAD图 118
5.2.8 结构图 120
5.2.9 详细设计工具应用案例 120
5.3 代码设计 125
5.3.1 代码的种类 126
5.3.2 代码结构中的校验位 128
5.3.3 代码设计案例 130
5.4 用户界面设计 131
5.4.1 可使用性 131
5.4.2 灵活性 131
5.4.3 复杂性与可靠性 131
5.4.4 用户界面设计的任务分析 132
5.5 用户界面任务和工作设计 136
5.5.1 任务分配 136
5.5.2 工作方式和工作设计 137
5.6 界面设计的基本类型 137
5.6.1 界面设计的类型 137
5.6.2 菜单 137
5.6.3 图像 139
5.6.4 对话框 140
5.6.5 问题描述语言 140
5.6.6 窗口 141
5.7 数据输入界面设计 142
5.7.1 数据输入规则 142
5.7.2 输入表格设计 143
5.7.3 其他数据输入的方法 145
5.8 数据显示界面设计 146
5.8.1 数据显示的规则 146
5.8.2 字符数据的显示 146
5.8.3 图形显示 147
5.8.4 报告 149
5.9 控制界面的设计 150
5.9.1 用控制对话选择操作命令 150
5.9.2 用菜单界面进行控制 150
5.9.3 用功能键定义操作命令 151
5.9.4 用图标表示对象或命令 152
5.9.5 直接操作 152
5.9.6 用窗口划分屏幕 152
5.9.7 命令语言 153
5.9.8 自然语言 155
5.10 软件安全控制设计 157
5.10.1 软件安全的基本概念 157
5.10.2 软件系统安全控制的基本方法 158
5.10.3 软件的安全控制设计 160
5.11 详细设计文档的编写 161
小结 163
习题 163
第6章 软件编码 164
6.1 对源程序的质量要求 164
6.2 结构化程序设计 164
6.2.1 结构化程序设计的原则 164
6.2.2 程序设计自顶向下、逐步求精 166
6.2.3 数据结构的合理化 167
6.3 程序设计风格 168
6.3.1 源程序文档化 168
6.3.2 数据说明 170
6.3.3 语句结构 170
6.3.4 输入输出(I/O) 172
6.4 程序效率 173
6.4.1 讨论效率的准则 173
6.4.2 算法对效率的影响 173
6.4.3 影响存储效率的因素 173
6.4.4 影响输入输出的因素 174
6.5 程序设计语言 174
6.5.1 程序设计语言特性的比较 174
6.5.2 程序设计语言的分类 176
6.5.3 程序设计语言的选择 178
6.6 防止编码错误 178
6.7 代码复查和编码工具 181
6.7.1 代码复查 181
6.7.2 编码工具 183
6.8 程序复杂性度量 183
6.8.1 代码行度量法 184
6.8.2 McCabe度量法 184
6.8.3 Halstead度量方法 185
小结 187
习题 187
第7章 软件测试 189
7.1 测试的基本概念 189
7.1.1 测试的目的 189
7.1.2 测试的方法 190
7.2 测试用例的设计 191
7.2.1 逻辑覆盖 191
7.2.2 等价划分 193
7.2.3 边界值分析 195
7.2.4 错误推测法 196
7.2.5 因果图法 196
7.2.6 实用测试策略 198
7.3 测试步骤 201
7.3.1 单元测试 201
7.3.2 整体测试(组装测试) 204
7.3.3 有效性测试(确认测试) 206
7.3.4 系统测试 206
7.4 调试技术(纠错技术) 207
7.4.1 调试的步骤 207
7.4.2 调试方法 207
7.5 软件的验证与确认 210
7.6 测试分析报告编写规范 211
7.7 测试计划文档编写规范 212
7.8 用户手册编写规范 214
7.9 操作手册编写规范 218
7.10 项目开发总结报告书写规范 220
小结 221
习题 221
第8章 软件实施与维护 223
8.1 软件实施 223
8.1.1 软件实施的定义与分类 223
8.1.2 影响软件实施工作量的因素 224
8.1.3 软件实施步骤或方法 224
8.1.4 软件实施成本 228
8.1.5 软件实施的意义 228
8.1.6 案例:×××研究设计总院GS-DES大天图文档安全系统案例 228
8.2 软件维护 233
8.2.1 软件维护的定义 233
8.2.2 影响维护工作量的因素 235
8.2.3 软件维护的策略 235
8.2.4 维护成本 236
8.3 软件维护活动 236
8.3.1 维护机构 236
8.3.2 软件维护申请报告 237
8.3.3 软件维护工作流程 237
8.3.4 维护档案记录 238
8.3.5 维护评价 238
8.4 程序修改的步骤及修改的副作用 239
8.4.1 分析和理解程序 239
8.4.2 修改程序 239
8.4.3 重新验证程序 242
8.5 软件可维护性 243
8.5.1 软件可维护性的定义 243
8.5.2 可维护性的度量 244
8.6 提高可维护性的方法 245
8.6.1 建立明确的软件质量目标和优先级 245
8.6.2 使用提高软件质量的技术和工具 246
8.6.3 进行明确的质量保证审查 247
8.6.4 选择可维护的程序设计语言 249
8.6.5 改进程序的文档 250
8.7 逆向工程和再工程 250
8.7.1 预防性维护 251
8.7.2 逆向工程的元素 252
小结 252
习题 252
第9章 软件项目管理 254
9.1 资源管理 254
9.1.1 组织体制 254
9.1.2 人员配备 255
9.2 进度计划 256
9.2.1 项目进度计划 256
9.2.2 示例 256
9.2.3 软件项目的追踪与控制 261
9.3 风险管理 262
9.3.1 风险识别 262
9.3.2 风险估计 262
9.3.3 风险评价 262
9.3.4 风险控制 262
9.4 软件工程过程管理(CMM/CMMI) 263
9.4.1 软件能力成熟度模型(CMM) 263
9.4.2 能力成熟度模式整合(CMMI) 266
9.5 质量保证 270
9.5.1 软件质量 270
9.5.2 质量保证 271
9.6 小项目的开发和管理 272
9.6.1 小项目的性质 272
9.6.2 小项目的软件计划 273
9.6.3 小项目的开发 273
9.6.4 小项目的维护 273
9.6.5 小项目的文档和管理 274
小结 274
习题 274
第10章 面向对象软件工程技术 275
10.1 面向对象的概念 275
10.1.1 对象 275
10.1.2 类 276
10.1.3 继承 276
10.1.4 多态性 277
10.2 开发过程 278
10.2.1 应用生存期 278
10.2.2 类生存期 279
10.2.3 综合方法 282
10.2.4 系统体系结构 284
10.3 面向对象分析与高层设计 284
10.3.1 面向对象分析 284
10.3.2 论域分析 285
10.3.3 应用分析 287
10.3.4 对象模型技术 287
10.3.5 高层设计 292
10.3.6 示例:一个简单的绘图系统 294
10.4 类的设计 299
10.4.1 类设计的目标 299
10.4.2 通过复用设计类 299
10.4.3 类的设计方法 300
10.4.4 类设计的例子 303
10.5 实现与测试 307
10.5.1 类的实现 307
10.5.2 应用程序的实现 310
10.5.3 测试一个面向对象的应用 310
10.6 UML与面向对象的分析与实现 316
10.6.1 UML技术简介 316
10.6.2 用例驱动的需求获取过程 317
10.6.3 图形驱动的业务建模 318
10.6.4 图形驱动的设计阶段 319
10.6.5 数据结构设计与包划分 320
小结 321
习题 321