序言 1
第一章 计算机系统工程 3
1.1 计算机系统的发展 3
1.3 硬件考虑 6
1.3.1 硬件的组成 6
1.3.2 硬件的应用 7
1.3.3 硬件工程 8
1.4.1 软件的组成 10
1.4 软件考虑 10
1.4.2 软件的应用 12
1.4.3 软件工程 13
1.5 小结 17
参考文献 17
习题与思考题 17
进一步阅读的材料 18
第二章 软件危机 19
2.1 问题 19
2.3 神话与现实 20
2.2 原因 20
2.4 解决办法 23
2.5 小结 24
参考文献 24
习题与思考题 24
进一步阅读的材料 24
第三章 系统计划 25
3.1 计划阶段 25
3.2.1 “系统”的含义 26
3.2 系统定义 26
3.2.2 系统定义的任务 28
3.3 系统分析 28
3.3.1 系统分析核对表 28
3.3.2 可行性研究 35
3.3.3 成本-效益分析 36
3.4 功能分配与折衷考虑 40
3.5 系统规格说明 41
3.6 系统定义复审 41
3.7 小结 42
参考文献 43
习题与思考题 43
进一步阅读的材料 44
第四章 软件计划 45
4.1 对估算问题的看法 45
4.2 计划的目的 46
4.3 软件的范围 46
4.4 资源 47
4.4.1 人力资源 48
4.4.2 硬件 49
4.4.3 软件 49
4.5 软件的成本估算 50
4.5.1 成本估算方法 50
4.5.2 软件生产率数据 51
4.6 估算模型 54
4.6.1 资源模型 54
4.6.2 普特南(Putnam)估算模型 55
4.6.3 埃斯特林(Esterling)估算模型 56
4.7 语句行成本估算技术 59
4.7.1 成本估算的步骤 59
4.7.2 举例 59
4.8 任务——工作量成本估算技术 62
4.8.1 成本估算的步骤 62
4.8.2 举例 63
4.9 自动化成本估算技术 64
4.10 进度安排 65
4.10.1 人与工作的关系 66
4.10.2 40-20-40规则 67
4.10.3 进度的表示法 67
4.10.4 进度安排的方法 68
4.11 组织计划 69
4.12 软件计划 70
4.13 小结 70
参考文献 71
习题与思考题 71
进一步阅读的材料 73
5.1 要求分析步骤 74
第五章 软件要求分析 74
5.1.1 分析的任务 75
5.1.2 关于分析员 76
5.2 分析——一种解决问题的途径 77
5.2.1 基本系统模型 77
5.3 信息流 78
5.3.1 数据流程图 79
5.3.2 一个详细的例子 80
5.3.3 准则和注解 82
5.4 信息结构 83
5.4.1 典型的数据结构 83
5.4.2 数据结构的表示 84
5.5 数据库的要求 87
5.5.1 数据库的特性 87
5.5.2 分析的步骤 88
5.5.3 一个分析工具 89
5.7 规格说明的复审 92
5.8 要求分析工具 93
5.8.1 SADT(Structured Analysis and Design Technique)——结构化分析和设计技术 94
5.8.2 自动化工具 94
5.9 小结 98
参考文献 98
习题与思考题 98
进一步阅读的材料 99
第六章 软件设计过程 101
6.1 开发阶段 101
6.2 设计过程 102
6.2.1 软件设计的演变 103
6.2.2 逐步求精——自顶向下设计方法 103
6.2.3 结构化程序设计 103
6.2.4 面向数据的设计方法 104
6.3 初始设计——概述 104
6.4 细节设计——概述 104
6.5 设计文档 104
6.5.1 文档概要 105
6.5.2 文档内容 106
6.6.1 成本-受益考虑 107
6.6 设计的复审 107
6.6.2 设计复审的标准 109
6.7 设计复审的方法 110
6.7.1 正规复审 110
6.7.2 非正规复审 111
6.7.3 检查 112
6.8 小结 113
参考文献 113
习题与思考题 113
进一步阅读的材料 114
第七章 软件概念 116
7.1 好的软件应具备的品质 116
7.2 软件的结构和程序过程 116
7.2.1 结构 116
7.2.2 结构定义 118
7.2.3 软件的程序过程 119
7.3 模块化 120
7.3.1 抽象化 121
7.3.3 模块的类型 123
7.3.2 信息隐藏 123
7.4 模块独立性 124
7.4.1 内聚性 124
7.4.2 耦合性 127
7.5 软件的度量 129
7.5.1 霍尔斯特德的软件科学 129
7.5.2 麦凯布的复杂性度量方法 132
7.6 设计准则 133
参考文献 137
7.7 小结 137
习题与思考题 138
进一步阅读的材料 139
第八章 面向数据流的设计 141
8.1 设计与信息流 141
8.1.1 对本课题作出过贡献的人 141
8.1.2 应用范围 141
8.2 设计过程 142
8.2.1 变换型信息流 142
8.2.3 设计过程概要 143
8.2.2 事务型信息流 143
8.3 变换型分析 144
8.3.1 举例 144
8.3.2 设计步骤 145
8.4 事务型分析 152
8.4.1 举例 152
8.4.2 设计步骤 153
8.5 结构化构造模块 157
8.6 设计的后处理 158
8.7 设计的优化 159
8.8 小结 160
参考文献 160
习题与思考题 161
进一步阅读的材料 162
第九章 面向数据结构的设计 163
9.1 设计与数据结构 163
9.1.1 对本课题作出过贡献的人 163
9.2 设计过程的考虑 164
9.1.3 数据结构与数据流技术的比较 164
9.1.2 应用范围 164
9.3 杰克逊方法 165
9.3.1 数据结构的符号 165
9.3.2 程序结构推导 165
9.3.3 程序过程 167
9.3.4 补充方法 168
9.3.5 杰克逊方法小结 170
9.4.2 LCP设计方法 171
9.4.1 沃尼尔图 171
9.4 程序的逻辑构造法(LCP) 171
9.4.3 细节组织法 175
9.4.4 复杂的结构 175
9.4.5 LCP方法小结 179
9.5 数据设计 179
9.6 各种设计方法的比较 183
9.6.1 对各种设计方法的一种看法 183
9.6.2 设计方法比较的补充 188
参考文献 189
9.7 小结 189
习题与思考题 190
进一步阅读的材料 191
第十章 细节设计工具 192
10.1 设计用的工具 192
10.2 结构化构造 193
10.3 图形设计工具 193
10.3.1 流程图 193
10.3.2 方块图 196
10.4 判决表 198
10.5 IPO(输入-处理-输出)图 200
10.6 程序设计语言(PDL) 201
10.6.1 一种典型的设计语言 202
10.6.2 PDL举例 206
10.7 设计工具的比较 208
10.8 小结 209
参考文献 209
习题与思考题 209
进一步阅读的材料 210
11.1 变换过程 212
11.2 编程语言的特性 212
第十一章 编程语言及编写程序 212
11.2.1 心理学观点 213
11.2.3 工程观点 215
11.2.4 选用语言 215
11.2.2 一个语法-语义模型 216
11.2.5 编程语言的技术特性 217
11.3.1 基础语言 218
11.3 语言分类 218
11.3.2 结构化语言 219
11.3.3 专用语言 220
11.4 编写程序的风格 220
11.4.1 源程序文档化 220
11.4.2 数据说明 223
11.4.3 语句结构 224
11.4.4 输入/输出 224
11.5.1 源程序的效率 225
11.5 效率 225
11.5.2 内存效率 226
11.5.3 输入/输出效率 226
11.6 小结 227
参考文献 227
习题与思考题 227
进一步阅读的材料 228
12.1.1 测试的目的 230
12.1 测试的特性 230
第十二章 软件测试与可靠性 230
12.1.2 测试信息流 231
12.1.3 黑匣子测试与白匣子测试 232
12.1.4 质量保证问题 233
12.2 软件测试的步骤 234
12.3 单元测试 234
12.3.1 单元测试内容 235
12.3.2 单元测试步骤 236
12.4.1 自顶向下组装法 237
12.4 组装测试 237
12.4.2 自底向上组装法 238
12.4.3 关于组装测试的注释 239
12.4.4 组装测试文件 239
12.5 有效性测试 241
12.5.1 有效性测试的准则 241
12.5.2 软件系列文件复审 241
12.6 系统测试 241
12.7.1 逻辑覆盖 242
12.7 测试情况设计 242
12.7.2 同类区分 243
12.7.3 边界值分析 243
12.7.4 图形技术 243
12.7.5方法小结 245
12.8 排错的技巧 245
12.8.1 心理因素 247
12.8.2 排错的办法 247
12.9.2 可靠性模型 248
12.9.1 软件可靠性的定义 248
12.9 软件可靠性 248
12.9.3 软件正确性的证明 249
12.10 自动测试工具 250
12.11 管理问题 252
12.12 小结 252
参考文献 252
习题与思考题 253
进一步阅读的材料 254
13.1 软件维护的定义 256
第十三章 软件的维护 256
13.2 维护特性 257
13.2.1 结构化维护与非结构化维护 257
13.2.2 维护费用 258
13.2.3 存在的问题 259
13.3 可维护性 260
13.3.1 控制因素 260
13.3.3 复审 261
13.4 维护任务 261
13.3.2 定量度量 261
13.4.1 维护机构 262
13.4.2 报告 262
13.4.3 工作流程 263
13.4.4 记录保持 264
13.4.5 评价 265
13.5 维护的副作用 265
13.5.1 修改程序的副作用 265
13.6 维护问题 266
13.5.3 文档资料副作用 266
13.5.2 修改数据的副作用 266
13.6.1 维护“异常程序” 267
13.6.2 预防性维护 267
13.6.3 “备份”策略 268
13.7 小结 269
参考文献 269
习题与思考题 270
进一步阅读的材料 270
结束语 271