第一篇 软件工程引论 3
第1章 软件工程概述 3
1.1 软件 3
1.1.1 软件的定义 3
1.1.2 软件的发展阶段 4
1.1.3 软件的特点 4
1.1.4 软件的分类 4
1.2 软件危机 5
1.2.1 软件危机的定义 5
1.2.2 软件危机的产生 6
1.2.3 软件工程的诞生 8
1.3 软件工程 8
1.3.1 软件工程的定义 8
1.3.2 软件工程研究的内容 8
1.3.3 软件工程的原则 9
1.3.4 软件工程方法学 10
1.4 软件生命周期 13
1.5 软件开发模型 14
1.5.1 瀑布模型 14
1.5.2 原型模型 15
1.5.3 增量模型 16
1.5.4 螺旋模型 17
1.5.5 快速应用开发模型 18
1.5.6 敏捷开发 19
1.5.7 混合模型 19
1.6 习题 20
第二篇 传统软件工程方法 23
第2章 可行性研究 23
2.1 可行性研究的任务 23
2.2 可行性研究的步骤 24
2.3 可行性论证报告的主要内容 26
2.4 系统流程图 26
2.4.1 符号 27
2.4.2 应用 28
2.5 成本效益分析 29
2.5.1 成本估计 29
2.5.2 费用估计 30
2.5.3 度量效益的方法 32
2.6 习题 33
第3章 软件需求分析 34
3.1 需求分析概述 34
3.1.1 软件需求的定义 35
3.1.2 产品和过程需求 35
3.1.3 功能性和非功能性需求 36
3.1.4 可量化的需求 36
3.1.5 系统需求和软件需求 36
3.2 需求分析的执行步骤 37
3.3 结构化分析方法 39
3.3.1 数据流图 40
3.3.2 数据字典 44
3.3.3 实体-关系图 47
3.3.4 层次方框图 50
3.3.5 Warnier图 50
3.3.6 IPO图 51
3.4 软件需求规格说明书 52
3.5 需求规格案例分析 54
3.6 习题 61
第4章 概要设计 63
4.1 概要设计的基本概念 63
4.1.1 概要设计的任务 64
4.1.2 概要设计的步骤 66
4.1.3 软件设计的原则 66
4.1.4 概要设计阶段应该提交的文档 67
4.1.5 结构化设计方法 67
4.1.6 概要设计工具 68
4.1.7 模块划分标准 68
4.2 结构化设计的过程 70
4.2.1 结构化程序设计的原则 70
4.2.2 面向数据流的设计方法 71
4.2.3 绘制结构图的步骤 72
4.2.4 事务分析 77
4.2.5 设计优化 78
4.3 面向数据结构的设计方法 79
4.3.1 Jackson设计方法 79
4.3.2 Warnier设计方法 87
4.4 接口设计 88
4.5 概要设计说明书 89
4.6 案例分析 91
4.7 习题 101
第5章 详细设计 102
5.1 详细设计的任务 102
5.2 详细设计的原则 103
5.3 人机界面设计 103
5.4 过程设计的工具 107
5.4.1 程序流程图 107
5.4.2 N-S图 111
5.4.3 问题分析图 113
5.4.4 判定表 115
5.4.5 过程设计语言 118
5.5 详细设计说明书 121
5.6 习题 133
第6章 软件编码 134
6.1 结构化程序设计 134
6.2 程序设计风格 136
6.3 程序设计语言 138
6.3.1 程序设计语言的分类 139
6.3.2 程序设计语言的特点 141
6.3.3 程序设计语言的选择 143
6.3.4 程序设计方法与工具 144
6.4 习题 145
第7章 软件测试 146
7.1 软件测试概述 146
7.1.1 软件测试的定义和目标 146
7.1.2 软件测试的原则 147
7.2 软件测试方法 147
7.2.1 静态测试 148
7.2.2 动态测试 149
7.2.3 黑盒测试 149
7.2.4 白盒测试 149
7.3 测试用例 149
7.3.1 测试用例的定义 149
7.3.2 使用测试用例的目的 150
7.3.3 测试用例的重要性 150
7.3.4 测试用例的应用意义和作用 150
7.4 黑盒测试用例设计 151
7.4.1 等价类划分法 152
7.4.2 边界值分析法 161
7.4.3 决策表法 171
7.4.4 因果图法 176
7.4.5 场景法 179
7.4.6 正交实验法 182
7.5 白盒测试用例设计 185
7.5.1 逻辑覆盖法 186
7.5.2 基本路径法 188
7.6 软件测试过程 193
7.6.1 单元测试 194
7.6.2 集成(组装)测试 196
7.6.3 系统测试 199
7.7 测试计划及测试报告 200
7.7.1 测试计划 200
7.7.2 测试报告 200
7.8 习题 201
第8章 软件维护 204
8.1 软件维护的概念 204
8.2 软件维护的影响因素 207
8.3 软件维护的步骤 207
8.4 软件可维护性 209
8.5 软件再工程 211
8.6 习题 215
第三篇 面向对象的软件工程 219
第9章 面向对象技术 219
9.1 面向对象技术概述 219
9.1.1 面向对象方法简介 219
9.1.2 面向对象的基本概念 220
9.2 面向对象的软件工程 228
9.3 UML建模 230
9.3.1 UML简介 230
9.3.2 用例图 234
9.3.3 类图 240
9.3.4 对象图 247
9.3.5 顺序图 248
9.3.6 协作图 255
9.3.7 活动图 257
9.3.8 状态机图 263
9.3.9 包图 267
9.3.10 构件图 272
9.3.11 部署图 275
9.4 习题 279
第10章 面向对象分析 281
10.1 面向对象分析的概念 281
10.2 系统分析面临的主要问题 282
10.3 面向对象分析方法的主要原则 283
10.4 面向对象的分析过程 284
10.4.1 分析过程概述 284
10.4.2 面向对象的分析过程的主要活动 284
10.5 对象和类的确定 286
10.5.1 确定对象 286
10.5.2 对象分类、建立类图的对象层 287
10.6 确定属性 289
10.6.1 对象的属性和服务 289
10.6.2 定义属性 290
10.7 定义服务 290
10.7.1 对象的状态与状态转换图 290
10.7.2 行为分类 291
10.7.3 发现服务的策略与启发 292
10.7.4 审查与调整 292
10.7.5 识别主动对象 292
10.7.6 服务的命名和定位 293
10.7.7 服务的详细说明 293
10.8 对象间通信 294
10.8.1 识别结构 294
10.8.2 识别主题 298
10.8.3 实例连接 299
10.9 习题 300
第11章 面向对象设计 301
11.1 面向对象设计的概念 301
11.2 面向对象设计的准则 302
11.3 启发规则 302
11.4 软件重用 303
11.5 系统分解 304
11.6 面向对象的基本设计方法 305
11.7 设计问题子系统 307
11.8 设计人机交互子系统 307
11.9 设计任务管理子系统 309
11.10 设计数据管理子系统 310
11.11 习题 311
第12章 面向对象的实现与测试 312
12.1 面向对象的实现 312
12.2 对象的创建 314
12.3 面向对象的软件测试 315
12.4 习题 323
第四篇 软件质量控制 327
第13章 软件质量与质量保证 327
13.1 软件质量的定义 327
13.2 影响软件质量的因素 328
13.3 软件质量保证策略 329
13.4 软件质量保证活动 330
13.5 软件评审 330
13.5.1 设计质量的评审内容 331
13.5.2 程序质量的评审内容 336
13.6 软件质量保证标准 338
13.7 软件质量评价 340
13.7.1 软件质量评价体系 340
13.7.2 软件质量评价标准 340
13.8 软件质量框架 341
13.8.1 高质量软件的特性 341
13.8.2 软件质量框架的组成 342
13.9 软件开发质量的定量描述 344
13.9.1 基本的定量估算 344
13.9.2 软件需求的估算 345
13.9.3 估算验收测试阶段预期发现的缺陷数 345
13.9.4 维护活动设计的度量 346
13.9.5 软件可用性的计算 346
13.9.6 基于植入故障方法的原有故障总数EN估算 346
13.10 习题 347
第14章 软件项目管理 348
14.1 软件项目概述 348
14.1.1 软件项目的特点 348
14.1.2 软件管理的功能 349
14.1.3 确定软件项目的工作范围 349
14.2 确定软硬件资源 350
14.2.1 人力资源 350
14.2.2 硬件 350
14.2.3 软件 351
14.3 人员的计划和组织 351
14.4 成本估计和成本控制 352
14.4.1 软件开发成本估计方法 352
14.4.2 专家估算法 353
14.4.3 成本估算模型 354
14.5 进度计划 356
14.5.1 软件工作的特殊性 356
14.5.2 各阶段工作量的分配 357
14.5.3 制定开发进度 357
14.6 软件配置管理 358
14.6.1 基线 359
14.6.2 软件配置项 360
14.6.3 软件配置管理过程 361
14.7 软件管理方案 364
14.8 软件能力成熟度模型 364
14.8.1 软件过程评估的必要性 364
14.8.2 能力成熟度模型的主要用途 366
14.8.3 能力成熟度模型的体系结构 366
14.8.4 能力成熟度模型的内部结构 371
14.8.5 能力成熟度模型的应用 374
14.9 习题 375
第五篇 软件开发工具及案例 379
第15章 软件开发工具与环境概述 379
15.1 软件开发工具概述 379
15.2 软件开发工具的功能 380
15.3 软件开发工具的特性 381
15.4 软件开发工具的分类 381
15.5 软件开发环境 382
15.6 常用开发环境 384
15.6.1 Windows操作系统 384
15.6.2 UNIX程序开发环境 384
15.6.3 Linux开发环境 388
15.7 软件开发工具与环境应用 390
15.8 CASE技术 392
15.9 习题 394
第16章 Visio 2010的应用 395
16.1 图形文档操作 395
16.1.1 创建新的图形文档 395
16.1.2 基于模板创建图形文档 396
16.1.3 保存图形文档 398
16.2 形状的使用 398
16.2.1 形状窗口 398
16.2.2 形状的概述 398
16.2.3 选择形状 399
16.2.4 移动形状 400
16.2.5 调整形状大小 401
16.2.6 旋转或翻转形状 401
16.2.7 对齐形状 402
16.2.8 绘制形状 402
16.3 构建各种图形 403
16.3.1 构建基本流程图 403
16.3.2 构建UML用例图 403
16.4 案例分析 403
16.4.1 案例1:绘制程序流程图 403
16.4.2 案例2:绘制UML用例图 406
16.5 习题 410
第17章 项目实例 411
17.1 图书管理系统综合案例 411
17.1.1 问题定义 411
17.1.2 可行性研究 411
17.1.3 需求分析 412
17.1.4 总体设计 418
17.1.5 详细设计 419
17.1.6 编码和单元测试 422
17.1.7 综合测试 424
17.1.8 软件维护 424
17.2 学生心理动态跟踪评价系统 425
附录A 计算机软件开发文档编写指南 443
附录A.1 可行性研究报告 443
附录A.2 项目开发计划书 447
附录A.3 软件需求说明书 449
附录A.4 概要设计说明书 451
附录A.5 详细设计说明书 453
附录A.6 测试计划 454
附录A.7 测试分析报告 456
附录A.8 开发进度月报 457
附录A.9 项目开发总结报告 458
附录B 软件工程综合测试题 460
参考文献 470