种豆资源网

当前位置:首页 > 百科 > 百科综合 / 正文

面向对象软体工程——使用UML、模式与Java(第2版)

(2019-07-14 08:14:29) 百科综合

面向对象软体工程——使用UML、模式与Java(第2版)

《面向对象软体工程——使用UML、模式与Java(第2版)》是2007年清华大学出版社出版的图书,作者是Bernd Bruegge等。

基本介绍

  • 书名:面向对象软体工程——使用UML、模式与Java(第2版)
  • 作者:Bernd Bruegge等着,叶俊民等译
  • ISBN:9787302135548
  • 定价:69元
  • 出版时间:2007-12-6
  • 装帧:平装

编辑推荐

B.Bruegge和A.H.Doutoit编写的《面向对象软体工程——使用UML、模式和Java》(第2版),是卡耐基·梅隆大学(CMU)高年级本科生和研究生的教材,是我所能见到的各类软体工程教材中最棒的一本,例如:“业余软体工程师总在寻找奇蹟——试图用某种惊人的方法或工具来让软体开发变得轻而易举,但职业软体工程师都知道不存在这种灵丹妙药”,“有两条构造软体设计的原则:其一是使设计足够简单,以至于不存在明显的缺陷;其二是使系统足够複杂,以至不存在明显的缺陷”等,这些充满哲理的话,总能给人以启发。

前言

