第一章 计算机系统工程 1
1.1 计算机系统的发展 1
前言 1
1.2 计算机系统工程 3
1.3 硬件考虑 3
1.3.1 硬件部件 4
1.3.2 硬件应用 5
1.3.3 硬件工程 5
1.4 软件考虑 7
1.4.1 软件成分 7
1.4.2 软件应用 10
1.4.3 软件工程 11
1.5 小结 12
第二章 软件危机 14
2.1 问题 14
2.3 神话 15
2.2 原因 15
2.4 解决方法 17
2.5 小结 18
第三章 系统计划工作 19
3.1 计划工作阶段 19
3.2 系统定义 20
3.2.1 术语“系统” 20
3.2.2 系统定义任务 21
3.3 系统分析 21
3.3.1 系统分析检验表 22
3.3.2 可行性研究 28
3.3.3 价格—利益分析 30
3.4 功能分配和综合平衡 33
3.5 系统规格说明 34
3.6 系统定义复审 34
3.7 小结 35
第四章 软件计划工作 36
4.1 关于估算的评论 36
4.2 计划工作目标 37
4.3 软件作用范围 37
4.4 资源 38
4.4.1 人员资源 38
4.4.2 硬件 39
4.4.3 软件 40
4.5 软件价格计算 40
4.5.1 价格计算方法 41
4.5.2 软件生产率数据 41
4.6 估算模型 44
4.6.1 资源模型 44
4.6.2 Putnam估算模型 45
4.6.3 Esterling估算模型 46
4.7 代码行价格计算技术 48
4.7.1 价格计算步骤 49
4.7.2 一个例子 49
4.8 每项任务工作量价格计算技术 51
4.8.1 价格计算步骤 52
4.8.2 一个例子 52
4.9 自动价格计算 53
4.10 进度安排 54
4.10.1 人员与工作的关系 55
4.10.2 40—20—40规则 56
4.10.3 进度表示法 56
4.10.4 进度表编制方法 57
4.11 机构计划工作 57
4.12 软件计划 58
4.13 小结 59
5.1.1 分析任务 60
5.1 要求分析步骤 60
第五章 软件要求分析 60
5.1.2 分析员 61
5.2 分析——种问题求解的方法 62
5.2.1 基本系统模型 62
5.3 信息流 63
5.3.1 数据流程图 64
5.3.2 一个详细的例子 65
5.3.3 指导原则和注释 66
5.4 信息结构 67
5.4.1 典型数据结构 67
5.4.2 数据结构表示法 68
5.5 数据库要求 71
5.5.1 数据库特性 71
5.5.2 分析步骤 71
5.5.3 分析工具 72
5.6 软件要求规格说明 74
5.7 规格说明复审 75
5.8 要求分析工具 76
5.8.1 SADT 77
5.8.2 自动的工具 77
5.9 小结 80
第六章 软件设计过程 82
6.1 开发阶段 82
6.2 设计过程 82
6.2.1 软件设计的演变 83
6.2.2 逐步精化——自顶向下的设计技术 83
6.2.3 结构化程序设计 84
6.2.4 面向数据的设计技术 84
6.3 初步设计——引论 84
6.5 编写设计文件资料 85
6.5.1 文件资料提纲 85
6.4 详细设计——引论 85
6.5.2 文件资料内容 87
6.6 设计复审 88
6.6.1 价格——利益考虑 88
6.6.2 设计复审准则 89
6.7 设计复审方法 90
6.7.1 正式复审 90
6.7.2 非正式复审 91
6.7.3 检查 92
6.8 小结 92
第七章 软件概念 94
7.1 好软件的质量 94
7.2 软件结构和过程 94
7.2.1 结构 94
7.2.2 结构定义 95
7.2.3 软件过程 96
7.3.1 抽象 98
7.3.3 模块类型 99
7.3 模块性 99
7.3.2 信息隐藏 99
7.4 模块独立性 100
7.4.1 内聚 100
7.4.2 耦合 102
7.5 软件度量 104
7.5.1 Halstead的软件科学 105
7.5.2 McCabe的复杂性量度 107
7.6 设计导示 108
7.7 小结 110
第八章 面向数据流的设计 112
8.1 设计和信息流 112
8.1.1 有贡献者 112
8.1.2 应用领域 112
8.2.1 转换流 113
8.2.2 事务基元流 113
8.2 设计过程考虑 113
8.2.3 工序抽象 114
8.3 转换分析 114
8.3.1 例子 114
8.3.2. 设计步骤 115
8.4 事务基元分析 119
8.4.1 例子 119
8.4.2 设计步骤 120
8.5 结构化构成块 123
8.6 设计的后处理 124
8.7 设计优化 125
8.8 小结 126
9.1.1 有贡献者 127
9.1.2 应用领域 127
9.1 设计和数据结构 127
第九章 面向数据结构的设计 127
9.1.3 数据结构与数据流技术 128
9.2 设计过程考虑 128
9.3 Jackson方法 128
9.3.1 数据结构记号 129
9.3.2 程序结构推导 130
+9.3.3 过程性表示 130
9.3.4 补充技术 131
9.3.5 Jackson方法小结 134
9.4 程序的逻辑构造 134
9.4.1 Warnier图 134
9.4.2 LCP设计方法 135
9.4.3 详细组织 137
9.4.4 复杂结构 139
9.4.5 程序的逻辑构造的小结 141
9.5 数据设计 141
9.6.1 关于设计方法学的一种观点 143
9.6 几种设计方法学的比较 143
9.6.2 设计比较的附注 147
9.7 小结 148
第十章 详细设计工具 148
10.1 设计工具 149
10.2 结构化构造 149
10.3 图形设计工具 150
10.3.1 流程图 150
10.3.2 框图 152
10.4 抉择表 152
10.5 IPO图 153
10.6 程序设计性语言 154
10.6.1 一种典型的设计性语言 155
10.6.2 PDL例子 158
10.7 几种设计工具的比较 160
10.8 小结 161
11.2.1 心理观点 162
11.2 程序设计语言的特性 162
第十一章 程序设计语言和编码 162
11.1 翻译过程 162
11.2.2 一个语法——语义模型 164
11.2.3 工程观点 165
11.2.4 语言选择 166
11.2.5 程序设计语言的技术特性 166
11.3 语言类 167
11.3.1 基础语言 168
11.3.2 结构化语言 168
11.3.3 专用语言 169
11.4 编码风格 169
11.4.1 代码文件 170
11.4.2 数据说明 172
11.4.3 语句构造 172
11.4.4 输入/输出 173
11.5 功效 174
11.5.1 代码功效 174
11.5.2 存储功效 174
11.5.3 输入/输出功效 175
11.6 小结 175
第十二章 软件测试和可靠性 176
12.1 测试的特性 176
12.1.1 测试目标 176
12.1.2 测试信息流向 177
12.1.3 黑箱测试法和白箱测试法 177
12.1.4 质量保证问题 178
12.2 软件测试的步骤 179
12.3 单元测试 179
12.3.1 单元测试考虑 180
12.3.2 单元测试过程 181
12.4.1 自顶向下地整体测试 182
12.4 整体测试 182
12.4.2 自底向上地整体测试 183
12.4.3 整体测试的注解 183
12.4.4 整体测试的文件 184
12.5 有效性测试 185
12.5.1 有效性测试的准则 185
12.6 系统测试 186
12.7 测试情况设计 186
12.5.2 配置复审 186
12.7.1 逻辑复盖 187
12.4.2 等价划分 187
12.7.3 边界值分析 187
12.7.4 图型技术 189
12.7.5 测试技术小结 189
12.8 纠错的技巧 190
12.8.1 心理学的考虑 190
12.9.2 可靠性模型 191
12.9.1 软件可靠性的定义 191
12.8.2 纠错方法 191
12.9 软件可靠性 191
12.9.3 正确性证明 192
12.10 自动测试工具 193
12.11 管理问题 194
12.12 小结 195
第十三章 软件维护 196
13.1 软件维护的定义 196
13.2 维护特性 197
13.2.1 结构化维护与非结构化维护 197
13.2.2 维护费用 198
13.2.3 问题 199
13.3 可维护性 199
13.2.1 控制因素 199
13.3.3 复审 200
13.3.2 定量的量度 200
13.4 维护任务 201
13.4.1 维护机构 201
13.4.2 编制报告 201
13.4.3 事件流 202
13.4.4 记录保持 203
13.4.5 评价 204
13.5 维护的副作用 204
13.5.1 编码副作用 204
13.5.2 数据副作用 205
13.5.3 文档资料副作用 205
13.6 维护问题 205
13.6.1 维护“不相容的代码” 205
13.6.2 预防性维护 206
13.6.3 “备份另件”策略 207
13.7 小结 207