第1章 概述1
1.1 计算机系统的开发过程1
1.2 软件及其分类3
1.3 软件工程的由来和发展4
1.4 软件的生命周期6
1.5 软件生存期模型7
1.6 小结13
习题113第2章 软件计划15
2.1 确定软件范围15
2.2 软件开发中的资源需求15
2.3 软件成本估算17
2.3.1 估算方法17
2.3.2 估算模型20
2.3.3 面向对象项目的估算30
2.3.4 自行开发或购买的决策31
2.4 软件开发进度的安排32
2.4.1 甘特图32
2.4.2 PERT图33
2.4.3 两种图的结合34
2.5 小结36
习题236第3章 软件需求分析41
3.1 需求分析的任务41
3.2 需求规约说明书42
3.3 结构化需求分析方法44
3.3.1 数据流图44
3.3.2 数据词典50
3.3.3 功能说明52
3.4 原型化需求分析方法55
3.4.1 原型开发的分类56
3.4.2 快速原型技术58
3.4.3 用户界面开发61
3.5 面向对象方法62
3.5.1 Coad/Yourdon方法62
3.5.2 Booch方法 63
3.5.3 Rumbaugh的OMT方法63
3.5.4 Jacobson方法63
3.5.5 UML方法64
3.6 小结67
习题368第4章 软件设计70
4.1 软件设计的任务70
4.1.1 概要设计70
4.1.2 详细设计71
4.1.3 软件设计的目标和准则71
4.2 软件设计的概念和原则71
4.2.1 软件体系结构71
4.2.2 软件结构中的若干概念72
4.2.3 软件的模块化73
4.3 软件概要设计76
4.3.1 充分理解SRS,确定设计策略76
4.3.2 模块化准则77
4.3.3 模块设计中的具体方法77
4.3.4 概要设计文档80
4.4 软件详细设计81
4.4.1 图示工具81
4.4.2 表格工具85
4.4.3 语言工具85
4.4.4 工具的比较85
4.4.5 程序复杂性的度量87
4.4.6 详细设计文档89
4.5 结构化设计方法91
4.5.1 软件结构图92
4.5.2 从DFD导出软件结构图92
4.5.3 软件设计的评判98
4.6 面向数据结构的设计方法100
4.6.1 Jackson方法101
4.6.2 LCP方法105
4.7 面向对象的设计方法107
4.7.1 OOD基本概念108
4.7.2 OOD任务110
4.7.3 Coad与Yourdon的OOD方法113
4.7.4 层次化OOD方法114
4.8 其他设计方法116
4.8.1 面向方面程序设计116
4.8.2 面向Agent的设计方法117
4.8.3 泛型程序设计117
4.8.4 面向构件的技术118
4.8.5 敏捷方法118
4.8.6 Rational统一过程118
4.8.7 功能驱动开发模式118
4.8.8 极端编程119
4.9 小结119
习题4121第5章 程序编码124
5.1 程序设计语言的分类124
5.1.1 第一代语言--机器语言时代124
5.1.2 第二代语言--汇编语言时代124
5.1.3 第三代语言--高级语言时代124
5.1.4 第四代语言--非过程语言时代125
5.2 编码风格125
5.2.1 语句结构125
5.2.2 源程序文档化127
5.2.3 数据说明128
5.2.4 输入和输出129
5.3 面向对象的编程语言130
5.3.1 Smalltalk130
5.3.2 Eiffel130
5.3.3 SDL130
5.3.4 C++131
5.3.5 面向对象的Pascal131
5.3.6 Java131
5.3.7 C#131
5.4 小结132
习题5132第6章 软件测试133
6.1 软件测试基础133
6.1.1 测试目标133
6.1.2 测试原则133
6.1.3 可测试性134
6.2 测试步骤和策略134
6.2.1 软件测试过程与开发过程的对应关系134
6.2.2 测试信息流135
6.2.3 单元测试135
6.2.4 集成测试136
6.2.5 确认测试141
6.2.6 系统测试142
6.3 测试用例设计143
6.3.1 概述143
6.3.2 逻辑覆盖144
6.3.3 等价类划分147
6.3.4 边界值分析148
6.3.5 划分测试与随机测试148
6.3.6 错误推测法148
6.3.7 因果图法149
6.3.8 人工测试149
6.3.9 调试150
6.4 软件可靠性151
6.4.1 可靠性和可用性152
6.4.2 影响软件可靠性的因素152
6.4.3 软件可靠性模型153
6.4.4 软件可靠性工程155
6.5 面向对象的测试155
6.5.1 OO软件测试策略155
6.5.2 OO类测试方法156
6.5.3 继承层次的测试158
6.6 小结160
习题6161第7章 软件维护163
7.1 软件维护的概念163
7.1.1 改正性维护164
7.1.2 适应性维护164
7.1.3 完善性维护164
7.1.4 预防性维护164
7.2 软件的可维护性164
7.2.1 可理解性165
7.2.2 可测试性165
7.2.3 可修改性165
7.2.4 可靠性166
7.2.5 可移植性166
7.2.6 可使用性166
7.2.7 效率166
7.3 提高可维护性的方法166
7.3.1 提供完整和一致的文档167
7.3.2 建立明确的软件质量目标和优先级167
7.3.3 使用现代化的开发技术和工具168
7.3.4 进行明确的质量保证审查168
7.3.5 选择可维护性好的程序设计语言169
7.3.6 采用软件维护的新方法169
7.4 软件再工程170
7.4.1 业务过程再工程170
7.4.2 软件再工程过程模型171
7.4.3 逆向工程172
7.4.4 软件重构173
7.4.5 正向工程174
7.4.6 再工程经济学174
7.5 小结175
习题7175第8章 软件复用177
8.1 软件复用概念177
8.1.1 软件复用的类型177
8.1.2 软件复用的粒度178
8.1.3 软件复用机会的识别179
8.2 领域工程181
8.2.1 领域分析181
8.2.2 领域特征182
8.3 可复用构件的建造及复用183
8.3.1 构件应具有的特征183
8.3.2 领域构件的设计框架184
8.3.3 几种流行的构件技术184
8.3.4 建立可复用的构件库186
8.3.5 软件构件的复用187
8.3.6 基于Agent的软件复用188
8.3.7 基于复用的数据挖掘系统189
8.4 面向对象的软件复用技术190
8.4.1 复用技术对OO方法的支持190
8.4.2 OO软件复用技术191
8.5 小结192
习题8193第9章 面向对象的软件工程194
9.1 面向对象的基本概念194
9.1.1 对象195
9.1.2 类196
9.1.3 消息、方法和变量197
9.1.4 面向对象的基本特征198
9.2 面向对象建模及统一建模语言UML203
9.2.1 面向对象建模203
9.2.2 统一建模语言UML204
9.2.3 UML模型208
9.2.4 UML的扩展机制216
9.2.5 UML建模工具219
9.3 面向对象的软件需求分析及设计220
9.3.1 常用的面向对象软件工程方法220
9.3.2 基于UML的软件分析与设计222
9.4 面向对象的软件需求分析方法及其在图书馆系统的应用223
9.4.1 系统需求224
9.4.2 用面向对象方法进行系统需求分析224
9.5 基于UML的网络管理平台的分析与设计228
9.5.1 系统开发过程228
9.5.2 系统的实现231
9.6 小结232
习题9233第10章 软件质量保证235
10.1 软件质量的概念235
10.2 软件质量保证236
10.2.1 SQA活动236
10.2.2 软件可靠性与软件质量保证237
10.2.3 软件质量检验与软件质量保证238
10.3 软件复审238
10.3.1 软件错误的危害性238
10.3.2 软件复审与审核计划239
10.3.3 正式技术复审239
10.4 统计质量保证240
10.5 ISO9000质量标准242
10.5.1 ISO9000简介242
10.5.2 ISO9000认证标准243
10.5.3 我国对ISO9000标准的使用246
10.6 软件质量预测模型及应用247
10.6.1 软件质量度量和质量预测模型的关系247
10.6.2 广义回归神经网络结构及特点248
10.6.3 软件质量预测模型的应用249
10.7 小结250
习题10251第11章 软件的技术度量252
11.1 软件技术度量概述252
11.1.1 软件技术度量要解决的问题252
11.1.2 软件技术度量考虑的软件质量因素252
11.1.3 软件技术度量的原则256
11.2 软件分析模型的度量256
11.2.1 基于功能点的度量256
11.2.2 基于原语的度量--Bang度量258
11.2.3 SRS质量的度量259
11.3 软件设计模型的度量259
11.3.1 体系结构设计度量259
11.3.2 构件级度量262
11.3.3 界面设计度量265
11.4 源代码度量266
11.4.1 Halstead度量方法266
11.4.2 Thayer复杂性度量266
11.5 软件测试的度量267
11.5.1 测试过程S曲线267
11.5.2 缺陷追踪和管理268
11.5.3 外包软件验收测试中的度量268
11.6 软件维护的度量269
11.6.1 UKSMA和NESMA标准269
11.6.2 软件维护的度量269
11.7 面向对象的度量270
11.7.1 面向对象度量方法270
11.7.2 面向对象系统中考虑结构因素的类的内聚度量274
11.8 小结276
习题11276第12章 软件开发工具与环境279
12.1 软件开发工具279
12.2 软件开发环境280
12.2.1 软件开发环境的组成280
12.2.2 软件开发环境的分类281
12.3 计算机辅助软件工程282
12.3.1 CASE环境283
12.3.2 软件开发CASE工具简介283
12.4 小结289
习题12289第13章 软件工程管理290
13.1 软件工程文化290
13.1.1 软件文化概念290
13.1.2 软件项目的五要素291
13.1.3 肯定开发者的成就292
13.1.4 不断学习新知识292
13.1.5 寻找卓越的需求293
13.1.6 质量文化293
13.1.7 方法、测量和工具294
13.2 现代人件295
13.2.1 团队开发295
13.2.2 程序员个人对软件系统的影响296
13.2.3 工作组织297
13.3 软件工程36计302
13.3.1 方法篇302
13.3.2 设计篇305
13.3.3 实现篇306
13.3.4 管理篇308
13.4 软件风险分析与管理309
13.4.1 软件风险及分类309
13.4.2 风险预测310
13.4.3 风险的缓解、监控和管理312
13.5 软件配置管理314
13.5.1 软件配置314
13.5.2 配置标识315
13.5.3 里程碑与变更控制315
13.5.4 配置状态登录316
13.5.5 配置审查316
13.6 软件工程标准化317
13.6.1 软件工程标准化的意义317
13.6.2 软件工程标准化的研究内容317
13.6.3 软件工程国家标准318
13.7 软件的知识产权保护319
13.7.1 软件知识产权的法律保护319
13.7.2 计算机软件是著作权法保护的客体320
13.7.3 软件著作权人享有的专有权利321
13.7.4 软件著作权的登记323
13.8 小结323
习题13324第14章 软件过程管理326
14.1 软件能力成熟度模型326
14.1.1 CMM的必要性326
14.1.2 CMM的提出与发展327
14.1.3 CMM的作用328
14.2 CMM的主要内容329
14.2.1 CMM的专业术语329
14.2.2 CMM的内容330
14.2.3 CMM的内部结构332
14.3 CMM各级之间的关系336
14.3.1 评估软件企业的CMM级别337
14.3.2 从初始级向可重复级过渡337
14.3.3 从可重复级向已定义级过渡338
14.3.4 向可管理级和优化级过渡338
14.4 CMM实施的人员构成和组织机构的划分339
14.4.1 人员的构成339
14.4.2 组织机构的划分340
14.5 个体软件过程342
14.5.1 PSP概述342
14.5.2 PSP的设计原则343
14.5.3 PSP进化的框架343
14.5.4 PSP的应用345
14.5.5 PSP的扩展--团队软件过程347
14.6 小结349
习题14349第15章 基于构件的软件工程351
15.1 基本概念351
15.1.1 CBSE过程351
15.1.2 领域工程352
15.1.3 基于构件的开发352
15.1.4 CBSE经济学354
15.1.5 软构件的可测试性355
15.2 可复用构件的分类与查询357
15.2.1 主要的分类方法357
15.2.2 基于刻面的检索358
15.3 基于构件的软件重用成熟度359
15.3.1 重用成熟度359
15.3.2 构件重用与软件成熟度的关系360
15.4 构件技术应用361
15.4.1 CORBA构件模型CCM361
15.4.2 基于构件技术的移动通信监控系统362
15.4.3 构件技术在电力信息化中的应用363
15.4.4 基于演化构件的软件开发364
15.4.5 基于复用技术的仿真系统软件364
15.5 小结367
习题15368第16章 应用Web工程369
16.1 Web工程369
16.1.1 基于Web的系统及应用的特点369
16.1.2 WebApp工程的层次371
16.1.3 Web工程过程371
16.1.4 Web工程的最佳实践373
16.2 WebApp项目计划374
16.2.1 表述WebApp项目374
16.2.2 制定WebApp项目计划376
16.2.3 组建Web工程团队377
16.2.4 Web工程的项目管理378
16.3 WebApp分析382
16.3.1 WebApp的需求分析382
16.3.2 WebApp的分析模型385
16.3.3 内容模型385
16.3.4 交互模型387
16.3.5 功能模型388
16.3.6 配置模型389
16.3.7 关系导航分析390
16.4 WebApp设计392
16.4.1 Web工程设计392
16.4.2 WebApp界面设计395
16.4.3 美学设计399
16.4.4 内容设计400
16.4.5 体系结构设计400
16.4.6 导航设计403
16.4.7 构件级设计404
16.4.8 超媒体设计模式404
16.4.9 面向对象的超媒体设计方法405
16.5 WebApp测试406
16.5.1 WebApp测试概念406
16.5.2 WebApp测试过程408
16.5.3 WebApp测试策略409
16.6 小结411
习题16413参考文献415