高达8 611米的K2山峰高高地耸立在西喜马拉雅山的喀喇崑仑山脉上,它是世界上第二高的山峰,被认为是高度在8000米以上最难攀登的山峰。对K2山峰的探险,即便是在天气最适宜的夏季,通常也要连续用上几个月时间。而且,即使在夏季,暴风雪天气也是会非常频繁出现的。进行一次登山探险活动,通常需要数千磅的设备,这些设备包括攀登齿链、抵御恶劣天气的防护装备、帐篷、食物、通信工具和支付给数以百计的搬运工的薪水和鞋子。策划这样一次探险性登山活动,需要花费一个登山者大量的时间,需要数十个后援者协助。一旦开始攀登,很多难以预料的突发事件,如雪崩、工人罢工和设备故障等,将迫使登山者调整原有计画、找出解决问题的新办法或者决定回撤。目前,对K2山峰的探险成功率不到40%。
美国国家空间系统(National Airspace System,NAS)监管并控制着美国的空中交通。NAS拥有18 300多个航空站点、21个空中交通控制中心和460余个控制塔。这些站点和中心所拥有的设备总数总计超过34 000件,这些设备包括雷达系统、信息交换机、无线电收发设备、计算机系统和显示设备等。当前的基础设施老化得很快。例如,支持21个空中交通的控制中心的计算机系统是20世纪80年代早期购买的IBM 3083大型机。从1996年起,美国政府启动了一个项目来更新NAS基础设施,以使之现代化,这一更新计画包括改善卫星导航系统、改善数字控制器以及飞行员通信系统,并且在空中线路控制、飞机着陆顺序安排、飞机驶离和驶向跑道时所涉及的地面交通控制等方面实现更高程度的自动化。但是,想让如此複杂系统的基础设施现代化,只能循序渐进地工作。因此,当引入具有新功能的设备时,仍要支持原有设备的正常运转。例如,在这一过渡时期内,控制器将不得不同时具有模拟和数字两种声音通道,以实现与飞行员的通信。最后,NAS的现代化和全球空中交通同时发生巨大增长,后者预计在未来10~15年后,会成倍增长。被称为“先进自动化系统(Advanced Automation System,AAS)”的NAS的最初现代化尝试,因存在与软体相关问题,在开始时延误几年以及在花费上超出预算数十亿美元后,于1994年被 取消。
上面的两个实例所讨论的均是複杂系统,在此,外部条件将引发意想不到的变化。问题的複杂性超出了任何人可以控制的範畴。变化使得参与者放弃常用的方法而创造新的解决方案。在上述两个实例中,有多名参与者要求进行合作,以开发出新的技术来对付这些挑战。因为,如果不这样做,我们将无法达到目标。
本书就是关于如何处理複杂且不断变化的软体系统的。
主题
套用域(登山计画、空中交通控制、金融系统以及文字处理等)通常包括很多软体开发者不熟悉的概念。而解决方案域(用户界面工具包、无线通信、中间件、资料库管理系统、交易处理系统和可损耗的计算机系统等)则通常是不成熟的,而且会给开发者带来很多具有竞争性的实现技术。因此,系统和开发项目都是複杂的、涉及到很多不同的构件、工具、方法和人员。
当开发者对用户的套用域有了更多的理解之后,他们将更新系统需求。当开发者对正在出现的技术或者对现行技术的缺陷有了更多了解之后,他们会调整系统的设计和实现。当质量控制发现系统中的缺陷,以及用户要求增加新功能时,开发者将修改系统及其相关的产品,从而导致不断变化。
複杂性和不断发生的变化,代表了这样一些挑战:它们使得任何个人都不可能去控制系统及其演化。即使目标就在眼前,如果控制不恰当,複杂性和不断的变化也将使得解决方案在宣布之前就会流产。如果对套用域的理解存在过多错误,会使得出台的解决方案对用户毫无用途,从而不得不返工。不成熟或不兼容的实现技术,会造成系统的稳定性变差,以及系统被延迟交付。处理不了变化,将带来新的系统缺陷,从而使得系统性能降低到无法使用的程度。
本书反映了作者十多年来构造系统,以及教授软体工程课程的体会。我们发现,学生常常孤立地学习程式设计技术和软体工程技术,常常选择小的问题作为研究用例。所带来的结果是,学生们能够有效地解决定义明确的问题,但当他们第一次真正面对複杂而真实的开发项目时,常常会感到束手无策。真实的开发过程需要很多不同的技术和工具,要求方方面面的人员进行合作。针对这种情况,现今的软体工程本科课程体系中通常包括一门软体工程项目管理的课程,讲授组织成一个开发项目所必须的知识。
工具:UML、Java和设计模式
编写本书时,在我们的头脑中一直有一个项目课程。这个项目除了可以作为课程设计的项目外,还可以在其他场合中使用,如短期集训或者短期研发(R&D)项目等。我们使用了真实系统中的实例,并检验UML(Unified Modeling Language)、基于Java的技术、设计模式、设计原理、配置管理以及质量控制等现代技术之间的互动。此外,我们讨论了与项目管理相关的问题,这些问题与上述技术及其对複杂性和变化的影响有关。
原则
我们遵循如下5个原则来进行软体工程教学:
实践经验。我们认为软体工程教学必须与实践结合起来。学生只有参与开发一个複杂系统(即一个没有任何学生能完全理解的系统),才能理解複杂性。
问题的解决。在我们看来,软体工程教学必须建立在解决实际问题之上。因此,没有绝对正确或绝对错误的解决方案,只有文档标準相对做得比较好的解决方案和做得比较差的解决方案。儘管我们检验了现有的解决实际问题的方法并鼓励重用(reuse)这些方法,但同时我们也鼓励对标準解决方案的批评与改进。
有限资源。如果拥有充足的时间和资源,我们将能够建立起理想的系统。这样系统的建立存在一些问题。首先,这一想法是不现实的。其次,即使在开发过程中具有足够的资源,如果最初要解决的问题在开发过程中很快发生了变化,那幺我们最终将交付一个解决了错误问题的系统。因此,我们有必要假设问题的解决过程在资源方面受到限制。同时,我们强烈地意识到资源的缺乏将促使开发者使用基于构件的开发方法、重用知识、设计方案和编码。换句话说,我们将支持用工程方法进行软体开发。
跨学科性。软体工程是一个跨学科的领域。软体工程涉及电子工程、计算机工程、计算机科学、商务管理、图形设计、工业设计、建筑学、戏剧与写作等领域的知识。软体工程是一个套用领域。当试图理解并对套用域进行建模时,开发者与其他(包括用户和客户在内的)人员进行定期沟通,他们中的一些人对软体开发知之甚少。这将要求我们从多个角度、使用多种术语来看待和处理系统。
沟通。即使开发者仅仅为开发而建构软体,开发者仍然需要在其内部之间进行沟通。作为开发者,我们不能只限于与同行进行沟通,还需要讨论被选方案、阐述解决方案、探讨折中的解决方案,以及了解和评价其他人的工作。大量软体工程项目的失败都可归咎于信息表达不準确,以及信息的遗失。我们必须学会与所有项目参与者进行沟通,这其中最重要的参与者就是客户和最终用户。
上述5项原则是本书的基础。这些原则将鼓励并使得读者能够使用符合实际的、现代的解决方案来解决複杂和不断变化的问题。
关于本书
本书的基础是套用于软体工程的面向对象技术。本书既不是一本探讨所有可能方法的软体工程概论图书,也不是一本关于算法和数据结构的程式设计图书。相反地,我们将重点放在一定範围的技术上,并且在适度複杂的环境中解释这些技术的套用,例如一个包含20~60个参与者的多组开发项目。因此,本书也反映了我们本身的偏好、实力和弱点。儘管如此,我们仍然希望所有的读者都能够从本书中找到他们所需要的东西。本书共有16章,分为3个部分,可作为一个学期的教学课程。
第1部分“开始”包含3章。在这部分中,我们将重点介绍软体工程环境中开发者所必须具备的基本技能。
* 第1章“软体工程导论”,描述了程式设计和软体工程之间的差异、本学科当前 存在的挑战,以及本书中将用到的概念的基本定义。
* 第2章“使用UML建模”,描述了面向对象技术中所用到的建模语言UML的基本组成。我们将建模作为一项複杂性处理技术提出来。本章将教会读者如何阅读和理解UML图。在随后的章节中,我们将讲授如何创建UML图来对系统的不同方面进行建模。在全书中,我们使用UML为多种不同的产品进行建模:从软体系统到软体过程和工作产品(work product)等。
* 第3章“项目组织和沟通”,我们介绍了项目组织和沟通的基本概念。开发者和管理者将一半以上的时间花在与其他人沟通上,所使用的沟通方法主要是面对面进行沟通,以及通过E-mail、群件、电视会议或书面档案等方式进行沟通。建模用于处理複杂性,沟通则用于处理变化。本章我们将描述项目组织以及探讨如何才能进行有效的沟通。
第2部分“複杂性处理”,在这部分中,我们将集中探讨那些有助于开发者详细说明、设计和实现複杂系统的技术和方法。
* 第4章“需求获取”,第5章“分析”。这两章从用户角度描述了系统定义。在需求获取的过程中,开发者决定用户所需求的功能,以及实现这一功能的可行方法。在分析阶段,开发者将上述知识形式化,并保证其完整性和一致性。在此,我们主要讨论如何使用UML来处理套用域的複杂性。
* 第6章“系统设计:分解系统”,第7章“系统设计:关于设计目标”。这两章从开发者角度出发,对系统进行了定义。在这一阶段,开发者使用了设计目标和子系统分解的形式定义系统的结构。开发者探讨了全局性问题,如:系统到硬体的映射、持久数据的存储以及全局控制流等。我们将在开发者如何使用体系结构风格、构件以及UML来处理解决方案域的複杂性方面进行集中讨论。
* 第8章“对象设计:重用範式解决方案”、第9章“对象设计:接口规格说明”和第10章“将模型映射到代码”描述了与解决方案域相关的具体建模活动和构建活动。在这一阶段,开发者找出并调整设计模型和框架以实现某些子系统。他们使用一些约束语言,如UML对象约束语言(Object Constraint Language)来精化和精确说明类接口。最后,开发者将详细的对象设计模型映射到原始码和资料库框架。
* 第11章“测试”。在这一章里,我们将描述对照系统模型对系统行为的验证。通过测试可以发现系统中的错误,包括那些系统发生变化时以及系统需求发生变化时产生的错误。测试活动包括单元测试、集成测试和系统测试。我们将介绍几种测试技术,包括:白盒测试、黑盒测试、基本路径测试、基于状态的测试和检查,并讨论这些技术在面向对象系统中的套用。
第3部分 “管理更改”。在这一部分中,我们将集中讨论在整个系统开发中支持变化的控制、评价以及实现的方法和技术。
* 第12章“基本原理管理”。这一章描述了设计决策的获取,以及对这些设计决策的论证。我们针对需求获取、分析和系统设计这3个阶段所开发出来的模型,就一个系统应该做什幺和应该如何去做,提供了不同的视点,这将有助于複杂问题的处理。为了能够处理变化,我们也需要知道系统为什幺是这样的。设计决策的获取、可选方案的评估,以及对这些方案的论证,使我们得以了解系统的基本原理。
* 第13章“配置管理”。在这一章中,我们描述了对项目发展过程进行建模的技术和工具。配置管理有助于我们对变化进行处理,这样就补充了基本原理。版本管理记录了系统开发的进程。发布管理保证了一次发布过程中的各个构件的质量,以及这些构件之间的一致性。变化的管理,保证了对系统的修改始终与项目目标相一致。
* 第14章“项目管理”。这一章描述了一些在启动软体开发项目、跟蹤项目进度以及处理所遇到的危险和意外事件中所必需的技术。我们主要关注那些有助于大批参与者按照计画合作并交付高质量系统所涉及的组织、角色和管理活动。
* 第15章“软体生命周期”。这一章描述了软体的生命周期,例如Boehm的螺旋模型和统一的软体开发过程,并提供了开发活动的抽象模型。在这一章中,我们还讨论了能力成熟度模型,该模型用来评价相关开发组织的成熟度。
* 第16章“方法学:综合考虑各种因素”。这一章描述了将上述章节中所描述的内容套用于具体情况的方法学和启发式準则。无论需求获取做得怎样彻底,也无论计画做得多幺详细,任何规模的实际项目都将遇到未知的事件和变化。不确定性处理使得实际项目和系统与我们在书本上了解到的项目和系统差别极大。在本章中,我们介绍了很多不同的方法学,讨论了每一个项目中需要解决的问题,提出了3个实际项目的实例分析。
上面这些主题是密切相关的。为了强调这一点,我们选择了一种重複的方法。每章都由5节组成。第1节用一个实例介绍与主题相关的问题。第2节简要描述了与这些主题相关的活动。第3节通过一些简单的实例来解释主题的基本概念。第4节使用真实系统中的例子来详细讲解主要技术活动。最后,我们讲述管理活动并讨论典型的折中方案。从第4~第10章,我们对一个称为竞技场的複杂多用户游戏管理系统进行了实例分析,通过越来越複杂的实例来重複和详述同一个概念,我们希望读者能够获得面向对象软体工程的实际知识。
课程
构造一个大型、複杂系统可以比作攀登一座大山。有了路线描述固然不错,但路线将永远不会完全被勾画出来,因为新的意外会随时会出现。儘管我们在本书中规划了软体工程知识,变化还会发生,而我们现在所坚信的方法学也会变得过时。
怎样教会我们的学生去处理这类快速变化的情况?对我们而言,最重要的是我们不仅应该向学生传授必要的知识,而且还应该教会他们应对、处理危机的能力。儘管研究路线描述是明智的,但是没有什幺能够取代在这条路线上进行实际旅行的经验。
本书是为本科毕业班的学生和研究生编写的,适合作为一个学期的软体工程课程的教材。学生应该具有一定的使用C、C++、C#或Java进行编程的能力。我们希望学生具有必要的解决问题的技能以解决技术问题,但无须具备接触过系统开发中常见複杂多变情况的经验。此外,本书也可以用于支持其他类型的课程,例如短期密集的专业课程培训等。
项目和高级课程
一门项目课程应包括本书中的所有章节,大多应按顺序讲授。教师可以考虑在介绍课程时,提前介绍第14章中的项目管理概念,以让学生熟悉如何制定计画和控制状况。
介绍性课程
一门有作业的介绍性的课程应该把重点集中在每一章的前3节上。第4节以及实例分析可以用做作业材料,也可以通过使用纸制UML图表、文档和编码来模拟构造一个小型系统。
短期技术课程
本书也可以用来作为短期且密集的专业培训指导。一门技术性课程,其重点在于UML和面向对象的方法方面,所涉及的部分章节按顺序为第1、2、4、5、6、7、8、9、10和第11章,包括了从需求获取到测试的所有开发阶段。高级课程还应该包含第12章“基本原理管理”和第13章“配置管理”。
短期管理课程
本书还可以用作面向管理者的短期密集培训课程。管理课程的重点集中在沟通、风险管理、基本原理、成熟度模型和UML,可选用的章节按顺序为第1、2、3、14、15、16、12和第13章。
与第1版的不同之处
本书的第2版源于一个充分限定範围的项目。我们的目标是增加两个新章节和一个实例分析,作为对我们从本书的第1版读者处收到的反馈意见的回应。完成这项工作用了近一年时间。
然而两年后,我们写了4个新章节并对现存章节进行了全面审视。在增加细节实例、跟上软体工程的最新发展、保持本书的一致性和满足进度表之间,我们决定在进度表上进行让步。我们希望最后产品的质量能够反映出这一延迟的决策是值得的。感谢我们的出版商Alan Apt,感谢他的无限耐心。在本书中,我们所做的改变如下:
* 贯穿全书的实例分析。我们收到了很多读者的请求,他们要求有一个贯穿全书的实例,使得各个章节之间的关係变得显而易见。因此,我们将ARENA作为贯穿全书的实例,它将出现在所有技术章节中。
* 扩展了对象设计资料。我们扩展了设计模式的覆盖範围并加强了与重用相关的所有材料,这一扩展体现在第8章这一新章节的组成上。同样,我们从概念和实例两个方面扩展了OCL(Object Constraint Language,对象约束语言)的覆盖範围,并将这一材料包含在第9章这一新章节中。在上述做法中,我们一直避免将本书写成参考手册,而将重点放在提供有关这些概念套用方面的知识上。
* 扩展了选择实现活动的範围。我们发现很多学生开始很难将新资料的内容(例如,需求工程、UML建模)与他们已经理解的概念(例如,程式设计)联繫起来。为了解决这一问题,我们扩展了本书的範围,包括了精选的关于实现的主题。在第10章这一新章节中,我们描述了怎样将模型映射到原始码。
* 项目管理和软体生命周期资料的重新组织。软体工程课程常常将项目管理和软体生命周期主题放在一起处理,并在本课程的一开始就进行讨论,从而导致了软体工程自顶向下的教学方法。根据经验,我们发现如果学生没有接触过大型项目中所固有的问题,那幺上述内容很难为学生们所理解。因此,我们选择了自底向上的教学方法,通过在越来越广的範围里、越来越多地反覆触及这些内容,以使得学生逐步掌握其内容。在本课程的前面章节中,如第3章只关注从开发者的角度看项目管理的基本概念。在第14章中,我们从初任项目经理的角度再次回顾并扩展了这些概念。一旦项目管理中的问题理解清楚之后,在第15章中,我们将把重点放在软体生命周期问题和怎样通过项目传递过程的知识上面。第14章和第15章从理想化和学术角度对待这一主题。为了在理想主义与现实主义之间寻求平衡点,我们在第16章中讨论了实际项目所面临的方法学问题。
关于作者
Bernd Bruegge博士曾经在卡耐基·梅隆大学(CMU)研究并教授软体工程课程,期间历时20年之久,在CMU,Bruegge获得了硕士和博士学位。Bruegge博士还获得了德国汉堡大学的毕业证书。目前,Bruegge博士是慕尼黑工业大学计算机科学系的教授,并负责教授软体工程,同时,Bruegge博士还是CMU的客座教授。本书中的内容,是Bruegge博士以书本形式和网路教育形式所进行的面向对象软体工程课程教学的内容,这些内容的收集与使用有长达15年的历史。Bruegge博士于1995年在CMU获得Herbert A.Simon的教学优秀奖。Bruegge博士还是一位国际顾问,他使用了本书中介绍的技术,设计并实现了很多套用系统,在这里列举一小部分:DaimlerChrysler工程反馈系统、美国环境保护处的环境建模系统、市警察局的事故管理系统等。
Allen Dutoit博士是慕尼黑工业大学的研究人员。Allen Dutoit博士在CMU获得了硕士和博士学位,在Lausanne的瑞士洛桑联邦技术学院获得过毕业证书。从1993年开始,Allen Dutoit博士与Bruegge教授一起,在CMU和慕尼黑工业大学教授软体工程课程,在这期间他们使用并完善了本书中所用的描述方法。Allen Dutoit博士的研究领域包含了软体工程和面向对象系统的多个方面,涉及需求工程、基本原理管理、分布开发系统和基于原型开发的系统等。Allen Dutoit博士曾经是CMU软体工程学会和複杂工程系统学会的会员。

