面向对象软件工程
作者 : Timothy C.Lethbridge Robert Laganiere
译者 : 张红光 温遇华 徐巧丽 张楠
丛书名 : 计算机科学丛书
出版日期 : 2003-04-01
ISBN : 7-111-11904-5
定价 : 35.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 338
开本 : 16开
原书名 : Object-Oriented Software Engineering
原出版社: McGraw-Hill
属性分类: 教材
包含CD :
绝版 :
图书简介

本书深入地讲解了软件工程的主要原理。内容包括:基于可靠的原则和可重用技术进行开发、使用UML进行可视化建模、对需求分析和设计中各种方案进行评估、面向对象技术、迭代开发、风险管理等等。书中含有大量的练习与例子,读者可以将这些概念应用于实践中。
  本书可以作为高校软件工程课程的教科书,也适用于软件开发技术人员参考。


图书特色

博士是加拿大渥太华大学 信息技术与工程学院的副教授。曾任职于Nortel研究院。1994年获得渥太华大学的博士学位。他是IEEE和ACM软件工程教育知识体系项目教学领域的主席,著有多部软件工程著作和教材,在软件工程教学领域经验极为丰富。 博士是加拿大渥太华大学计算机系副教授。研究领域为计算机视觉与图像处理。

图书前言

本书讲述了大量可以立即应用于实践的软件工程知识和技能,主要针对高校第二学年的软件工程课程。对于那些有一些程序设计背景,但是想更好地理解现代软件工程的读者来说,本书也有参考价值。
  我们教授软件工程课程已经有十年的时间了,使用本书素材的早期版本作为教材也已经有三年了,并且得到了学生积极的反馈。此外,我们进行软件开发、咨询和专业培训的业界经验也使我们能够把本书的重点放在对于学生的未来雇主而言比较重要的内容上。

在软件工程学位项目中使用本书
  软件工程正在成为一门成熟的学科,并逐步从计算机科学和计算机工程中分离出来。这种趋势的一个主要表现,就是全世界各大高校中纷纷建立了专门的软件工程学位项目。我们编写这本书的目的就是在这种学位项目中向学生介绍软件工程最重要的概念。
  在渥太华大学,我们在第二学年的第一学期用12星期的时间教授本书的内容。这时,学生应该已经完成了两个学期的计算机科学课程—包括Java面向对象程序设计。在学习本课程的同时,他们还应该学习数据结构和算法等课程,然后再参加高级软件工程课程的学习,在高级软件工程课程学习时可以进一步扩展这里所学的内容。
  学习过这门课程的学生应该能够胜任在企业中的暑期实习工作。老板们期望学生具有如下能力:了解好的需求中都包含什么,能够运用基本的设计原则,能正确地使用UML,能够把需求和设计转变为高质量的程序并且有效地测试这些程序。本书给出了所有这些技能的实践基础。
  本书是这样组织的,在12星期的课程或单元中,可以使用每星期3个小时的课堂教学加上定期的实验练习。每年我们都布置一些练习,其中的许多内容要求学生分组共同完成。

使用本书提高技能和知识水平
  除了学习软件工程的学生以外,本书还适用于那些具有一些编程背景、需要阅读软件工程实用入门资料的读者。这些人可能需要通过更新技能来适应知识经济的需求,或者经历若干年的编码工作后想提高自己的知识水平。

建议具备的知识背景
  在学习本书之前,读者应该了解面向对象编程的基本概念,尽管第2章概述了这些概念。由于Java是完全的、易于掌握的而且流行的面向对象语言,所以我们选择它来作为本书的编程范例语言。了解其他面向对象语言的读者能够从第2章和本书的网站上以及在完成练习的过程中获得必要的Java知识。

网站上的资料
  我们准备了一个资源丰富的网站,地址是:www.mcgraw-hill.co.uk/textbooks/lethbridge,读者和教师可以从那里得到进一步的支持。
  在网站上可以找到授课的幻灯片、源代码、练习的答案、网上参考资料的链接、总结了许多概念的知识库以及多种其他的辅助学习工具,以及收集反馈信息的表单。
  我们期盼着收到读者的反馈信息。

