定 价:35 元 本教材已被 2 所学校申请过!
丛书名:/upload/images/725/772/1293687725.jpg
- 作者:张海藩
- 出版时间:2008/2/1
- ISBN:9787302164784
- 出 版 社:清华大学出版社
- 中图法分类:TP311.5
- 页码:
- 纸张:26
- 版次:5
- 开本:16开
- 字数:(单位:千字)
本书的前4个版本累计销售近一百万册,已成为软件工程领域的经典教材,先后荣获全国普通高等学校工科电子类专业优秀教材二等奖、一等奖,并被评为全国优秀畅销书(前10名)、全国高校出版社优秀畅销书和北京高等教育精品教材。为了反映最近4年来软件工程的发展状况,作者对第四版作了下述的精心修改: 增加了目前比较流行的Rational统一过程、以极限编程为杰出代表的敏捷过程以及微软过程的介绍,并且对书中的一些具体内容作了适当的增删或修改。
本书全面系统地讲述了软件工程的概念、原理和典型的方法学,并介绍了软件项目的管理技术。本书正文共13章,第1章是概述,第2章至第8章顺序讲述软件生命周期各阶段的任务、过程、结构化方法和工具,第9章至第12章分别讲述面向对象方法学引论、面向对象分析、面向对象设计和面向对象实现,第13章介绍软件项目管理。正文后面有两个附录,分别讲述了用面向对象方法和结构化方法开发两个软件的过程,对读者深入理解软件工程学很有帮助,也是上机实习的好材料。
本书可作为高等院校“软件工程”课程的教材或教学参考书,也可供有一定实际经验的软件工作人员和需要开发应用软件的广大计算机用户阅读参考。
计算机工业发达国家在发展软件的过程中曾经走过不少弯路,受过许多挫折,至今仍然经受着“软件危机”的困扰。人们开发优质软件的能力大大落后于计算机硬件日新月异的进展和社会对计算机软件不断增长的需求,这种状况已经严重妨碍了计算机技术的进步。
为了摆脱软件危机的困扰,一门研究软件开发与维护的普遍原理和技术的工程学科--软件工程学--从20世纪60年代末期开始迅速发展起来了,现在它已经成为计算机科学技术的一个重要分支,一个异常活跃的研究领域。严格遵循软件工程方法论可以大大提高软件开发的成功率,能够显著减少软件开发和维护中的问题。
软件工程学(通常简称软件工程)研究的范围非常广泛,包括技术方法、工具和管理等许多方面,软件工程又是一门迅速发展的新兴学科,新的技术方法和工具不断涌现,真可谓五花八门层出不穷。因此,在一本书中不可能包含软件工程的全部内容。本书是软件工程的入门介绍,着重从实用角度讲述软件工程的基本原理、概念和技术方法,同时也尽量注意书的全面性和系统性。希望本书既能对实际的软件开发工作有所帮助,又能为读者在今后深入研究这门学科奠定良好的基础。
本书正文共10章。第1章概括介绍软件工程学产生的历史背景以及它的基本原理、概念和方法。第2章到第9章按软件生存周期的顺序介绍各个阶段的任务、过程、方法和工具。第10章着重讨论软件工程的管理技术。正文后面有两个附录,比较完整地介绍了两个实际软件的开发。附录A着重讲述从问题定义到实现的过程,把这个具体例子和课文前几章的内容结合起来学习,有助于加深对一些基本概念和方法的理解。附录B讲述一个交互式正文编辑程序的设计和描述,它是上机实习的好材料(例如,可以实习把设计翻译成程序、设计测试方案以及维护的方法).
《软件工程导论》可以为多种读者服务。本书通俗易懂,实例丰富,既有对多种常见方法的全面概括介绍,又有对一种典型方法的深入详尽介绍,很适合于有一定实践经验的软件工作者和广大计算机用户参考或自学;对于高等院校计算机系高年级本科生和研究生来说,本书可以作为软件工程课程的教材。
软件工程导论前 言 本书根据编者最近几年在北京大学校内外多次讲授“软件工程概论”课所用的讲义改写而成,改写时充分考虑了在校内外讲授这门课程时广大学员的建议和要求,并且增加了最近收集到的大量新材料。
编者在美国马里蓝大学进修期间,听过该校朱耀汉(Yaohan Zhu)教授讲授的软件工程课,并且在朱教授指导下从事过一些软件开发工作,这些都为本书的编写奠定了基础。本书编写前征求了复旦大学计算机系副教授潘锦平同志对写作大纲的意见,初稿写出后又征求了潘锦平和北大计算机系副主任许卓群等同志对内容编排的意见,承蒙他们给予真诚的鼓励并且提出了许多宝贵的具体建议。此外,本书编写过程中董士海副教授曾经提供了许多很有价值的材料。谨在此向他们表示衷心的感谢!
本书不当之处敬请广大读者不吝赐教。
第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
参考文献395