第一章 绪论 1
1.1 软件工程与方法学的形成 1
1.1.1 软件危机 1
1.1.2 软件工程与方法学的形成 2
1.1.3 软件工程学与程序设计方法学 2
1.1.4 软件工程方法学 3
1.2 软件与软件生命周期 4
1.2.1 软件与程序 4
1.2.2 软件生命周期 4
1.2.3 四个活动时期 5
1.3 软件开发过程模型 6
1.3.1 瀑布模型 7
1.3.2 原型模型 8
1.3.3 喷泉模型 8
1.3.4 螺旋模型 8
1.4 软件开发方法 8
1.4.1 结构化方法 9
1.4.2 面向对象方法 9
1.4.3 其它开发方法 10
1.5 小结 10
第一部分 软件方法学 13
第二章 结构化与模块化 13
2.1 结构化程序 13
2.1.1 关于GOTO 13
2.1.2 控制结构与程序流程图 14
2.1.3 正规程序 16
2.1.4 基本程序 17
2.1.5 结构化程序 18
2.2 结构化定理 19
2.2.1 程序函数 19
2.2.2 结构化定理 20
2.2.3 非结构化程序到结构化程序转换 21
2.3 逐步求精方法 24
2.3.1 什么是逐步求精方法 24
2.3.2 逐步求精技术 25
2.4 模块化技术 27
2.4.1 模块与模块化 27
2.4.2 模块的特征与独立性 28
2.4.3 模块的藕合 29
2.4.4 模块的内聚 31
2.5 模块设计准则 34
2.5.1 一般原则 34
2.5.2 模块的作用域与控制域 36
2.6 小结 38
第三章 程序正确性证明 39
3.1 基本概念 39
3.1.1 程序测试与正确性证明 39
3.1.2 程序正确性定义 39
3.2 HOARE公理化方法 40
3.2.1 HOARE表示法 40
3.2.2 HOARE基本法则 41
3.2.3 简单语句证明法则 41
3.2.4 循环语句证明法则 44
3.3 FLOYD方法 46
3.3.1 不变式断言法 46
3.3.2 良序集法 51
3.4 递归程序正确性证明 53
3.4.1 递归的概念 53
3.4.2 递归计算规则 55
3.4.3 结构归纳法 56
3.4.4 良序归纳法 57
3.5 小结 59
第四章 形式推导与变换 60
4.1 程序的形式化推导技术 60
4.1.1 谓词变换器及其性质 60
4.1.2 程序的形式语义 62
4.1.3 面向目标的推导 65
4.1.4 不变式推导 68
4.2 程序的变换技术 71
4.2.1 程序变换的基本思想 72
4.2.2 程序变换的基本规则 73
4.2.3 程序的生成方法 75
4.2.4 递归消去法 76
4.3 小结 78
第二部分 软件工程学 83
第五章 软件分析 83
5.1 主要阶段和任务 83
5.1.1 问题定义 83
5.1.2 可行性研究 84
5.1.3 软件计划与进度安排 85
5.1.4 需求分析 87
5.2 结构化分析方法 89
5.2.1 数据流分析 89
5.2.2 数据流图 90
5.2.3 数据字典 93
5.2.4 逻辑表达工具 97
5.3 软件成本估算 100
5.3.1 成本估算方法 100
5.3.2 软件生产率 101
5.3.3 代码行成本估算方法 102
5.3.4 每项任务工作量的成本估算方法 103
5.4 进度计划 104
5.4.1 各阶段工作量分配 104
5.4.2 开发进度表 105
5.5 小结 106
5.5.1 基本概念与方法 106
5.5.2 分析时期主要文档 106
第六章 软件设计 107
6.1 概要设计与详细设计 107
6.1.1 概要设计 107
6.1.2 详细设计的任务 108
6.2 概要设计的图表工具 108
6.2.1 IPO图 108
6.2.2 结构图 111
6.3 结构化设计 112
6.3.1 面向数据流的设计 112
6.3.2 变换流与事务流 113
6.3.3 设计步骤 114
6.3.4 变换设计 115
6.3.5 事务设计 116
6.4 详细设计工具 118
6.4.1 程序流程图 118
6.4.2 盒图 118
6.4.3 PAD图 119
6.4.4 过程设计语言PDL 120
6.4.5 几种工具的比较 121
6.5 JACKSON方法 123
6.5.1 Jackson图 123
6.5.2 面向数据结构的设计 123
6.5.3 设计实例 124
6.6 小结 127
6.6.1 基本概念与方法 127
6.6.2 主要文档 128
第七章 软件编码与测试 129
7.1 软件编码 129
7.1.1 程序设计语言 129
7.1.2 编程语言的选择 130
7.1.3 编程风格 131
7.1.4 编程途径 132
7.2 测试的基本概念 132
7.2.1 什么是软件测试 132
7.2.2 黑盒测试与白盒测试 133
7.2.3 测试的基本原则 134
7.3 测试过程 135
7.3.1 测试过程及信息流 135
7.3.2 软件测试步骤 136
7.3.3 单元测试方法 137
73.4 集成测试方法 138
7.3.5 验收测试 140
7.4 测试方案设计 141
7.4.1 逻辑覆盖 141
7.4.2 等价类划分 144
7.4.3 边界值分析 145
7.5 调试技术 146
7.5.1 静态查找 146
7.5.2 消去法 146
7.5.3 回溯法 147
7.6 小结 147
第八章 软件运行与维护 149
8.1 软件交付使用 149
8.1.1 软件交付使用的工作 149
8.1.2 软件交付使用的方式 149
8.2 软件维护基本概念 151
8.2.1 软件开发与维护 151
8.2.2 软件维护的类型 151
8.2.3 软件的可维护性 152
8.3 软件维护的特点 153
8.3.1 软件工程与软件维护的关系 153
8.3.2 软件维护的代价 154
8.3.3 软件维护工作量模型 154
8.3.4 软件维护的典型问题 155
8.3.5 软件维护的副作用 155
8.4 维护过程与方法 157
8.4.1 维护组织 157
8.4.2 维护报告 158
8.4.3 维护模型 159
8.4.4 保存维护记录 160
8.4.5 维护的评价 160
第九章 软件评价与管理 162
9.1 软件质量 162
9.1.1 软件质量标准 162
9.1.2 软件质量保证 163
9.2 软件质量度量模型 163
9.2.1 Boehm模型 164
9.2.2 McCall模型 164
9.2.3 ISO建议模型 165
9.2.4 软件质量因素 165
9.3 软件质量评价方法 169
9.3.1 McCabe软件复杂性度量 169
9.3.2 Halstad软件复杂性度量方法 171
9.3.3 软件可靠性度量方法 172
9.4 软件工程管理 173
9.4.1 组织机构与人员管理 174
9.4.2 软件工程控制 176
9.4.3 文档资料管理 176
9.5 软件产权 176
9.5.1 软件知识产权的法律保护 176
9.5.2 软件著作权保护 177
第三部分 应用开发模型 181
第十章 面向对象开发模型 181
10.1 基本概念与特征 181
10.1.1 对象与消息 181
10.1.2 类与继承性 182
10.1.3 协议与封装 184
10.1.4 多态性与动态联编 184
10.2 面向对象软件开发模型 185
10.2.1 多层次多组成模型 185
10.2.2 OOA的五个层次 185
10.2.3 OOD扩充的四个组成部分 189
10.3 面向对象分析 189
10.3.1 Cord与Yourdon面向对象分析 189
10.3.2 标识类/对象 191
10.3.3 标识结构 194
10.3.4 标识主题 195
10.3.5 定义属性 197
10.3.6 定义服务 203
10.3.7 OOA的CASE工具 205
10.4 面向对象设计与实现 206
10.4.1 转向面向对象的设计 206
10.4.2 OOD准则及步骤 207
10.4.3 OOD与实现语言 208
10.4.4 面向对象程序设计 209
10.5 小结 211
第十一章 典型数据库应用模型 212
11.1 前言 212
11.1.1 典型数据库应用的特征 212
11.1.2 典型数据库应用开发现状及存在的问题 212
11.1.3 典型数据库应用模型 213
11.1.4 范例模型及应用 214
11.2 典型问题模式 215
11.2.1 数据库组织与结构 216
11.2.2 用户界面 217
11.2.3 查询模式 217
11.2.4 输入输出模式 220
11.2.5 数据库管理 220
11.2.6 系统维护与辅助功能 221
11.2.7 大批量数据录入工程 221
11.3 应用开发 222
11.3.1 基本步骤 222
11.3.2 数据库设计 222
11.3.3 软件结构设计 224
11.3.4 模块设计 224
11.3.5 应用实践 225
参考文献 226