贯穿全书的主题
  本书主要论述8个主题,我们认为它们是21世纪软件工程的基础。这些主题在许多章节中都被重复介绍,并且在相关的具体例子和练习中进行了讲解。
  1) 了解客户和用户。我们强调领域分析与需求收集和需求确认一样重 要。我们把这些内容放在用例分析和可用性的背景中讲述。我们要求读者按照这样的思路去思考:客户问题到底是什么?现实情况又怎么样,等等。在本书的一开始,我们就把软件工程的目的描述为解决客户的问题,而不是解决软件开发自身的问题。
  2) 基于可靠的原则和可重用技术进行开发。我们强调,软件工程师在着手进行一个项目前需要理解设计原则并彻底掌握适用的技术。为了保证在本书的设计工作中确实如此,我们首先回顾了面向对象设计原则,接着讨论了框架、设计原则和设计模式。
  3) 使用UML进行可视化建模。我们介绍了UML的关键元素,特别是类图和交互图,此外还较为简略地讲到了状态图。由于UML没有覆盖所有软件工程的内容,本书没有讲述UML的所有内容,也没有把讨论只限制在UML本身上,我们强调的是UML图本身不能解决问题,但它是软件工程师应该在日常工作中使用的工具之一。
  4) 对需求和设计中各种方案的评估。在整本书中,我们介绍了各种方案和它们的优缺点,以及进行每个选择的基本原理。学生应该对方案的评估进行实践。
  5) 面向对象。本书包含了面向对象开发的所有方面,包括分析、设计和编程。确保读者能够看到一个项目的完整实现过程,可以使他们除了能抽象地了解开发过程之外,还能获得更多的东西,并且理解许多设计原则的成因。
  6) 迭代开发。我们着重强调了读者应该遵循迭代方法。在项目练习中,全书一直要求读者完成需求、设计和实现。为达到这一点,在第3章介绍了一个完整的项目。最开始,我们只要求读者对项目做一些小改动以初步理解项目。然后在第4章要求读者为系统的新功能编写并评审需求—他们又一次设计和实现这些功能。接下来,读者了解了主题的更多细节,如设计和质量保证,并且要求把所学的内容用于项目的不断升级改进中。
  7) 使用文档有效地交流。我们鼓励读者练习编写内容丰富的文档,本书提供了每一种类型文档的模板和实例。
  8) 在所有软件工程活动中的风险管理。全书讨论了风险管理的许多方面,包括定期评估潜在成本和风险、权衡风险和效益、避免事倍功半,以及随着对项目的深入了解不断改进计划。我们指出,从上面其他主题学到的知识可以用于降低风险。

本书的组织
  篇幅。本书篇幅不长,教师可以要求学生在12星期的课程中读完。我们在下面给出了时间安排的建议。
  深度。本书没有讲述软件工程的所有方面,而是在合理的深度上介绍了一系列相互联系紧密的内容,为读者提供了这一领域中心主题的知识基础。我们的精力主要放在那些可以立即应用到工业级软件项目的内容。
  例子和练习。本书提供了大量的例子和练习,读者可以将这些概念应用于实践中。深入的项目练习是以我们提供的一个完全实现的小系统为基础的。这就意味着不用总是从头编程,读者能够把时间花在考虑更高级的分析和设计问题上,而且还能实际实现自己的想法。读者借此还可以理解重用,因为该系统是基于框架的,而此框架可以在各种客户机-服务器系统内应用。练习在难度上变化很大。一些比较简单的练习只是鼓励读者去思考他们所学过的内容,而另一些则为了激发专业程度较高的读者的主动性。在我们的网站上,许多练习都有带完整解释的答案。
  先后顺序。本书中内容的顺序安排循序渐进,理论联系实际,因此可以使学生迅速地将需求分析、设计和实现应用于现实问题。例如,本书首先介绍了理解项目工作中所需的有关面向对象的知识和体系结构,然后进行需求和面向对象分析,然后是静态建模,然后是介绍用例建模和动态建模。与此同时练习也随之更难。

在12星期的课程中使用本书
  下面是在本科第二学年课程中使用本书的进度安排的建议。对于本书的主体内容—第3章到第10章,安排的时间大致与各章的长度成正比。
  作者在12星期的课程中使用这本书时,每星期有三个小时的授课和三个小时的实验和辅导时间。要求学生阅读所有章节,尽管讲授重点集中在从第3章到第10章的核心内容上,尤其是第3章、第5章、第8章和第9章。
  我们还预定学生在课程过程中完成所选练习和项目活动。我们已经在许多章的末尾提供了对项目活动的建议。
  第1星期: 第1章和第2章—介绍和回顾(1星期)
  第2~3星期: 第3章—重用和客户机—服务器框架(1.5星期)。
  项目工作:通过稍加修改使用客户机-服务器框架实现的一个系统,学会使用这种框架。
  第3~4星期: 第4章—领域分析和需求(1星期)。
  项目工作:在需求分析之后增加新的功能。
  第4~5星期: 第5章—面向对象分析和建模(1.5星期)。
  项目工作:增加需要大量建模工作的功能。
  第6星期: 第6章—设计模式(1星期)。
  第7星期: 第7章—用例和用户界面(1星期)。
  项目工作:增加一个图形用户界面。
  第8~9星期: 第8章—动态建模(1.5星期)。
  第9~10星期: 第9章—设计原则和体系结构(1.5星期)。
  项目工作:一些功能的详细设计。
  第11星期:   第10章—测试(1星期)。
  项目工作:   准备一个测试计划。
  第12星期:   第11~12章—项目管理的介绍和回顾(1星期)。
  也可以按照其他顺序进行学习,尤其是从第6章到第11章的顺序可以灵活安排。还有,为了更强调其他内容,许多章的部分内容可以略过。

