《软件工程导论(第5版)》的前4个版本累计销售近一百万册,已成为软件工程领域的经典教材,先后荣获全国普通高等学校工科电子类专业优秀教材二等奖、一等奖,并被评为全国优秀畅销书、全国高校出版社优秀畅销书和北京高等教育精品教材。为了反映最近4年来软件工程的发展状况,作者对第四版作了下述的精心修改:增加了目前比较流行的Rational统一过程、以极限编程为杰出代表的敏捷过程以及微软过程的介绍,并且对书中的一些具体内容作了适当的增删或修改。《软件工程导论(第5版)》可作为高等院校“软件工程”课程的教材或教学参考书,也可供有一定实际经验的软件工作人员和需要开发应用软件的广大计算机用户阅读参考。
本书全面系统地讲述了软件工程的概念、原理和典型的方法学,并介绍了软件项目的管理技术。本书正文共l3章,第1章是概述,第2章至第8章顺序讲述软件生命周期各阶段的任务、过程、结构化方法和工具,第9章至第12章分别讲述面向对象方法学引论、面向对象分析、面向对象设计和面向对象实现,第13章介绍软件项目管理。正文后面有两个附录,分别讲述了用面向对象方法和结构化方法开发两个软件的过程,对读者深入理解软件工程学很有帮助,也是上机实习的好材料。
目录
- 软件工程导论(第五版)答案
- 软件工程导论(第5版)
- 作者:张海藩
- 第1章 软件工程学概述1
- 1.1 软件危机1
- 1.1.1 软件危机的介绍1
- 1.1.2 产生软件危机的原因3
- 1.1.3 消除软件危机的途径4
- 1.2 软件工程5
- 1.2.1 软件工程的介绍5
- 1.2.2 软件工程的基本原理7
- 1.2.3 软件工程方法学9
- 1.3 软件生命周期11
- 1.4 软件过程14
- 1.4.1 瀑布模型15
- 1.4.2 快速原型模型16
- 1.4.3 增量模型17
- 1.4.4 螺旋模型19
- 1.4.5 喷泉模型21
- 1.4.6 Rational统一过程22
- 1.4.7 敏捷过程与极限编程25
- 1.4.8 微软过程29
- 1.5 小结31
- 习题132
- 第2章 可行性研究35
- 2.1 可行性研究的任务35
- 2.2 可行性研究过程36
- 2.3 系统流程图38 2.3.1 符号38
- 2.3.2 例子38
- 2.3.3 分层40
- 2.4 数据流图40
- 软件工程导论目 录 2.4.1 符号40
- 2.4.2 例子42
- 2.4.3 命名44
- 2.4.4 用途45
- 2.5 数据字典47
- 2.5.1 数据字典的内容47
- 2.5.2 定义数据的方法47
- 2.5.3 数据字典的用途48
- 2.5.4 数据字典的实现49
- 2.6 成本/效益分析49
- 2.6.1 成本估计50
- 2.6.2 成本/效益分析的方法51
- 2.7 小结53
- 习题253
- 第3章 需求分析55
- 3.1 需求分析的任务56
- 3.1.1 确定对系统的综合要求56
- 3.1.2 分析系统的数据要求57
- 3.1.3 导出系统的逻辑模型58
- 3.1.4 修正系统开发计划58
- 3.2 与用户沟通获取需求的方法58
- 3.2.1 访谈58
- 3.2.2 面向数据流自顶向下求精59
- 3.2.3 简易的应用规格说明技术59
- 3.2.4 快速建立软件原型61
- 3.3 分析建模与规格说明62
- 3.3.1 分析建模62
- 3.3.2 软件需求规格说明62
- 3.4 实体-联系图62
- 3.4.1 数据对象63
- 3.4.2 属性63
- 3.4.3 联系63
- 3.4.4 实体-联系图的符号64
- 3.5 数据规范化64
- 3.6 状态转换图65
- 3.6.1 状态65
- 3.6.2 事件65
- 3.6.3 符号66
- 3.6.4 例子66
- 3.7 其他图形工具67
- 3.7.1 层次方框图68
- 3.7.2 Warnier图68
- 3.7.3 IPO图69
- 3.8 验证软件需求70
- 3.8.1 从哪些方面验证软件需求的正确性70
- 3.8.2 验证软件需求的方法70
- 3.8.3 用于需求分析的软件工具71
- 3.9 小结72
- 习题373
- 第4章 形式化说明技术75
- 4.1 概述75
- 4.1.1 非形式化方法的缺点75
- 4.1.2 形式化方法的优点76
- 4.1.3 应用形式化方法的准则76
- 4.2 有穷状态机77
- 4.2.1 概念77
- 4.2.2 例子79
- 4.2.3 评价82
- 4.3 Petri网82
- 4.3.1 概念82
- 4.3.2 例子84
- 4.4 Z语言85
- 4.4.1 简介85
- 4.4.2 评价88
- 4.5 小结88
- 习题489
- 第5章 总体设计91
- 5.1 设计过程91
- 5.2 设计原理94
- 5.2.1 模块化94
- 5.2.2 抽象95
- 5.2.3 逐步求精95
- 5.2.4 信息隐藏和局部化96
- 5.2.5 模块独立97
- 5.3 启发规则99
- 5.4 描绘软件结构的图形工具102
- 5.4.1 层次图和HIPO图102
- 5.4.2 结构图103
- 5.5 面向数据流的设计方法104
- 5.5.1 概念104
- 5.5.2 变换分析105
- 5.5.3 事务分析111
- 5.5.4 设计优化112
- 5.6 小结113
- 习题5114
- 第6章 详细设计117
- 6.1 结构程序设计117
- 6.2 人机界面设计119
- 6.2.1 设计问题119
- 6.2.2 设计过程121
- 6.2.3 人机界面设计指南122
- 6.3 过程设计的工具124
- 6.3.1 程序流程图124
- 6.3.2 盒图125
- 6.3.3 PAD图126
- 6.3.4 判定表127
- 6.3.5 判定树128
- 6.3.6 过程设计语言128
- 6.4 面向数据结构的设计方法129
- 6.4.1 Jackson图130
- 6.4.2 改进的Jackson图131
- 6.4.3 Jackson方法132
- 6.5 程序复杂程度的定量度量136
- 6.5.1 McCabe方法137
- 6.5.2 Halstead方法139
- 6.6 小结140
- 习题6140
- 第7章 实现145
- 7.1 编码146
- 7.1.1 选择程序设计语言146
- 7.1.2 编码风格147
- 7.2 软件测试基础149
- 7.2.1 软件测试的目标150
- 7.2.2 软件测试准则150
- 7.2.3 测试方法151
- 7.2.4 测试步骤151
- 7.2.5 测试阶段的信息流152
- 7.3 单元测试153
- 7.3.1 测试重点153
- 7.3.2 代码审查154
- 7.3.3 计算机测试155
- 7.4 集成测试156
- 7.4.1 自顶向下集成157
- 7.4.2 自底向上集成158
- 7.4.3 不同集成测试策略的比较159
- 7.4.4 回归测试160
- 7.5 确认测试160
- 7.5.1 确认测试的范围160
- 7.5.2 软件配置复查161
- 7.5.3 Alpha和Beta测试161
- 7.6 白盒测试技术162
- 7.6.1 逻辑覆盖162
- 7.6.2 控制结构测试165
- 7.7 黑盒测试技术171
- 7.7.1 等价划分172
- 7.7.2 边界值分析175
- 7.7.3 错误推测175
- 7.8 调试176
- 7.8.1 调试过程176
- 7.8.2 调试途径178
- 7.9 软件可靠性179
- 7.9.1 基本概念179
- 7.9.2 估算平均无故障时间的方法180
- 7.10 小结182
- 习题7183
- 第8章 维护189
- 8.1 软件维护的定义189
- 8.2 软件维护的特点190
- 8.2.1 结构化维护与非结构化维护差别巨大190
- 8.2.2 维护的代价高昂190
- 8.2.3 维护的问题很多191
- 8.3 软件维护过程192
- 8.4 软件的可维护性194
- 8.4.1 决定软件可维护性的因素194
- 8.4.2 文档195
- 8.4.3 可维护性复审196
- 8.5 预防性维护197
- 8.6 软件再工程过程198
- 8.7 小结200
- 习题8201
- 第9章 面向对象方法学引论203
- 9.1 面向对象方法学概述203
- 9.1.1 面向对象方法学的要点203
- 9.1.2 面向对象方法学的优点205
- 9.2 面向对象的概念209
- 9.2.1 对象209
- 9.2.2 其他概念211
- 9.3 面向对象建模215
- 9.4 对象模型216
- 9.4.1 类图的基本符号217
- 9.4.2 表示关系的符号218
- 9.5 动态模型223
- 9.6 功能模型224
- 9.6.1 用例图224
- 9.6.2 用例建模227
- 9.7 3种模型之间的关系228
- 9.8 小结229
- 习题9229
- 第10章 面向对象分析231
- 10.1 面向对象分析的基本过程231
- 10.1.1 概述231
- 10.1.2 3个子模型与5个层次232
- 10.2 需求陈述233
- 10.2.1 书写要点233
- 10.2.2 例子234
- 10.3 建立对象模型235
- 10.3.1 确定类与对象236
- 10.3.2 确定关联238
- 10.3.3 划分主题241
- 10.3.4 确定属性241
- 10.3.5 识别继承关系244
- 10.3.6 反复修改244
- 10.4 建立动态模型247
- 10.4.1 编写脚本247
- 10.4.2 设想用户界面248
- 10.4.3 画事件跟踪图249
- 10.4.4 画状态图250
- 10.4.5 审查动态模型251
- 10.5 建立功能模型253
- 10.5.1 画出基本系统模型图253
- 10.5.2 画出功能级数据流图254
- 10.5.3 描述处理框功能254
- 10.6 定义服务255
- 10.7 小结256
- 习题10256
- 第11章 面向对象设计259
- 11.1 面向对象设计的准则259
- 11.2 启发规则261
- 11.3 软件重用263
- 11.3.1 概述263
- 11.3.2 类构件265
- 11.3.3 软件重用的效益266
- 11.4 系统分解267
- 11.5 设计问题域子系统270
- 11.6 设计人机交互子系统273
- 11.7 设计任务管理子系统275
- 11.8 设计数据管理子系统277
- 11.8.1 选择数据存储管理模式277
- 11.8.2 设计数据管理子系统278
- 11.8.3 例子280
- 11.9 设计类中的服务280
- 11.9.1 确定类中应有的服务280
- 11.9.2 设计实现服务的方法281
- 11.10 设计关联282
- 11.11 设计优化283
- 11.11.1 确定优先级283
- 11.11.2 提高效率的几项技术284
- 11.11.3 调整继承关系285
- 11.12 小结287
- 习题11288
- 第12章 面向对象实现289
- 12.1 程序设计语言289
- 12.1.1 面向对象语言的优点289
- 12.1.2 面向对象语言的技术特点290
- 12.1.3 选择面向对象语言294
- 12.2 程序设计风格294
- 12.2.1 提高可重用性295
- 12.2.2 提高可扩充性297
- 12.2.3 提高健壮性297
- 12.3 测试策略298
- 12.3.1 面向对象的单元测试298
- 12.3.2 面向对象的集成测试299
- 12.3.3 面向对象的确认测试299
- 12.4 设计测试用例299
- 12.4.1 测试类的方法300
- 12.4.2 集成测试方法301
- 12.5 小结303
- 习题12304
- 第13章 软件项目管理305
- 13.1 估算软件规模305
- 13.1.1 代码行技术305
- 13.1.2 功能点技术306
- 13.2 工作量估算308
- 13.2.1 静态单变量模型308
- 13.2.2 动态多变量模型308
- 13.2.3 COCOMO2模型309
- 13.3 进度计划312
- 13.3.1 估算开发时间312
- 13.3.2 Gantt图314
- 13.3.3 工程网络315
- 13.3.4 估算工程进度316
- 13.3.5 关键路径318
- 13.3.6 机动时间318
- 13.4 人员组织320
- 13.4.1 民主制程序员组320
- 13.4.2 主程序员组321
- 13.4.3 现代程序员组322
- 13.5 质量保证324
- 13.5.1 软件质量324
- 13.5.2 软件质量保证措施326
- 13.6 软件配置管理328
- 13.6.1 软件配置329
- 13.6.2 软件配置管理过程329
- 13.7 能力成熟度模型331
- 13.8 小结334
- 习题13335
- 附录A C++类库管理系统的分析与设计337
- A.1 面向对象分析337
- A.1.1 需求337
- A.1.2 建立对象模型338
- A.2 面向对象设计339
- A.2.1 设计类库结构339
- A.2.2 设计问题域子系统340
- A.2.3 设计人机交互子系统341
- A.2.4 设计其他类344
- 附录B 一个汉字行编辑程序的设计347
- B.1 设计规格说明347
- B.1.1 外部编辑命令347
- B.1.2 编辑命令348
- B.1.3 输出信息349
- B.2 概要设计350
- B.2.1 正文文件350
- B.2.2 两个工作模式351
- B.2.3 数据元素352
- B.2.4 过程353
- B.3 概要设计结果353
- B.4 详细设计356
- B.4.1 数据元素356
- B.4.2 控制数据元素357
- B.4.3 编辑过程357
- B.4.4 输入模式的过程359
- B.4.5 编辑模式的过程360
- B.5 详细设计结果364
- B.5.1 编辑程序的详细结构364
- B.5.2 类PASCAL伪码365
- B.5.3 实现编辑程序的算法367