第1篇 软件工程技术 1
第1章 软件生存期过程和软件工程 1
1.1 软件生存期及其模型 1
1.1.1 软件生存期 1
1.1.2 软件生存期模型 2
1.2 软件生存期过程 6
1.3 软件工程的基本目标 9
1.3.1 软件工程的定义 9
1.3.2 软件工程项目的基本目标 10
第2章 软件需求分析 12
2.1 软件需求分析的任务 12
2.2 需求分析的过程 13
2.3 软件需求分析的原则 17
2.4 分析员和用户的责任 19
2.5 软件需求分析方法 19
2.6 软件需求分析工具 21
2.6.1 SADT 22
2.6.2 PSL/PSA 23
2.7 面对确定需求的困难应采取的对策 24
2.7.1 需求工程和确定需求的困难 24
2.7.2 软件开发人员面对确定需求的困难应采取的对策 25
第3章 软件复用技术 26
3.1 软件复用的概述 26
3.1.1 软件复用的宗旨 26
3.1.2 软件复用的实际效益 27
3.1.3 软件复用技术的发展概况 27
3.2 软件开发过程 28
3.2.1 以往的软件开发技术不能满足复用的需要 28
3.2.2 软件复用需要改变软件开发过程 29
3.2.3 领域工程和应用系统工程 31
3.3 构件技术 33
3.3.1 应用系统和应用系统族 33
3.3.2 应用系统与构件 33
3.3.3 构件系统 34
3.3.4 构件系统的门面 35
3.3.5 可变性和专门化 36
3.3.6 打包和编写文档 37
3.4 分层式体系结构 37
3.4.1 软件体系结构 37
3.4.2 良好的软件体系结构的重要作用 37
3.4.3 分层式的体系结构 38
3.5 渐进地实施复用和复用单位的组织结构 40
3.5.1 软件复用需要改变开发单位的组织结构 40
3.5.2 渐进地系统地采用复用技术 41
3.5.3 充分利用可共享复用成果 46
3.5.4 实施系统复用需要遵循的原则 46
第4章 软件测试 48
4.1 软件测试基础 48
4.1.1 什么是软件测试 48
4.1.2 软件测试的目的和原则 48
4.1.3 软件测试的对象 50
4.1.4 测试信息流 51
4.1.5 测试与软件开发各阶段的关系 52
4.2 两种类型的测试 53
4.2.1 黑盒测试 53
4.2.2 白盒测试 54
4.3 白盒测试的测试用例设计 55
4.3.1 逻辑覆盖 55
4.3.2 基本路径测试 59
4.4 黑盒测试的测试用例设计 65
4.4.1 等价类划分 65
4.4.2 边界值分析 68
4.4.3 错误推测法 71
4.4.4 因果图 72
4.4.5 功能图 75
4.5 软件测试的策略 79
4.5.1 单元测试 80
4.5.2 组装测试 82
4.5.3 确认测试 87
4.5.4 系统测试 89
4.5.5 测试的步骤及相应的测试种类 89
4.6 程序的静态分析方法 93
4.6.1 对程序的静态分析 93
4.6.2 人工测试 95
4.7 软件测试工具 97
4.7.1 静态分析工具 97
4.7.2 动态测试工具 98
4.7.3 测试数据自动生成工具 100
4.7.4 模块测试台 101
4.7.5 测试合成环境 102
第5章 软件维护与软件再工程 105
5.1 软件维护的概念 105
5.1.1 软件维护的定义 105
5.1.2 影响维护工作量的因素 107
5.1.3 软件维护的策略 108
5.1.4 维护成本 108
5.2 软件维护活动 109
5.2.1 维护机构 109
5.2.2 软件维护申请报告 110
5.2.3 软件维护工作流程 110
5.2.4 维护档案记录 111
5.2.5 维护评价 112
5.3 软件维护的实施 112
5.3.1 分析和理解程序 112
5.3.2 修改程序 113
5.3.3 重新验证程序 115
5.4 软件可维护性 117
5.4.1 软件可维护性的定义 117
5.4.2 可维护性的度量 118
5.5 提高可维护性的方法 119
5.5.1 建立明确的软件质量目标和优先级 120
5.5.2 使用提高软件质量的技术和工具 120
5.5.3 进行明确的质量保证审查 121
5.5.4 选择可维护的程序设计语言 124
5.5.5 改进程序的文档 124
5.5.6 开发软件时考虑到维护 125
5.6 软件再工程 126
5.6.1 什么是软件再工程 126
5.6.2 为什么要实施软件再工程 129
5.6.3 软件再工程技术 131
5.6.4 软件再工程的风险 134
第6章 软件工具与软件开发环境 136
6.1 软件工具 136
6.1.1 概述 136
6.1.2 软件开发工具 138
6.1.3 软件维护工具 143
6.1.4 软件管理和软件支持工具 144
6.1.5 软件开发工具的评价和选择 145
6.2 软件开发环境 146
6.2.1 概述 146
6.2.2 集成型软件开发环境 147
6.2.3 ECMA/NIST集成型软件开发环境参考模型 150
6.2.4 PCTE:可移植公共工具环境 153
6.2.5 青鸟系统 153
第2篇 软件质量管理与质量保证 153
第7章 软件质量 153
7.1 软件危机尚未过去 153
7.1.1 软件发展远远落后于硬件 153
7.1.2 软件质量问题提出的挑战 156
7.1.3 有银弹吗? 157
7.2 软件质量问题的根源 158
7.2.1 软件不同于硬件或其他产品 158
7.2.2 影响软件质量的因素 159
7.3 什么是软件质量 161
7.3.1 通常的理解 161
7.3.2 McCall的质量特性 162
7.3.3 国际标准和国家标准规定的质量特性 163
7.4 产品质量与过程质量 166
第8章 软件质量保证 169
8.1 软件质量保证概述 169
8.1.1 质量保证的概念 169
8.1.2 软件质量保证的主要任务 170
8.1.3 质量保证与检验 171
8.2 软件质量保证体系 172
8.3 质量保证的实施 176
8.3.1 质量目标与度量 176
8.3.2 质量度量方法 176
8.3.3 软件质量管理小组 179
8.4 软件的质量设计 179
8.4.1 质量特性转换为软件的内部结构 180
8.4.2 软件的质量展开 183
8.5 技术评审 186
8.5.1 设计质量的评审 186
8.5.2 程序质量的评审 191
8.6 软件可靠性 195
8.6.1 软件生存期与软件寿命的关系 195
8.6.2 软件可靠性的定义 197
8.6.3 软件可靠性的主要指标 198
8.7 测试中的可靠性分析 198
8.7.1 推测错误的产生频度 198
8.7.2 估算软件中错误总数ET的方法 200
8.7.3 测试精确度和测试覆盖度的评价 201
8.7.4 测试开始时的预测模型 203
8.8 软件容错技术 205
8.8.1 什么是容错软件 206
8.8.2 容错的一般方法 206
8.8.3 容错软件的设计过程 209
8.8.4 软件的容错系统结构 209
8.9 软件过程改进 212
8.9.1 软件过程改进的含意和现有的方案 212
8.9.2 软件过程改进模式 213
第9章 软件工程标准化和软件文档 215
9.1 什么是软件工程标准 215
9.2 软件工程标准化的意义 217
9.3 软件工程标准的制订与推行 218
9.4 软件工程标准的层次 219
9.5 软件工程国家标准 220
9.6 在开发机构中推行软件工程标准 225
9.7 软件文档 225
9.7.1 软件文档作用和分类 225
9.7.2 对文档编制的质量要求 228
9.7.3 文档的管理和维护 232
第10章 在软件开发机构中贯彻ISO9000国际标准 234
10.1 质量管理、质量认证与质量审核 234
10.1.1 质量管理 234
10.1.2 质量认证与审核 236
10.2 ISO9000国际标准简介 237
10.2.1 ISO9000标准概述 237
10.2.2 ISO9000标准的特点 238
10.2.3 ISO9000标准的科学依据 239
10.3 ISO9000族标准的构成 241
10.4 质量体系 243
10.5 ISO9001标准的主要内容 245
10.6 ISO9000-3标准简介 249
10.6.1 理解标准与指南的关系 249
10.6.2 理解ISO9000-3对20个质量体系要素的解释 250
10.6.3 理解ISO9000-3与ISO/IEC12207两个标准之间的关系 253
10.7 软件开发机构为什么要按ISO9000标准建立并实施质量保证体系 255
10.7.1 软件质量缺陷不可能完全避免 255
10.7.2 技术上解决软件质量问题的局限性 257
10.7.3 为什么软件开发机构要加强质量管理 258
10.7.4 为什么软件开发机构要开展ISO9000质量体系认证工作 259
10.8 软件开发机构实施ISO9000标准应做的工作 260
10.9 若干认识问题 262
第11章 软件过程能力评估 264
11.1 软件过程评估的意义 264
11.1.1 软件过程改进的需要 264
11.1.2 降低软件风险的需要 265
11.2 软件过程评估方法的产生 265
11.3 软件能力成熟度模型CMM简介 266
11.3.1 模型概要 266
11.3.2 模型的产生和原理 268
11.3.3 不成熟和成熟软件组织的比较 268
11.3.4 软件过程成熟度的5个等级 269
11.3.5 跳越成熟度等级 272
11.3.6 关键过程域 273
11.3.7 关键实践 275
11.3.8 CMM的应用 277
11.3.9 软件过程成熟度提问单 279
11.3.10 对CMM1.1的几点考虑 280
11.4 软件过程评估的国际标准概述 284
11.4.1 软件过程评估国际标准的制定 284
11.4.2 软件过程评估标准的组成 285
11.4.3 参考模型 286
11.4.4 评估框架 290
11.4.5 软件过程评估标准的特点 292
第3篇 软件工程管理 296
第12章 软件工程项目管理 296
12.1 软件工程项目管理的任务 296
12.2 软件项目估算 298
12.2.1 针对估算的考虑 298
12.2.2 软件项目计划的目标 299
12.2.3 软件的范围 299
12.2.4 软件开发中的资源 300
12.2.5 软件项目估算 303
12.2.6 分解技术 303
12.3 软件开发成本估算 307
12.3.1 软件开发成本估算方法 307
12.3.2 专家判定技术 308
12.3.3 软件开发成本估算的经验模型 309
12.3.4 自动估算工具 314
12.4 风险分析 316
12.4.1 风险识别 316
12.4.2 风险估计 317
12.4.3 风险评价 318
12.4.4 风险驾驭和监控 318
12.5 进度安排 320
12.5.1 软件开发小组人数与软件生产率 321
12.5.2 任务的确定与并行性 322
12.5.3 制定开发进度计划 322
12.5.4 进度安排的图形方法 324
12.5.5 项目的追踪和控制 326
12.6 软件项目的组织与计划 327
12.6.1 软件项目管理的特点 327
12.6.2 制定计划 328
第13章 软件度量 331
13.1 软件度量的概念 331
13.2 功能点方法计算软件的大小 332
13.3 程序环路复杂度计算 335
13.4 霍尔斯特德(Halstead)程序工作量计算 336
13.5 程序风格度量 337
第14章 软件配置管理 339
14.1 什么是软件配置管理 339
14.1.1 软件配置管理的几种定义 339
14.1.2 什么是软件配置项 340
14.1.3 软件配置管理的任务 340
14.2 软件配置标识 341
14.3 变更管理 343
14.4 版本控制 347
14.4.1 版本管理和发行管理 347
14.4.2 版本标识 347
14.4.3 发行管理 348
14.5 系统建立 349
14.6 配置审核 350
14.7 配置状态报告 350
第15章 软件人员组织与管理 352
15.1 软件项目的人员组织与管理 352
15.1.1 项目组的组织结构 352
15.1.2 人员配备 355
15.1.3 指导与检验 357
15.2 软件人员能力成熟度模型 358
15.2.1 引入软件人员能力成熟度模型的必要性 358
15.2.2 软件人员能力成熟度模型的发展溯源 359
15.2.3 软件人员能力成熟度模型简介 359
15.2.4 软件人员能力成熟度模型的结构 360
15.2.5 成熟度级别和关键过程域 361
15.2.6 主题 365
15.2.7 关键过程域的目标 366
15.2.8 软件人员能力成熟度模型的应用 368
15.3 软件工程师道德和职业活动规范 370
15.3.1 引言 370
15.3.2 软件开发项目的特点、影响及其与人的关系 370
15.3.3 规范的内容 372
15.3.4 职业道德教育的作用及其重要性 376
第16章 软件知识产权保护 377
16.1 软件知识产权的保护必须依法实施 377
16.1.1 知识产权的法律框架 377
16.1.2 我国保护计算机软件的法律制度 378
16.2 计算机软件著作权 379
16.2.1 计算机软件著作权的主体 379
16.2.2 计算机软件著作权的客体 379
16.2.3 算机软件著作权的权利内容 380
16.2.4 计算机软件著作权归属 381
16.2.5 软件著作权的行使 381
16.2.6 软件专有权利的限制 382
16.3 计算机软件著作权登记管理 383
16.3.1 计算机软件著作权登记制度的法律功能和作用 383
16.3.2 计算机软件著作权登记的几种主要形式 384
16.4 计算机软件著作权侵权与法律保护 384
16.4.1 软件著作权侵权行为类型 384
16.4.2 侵犯软件著作权的法律责任 385
16.4.3 法定的例外情况 385
16.5 计算机软件的商业秘密与反不正当竞争 386
16.5.1 商业秘密的法律特征 386
16.5.2 计算机软件与商业秘密 387
16.5.3 侵害计算机软件商业秘密的不正当行为与法律责任 388
参考文献 391