感谢
  我们要感谢下面这些人,他们帮助我们改进了本书的早期草稿:
  ●早期草稿的评论者,他们提了许多有用的建议。这些人包括:Hausi M焞ler、Mike Lutz、Carol Greswell、Rohit Bahl、Bob Probert、Lionel Briand和Mike Bennett。
  ●仔细编辑了本书中许多内容的K. Teresa Khidir。
  ●在我们精炼规格说明时辛苦地反复修改代码的Francois B巐anger。
  ●完成了相关网站知识库的工作并帮助精炼词汇表的Judy Kavanagh。
  ●渥太华大学参加了SEG 2100和SEG 2500课程的学生,在他们身上我们实验了本书的早期版本和软件,并且从他们那里得到了许多有用的反馈。
  特别感谢Dan Danis、Ali Echihabi、Stephane Jacoby、Meng Han、Mudassar Hayee、Patrice LaFlamme、Aleksandar Lukic、Vinh Mai、Ryan Rebello、Jim Sellers、James Ward、Karen Williamson和那些不愿透露姓名的人们。

译者简介

张红光 温遇华 徐巧丽 张楠:张红光: 女,南开大学计算机系副教授。78届武汉大学计算数学专业毕业, 毕业后在原航空航天部771所从事抗恶劣环境加固型计算机系统的研究与开发工作长达十六年之久. 主要研究的领域是专用计算机中系统软件和应用软件的开发、设计、移植等工作。97年调入南开大学计算机系工作,主要从事计算机专业的教学与科研工作。教学情况:98年以来担任了计算机系相关专业的选修课“UNIX系统技术”本科教学工作,200年以来承担"操作系统原理"本科主干课程的教学工作.荣获天津市教委2001多媒体教学课件二等奖、2002年IBM e-server奖研金。

译者序

在软件开发中经常会碰到问题和困难,而且很难彻底解决,这一点与其他行业有很大的差异,为什么呢?通过分析软件开发所面临的现实,不难回答。软件是由计算机程序构成的,而计算机程序的本质是一组相互交错的概念集合,包括数据集、数据集之间的关系、算法及函数。这些概念是高度精确的,而且包含的内容非常丰富。软件开发中的困难包含识别、设计和检测这些概念本身;设计人员对软件系统本身有误解;开发者 、管理者、市场人员和客户关系紧张;非开发人员对软件开发本身的客观性认识不够,主观意识过强;开发人员无法与客户充分沟通等等。这些现实是造成软件开发问题的根源。
  在软件开发过程中,设计人员是核心角色,即设计人员的工作质量直接影响着软件产品的质量。本书就是以培养软件设计工程师为目标的,描述软件开发者应该做什么及如何去做。书中包含了软件工程中研究的许多基础问题,如客户需求了解、设计原则和使用的开发技术、UML可视化建模、设计方案评估、面向对象设计原理、迭代开发、交流文档、软件风险管理等问题。
  本书涉及的范围广泛,论述提纲挈领,资料丰富,非常适合用作少学时软件工程课程的教材。
  本书的第1、2、4章由张红光翻译,第3、5、6、7章由温遇华翻译,第8、9、10章由徐巧丽翻译,第11、12章由张楠翻译,同时张楠还负责全书的版式调整及校对,张红光负责全书的整理与统稿。由于时间仓促及译者水平有限,错误和疏漏之处在所难免,敬请读者多提宝贵意见。

译  者
2003年3月于南开园

图书目录

