第一章 软件与软件工程 1
1.1 软件 1
1.1.1 软件与软件的组成 1
1.1.2 软件的特点 2
1.1.3 软件的分类 3
1.1.4 软件的发展 4
1.1.5 软件危机 5
1.2 软件工程的概念 7
1.2.1 软件工程的定义 7
1.2.2 软件工程的目标 7
1.2.3 软件工程的原则 9
1.3 软件生存周期 10
1.3.1 软件定义 10
1.3.2 软件开发 11
1.3.3 软件使用、维护和退役 13
1.4 软件开发模型 13
1.4.1 瀑布模型 14
1.4.2 原型模型 14
1.4.3 螺旋模型 15
1.4.4 基于四代技术的模型 16
1.4.5 变换模型 17
1.4.6 组合模型 17
1.5 CASE工具及环境 19
1.5.1 计算机辅助软件工程 19
1.5.2 CASE工具 19
1.5.3 集成化的CASE环境 20
小结 21
习题 21
第二章 软件项目管理 23
2.1 软件度量 23
2.1.1 度量、测量和估算 23
2.1.2 面向规模的度量 25
2.1.3 面向功能的度量 26
2.1.4 代码行度量与功能点度量的比较 28
2.2 软件项目估算 28
2.2.1 代码行、功能点和工作量估算 29
2.2.2 经验估算模型之一:CoCoMo模型 30
2.2.3 经验估算模型之二:Putnam模型 33
2.3 软件质量度量 34
2.3.1 软件质量定义及三层次度量模型 34
2.3.2 软件质量要素 35
2.3.3 软件质量要素评价准则 36
2.4 软件复杂性度量 39
2.4.1 软件复杂性及度量原则 39
2.4.2 控制结构的复杂性度量 40
2.4.3 文本复杂性度量 41
2.5 软件可靠性度量 42
2.5.1 软件可靠性的概念 42
2.5.2 软件修复和软件有效性 43
2.5.3 软件可靠性估算 44
2.6 软件开发过程的管理 46
2.6.1 风险分析 47
2.6.2 进度安排 50
2.6.3 软件开发标准 52
2.6.4 软件质量保证 54
2.6.5 软件开发人员的组织与分工 55
2.6.6 软件项目的开发过程管理 56
2.7 软件项目管理中的CASE工具 57
小结 57
习题 57
第三章 计算机系统工程 59
3.1 计算机系统工程 59
3.1.1 硬件和硬件工程 60
3.1.2 软件和软件工程 61
3.1.3 人机工程 63
3.1.4 数据库工程 63
3.2 可行性研究 64
3.2.1 引言 64
3.2.2 经济可行性 65
3.2.3 技术可行性 67
3.2.4 方案选择 67
3.3 系统模型与模拟 69
3.3.1 系统模型 69
3.3.2 系统建模和模拟 70
3.4 系统规格说明及评审 72
3.4.1 系统规格说明 72
3.4.2 系统规格说明评审 72
小结 73
习题 73
第四章 需求分析基础 74
4.1 分析的任务与原则 74
4.2 初步需求获取技术 75
4.2.1 访谈与会议 75
4.2.2 观察用户工作流程 75
4.2.3 用户和开发人员共同组成联合小组 76
4.2.4 实例分析 76
4.3 需求建模 77
4.4 问题抽象、问题分解与多视点分析 77
4.5 支持需求分析的快速原型技术 78
4.6 需求规格说明与评审 79
4.6.1 需求规格说明书的目标与内容 79
4.6.2 需求评审 81
小结 82
习题 82
第五章 面向数据流的分析方法 85
5.1 数据流图与数据字典 85
5.2 实体-关系图 87
5.2.1 数据对象、属性与关系 87
5.2.2 实体-关系图 88
5.3 数据流图的实时系统扩充* 89
5.3.1 Ward&Mellor扩充 90
5.3.2 Hatley&Pirhai扩充 91
5.4 基于数据流的分析方法 94
5.4.1 创建数据流模型 94
5.4.2 创建控制流模型* 96
5.4.3 过程规格说明 97
5.5 基于数据流图的需求分析CASE工具* 97
5.5.1 核心思想 98
5.5.2 语言机制 99
5.5.3 动态分析 104
5.5.4 基于CASE工具的需求分析 105
小结 105
习题 106
第六章 面向对象的需求分析 107
6.1 面向对象的概念与思想 107
6.2 面向对象的分析方法 108
6.2.1 识别对象 108
6.2.2 标识对象的属性 110
6.2.3 识别对象的行为 111
6.2.4 识别对象所属的类 115
6.2.5 定义主题词 117
6.2.6 多视点需求分析 118
6.3 面向对象的需求分析CASE工具 119
6.3.1 概述 119
6.3.2 对象及消息传递图 119
6.3.3 类结构图 121
6.3.4 对象状态转换图 122
6.3.5 主题词结构图 122
6.3.6 基于CASE工具的需求分析 122
小结 123
习题 123
第七章 面向数据的分析方法与形式化方法 125
7.1 面向数据结构的系统开发方法 125
7.1.1 Warnier图 125
7.1.2 DSSD方法 126
7.2 Jackson系统开发方法 128
7.2.1 标识实体与行为 128
7.2.2 生成实体结构图 128
7.2.3 创建软件系统模型 129
7.3 形式化方法* 131
7.3.1 主要思想 131
7.3.2 形式化规格说明语言简介 132
7.3.3 形式化需求描述 134
7.3.4 形式化方法的现状与发展趋势 138
小结 139
习题 139
第八章 软件设计基础 140
8.1 软件设计过程 140
8.2 软件设计基本概念 141
8.2.1 抽象与逐步求精 141
8.2.2 模块化与信息隐藏 143
8.2.3 软件总体结构设计 145
8.2.4 数据结构设计 147
8.2.5 软件过程设计 148
8.3 过程设计技术和工具 149
8.3.1 结构化程序设计 149
8.3.2 图形表示法 150
8.3.3 判定表 151
8.3.4 过程设计语言(PDL) 152
8.3.5 过程设计工具之比较 154
8.4 设计规格说明与评审 155
小结 157
习题 157
第九章 面向数据流的设计方法 159
9.1 基本概念和设计过程 159
9.2 变换分析 160
9.3 事务分析 166
9.4 启发式设计策略 169
9.5 设计优化原则 170
9.6 实时系统设计 171
9.6.1 实时系统性能要求 171
9.6.2 实时系统设计要素 171
9.6.3 实时系统设计方法 172
9.6.4 设计实例 173
小结 176
习题 177
第十章 面向对象的设计方法 179
10.1 面向对象设计的概念 179
10.1.1 对象、操作和消息 180
10.1.2 类、实例和继承 180
10.1.3 对象描述 181
10.2 面向对象的设计方法 181
10.2.1 主体部件(PDC)的设计 182
10.2.2 用户界面部件(HIC)的设计 185
10.2.3 任务管理部件(TMC)的设计 188
10.2.4 数据管理部件(DMC)的设计 189
10.3 基于对象的设计方法 190
10.3.1 设计步骤 190
10.3.2 详细设计 193
小结 193
习题 194
第十一章 面向数据的设计方法 195
11.1 面向数据设计 195
11.2 Jackson系统开发方法 196
11.2.1 JSD分析技术回顾 196
11.2.2 扩充功能性过程 196
11.2.3 施加时间约束 200
11.2.4 实现与JSP技术 201
11.2.5 产生过程表示 202
11.3 基于结构化数据的系统开发(DSSD)方法 203
11.3.1 DSSD设计步骤 204
11.3.2 推导输出数据的逻辑结构 204
11.3.3 推导处理过程的逻辑结构 205
11.3.4 复杂过程逻辑的描述 206
小结 208
习题 208
第十二章 人机界面设计 209
12.1 人的因素 209
12.1.1 人类感知基础 209
12.1.2 用户的技能 210
12.1.3 任务与用户的特殊要求 210
12.2 人机界面风格 210
12.3 人机界面设计过程 211
12.3.1 界面设计的有关模型 212
12.3.2 任务分析与建模 212
12.3.3 界面设计的一般问题 212
12.3.4 实现工具 213
12.4 人机界面实现的原则 214
12.4.1 一般可交互性 214
12.4.2 信息显示 214
12.4.3 数据输入 214
12.5 人机界面标准 215
12.6 支持界面设计的CASE工具 215
小结 219
习题 219
第十三章 程序设计语言和编码 220
13.1 程序设计语言 220
13.1.1 程序设计语言的特性 220
13.1.2 程序设计语言的基本机制 221
13.1.3 程序设计语言的演变和分类 222
13.1.4 程序设计语言的选择 224
13.2 程序设计过程 224
13.2.1 面向对象语言对OOD的支持 225
13.2.2 基于对象语言对OOD的支持 227
13.2.3 过程式语言对OOD的支持 229
13.3 编程标准 230
13.4 编程风格 231
13.5 程序设计支持环境(PSE) 233
小结 235
习题 235
第十四章 软件测试 236
14.1 基本概念 236
14.1.1 软件测试的目标 236
14.1.2 测试阶段的信息流程 236
14.1.3 测试用例和场景的设计 237
14.1.4 软件测试的步骤 238
14.2 软件测试技术 239
14.2.1 白盒测试 239
14.2.2 黑盒测试 246
14.3 软件测试策略 248
14.3.1 单元测试 248
14.3.2 综合测试 250
14.3.3 确认测试 253
14.3.4 系统测试 254
14.3.5 排错 255
14.4 基于CASE工具的软件测试和排错 256
14.4.1 自动测试工具 256
14.4.2 调试器 257
小结 258
习题 258
第十五章 软件维护 261
15.1 软件维护的分类 261
15.2 维护过程 261
15.2.1 结构化与非结构化的维护 262
15.2.2 维护的成本 263
15.2.3 可能存在的问题 263
15.3 可维护性 264
15.3.1 影响可维护性的因素 264
15.3.2 若干量化的测度 264
15.3.3 保证可维护性的复审 264
15.4 维护活动 265
15.4.1 维护组织 265
15.4.2 维护的报告与评估 266
15.4.3 维护活动的事件流 266
15.4.4 保存维护记录 267
15.4.5 评价维护活动 268
15.5 维护的副作用 268
15.6 逆向工程与重构工程 269
15.6.1 恢复信息的级别 270
15.6.2 恢复信息的方法 270
小结 271
习题 271
第十六章 软件配置管理 272
16.1 软件配置管理 272
16.1.1 基线技术 272
16.1.2 软件配置项 273
16.2 软件配置管理任务 274
16.2.1 标识配置对象 274
16.2.2 版本控制 275
16.2.3 系统建立 276
16.2.4 修改控制 276
16.2.5 配置审计 277
16.2.6 配置状况报告 278
16.3 软件配置管理标准 278
16.4 配置管理的CASE工具 278
小结 280
习题 280
第十七章 软件重用技术 281
17.1 软件重用 281
17.1.1 软件重用的概念 281
17.1.2 软件重用的过程与意义 282
17.1.3 重用项目的管理 282
17.2 软部件库的构造 283
17.2.1 域分析 283
17.2.2 软部件的开发 285
17.2.3 软部件库的组织 287
17.3 软部件的重用 289
17.3.1 检索与提取软部件 289
17.3.2 理解与评价软部件 290
17.3.3 修改软部件 291
17.3.4 软部件的合成 291
17.4 面向对象的软件重用技术 292
17.4.1 类库的构造 292
17.4.2 类库的检索 293
17.4.3 面向对象的合成 293
17.5 软件重用项目的管理 296
17.5.1 组织机构 296
17.5.2 软件重用的考核指标 297
17.5.3 创造重用氛围 297
17.6 支持软件重用的CASE工具 298
17.6.1 软件重用对CASE工具的需求 298
17.6.2 类库的组织与检索工具 299
小结 300
习题 301
第十八章 快速原型技术 302
18.1 瀑布模型的缺陷 302
18.2 快速原型方法 304
18.2.1 原型及其作用 304
18.2.2 快速原型的构造过程 305
18.3 基于快速原型的进化式软件开发 306
18.3.1 螺旋模型 306
18.3.2 螺旋模型的评价 308
18.4 快速原型的技术支持 309
18.4.1 用户界面自动生成工具 309
18.4.2 面向数据库应用的开发工具 312
18.4.3 四代语言 315
18.4.4 可重用工具 316
18.4.5 程序设计环境 316
小结 318
习题 318
第十九章 集成化CASE环境 319
19.1 概述 319
19.2 CASE工具的集成形式 320
19.2.1 信息交换 320
19.2.2 公共界面 320
19.2.3 公共信息管理与信息共享 320
19.2.4 高度集成 321
19.3 集成化CASE环境的总体结构 322
19.3.1 界面集成 322
19.3.2 工具集成 322
19.3.3 信息集成 323
19.3.4 软件工程信息库 324
19.4 可移植的通用工具环境PCTE 326
19.4.1 基本机制 326
19.4.2 用户接口 327
19.4.3 分布式机制 327
小结 328
习题 328
第二十章 新型软件开发技术* 329
20.1 Internet与Java简介 329
20.1.1 Internet简介 329
20.1.2 Java的发展历史 330
20.1.3 Java的特征 331
20.1.4 Java的语法机制 332
20.1.5 Java的意义 337
20.2 Java与Internet环境下的软件开发 337
20.2.1 基于Java的软件开发过程 338
20.2.2 Java与多媒体主页的制作 338
20.2.3 Java与交互式主页的制作 343
20.2.4 Java与图形界面 344
20.2.5 Java与网络程序设计 346
20.3 对象链接与嵌入(OLE)技术 348
20.3.1 OLE简介 348
20.3.2 构件对象模型 348
20.3.3 结构化存储与复合文件 349
20.3.4 数据对象传送 350
20.3.5 复合文档 351
20.3.6 OLE自动化 352
20.3.7 OLE控件 352
20.4 CORBA与分布计算技术 353
20.4.1 分布计算环境 353
20.4.2 分布计算技术 353
20.4.3 CORBA概述 354
20.4.4 Internet环境下的分布式软件开发 355
小结 356
习题 357
参考文献 358