图书目录

前言 III
序言 V
致谢 XIII
第1部分 开 始
第1章 软体工程导论 2
1.1 导言:软体工程的失误 2
1.2 什幺是软体工程 3
1.2.1 建模 4
1.2.2 问题解决 5
1.2.3 知识获取 6
1.2.4 基本原理 6
1.3 软体工程概念 7
1.3.1 参与者和角色 8
1.3.2 系统和模型 8
1.3.3 工作产品 9
1.3.4 活动、任务和资源 9
1.3.5 功能性需求和非功能性需求 10
1.3.6 符号、方法和方法学 10
1.4 软体工程开发活动 11
1.4.1 需求获取 11
1.4.2 分析 11
1.4.3 系统设计 13
1.4.4 对象设计 13
1.4.5 实现 14
1.4.6 测试 14
1.5 管理软体开发 14
1.5.1 沟通 15
1.5.2 基本原理管理 15
1.5.3 软体配置管理 16
1.5.4 项目管理 16
1.5.5 软体生命周期 16
1.5.6 总结 16
1.6 竞技场实例分析 17
1.7 推荐读物 18
1.8 练习 18
参考文献 19
第2章 使用UML建模 21
2.1 导言 21
2.2 UML综述 22
2.2.1 用例图 22
2.2.2 类图 23
2.2.3 互动图 24
2.2.4 状态图 24
2.2.5 活动图 25
2.3 建模活动中的概述 26
2.3.1 系统、模型和视图 26
2.3.2 数据类型、抽象数据类型和
实例 28
2.3.3 类、抽象类和对象 28
2.3.4 事件类、事件和讯息 30
2.3.5 面向对象建模过程 31
2.3.6 伪证和原型构造 32
2.4 UML的深入透视 33
2.4.1 用例图 33
2.4.2 类图 39
2.4.3 互动图 46
2.4.4 状态图 48
2.4.5 活动图 50
2.4.6 图的组织 52
2.4.7 图的扩展 54
2.5 推荐读物 55
2.6 练习 55
参考文献 57
第3章 项目组织和沟通 58
3.1 引言:一个关于火箭的例子 58
3.2 项目综述 59
3.3 项目组织的综述 62
3.3.1 项目组织 62
3.3.2 角色 64
3.3.3 任务和工作产品 66
3.3.4 进度表 68
3.4 项目沟通综述 69
3.4.1 计画内的沟通 69
3.4.2 计画外的沟通 74
3.4.3 沟通机制 76
3.5 组织活动 81
3.5.1 加入一个项目组 82
3.5.2 加入沟通基层组织 82
3.5.3 参加项目组情况通气会议 83
3.5.4 组织客户和项目总结 85
3.6 推荐读物 86
3.7 练习 86
参考文献 88
第2部分 处理複杂性
第4章 需求获取 90
4.1 导言:可用性实例 90
4.2 需求获取综述 91
4.3 需求获取概念 92
4.3.1 功能性需求 93
4.3.2 非功能性需求 93
4.3.3 完整性、一致性、清晰性和
正确性 95
4.3.4 现实性、确认性和可追蹤性 95
4.3.5 绿地工程、再工程和界面工程 96
4.4 需求获取活动 96
4.4.1 标识参与者 97
4.4.2 标识场景 98
4.4.3 标识用例 100
4.4.4 求精用例 102
4.4.5 标识参与者和用例之间的
关係 104
4.4.6 标识初始分析对象 107
4.4.7 标识非功能性需求 108
4.5 需求获取管理 110
4.5.1 与客户协商规格说明:联合
套用设计 110
4.5.2 追蹤性维护 112
4.5.3 需求获取的文档化 112
4.6 竞技场实例分析 114
4.6.1 初始问题描述 114
4.6.2 标识参与者和场景 115
4.6.3 标识用例 119
4.6.4 求精用例与标识关係 121
4.6.5 标识非功能性需求 125
4.6.6 获得的教训 126
4.7 推荐读物 126
4.8 练习 127
参考文献 128
第5章 分析 130
5.1 导言:光幻影 130
5.2 分析概述 131
5.3 分析的概念 132
5.3.1 分析对象模型和动态模型 132
5.3.2 实体、边界和控制对象 133
5.3.3 泛化和特化 134
5.4 分析活动:从用例到对象 135
5.4.1 标识实体对象 135
5.4.2 标识边界对象 137
5.4.3 标识控制对象 139
5.4.4 使用顺序图将用例映射成对象 139
5.4.5 使用CRC卡建模的对象之间
的互动 143
5.4.6 标识关联 143
5.4.7 标识聚集 145
5.4.8 标识属性 146
5.4.9 建模单一对象状态相关的行为 147
5.4.10 建模对象之间的继承关係 148
5.4.11 分析模型回顾 148
5.4.12 分析小结 150
5.5 分析管理 151
5.5.1 将分析文档化 151
5.5.2 分配责任 152
5.5.3 对分析的沟通 153
5.5.4 分析模型的叠代 154
5.5.5 客户发出的结束信息 155
5.6 竞技场实例分析 156
5.6.1 标识实体对象 157
5.6.2 标识边界对象 160
5.6.3 标识控制对象 161
5.6.4 对象之间互动的建模 161
5.6.5 评价和加固分析模型 164
5.6.6 获得的教训 166
5.7 推荐读物 166
5.8 练习 167
参考文献 168
第6章 系统设计:分解系统 170
6.1 导言:一个平面规划的例子 170
6.2 系统设计概述 172
6.3 系统设计概念 172
6.3.1 子系统与类 173
6.3.2 服务与子系统接口 174
6.3.3 耦合与内聚 174
6.3.4 分层与划分 177
6.3.5 体系结构风格 180
6.4 系统设计活动:从对象到子系统 186
6.4.1 出发点:线路规划系统的分析
模型 186
6.4.2 明确设计目标 188
6.4.3 明确子系统 190
6.5 推荐读物 192
6.6 练习 193
参考文献 194
第7章 系统设计:贯彻设计目标 195
7.1 介绍:一个冗余系统的例子 195
7.2 系统设计活动概述 196
7.3 概念:UML部署图 197
7.4 系统设计活动:贯彻设计目标 198
7.4.1 将子系统映射到处理器和
构件 199
7.4.2 标识并存储持久性数据 201
7.4.3 提供访问控制 203
7.4.4 设计全局控制流 208
7.4.5 标识边界条件 210
7.4.6 评审系统设计 212
7.5 系统设计管理 214
7.5.1 系统设计文档化 214
7.5.2 分配责任 215
7.5.3 系统设计交流 216
7.5.4 系统设计叠代 217
7.6 竞技场实例分析 218
7.6.1 标识设计目标 218
7.6.2 标识子系统 219
7.6.3 将子系统映射到处理器和构件 221
7.6.4 标识并存储持久性数据 222
7.6.5 提供访问控制 223
7.6.6 设计全局控制流 224
7.6.7 标识边界条件 225
7.6.8 课程小结 227
7.7 推荐读物 227
7.8 练习 228
参考文献 229
第8章 对象设计:重用模式解决
方法 230
8.1 导言:挫折 230
8.2 对象设计概述 232
8.3 重用的概念:解决方案对象、继承和
设计模式 234
8.3.1 套用对象和解决方案对象 235
8.3.2 说明继承和实现继承 235
8.3.3 授权 237
8.3.4 Liskov替换準则 238
8.3.5 设计模式中的授权和继承 238
8.4 重用活动:选择设计模式和构件 240
8.4.1 使用桥樑模式封装数据存储 242
8.4.2 使用适配器模式封装可继承
构件 243
8.4.3 使用策略模式封装上下文 245
8.4.4 使用抽象工厂模式封装平台 247
8.4.5 使用命令模式封装控制流 249
8.4.6 使用合成设计模式封装层次 249
8.4.7 选择设计模式的启发式準则 251
8.4.8 标识和调整套用框架 252
8.5 管理重用 255
8.5.1 对重用进行文档编辑 257
8.5.2 分配责任 258
8.6 竞技场实例分析 258
8.6.1 使用抽象工厂设计模式 259
8.6.2 使用命令设计模式 260
8.6.3 使用观察者设计模式 261
8.6.4 课程回顾 262
8.7 推荐读物 262
8.8 练习 263
参考文献 264
第9章 对象设计:接口规格说明 266
9.1 导言:一个铁路的例子 266
9.2 接口规格说明概述 268
9.3 接口规格说明概念 269
9.3.1 类实现者、类扩展者和类
使用者 269
9.3.2 类型、签名和可见性 270
9.3.3 契约:不变式、前置条件和
后置条件 271
9.3.4 对象约束语言 273
9.3.5 OCL收集:集合、包和序列 276
9.3.6 OCL量词:全称量词forAll和
存在量词exists 279
9.4 接口规格说明活动 280
9.4.1 标识遗漏的属性和操作 280
9.4.2 说明类型、签名和可见性 282
9.4.3 说明前置条件和后置条件 283
9.4.4 说明不变式 285
9.4.5 继承契约 286
9.5 管理对象设计 288
9.5.1 对象设计文档化 289
9.5.2 分配责任 293
9.5.3 在需求分析中使用契约 294
9.6 竞技场实例分析 294
9.6.1 标识在联赛方式(TournamentStyle)和回合(Round)中遗漏的
操作 295
9.6.2 定义说明联赛方式(Tournament- Style)和回合(Round)
中的契约 296
9.6.3 定义说明淘汰赛方式(KnockOut- Style)和淘汰回合(KnockOut- Round)契约 298
9.6.4 课程回顾 300
9.7 推荐读物 300
9.8 练习 301
参考文献 302
第10章 将模型映射到代码 304
10.1 导言:一个关于书的例子 304
10.2 映射的概述 306
10.3 映射的概念 306
10.3.1 模型转换 307
10.3.2 重构 308
10.3.3 正向工程 309
10.3.4 逆向工程 310
10.3.5 转换準则 311
10.4 映射活动 311
10.4.1 最佳化对象设计模型 312
10.4.2 将关联映射到集合 314
10.4.3 将契约映射到异常 320
10.4.4 将对象模型映射到持久存
储模式 323
10.5 管理实现 328
10.5.1 编写转换文档 328
10.5.2 分配责任 329
10.6 竞技场实例分析 329
10.6.1 竞技场中的统计类
(Statistics) 330
10.6.2 将关联映射到集合 332
10.6.3 将契约映射到异常 333
10.6.4 将对象模型映射到资料库
模式 335
10.6.5 课程回顾 336
10.7 推荐读物 336
10.8 练习 337
参考文献 338
第11章 测试 339
11.1 导言:测试太空梭 339
11.2 测试概述 341
11.3 测试概念 344
11.3.1 故障、错误状态和失败 345
11.3.2 测试用例 347
11.3.3 测试桩和测试驱动 348
11.3.4 更正 349
11.4 测试活动 350
11.4.1 构件检查 350
11.4.2 可用性测试 351
11.4.3 单元测试 352
11.4.4 集成测试 359
11.4.5 系统测试 364
11.5 管理测试 369
11.5.1 制定测试计画 369
11.5.2 编写测试文档 370
11.5.3 分配责任 372
11.5.4 回归测试 373
11.5.5 使测试自动化 374
11.6 推荐读物 375
11.7 练习 375
参考文献 377
第3部分 管 理 更 改
第12章 基本原理管理 380
12.1 导言:将火腿切成薄片 380
12.2 基本原理概述 381
12.3 基本原理概念 383
12.3.1 集中式的交通控制 384
12.3.2 定义问题:问题 385
12.3.3 探索求解空间:提议 386
12.3.4 评价求解空间:标準和
讨论 387
12.3.5 使求解空间崩溃:解决方案 389
12.3.6 执行解决方案:活动项 390
12.3.7 基于问题的模型和系统
实例 390
12.4 基本原理的活动:从问题到决策 394
12.4.1 CTC系统设计 394
12.4.2 在会议中获取基本原理 395
12.4.3 异步获取基本原理 401
12.4.4 在讨论变化的时候获取
基本原理 402
12.4.5 重新构造基本原理 405
12.5 管理基本原理 406
12.5.1 将基本原理文档化 407
12.5.2 分配责任 408
12.5.3 关于基本原理交流的
启发式规则 409
12.5.4 问题的建模和协商 409
12.5.5 冲突解决策略 411
12.6 推荐读物 412
12.7 练习 412
参考文献 413
第13章 配置管理 415
13.1 导言:一个飞机的实例 415
13.2 配置管理概述 417
13.3 配置管理概念 418
13.3.1 配置项和CM聚集 419
13.3.2 版本和配置 419
13.3.3 变化请求 420
13.3.4 升级和发布 421
13.3.5 仓库和工作空间 421
13.3.6 版本标识方案 421
13.3.7 变化和变化集 423
13.3.8 配置管理工具 425
13.4 配置管理活动 425
13.4.1 配置项和CM聚集标识 427
13.4.2 升级管理 429
13.4.3 发布管理 430
13.4.4 分支管理 432
13.4.5 不同版本管理 435
13.4.6 变更管理 437
13.5 对配置管理的管理 438
13.5.1 配置管理的文档化 439
13.5.2 分配配置管理任务 439
13.5.3 计画配置管理活动 440
13.6 推荐读物 440
13.7 练习 441
参考文献 442
第14章 项目管理 443
14.1 介绍:STS-51L发射决定 443
14.2 项目管理概述 445
14.3 项目管理概念 449
14.3.1 任务和活动 450
14.3.2 工作产品、工作包和角色 451
14.3.3 工作分解结构 451
14.3.4 任务模型 452
14.3.5 技能矩阵 453
14.3.6 组织 454
14.3.7 可视组织结构 455
14.3.8 组织结构图谱 456
14.3.9 软体项目管理计画 457
14.4 项目管理活动 459
14.4.1 计画项目 460
14.4.2 组织项目 463
14.4.3 控制项目 467
14.4.4 终结项目 472
14.5 推荐读物 472
14.6 练习 473
参考文献 474
第15章 软体生命周期 476
15.1 导言:玻利尼西亚航行 476
15.2 IEEE 1074:开发软体生命周期
过程的标準 479
15.2.1 过程与活动 479
15.2.2 软体生命周期建模 481
15.2.3 项目管理 481
15.2.4 前期开发 482
15.2.5 开发过程 482
15.2.6 后期开发 483
15.2.7 整体过程(交叉开发
过程) 483
15.3 评价软体生命周期模型的成熟度 484
15.4 生命周期模型 486
15.4.1 以顺序活动为中心的模型 487
15.4.2 以叠代活动为中心的模型 488
15.4.3 以实体为中心的模型 492
15.5 推荐读物 495
15.6 练习 495
参考文献 496
第16章 方法学:综合考虑各种
因素 497
16.1 导言:首次攀登乔戈里峰(K2峰) 497
16.2 项目环境 500
16.3 方法学问题 501
16.3.1 做多少计画 502
16.3.2 多大程度上的重用 502
16.3.3 构建多少模型 503
16.3.4 过程分为几步 504
16.3.5 多大程度上的控制和监控 505
16.3.6 什幺时候重定义项目目标 505
16.4 方法学领域 506
16.4.1 Royce方法学 506
16.4.2 极限编程 511
16.5 案例分析 514
16.5.1 XP项目:ATRACT 515
16.5.2 局部主客户:FRIEND 517
16.5.3 分散式项目:JAMES 523
16.5.4 案例分析总结 528
16.6 推荐读物 531
16.7 练习 532
参考文献 532
第4部分 附 录
附录A 设计模式 536
A.1 抽象工厂(Abstract Factory):
封装平台 536
A.2 适配器(Adapter):对遗留代码的
包装 537
A.3 桥樑(Bridge):允许选择性实现 538
A.4 命令(Command):封装控制流 538
A.5 组合(Composite):表示递归的
层次结构 539
A.6 层面(Facade):层面子系统 540
A.7 观察器(Observer):将实体从
视图中分离出来 541
A.8 代理(Proxy):封装开销大的对象 542
A.9 策略(Strategy):封装算法 543
A.10 选择设计模式的启发式準则 544
参考文献 545
附录B 术语表 546
参考文献 570
XVI
面向对象软体工程——使用UML、模式与Java(第2版)
XIX
目 录

标 签

搜索
随机推荐

Powered By 种豆资源网||