第1章  软件和软件工程 1
1.1  软件的特性 1
1.2  软件工程的概念 4
1.3  软件工程—工程专业的一个分支 5
1.4  软件工程中的相关人员 6
1.5  软件质量 7
1.6  软件工程项目 9
1.7  软件项目中常见的活动 10
1.8  本书强调的八个主题 12
1.9  软件工程总体的困难与风险 15
小结 16
更多信息 16
第2章  面向对象概述 19
2.1  面向对象的概念 19
2.2  类和对象 21
2.3  实例变量 24
2.4  方法、操作与多态 25
2.5  将类组织为继承层次结构 26
2.6  继承层次结构对多态和变量声明的影响 30
2.7  定义面向对象的概念 36
2.8  详细例子:操作邮政编码的程序 37
2.9  详细例子:表示几何点的类 39
2.10  选择程序设计语言和面向对象程序设计中的困难与风险 41
小结 41
更多信息 41
第3章  基于重用技术进行软件开发 45
3.1  重用:在他人的工作与经验的基础上构建 45
3.2  将可重用性与重用引入软件工程 46
3.3  框架:可重用的子系统 48
3.4  客户机-服务器体系结构 51
3.5  构建客户机-服务器系统的必要技术 58
3.6  OCSF 60
3.7  OCSF的基本描述—客户端 61
3.8  OCSF的基本描述—服务器端 63
3.9  使用OCSF的一个即时消息应用程序 66
3.10  考虑可重用技术和客户机-服务器系统时的困难与风险 67
小结 68
更多信息 69
第4章  需求工程 73
4.1  领域分析 73
4.2  软件项目的起始点 76
4.3  定义问题和范围 76
4.4  什么是需求 79
4.5  需求的类型 79
4.6  需求收集与分析技术 84
4.7  需求文档的类型 89
4.8  需求评审 91
4.9  管理变化的需求 95
4.10  详细例子:基于GPS的汽车导航辅助系统(GANA) 96
4.11  详细例子:SimpleChat即时消息程序的功能需求 98
4.12  领域和需求分析中的困难与风险 101
小结 102
更多信息 103
第5章  用类进行建模 105
5.1  UML的概述 105
5.2  UML类图的要素 107
5.3  关联与多重性 108
5.4  泛化 113
5.5  实例图 116
5.6  类图的高级特征 118
5.7  详细例子:有关族谱的类图 123
5.8  类图的开发过程 125
5.9  用Java实现类图 136
5.10  创建类图的困难与风险 138
小结 138
更多信息 138
第6章  使用设计模式 141
6.1  模式简介 141
6.2  抽象-发生模式 142
6.3  通用层次模式 144
6.4  玩家-角色模式 146
6.5  单件模式 147
6.6  观察者模式 148
6.7  委托模式 149
6.8  适配器模式 151
6.9  外观模式 152
6.10  恒定模式 153
6.11  只读接口模式 153
6.12  代理模式 154
6.13  详细例子:OCSF的可观察层 156
6.14  使用设计模式的困难与风险 159
小结 159
更多信息 160
第7章  关注用户及其任务 161
7.1  以用户为中心的设计 161
7.2  用户的特征 163
7.3  开发系统用例模型 164
7.4  用户界面设计基础 171
7.5  可用性原则 174
7.6  用户界面评估 180
7.7  用Java实现简单的GUI 182
7.8  用例建模型和用户界面设计的困难与风险 185
小结 186
更多信息 186
第8章  交互和行为建模 189
8.1  交互图 189
8.2  状态图 194
8.3  活动图 200
8.4  基于交互图和状态图实现类 201
8.5  交互和行为建模的困难与风险 204
小结 205
更多信息 205
第9章  软件架构与设计 207
9.1  设计过程 207
9.2  创建良好设计的原则 210
9.3  做出好的设计决策的技巧 224
9.4  软件体系结构 227
9.5  结构化模式 231
9.6  编写好的设计文档 238
9.7  详细例子:为SimpleChat即时消息应用程序设计一个功能 239
9.8  设计的困难与风险 240
小结 240
更多信息 241
第10章  测试与审查—高质量的保证 243
10.1  基本定义 243
10.2  有效与高效测试 244
10.3  常规算法中的缺陷 249
10.4  数值算法中的缺陷 254
10.5  定时与协作缺陷:死锁、活锁与临界竞争 255
10.6  处理压力与异常情况的缺陷 258
10.7  文档缺陷 260
10.8  编写正式的测试用例与测试计划 261
10.9  测试大型系统的策略 263
10.10  审查 268
10.11  质量保证概述 270
10.12  详细例子:SimpleChat即时消息系统阶段2的测试用例 272
10.13  质量保证的困难与风险 275
小结 276
更多信息 276
第11章  软件过程管理 279
11.1  什么是项目管理 279
11.2  软件过程模型 280
11.3  成本估算 285
11.4  组建软件工程小组 290
11.5  项目进度安排和跟踪 293
11.6  项目计划的内容 295
11.7  项目管理的困难与风险 296
小结 297
参考信息 297
第12章  回顾 299
12.1  理解客户与用户 299
12.2  基于可靠的原则和可重用技术进行开发 299
12.3  面向对象 302
12.4  使用UML进行可视化建模 302
12.5  需求与设计中对各种选择方案的评估 303
12.6  迭代开发 303
12.7  利用文档有效地交流 303
12.8  软件工程活动的风险管理 304
12.9  结束语 305
附录A  本书所用的UML符号小结 307
附录B  本书建议的文档类型小结 311
附录C  系统描述 313
词汇表 317

教学资源推荐
作者: Joseph Phillips
作者: (美)Kathy Schwalbe
作者: Karl E.Wiegers
参考读物推荐
作者: [美]Kim Caputo
作者: [法]穆拉德·沙巴纳·奥萨拉赫(Mourad Chabane Oussalah) 编著