第一章 软件与软件工程 1
1.1 软件 1
1.1.1 软件与软件的组成 1
目录 1
1.1.2 软件的特点 2
1.1.3 软件的分类 3
1.1.4 软件的发展 5
1.1.5 软件危机 6
1.2 软件工程的概念 8
1.2.1 软件工程的定义 9
1.2.2 软件工程的目标 9
1.2.3 软件工程的原则 11
1.3.1 软件定义 12
1.3 软件生存周期 12
1.3.2 软件开发 14
1.3.3 软件使用、维护和退役 15
1.4 软件开发模型 16
1.4.1 瀑布模型 17
1.4.2 原型模型 18
1.4.3 螺旋模型 19
1.4.4 基于四代技术的模型 21
1.4.5 变换模型 21
1.4.6 组合模型 22
1.5 CASE工具及环境 23
1.5.1 计算机辅助软件工程 24
1.5.2 CASE工具 24
1.5.3 集成化的CASE环境 25
习题 27
小结 27
第二章 软件项目管理 28
2.1 软件度量 28
2.1.1 度量、测量和估算 29
2.1.2 面向规模的度量 30
2.1.3 面向功能的度量 31
2.1.4 代码行度量与功能点度量 34
的比较 34
2.2 软件项目估算 34
2.2.1 代码行、功能点和工作 35
量估算 35
CoCoMo模型 37
2.2.2 经验估算模型之一: 37
2.2.3 经验估算模型之二: 39
Putnam模型 39
2.3 软件质量度量 41
2.3.1 软件质量定义及三层次度量 41
模型 41
2.3.2 软件质量要素 43
2.3.3 软件质量要素评价准则 44
2.4 软件复杂性度量 48
2.4.1 软件复杂性及度量原则 48
2.4.2 控制结构的复杂性度量 49
2.4.3 文本复杂性度量 50
2.5.1 软件可靠性的概念 51
2.5 软件可靠性度量 51
2.5.2 软件修复和软件有效性 53
2.5.3 软件可靠性估算 54
2.6 软件开发过程的管理 57
2.6.1 风险分析 57
2.6.2 进度安排 60
2.6.3 软件开发标准 63
2.6.4 软件质量保证 65
2.6.5 软件开发人员的组织与分工 67
2.6.6 软件项目的开发过程管理 68
2.7 软件过程及软件成熟度 69
模型CMM 69
2.7.1 引言 69
2.7.2 CMM的基本概念 70
2.7.3 能力成熟度模型CMM 71
2.7.4 能力成熟度模型集成CMMI 77
2.7.5 CMM和CMMI的选择和 82
应用 82
2.8 软件项目管理中的 83
CASE工具 83
小结 84
习题 84
第三章 计算机系统工程 86
3.1 计算机系统工程 87
3.1.1 硬件和硬件工程 87
3.1.2 软件和软件工程 88
3.1.3 人机工程 91
3.1.4 数据库工程 92
3.2 可行性研究 93
3.2.1 引言 93
3.2.2 经济可行性 94
3.2.3 技术可行性 96
3.2.4 方案选择 97
3.3 系统模型与模拟 99
3.3.1 系统模型 99
3.3.2 系统建模和模拟 101
3.4 系统规格说明及评审 103
3.4.1 系统规格说明 103
小结 104
3.4.2 系统规格说明评审 104
习题 105
第四章 需求分析基础 106
4.1 分析的任务与原则 106
4.2 初步需求获取技术 107
4.2.1 访谈与会议 108
4.2.2 观察用户工作流程 108
4.2.3 用户和开发人员共同组成 108
联合小组 108
4.2.4 实例分析 109
4.3 需求建模 110
4.4 问题抽象、问题分解与多视点 110
分析 110
4.5 支持需求分析的快速原型技术 111
4.6 需求规格说明与评审 112
4.6.1 需求规格说明书的目标 112
与内容 112
4.6.2 需求评审 114
小结 116
习题 116
第五章 面向数据流的分析方法 119
5.1 数据流图与数据字典 119
5.2 实体-关系图 122
5.2.1 数据对象、属性与关系 122
5.2.2 实体-关系图 123
*5.3 数据流图的实时系统扩充 124
5.3.1 Ward Mellor扩充 125
5.3.2 Hatley Pirbhai扩充 126
5.4 基于数据流的分析方法 129
5.4.1 创建数据流模型 130
*5.4.2 创建控制流模型 132
5.4.3 过程规格说明 132
5.5 基于数据流图的需求分析CASE 134
工具 134
5.5.1 核心思想 134
5.5.2 语言机制 136
5.5.3 动态分析 142
5.5.4 基于CASE工具的需求分析 143
小结 143
习题 144
6.1 面向对象的概念与思想 145
第六章 面向对象的需求分析 145
6.2 UML概述 146
6.2.1 UML的语言机制 146
6.2.2 基于UML的软件开发过程 150
6.3 基于UML的需求分析 152
6.3.1 开发场景 153
6.3.2 生成用例 154
6.3.3 用活动图表示用例 155
6.3.4 生成用例图 158
6.3.5 建立顶层架构 159
6.3.6 建立领域概念模型 162
习题 165
小结 165
第七章 面向数据的分析方法与形式 167
化方法 167
7.1 面向数据结构的系统开发方法 167
7.1.1 Warnier图 167
7.1.2 DSSD方法 168
7.2 Jackson系统开发方法 171
7.2.1 标识实体与行为 171
7.2.2 生成实体结构图 171
7.2.3 创建软件系统模型 172
*7.3 形式化方法 175
7.3.1 主要思想 175
7.3.2 形式化规格说明语言简介 176
7.3.3 形式化需求描述 178
趋势 183
7.3.4 形式化方法的现状与发展 183
小结 184
习题 184
第八章 软件设计基础 185
8.1 软件设计过程 185
8.2 软件设计基本概念 186
8.2.1 抽象与逐步求精 186
8.2.2 模块化与信息隐藏 189
8.2.3 软件总体结构设计 192
8.2.4 数据结构设计 193
8.2.5 软件过程设计 194
8.3.1 结构化程序设计 195
8.3 过程设计技术和工具 195
8.3.2 图形表示法 196
8.3.3 判定表 198
8.3.4 过程设计语言(PDL) 199
8.3.5 过程设计工具之比较 202
8.4 设计规格说明与评审 203
小结 205
习题 205
第九章 面向数据流的设计方法 207
9.1 基本概念和设计过程 207
9.2 变换分析 209
9.3 事务分析 216
9.4 启发式设计策略 219
9.5 设计优化原则 221
9 6 实时系统设计 222
9.6.1 实时系统性能要求 222
9.6.2 实时系统设计要素 222
9.6.3 实时系统设计方法 223
9.6.4 设计实例 225
小结 228
习题 229
第十章 面向对象的设计方法 231
10.1 设计用例实现方案 232
10.1.1 顺序图 232
10.1.2 协作图 233
控制类 234
10.1.3 提取边界类、实体类和 234
10.1.4 构造交互图 235
10.1.5 精化类图 237
10.2 设计技术支撑方案 241
10.2.1 数据持久存储服务 241
10.2.2 并发与同步控制服务 242
10.2.3 技术支撑方案与用例实现 242
方案的融合 242
10.3 设计用户界面 243
10.4 精化设计模型 244
10.4.1 状态图 244
10.4.2 精化体系结构 246
10.4.3 精化类之间的关系 247
10.4.4 精化类的属性和操作 250
10.4.5 设计状态图 251
10.4.6 设计活动图 252
小结 253
习题 254
第十一章 面向数据的设计方法 255
11.1 面向数据设计 255
11.2 Jackson系统开发方法 256
11.2.1 JSD分析技术回顾 256
11.2.2 扩充功能性过程 257
11.2.3 施加时间约束 262
11.2.4 实现与JSP技术 262
11.2.5 产生过程表示 264
(DSSD)方法 265
11.3 基于结构化数据的系统开发 265
11.3.1 DSSD设计步骤 266
11.3.2 推导输出数据的逻辑结构 266
11.3.3 推导处理过程的逻辑结构 267
11.3.4 复杂过程逻辑的描述 269
小结 270
习题 270
第十二章 人机界面设计 272
12.1 人的因素 272
12.1.1 人类感知基础 272
12.1.2 用户的技能 273
12.1.3 任务与用户的特殊要求 273
12.2 人机界面风格 274
12.3 人机界面设计过程 275
12.3.1 界面设计的有关模型 275
12.3.2 任务分析与建模 276
12.3.3 界面设计的一般问题 276
12.3.4 实现工具 277
12.4 人机界面实现的原则 278
12.4.1 一般可交互性 278
12.4.2 信息显示 278
12.4.3 数据输入 279
12.5 人机界面标准 279
12.6 支持界面设计的CASE工具 280
习题 283
小结 283
第十三章 程序设计语言和编码 285
13.1 程序设计语言 285
13.1.1 程序设计语言的特性 285
13.1.2 程序设计语言的基本机制 286
13.1.3 程序设计语言的演变 288
和分类 288
13.1.4 程序设计语言的选择 289
13.2 程序设计过程 290
13.2.1 面向对象语言对OOD的 290
支持 290
13.2.2 基于对象语言对OOD的 293
支持 293
的支持 296
13.2.3 过程式语言对OOD 296
13.3 编程标准 297
13.4 编程风格 299
13.5 程序设计支持环境(PSE) 300
小结 302
习题 302
第十四章 软件测试 304
14.1 基本概念 304
14.1.1 软件测试的目标 304
14.1.2 测试阶段的信息流程 304
14.1.3 测试用例和场景的设计 305
14.1.4 软件测试的步骤 307
14.2.1 白盒测试 308
14.2 软件测试技术 308
14.2.2 黑盒测试 316
14.3 软件测试策略 318
14.3.1 单元测试 318
14.3.2 综合测试 321
14.3.3 确认测试 325
14.3.4 系统测试 326
14.3.5 排错 327
14.4 基于CASE工具的软件测试 329
和排错 329
14.4.1 自动测试工具 329
14.4.2 调试器 330
习题 331
小结 331
第十五章 软件维护 335
15.1 软件维护的分类 335
15.2 维护过程 336
15.2.1 结构化与非结构化的维护 336
15.2.2 维护的成本 337
15.2.3 可能存在的问题 338
15.3 可维护性 338
15.3.1 影响可维护性的因素 338
15.3.2 若干量化的测度 339
15.3.3 保证可维护性的复审 339
15.4 维护活动 340
15.4.1 维护组织 340
15.4.3 维护活动的事件流 341
15.4.2 维护的报告与评估 341
15.4.4 保存维护记录 343
15.4.5 评价维护活动 344
15.5 维护的副作用 344
15.6 逆向工程与重构工程 345
15.6.1 恢复信息的级别 346
15.6.2 恢复信息的方法 346
小结 347
习题 347
第十六章 软件配置管理 348
16.1 软件配置管理 348
16.1.1 基线技术 348
16.1.2 软件配置项 349
16.2.1 标识配置对象 351
16.2 软件配置管理任务 351
16.2.2 版本控制 352
16.2.3 系统建立 353
16.2.4 修改控制 353
16.2.5 配置审计 355
16.2.6 配置状况报告 356
16.3 软件配置管理标准 356
16.4 配置管理的CASE工具 356
小结 358
习题 358
第十七章 软件重用技术 360
17.1 软件重用 360
17.1.1 软件重用的概念 360
17.1.2 软件重用的过程与意义 361
17.1.3 重用项目的管理 362
17.2 软部件库的构造 362
17.2.1 域分析 363
17.2.2 软部件的开发 365
17.2.3 软部件库的组织 367
17.3 软部件的重用 370
17.3.1 检索与提取软部件 371
17.3.2 理解与评价软部件 372
17.3.3 修改软部件 372
17.3.4 软部件的合成 373
17.4 面向对象的软件重用技术 373
17.4.1 类库的构造 374
17.4.3 面向对象的合成 375
17.4.2 类库的检索 375
17.5 软件重用项目的管理 378
17.5.1 组织机构 379
17.5.2 软件重用的考核指标 380
17.5.3 创造重用氛围 380
17.6 支持软件重用的CASE工具 381
17.6.1 软件重用对CASE工具 381
的需求 381
17.6.2 类库的组织与检索工具 382
小结 384
习题 384
第十八章 快速原型技术 386
18.1 瀑布模型的缺陷 386
18.2 快速原型方法 388
18.2.1 原型及其作用 389
18.2.2 快速原型的构造过程 390
18.3 基于快速原型的进化式软件 391
开发 391
18.3.1 螺旋模型 391
18.3.2 螺旋模型的评价 393
18.4 快速原型的技术支持 394
18.4.1 用户界面自动生成工具 395
18.4.2 面向数据库应用的开发 398
工具 398
18.4.3 四代语言 402
18.4.5 程序设计环境 403
18.4.4 可重用工具 403
小结 405
习题 405
第十九章 集成化CASE环境 407
19.1 概述 407
19.2 CASE工具的集成形式 408
19.2.1 信息交换 408
19.2.2 公共界面 409
19.2.3 公共信息管理与信息共享 409
19.2.4 高度集成 409
19.3 集成化CASE环境的总体结构 411
19.3.1 界面集成 411
19.3.2 工具集成 411
19.3.3 信息集成 412
19.3.4 软件工程信息库 413
19.4 可移植的通用工具环境PCTE 416
19.4.1 基本机制 416
19.4.2 用户接口 417
19.4.3 分布式机制 418
小结 418
习题 419
第二十章 新型软件开发技术 420
20.1 Internet与Java简介 420
20.1.1 Internet简介 420
20.1.2 Java的发展历史 422
20.1.3 Java的特征 422
20.1.4 Java的语法机制 424
20.1.5 Java的意义 430
20.2 Java与Internet环境下的软 431
件开发 431
20.2.1 基于Java的软件开发过程 431
20.2.2 Java与多媒体主页的制作 432
20.2.3 Java与交互式主页的制作 438
20.2.4 Java与图形界面 439
20.2.5 Java与网络程序设计 442
20.3 对象链接与嵌入(OLE)技术 443
20.3.1 OLE简介 443
20.3.2 构件对象模型 444
20.3.3 结构化存储与复合文件 445
20.3.4 数据对象传送 446
20.3.5 复合文档 447
20.3.6 OLE自动化 448
20.3.7 OLE控件 448
20.4 CORBA与分布计算技术 449
20.4.1 分布计算环境 449
20.4.2 分布计算技术 450
20.4.3 CORBA概述 451
20.4.4 Internet环境下的分布式 453
软件开发 453
小结 454
习题 455
参考文献 456