第1章 软件工程的基本概念 1
1.1 软件的定义、特征和分类 1
1.1.1 软件的定义 1
1.1.2 软件的特征 1
1.1.3 软件的分类 2
1.2 软件的发展和软件危机 4
1.2.1 软件的发展历程 4
1.2.2 软件危机的表现、产生的原因和解决方法 5
1.3 软件工程方法学 6
1.3.1 软件工程的基本概念 6
1.3.2 软件工程的要素 7
1.3.3 软件工程的基本原理 8
1.3.4 软件工程的基本目标 9
1.3.5 软件工程的基本原则 10
1.3.6 两种主要的软件工程方法 10
小结 11
习题 12
第2章 软件生存周期及开发模型 13
2.1 生存周期的种类 13
2.2 生存周期的阶段划分 14
2.3 软件过程的模型 16
2.3.1 瀑布模型 16
2.3.2 原型模型 17
2.3.3 增量模型 18
2.3.4 螺旋模型 19
2.3.5 变换模型 20
2.3.6 喷泉模型 21
2.3.7 智能模型 21
2.3.8 第4代技术模型 22
2.3.9 基于构件的开发模型 23
小结 24
习题 24
第3章 结构化需求分析 26
3.1 可行性研究 26
3.1.1 问题的定义 26
3.1.2 可行性分析的内容 29
3.2 需求分析的任务 32
3.3 获取需求的方法 36
3.4 结构化需求分析方法 37
3.4.1 需求分析的原则 37
3.4.2 需求分析的过程 38
3.5 分析建模 40
3.5.1 分析模型 40
3.5.2 数据建模(E-R图) 41
3.5.3 功能建模(数据流图) 44
3.5.4 行为建模(状态迁移图) 53
3.5.5 数据字典 54
3.5.6 加工说明的描述工具 58
3.6 需求规格说明书 61
3.7 需求验证 63
小结 64
习题 64
第4章 结构化软件设计 67
4.1 软件设计的原理 68
4.1.1 软件设计的过程 68
4.1.2 软件设计的原则 69
4.1.3 软件体系结构 73
4.2 软件结构设计 77
4.2.1 模块化设计 77
4.2.2 模块的独立性 79
4.2.3 软件体系结构优化的方法 83
4.2.4 体系结构设计案例 84
4.3 面向数据流的设计方法 86
4.3.1 变换流与变换型系统结构 87
4.3.2 事务流与事务型系统结构图 87
4.3.3 变换分析与映射 88
4.3.4 事务分析与映射 89
4.4 数据设计 90
4.4.1 数据设计的原则 90
4.4.2 文件设计的过程 91
4.4.3 数据库设计 92
4.4.4 数据库设计的技巧 100
4.5 详细设计 103
4.5.1 详细设计的任务 103
4.5.2 详细设计的原则 103
4.5.3 过程设计 103
4.5.4 界面设计 110
4.5.5 在线帮助的信息设计 114
4.5.6 提示信息的信息设计 115
4.6 设计规格说明与设计评审 117
4.6.1 软件设计规格说明书 117
4.6.2 软件设计的评审 118
小结 119
习题 119
第5章 面向对象方法学 122
5.1 面向对象概述 122
5.1.1 面向对象基本概念 123
5.1.2 面向对象基本特征 125
5.2 面向对象开发方法概述 129
5.2.1 软件开发过程 129
5.2.2 传统开发方法存在的问题 130
5.2.3 面向对象开发方法的特点 132
5.2.4 Booch方法 132
5.2.5 Coda/Yourdon方法 133
5.2.6 OMT方法 134
5.2.7 OOSE方法 138
5.3 统一建模语言UML 139
5.3.1 UML概述 139
5.3.2 UML内容 140
小结 145
习题 146
第6章 面向对象分析 147
6.1 面向对象分析概述 147
6.1.1 面向对象分析模型 147
6.1.2 面向对象分析过程 149
6.2 需求陈述 150
6.3 建立功能模型 153
6.3.1 确定基本系统模型图 153
6.3.2 细化数据流图 153
6.3.3 功能描述 155
6.3.4 用例模型 155
6.4 建立静态模型 156
6.4.1 寻找类与对象 157
6.4.2 确定关联 161
6.4.3 确定属性 165
6.4.4 识别主题 166
6.4.5 识别结构 167
6.4.6 定义服务 169
6.4.7 完善对象模型 169
6.5 建立动态模型 171
6.5.1 准备脚本 172
6.5.2 确定事件 173
6.5.3 准备时序图 173
6.5.4 生成协作图 174
6.5.5 构造状态机图 174
6.5.6 完善动态模型 176
6.6 面向对象分析实例 178
小结 181
习题 182
第7章 面向对象设计 184
7.1 面向对象设计概述 184
7.1.1 面向对象设计模型 186
7.1.2 面向对象设计准则 187
7.1.3 面向对象设计启发规则 191
7.2 系统设计 193
7.2.1 系统分解 193
7.2.2 设计问题域子系统 197
7.2.3 设计人机交互子系统 199
7.2.4 设计任务管理子系统 202
7.2.5 设计数据管理子系统 206
7.2.6 全局资源管理 210
7.2.7 控制流机制 210
7.2.8 边界条件 211
7.2.9 评审 211
7.3 对象设计 212
7.3.1 设计内部结构 212
7.3.2 设计关联 212
7.3.3 设计接口 214
7.3.4 设计类中的服务 214
7.3.5 选择复用构件 216
7.3.6 优化对象设计 218
7.4 面向对象设计实例 223
7.4.1 分析阶段 223
7.4.2 设计阶段 224
小结 229
习题 229
第8章 代码设计 231
8.1 程序设计语言 231
8.1.1 程序设计语言的基本成分 231
8.1.2 程序设计语言的分类 232
8.1.3 程序设计语言的选择 234
8.2 程序设计风格 235
8.2.1 源程序的文档化 235
8.2.2 数据说明 236
8.2.3 语句构造 237
8.2.4 输入与输出 238
8.2.5 编程规范 239
8.3 结构化程序设计 243
8.3.1 结构化程序设计的原理 243
8.3.2 结构化编程 244
8.4 面向对象程序设计 245
8.4.1 面向对象语言特点 246
8.4.2 面向对象语言的选择 247
8.4.3 面向对象程序设计风格 248
8.5 程序效率 249
8.6 程序复杂性度量 250
小结 253
习题 253
第9章 软件测试 255
9.1 软件测试基础 255
9.1.1 什么是软件缺陷 256
9.1.2 软件测试的原则 257
9.1.3 软件测试过程模型 258
9.1.4 软件测试的阶段 260
9.1.5 软件测试的工作范畴 262
9.2 软件测试基本技术 263
9.2.1 黑盒测试和白盒测试 263
9.2.2 静态测试和动态测试 264
9.2.3 验证与确认 265
9.2.4 自动化测试和随机测试 265
9.3 黑盒测试法 266
9.3.1 等价类划分法 266
9.3.2 边界值分析法 268
9.3.3 错误推测法 269
9.3.4 因果图法 270
9.4 白盒测试法 273
9.4.1 逻辑覆盖法 273
9.4.2 基本路径法 275
9.5 软件测试计划 277
9.5.1 测试策略 277
9.5.2 制定测试计划 278
9.6 测试用例设计 280
9.6.1 什么是测试用例 280
9.6.2 测试用例的书写标准 281
9.6.3 测试用例设计的原则 281
9.7 面向对象测试 283
9.7.1 面向对象测试模型 283
9.7.2 面向对象的单元测试 284
9.7.3 面向对象的集成测试 286
9.8 软件测试自动化 287
9.8.1 自动化测试的基本概念 287
9.8.2 测试工具的分类及选择 288
小结 290
习题 290
第10章 软件过程 294
10.1 软件过程概述 294
10.2 软件过程能力成熟度模型 295
10.2.1 软件过程能力成熟度模型(SW-CMM)的诞生 295
10.2.2 软件过程能力成熟度模型(CMM)的组织与结构 296
10.2.3 能力等级的特点和关键过程域 298
10.2.4 实施CMM是软件企业发展的必然趋势 301
10.3 软件过程的改进 305
10.3.1 软件过程改进的5条原则 306
10.3.2 软件过程改进的策略 306
10.3.3 软件过程改进战略策划 308
10.3.4 软件过程改进建议 311
10.3.5 为什么要实施SPI 312
10.3.6 以项目形式管理SPI 312
小结 314
习题 314
第11章 成本估算与进度规划 316
11.1 软件度量与软件生产率 317
11.1.1 软件度量 317
11.1.2 面向规模的度量 318
11.1.3 面向功能的度量 318
11.1.4 软件质量的度量 320
11.1.5 影响软件生产率的因素 321
11.2 软件项目估算与开发成本估算 321
11.2.1 软件项目计划的目标 322
11.2.2 软件的范围 322
11.2.3 软件开发的资源 322
11.2.4 软件项目估算 325
11.2.5 估算之前的任务分解 325
11.2.6 软件开发成本估算 328
11.3 进度计划 333
11.3.1 各阶段工作量的分配 333
11.3.2 制订开发进度计划 334
11.3.3 进度安排的方法 334
小结 337
习题 337
第12章 团队建设与沟通管理 340
12.1 团队建设的基本概念 340
12.2 项目团队的组织 340
12.2.1 项目的组织结构模式 341
12.2.2 程序设计小组的组织形式 344
12.3 团队成员的选择与基本要求 346
12.3.1 项目开发各阶段对人员的需求 346
12.3.2 配备人员的原则 347
12.3.3 对项目经理的要求 347
12.3.4 团队成员的招聘与选择 348
12.4 团队的建设与管理 349
12.4.1 项目成员的使用与培训 349
12.4.2 对项目成员的激励 350
12.4.3 软件项目的指导 350
12.4.4 软件项目的检验 351
12.5 团队的沟通管理 351
12.5.1 沟通管理与沟通的原则 351
12.5.2 沟通方式 352
12.5.3 编制项目沟通计划 353
小结 354
习题 354
第13章 风险管理和配置管理 356
13.1 风险管理 356
13.1.1 软件风险分类 356
13.1.2 风险识别 357
13.1.3 风险预测 361
13.1.4 处理风险的策略 363
13.2 质量保证 364
13.2.1 软件质量 364
13.2.2 软件质量保证措施 365
13.3 配置管理 368
13.3.1 软件配置管理的内容 368
13.3.2 软件配置管理的基本目标 369
13.3.3 软件配置管理角色职责 369
13.3.4 软件配置管理过程描述 370
13.3.5 软件配置管理的关键活动 371
小结 378
习题 379
第14章 软件工程标准 381
14.1 软件工程标准化 381
14.1.1 软件工程标准的概念 381
14.1.2 软件工程标准的制定与推行 382
14.1.3 软件工程标准层次 382
14.2 软件质量认证 383
14.2.1 软件质量认证的产生背景 383
14.2.2 软件质量认证的标准 384
14.2.3 软件质量认证的作用 384
14.2.4 ISO 9000标准的构成 384
14.3 GB/T 8567—2006计算机软件文档编制规范 384
14.3.1 使用范围 384
14.3.2 文档过程 385
14.3.3 文档编制要求 386
小结 389
习题 389
第15章 软件文档 390
15.1 软件文档的意义 390
15.2 软件文档的作用 390
15.2.1 管理依据 390
15.2.2 任务之间联系的凭证 391
15.2.3 质量保证 391
15.2.4 培训与参考 391
15.2.5 软件维护支持 391
15.2.6 历史档案 391
15.3 软件文档的分类 391
15.3.1 开发文档 392
15.3.2 产品文档 392
15.3.3 管理文档 392
15.4 软件文档的管理 392
15.4.1 概述 392
15.4.2 管理者的作用 393
15.4.3 制订文档编制策略 393
15.5 软件文档的编写技巧 394
15.5.1 从技术角度进行文档的编写和评价 394
15.5.2 明确文档编写人员的责任 395
15.5.3 让编写人员对开发项目有准确的认识 395
15.5.4 让开发和设计人员参与文档审阅工作 395
15.6 文档编写的常用工具 395
小结 396
习题 396
第16章 软件文档编写指南 397
16.1 概述 397
16.2 软件开发文档 397
16.2.1 可行性分析(研究)报告 397
16.2.2 软件需求规格说明 402
16.2.3 概要设计书 407
16.2.4 详细设计书 417
16.3 软件管理文档 419
16.3.1 项目开发计划 419
16.3.2 软件测试计划 428
16.3.3 测试报告 431
16.3.4 开发进度月报 433
16.3.5 项目开发总结报告 434
16.4 软件用户文档 437
16.4.1 用户手册 437
16.4.2 操作手册 440
小结 441
习题 442
参考文献 443