实用软件工程
作者 : Leszek A.Maciaszek Bruc Lee Liong
译者 : 胡长军  张晓明 等
丛书名 : 计算机科学丛书
出版日期 : 2006-12-10
ISBN : 7-111-20008-X
定价 : 69.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 614
开本 : 16开
原书名 : Practical Software Engineering:A Case Study Approach
原出版社: Addison-Wesley
属性分类: 教材
包含CD :
绝版 :
图书简介

本书讨论了如何将软件工程理论与行业实践联系起来,即集中精力进行系统设计和实现以及着手解决重要的实践问题。书中以一个主要的案例分析为中心展开叙述,提供了针对大型系统开发的软件工程技术,全面论述了开发生命周期、建模语言、工程工具、项目规划以及过程管理。通过主要案例研究的三次迭代,说明了迭代和增量式开发的概念。本书不仅为学生提供系统学习软件工程的方法,而且为IT专业人士提供软件工程的最佳实践。

主要特色
  ●着重介绍面向对象的建模和程序设计。
  ●针对需求分析和详细设计,详细讲解UML和模式的应用。
  ●突出数据库和数据工程在软件工程中的重要性。
  ●介绍组件和业务对象的方法。
  ●覆盖多层解决方案 (包括GUI和Web客户端),通过Web和应用服务器扩展到数据库。
  ●强调应用体系结构设计和重构。
  ●本书配套网站包含更多信息:www.booksites.net/maciaszak。

图书特色

图书前言

本书的写作背景
  本书的编写是一个迭代和增量式开发的过程。它经历了现在流行的生命周期模型的四个主要阶段:项目起始、细化、构造和移交。本书是由两位作者按照敏捷软件开发方法编写的。在此过程中,我们将读者的要求作为需求,进行了不断的集成和大量的修改。但是很遗憾,我们没能在短期内交付该书。
  本书的起源要追溯到1990年出版的Maciaszek的《Database Design and Implementation》(Prentice Hall)。该书的许多读者希望在后续章节中能有更完整的案例分析、大小例子,以及逐步增加的(也就是迭代和增量的)技术难度和内容复杂度。于是就产生了本书的业务案例,并且使项目进入细化阶段,精练版本,消除风险,确定需求和范围,但最终的结果是大量的行业培训和咨询,而不仅仅是一本书。
  10年之后,在经过无数的行业项目之后,有大量资料正迫切等待向更广泛的读者发布。但是行业发展已经进入信息时代,读者也已经改变。这就需要有一本新书来阐述现代软件工程所需要的知识。Maciaszek的《Requirements Analysis and System Design: Developing Information Systems with UML》(Addison-Wesley,2001)正是这样一本教科书,这本书现在已经发行第2版。很快,读者现在所拥有的这本书就要进入构造阶段。
  构造阶段是一个很困难的阶段。本书原本只是作为Maciaszek 2001年教科书或类似书籍的辅助读物,但是后来却成为一本独立的教材。它用于教授实用软件工程中的迭代式案例分析方法。本书集中讨论软件的设计、编程和管理。它强调现代的开发实践、方法、技术和工具。
  本书的移交阶段就在读者手中。本书的Beta测试是在课堂和软件项目中进行的。本书的使用方式由读者自己决定。如果读者对本书有任何改进意见,请与本书的编写团队联系。
  本书的纲要和组织
  本书与众不同的特点源于两方面的努力。首先本书是关于如何在实践中进行软件工程的。其次,它是关于企业应用级软件工程的。下面关于企业应用范围的描述适用于全书:“企业应用包括工资表、病例、航运、成本分析、信用记录、保险、供应链、会计、客户服务和外贸。企业应用不包括汽车加油机、文字处理器、电梯控制设备、化学工厂控制设备、电话交换机、操作系统、编译器和游戏”(Fowler,2003,p.3)。
  本书围绕一个主要的案例分析展开,配有两个带练习题的小案例,提供大量的例子、基本建模和编程概念的指南,每章最后还提供带有案例分析练习的解答题。案例分析和一些小案例所引用的组织是一个专门从事广告费用评估的公司。本书根据它的核心业务将这个公司命名为AEM(事实上,该组织是位于澳大利亚悉尼的ACNielsen誷 Nielsen 媒体研究中心)。案例分析是电子邮件管理(EM),它是AEM联系人管理(CM)系统的一个子系统。
  如韦恩图所示,AEM是一个业务,CM是其中的一个业务领域,EM是一个案例分析。例子和小案例源于AEM业务的交叉领域,包括CM。有一些例子与AEM无关。例子和案例分析练习使案例分析的内容变得更为丰富。指南用于快速介绍UML建模、Java编程、关系数据库、GUI(图形用户界面)构造和业务组件使用。
  本书致力于提供广泛的软件工程知识和案例分析所需的背景知识。但是,本书的重点是展示如何在软件项目中应用这些知识。对于给定的需求,本书采用迭代式开发设计和实现模型。我们精心挑选案例分析、小案例、例子和解答题,用来强调由于不同应用和软件解决方案的特性而决定软件开发的方方面面。
  本书由四部分组成。第一部分(软件项目)讨论软件生命周期、建模语言、工程工具、项目计划以及过程管理。接下来的三个部分介绍案例分析、小案例和例子,主要讨论软件工程的方法、技术、过程和开发环境。
  第二、三和四部分与三次项目(案例分析)迭代相对应。每一次迭代都从用例规格说明开始,用例规格说明是从最初的对象模型扩展得到的。为了阐述案例分析的设计和编程方案,我们需要提前解释每次迭代的一般理论和实践知识。任何关于案例分析解决方案的知识(不包括重要的常识)都将在案例分析的讨论中介绍。每一次迭代都会产生一个完整的解决方案,并且每章都有包含必要注释的源代码和对前面章节解释的引用。
  第二部分(从需求分析经由体系结构设计到软件发布)首先给出EM案例分析的业务环境。这部分的前两章介绍AEM业务对象模型和CM领域对象模型。接下来,定义EM的需求,并且成功地进行EM的第一次迭代。第一次迭代的关键是要设计出一个能够成功进行下一步扩展的合理体系结构。第一次迭代的“可交付性”就是向用户(也就是本书的读者)发布软件。
  第三部分(软件重构与用户界面设计)关注于确定系统的前端,以及应用的表示和领域层。这部分讨论图形用户界面(GUI)的设计,包括一个支持Web的前端。通过重构体系结构和开发友好的用户界面,我们从第一次迭代过渡到第二次迭代。
  第四部分(数据工程与业务组件)将焦点从系统前端转移到后端和中间层。这一部分讨论数据的存储和操纵、业务规则的实现、事务处理和安全控制。同时还解释如何将应用逻辑转移到中间层的应用服务器上。
  虽然案例分析的第三次迭代来源于第二次迭代,但是读者可以相对独立地学习本书的第三部分和第四部分。读者可以选择只关注其中的一个部分,而简单浏览其他部分。例如,数据库设计者/程序员可能对第三部分不太感兴趣。同样,GUI设计者或Java程序员可能对第四部分不太感兴趣。我们期望有一些读者能够首先关注本书的第一部分和第二部分,并且在经过一段时间的经验积累和从前面两部分所讲述的知识获益后,再全面地学习第三部分和第四部分。在更高级的面向工程课程中,也可以从本书的第二部分开始学习。
  在全书23章中,有6章是关于EM案例分析的(包括第8、13、14、18、19和23章)。这6章的教育价值在于理解和分析案例。这是真正的从实例中学习。相对而言,前5章(第一部分)主要解释软件工程的基础知识,而没有引入案例分析。其他的12章中既包含理论部分,也有和理论相关的案例分析、小案例和其他例子。
  本书的特色
  本书的主要特色正如副标题所示:案例分析方法(A Case Study Approach)。如果你相信最好的教育方式是通过例子来教学(这也正是许多教育家的观点),那么本书正是为你而写的。如果你想接受挑战并希望从失败中学习,那么本书将给你大量的机会来实验你自己的解决方案,并且将它们和作者的解决方案相比较。如果你希望能根据自己的需要和知识水平来制定自己的学习方式,那么本书的每一次迭代都有它自身的重点,有不同的建模难度,并且可能需要不同的开发技术和模型。
  本书最重要的一个目标就是通过将注意力放在软件设计和实现上(但是不忽略分析),并且通过讨论非常有研究价值的实践问题来将理论和实际联系在一起。按照“用实例来解释”的目标,本书具有以下几方面的特色:
  1. 侧重教学。本书的写作是以适合教学为首要考虑因素的。案例分析、例子和解答题不是简单地来自于真实世界的解决方案,而是将它们进行一定调整以适应教学的需要。真实世界的解决方案只是复杂的业务和软件实现环境中的一部分。这种环境会使读者感到不知所措和枯燥无味,因此我们将它尽可能地简化。关于GUI设计、数据库设计和编程实例的表述去除了不必要的依赖性、“信息噪声”和重复任务。
  2. 有评注的解决方案。在信息系统中,没有像黑或白、真或假、零或一这样明确的解决方案。通常一个解决方案只服务于一个特定目标,当从一个不同的角度来分析它时,这个解决方案也许就是错误的。因此答案和解决方案都要有详细的评注。
  3. 可供选择的解决方案。有时,一个解决方案,不管如何进行评注,都不见得一定优于其他解决方案。因此,经常需要提供可供选择的解决方案。
  4. 小结。每一章最后都有一个小结。这个小结可以用于复习每一章中所介绍的基本术语,也可以用于测试学生对该章知识要点的掌握情况。
  5. 复习题。为了巩固读者所学的知识,在每一章最后都提供一定深度的问题。有时,这些问题分成讨论题和案例分析题。所有复习题的答案都可以在本书的网站上找到。
  6. 解答题。解答题使得读者在试验某个解决方案之前先研究这个问题本身,并且对案例分析、小案例和其他实例的扩展或者可替换的解决方案进行试验。所有复习题的简单解决方案都可以在本书的网站上找到。
  7. 网站。本书的网站提供完整的补充材料,包括模型和编程代码(通常都是UML、Java和数据库(Oracle)代码)。所有的程序代码,包括本书正文中没有提供的代码,都可以在本书的网站上找到。
  8. 强调原则。好的软件工程和系统开发应该遵循一些良好定义的原则(模式、框架、标准、库等)。本书定义并解释这些原则,并且提供到信息来源的链接。
  9. 专业深度和适合教学之间的平衡。一般来说,写软件和写教科书是相互矛盾的。幸运的是,本书将这两者很好地结合在一起。
  10. 可以替代专业教育和培训课程。忙碌的专业人员倾向于按照惯例解决问题,因此他们很快会在学科的技术水平和实践水平上处于落后位置。让他们花时间和金钱参加昂贵并且与本书的案例分析相类似的专业教育和培训课程可能会很困难。也许本书可以为专业人员提供一次机会,帮助他们在正常工作期间掌握最新的开发技术。
  面向的读者
  本书面向广大学生和IT专业人士,特别适用于软件工程课程的学生和软件开发人员(或者项目经理/管理人员)。已经具有基本的信息系统知识和编程技术(希望是关于面向对象语言和数据库技术)的学生和专业人员能够很容易理解本书。对于大多数读者而言,本书符合大学计算机科学或者信息学专业一年级的课程要求(信息系统,信息技术)。
  对于学生而言,本书主要用于学习基于软件开发组件的软件工程课程。本书还可以作为高年级教学或者更成熟学生的信息系统开发、软件项目或者系统分析和设计课程的教科书。另外,本书还可以作为面向对象技术、面向对象编程、基于Web的系统、数据库设计和编程等课程的推荐读物。
  系统设计人员、程序员、软件架构人员、业务和系统分析人员、项目经理和管理者、网络开发人员、评测人员、测试人员、质量安全管理人员和行业培训人员等从业者将从本书中受益匪浅。本书可用于专业教育、培训课程和工作,也可以作为一个项目团队的信息来源。对于已经在软件项目中使用UML、Java和关系数据库的从业人员而言,本书能够帮助他们验证自己的软件开发实践,也会提供今后软件开发想法和方向的源泉。
  补充材料
  本书的网站提供了完整的补充材料,内容大多数是向所有读者免费提供的。但是,为了方便使用本书进行教学的教师,网站中的一部分资料是有密码保护的。本书网站主页的地址是:
  http://www.comp.mq.edu.au/books/pse
  http://www.booksites.net/maciaszek
  本书的网络数据包包括两部分资源:为所有读者提供的资源和为使用本书进行教学的教师提供的资源。教师资源是有密码保护的。
  网站上的教师资源包括(但并不仅限于教师):
  1. 教师手册:
  a) 每一章最后的复习题和解答题的问题和答案
  b) 额外的项目和解决方案—本书正文中没有涉及,可用于辅助教师为学生安排作业和项目
  2. 课件—有PowerPoint和Acrobat PDF两种格式
  3. 解决方案的UML模型和Java/数据库源代码
  a) 练习和小案例
  b) 本书网站中提供的项目
  c) 本书案例分析中可供选择的设计/编程方法
  为所有读者提供的资源包括(但并不仅限于购买本书的读者):
  1. 课件—只有Acrobat PDF格式。
  2. 勘误表和附录文档。
  3. 本书案例分析和例子的UML模型与Java/数据库源代码,并且还包括如何编译和运行代码的详细说明。
  非常希望能够得到读者的评论、指正、改进意见、投稿等。请直接与我们联系:
  Leszek A. Maciaszek
  Department of Computing
  Macquarie University
  Sydney
  NSW 2109,Australia
  电子邮件: leszek@ics.mq.edu.au
  网址: http://www.comp.mq.edu.au/~leszek

致  谢
作者的致谢
  本书的写作花费了大量时间,但这些时间与积累必要知识和技术的时间相比却又是微不足道的。感谢我们在ACNielsen、Sydney、Australia的朋友和同事们,他们提供了将本书这些知识传递给读者的最初试验平台。特别感谢Stephen Bills(他是本书的署名贡献者)和他的开发团队,包括Paul Antoun、Bruno Beira、Sue Dayes、Steven Grotte、Jeff Hong、Yijun Li、Kevin Mathie、Denise McCrae、Chantal O誄onnell、James Rees、Jovan Spoa、Eric Zurcher。
  写书是一项艰巨的任务。正如本书第4章和其他部分所述,一个成功的项目需要分配充足的工作和材料资源。工作资源包括人员和软硬件设备。材料资源是指消耗品和供应品。作者将自己完全投入到这项工作中,但如果没有这些辅助工作和物质资源,那么本项目也必将在郁闷中失败。这些资源是由澳大利亚Macquarie大学和波兰 Economics大学提供的。感谢这两所大学的朋友、同事和学生们为我们提供的支持、帮助和各种资源。
  谈到资源,如果不是广泛使用各种软件工具和环境,我们也不可能写出本书来。写本书所需的软件来源于购买、下载试用版本和使用开放源代码软件等各种途径。我们并不知道这些软件的开发者们的姓名,所以在这里不能提名感谢他们。但我们要感谢那些应我们的请求免费提供教学软件的开发者。特别感谢Oracle公司(Oracle和JDeveloper)、Rational软件公司(现在的IBM(Rational Suite))、Sybase(Power Designer)和yWorks(yDoc)。
  最重要的是,我们要感谢Pearson Education的Keith Mansfield,他是本书和Maciaszek的《Requirements Analysis and Systems Design》的编辑,感谢他为这两本书做的版式装帧设计,以及从交稿到出版和发行期间的辛勤工作。本书的出版是一项真正的团队工作。我们还要感谢:Anita Atkinson(高级主编),Helen MacFadyen(校对编辑),Ruth Freestone King(文字编辑)和Owen Knight(助理编辑)。感谢他们对本书的修正、改进、建议和大力协助。
  出版者的致谢
  我们非常感谢多家公司和机构对本书引用插图、修改插图以及引用其他资源的许可,在此不一一列举。

随 书 光 盘
  本书附带的光盘包括以下内容:
  1. 与本书内容相关以及在本书中直接或间接涉及的软件工具。
  2. 案例分析的完整代码:
  * 源代码
  * 编译后的代码
  * 文档
  * 安装和执行程序的readme.txt文档
  3. 书中的大部分插图
  光盘中所包含的软件工具和环境有IDE、UML建模、重构、度量、分析、测试、日志、文档以及其他工具。在光盘中,对每个工具都进行了简要的介绍,并为读者提供了一组Web链接,读者可以在软件制造商的网站或Internet上获取更多可用资源。
  随书附带这些软件工具的目的是希望读者能够开发并运行本书中所涉及的案例、小案例以及其他实例。此外,这些工具还可以用于本书的练习和项目以及其他与软件工程相关的教学需求。本书的网站会经常更新练习,通过这些练习可以充分使用该CD中所包含的工具。
  一些读者可能有兴趣购买这些工具的完整许可证,可以交纳一定费用获取一个学生许可证。
  案例分析代码按如下方式分类。
  1. 在每次迭代过程中都包含EMS(电子邮件管理系统)案例分析,包括第1次迭代、重构的第1次迭代、第2次迭代、第2次迭代的Applet版本、第2次迭代的Servlet版本和第3次迭代。
  2. 本书中的MovieActor案例分析,包括数据库版本的MovieActor和Servlet版本的MovieActor。
  光盘包含本书中出现的所有插图,只有一小部分属于第三方版权的图像除外。
使用指导
  将光盘插入光盘驱动器后,在微软的任何PC操作系统上该光盘都会自动运行。如果光盘没有自动运行,请参阅readme.txt来确定如何安装该光盘。

封底文字

本书讨论了如何将软件工程理论与行业实践联系起来,即集中精力进行系统设计和实现以及着手解决重要的实践问题。书中以一个主要的案例分析为中心展开叙述,提供了针对大型系统开发的软件工程技术,全面论述了开发生命周期、建模语言、工程工具、项目规划以及过程管理。通过主要案例研究的三次迭代,说明了迭代和增量式开发的概念。本书不仅为学生提供系统学习软件工程的方法,而且为IT专业人士提供软件工程的最佳实践。 主要特色 ●着重介绍面向对象的建模和程序设计。 ●针对需求分析和详细设计,详细讲解UML和模式的应用。 ●突出数据库和数据工程在软件工程中的重要性。 ●介绍组件和业务对象的方法。 ●覆盖多层解决方案 (包括GUI和Web客户端),通过Web和应用服务器扩展到数据库。 ●强调应用体系结构设计和重构。 ●本书配套网站包含更多信息:www.booksites.net/maciaszak。

作者简介

Leszek A.Maciaszek Bruc Lee Liong:Leszek A.Maciaszek:  Leszek A. Maciaszek 澳大利亚悉尼麦考里大学副教授。他是企业级应用的设计与实现、数据库和对象技术方面的专业顾问。除本书外,他还著有《Database Design and Implementation》和《Requirements Analysis and Systems Design》等书。
Bruc Lee Liong:  Bruc Lee Liong 任教于澳大利亚悉尼麦考里大学。他在过去8年间开发了多个面向对象的应用程序,擅长企业级集成、应用客户端与Web的连接以及将应用服务向下延伸到数据库。

译者简介

胡长军  张晓明 等:胡长军: 教授,1963年生于河北沧州。2001年在北京大学获得理学博士学位,2002~2004年在清华大学从事博士后研究工作。现任北京科技大学信息工程学院博士生导师、学术委员会委员、副院长。 主要研究方向为软件工程与数据工程,高性能计算与网格计算。近年来先后主持国家自然科学基金、国家攻关、国家863、国际合作以及省部级课题十五项。在软件工程领域,结合领域应用特点,系统地研究领域软件集成技术,提出了通过领域公共数据模型和公共事物对象设计、互操作规范化实现领域软件协同工作和数据共享的技术路线。在网络计算平台上,设计实现了一个领域软件协同计算软件平台,通过该平台可以实现领域软件的数据共享、构件重用、虚拟应用开发、协同工作等功能。这些成果已在业内广泛应用。在并行计算领域,建立了多范例、多粒度并行计算模型及其一套并行编译与优化技术。提出并实验求证了合理确定并行范例和并行粒度是提高网络计算系统效率的关键因素的学术观点。基于这一观点,参照典型规范HPF和OpenMP,定义了一套面向网络计算平台的多范例、多粒度并行语言接口规范,从而为程序员根据应用问题特点划分计算资源和任务提供了手段。结合科学研究,在国内外重要学术期刊上发表了30余篇论文,其中多数被三大检索系统收录,并被广泛引用。获国家发明专利两项。获省部级科研成果奖励三项。

译者序

随着软件系统的规模越来越大,开发大型企业级应用软件的复杂程度变得越来越高。软件工程的提出正是为了更好地解决这些问题。软件工程学科与其他学科一样,正在不断发展和完善的过程中,近些年新兴的面向对象技术、统一建模语言(UML)、软件体系结构(software architecture)、软件组件技术(software component)、设计模式技术(design pattern)、重构技术(refactoring)、迭代和增量式(iterative and incremental)的开发过程、敏捷软件开发(agile software development)、多层式体系结构对软件工程学科产生着巨大的影响,同时也为该学科的教学带来一定的困难。如何既能从现代软件工程理论知识出发,又能联系实际从实践的角度启发学生的思路是一个巨大的挑战。本书给出了很好的解决方案。
  本书作者Leszek A. Maciaszek是澳大利亚悉尼麦考里(Macquarie)大学副教授。他曾在多个国家担任过研究、教学和咨询工作,他的主要研究领域包括软件工程、面向对象技术、数据库、大型企业级应用系统的设计等,他是这些研究领域的学术专家和行业顾问。他具有丰富的教学和培训经验,所著的《Database Design and Implementation》(Prentice Hall,1990)和《Requirements Analysis and Systems Design,2nd edition》(Addison Wesley,2005)等书都深受读者欢迎。
  本书的特色在于其独特的目标、定位和组织方式。一方面,本书是从实践的角度来展现软件工程的方方面面;另一方面,它所针对的是面向企业级应用的软件工程。本书组织巧妙,作者利用一个主要的案例分析贯穿全书,在第一部分讨论软件生命周期、建模语言、工程工具、项目计划和过程管理等基础知识,在后三个部分里与案例分析的三次迭代相对应,在每一章结尾都有针对性很强的复习题、解答题和案例分析题。实践内容由浅入深、逐层展开,很自然地穿插介绍面向对象的建模、软件体系结构设计、设计模式、组件、数据工程、界面设计、重构、J2EE等知识,以实例的方式有机地结合现代软件工程新技术及其实现手段。本书不是枯燥的理论说教和刻板的条目堆积,而是生动的实践经验总结。本书既可用于相关专业研究生、高年级本科生的专业教学,也可以用于培训课堂。
  在翻译过程中,我们力求忠实原文,但是由于译者的知识水平有限,加之时间仓促,不当之处在所难免,恳请读者批评指正。本书第1~16章由胡长军负责翻译,其余部分由张晓明负责翻译,全书由胡长军统稿。赵冲冲、王庆梅、李建江、时鹏、常晓东、李静、李永红、张纪林等为本书翻译做了大量工作。

译  者
北京科技大学计算机科学系
2006年3月

图书目录

第一部分 软件项目
第1章  软件开发生命周期 3
1.1  软件工程的精髓 4
1.1.1  软件系统比企业信息系统的范围小 4
1.1.2  软件过程是业务过程的一部分 5
1.1.3  软件工程不同于传统工程 6
1.1.4  软件工程不只是程序设计 7
1.1.5  软件工程需要建模 8
1.1.6  软件系统是复杂的 9
1.2  生命周期阶段 11
1.2.1  需求分析 11
1.2.2  系统设计 12
1.2.3  实现 13
1.2.4  集成和部署 13
1.2.5  运行和维护 15
1.3  生命周期模型 15
1.3.1  带反馈的瀑布式生命周期 16
1.3.2  迭代增量式的生命周期 17
小结 23
复习题 25
第2章  软件建模语言 26
2.1  结构化建模语言 27
2.1.1  数据流建模 27
2.1.2  实体-联系建模 29
2.2  面向对象建模语言 30
2.2.1  类图 31
2.2.2  用例图 34
2.2.3  交互图 35
2.2.4  状态图 38
2.2.5  活动图 40
2.2.6  实现图 41
小结 43
复习题 44
解答题 44
第3章  软件工程工具 46
3.1  项目管理工具 47
3.1.1  项目调度和控制 47
3.1.2  用战略眼光来安排项目和性能管理 48
3.1.3  项目管理与基于Web的协作及内容管理的统一 48
3.1.4  项目管理与基于Web的组合管理的统一 50
3.1.5  项目管理中的度量 51
3.1.6  项目管理中的风险管理 52
3.2  系统建模工具 54
3.2.1  需求管理 54
3.2.2  可视化UML建模 57
3.2.3  报表生成 59
3.2.4  数据库建模 59
3.3  集成开发环境 60
3.3.1  常规的编程任务 61
3.3.2  与软件建模集成 66
3.3.3  企业应用开发 67
3.3.4  与业务组件集成 68
3.3.5  与变更和配置管理集成 69
3.4  变更和配置管理工具 71
3.4.1  变更管理支持 71
3.4.2  版本管理支持 72
3.4.3  系统构建支持 74
3.4.4  再工程支持 75
小结 77
复习题 78
解答题 78
第4章  软件项目计划和跟踪 80
4.1  项目计划制定 80
4.2  项目进度安排 83
4.2.1  任务、里程碑和可交付成果 83
4.2.2  用条形图表示任务调度 84
4.2.3  资源和资源日历 86
4.2.4  用条形图表示人工量驱动的进度安排 87
4.2.5  资源分配不足和过度分配 88
4.3  项目预算估算 90
4.3.1  进度驱动的预算估算 91
4.3.2  算法预算估算 94
4.4  跟踪项目进展 98
4.4.1  跟踪进度 99
4.4.2  跟踪预算 101
小结 106
复习题 107
解答题 107
第5章  软件过程管理 110
5.1  人员管理 111
5.1.1  选拔和激励人员 111
5.1.2  项目沟通 113
5.1.3  团队建设 116
5.2  风险管理 116
5.2.1  风险识别 117
5.2.2  风险评估 118
5.2.3  风险处理 120
5.3  质量管理 121
5.3.1  软件质量 121
5.3.2  质量控制 123
5.3.3  质量保证 126
5.4  变更和配置管理 129
5.4.1  需求变更 130
5.4.2  工件的版本 131
5.4.3  缺陷和扩展 132
5.4.4  度量 134
小结 136
复习题 137
第二部分 从需求分析经由体系结构设计到软件发布
第6章  业务对象模型 141
6.1  广告费用评估—业务 141
6.2  业务环境图 142
6.3  业务用例模型 143
6.3.1  业务用例和业务执行者 143
6.3.2  AEM业务用例模型 143
6.3.3  AEM可替换业务用例模型 144
6.4  业务术语表 145
6.5  业务类模型 146
6.5.1  业务实体 147
6.5.2  AEM业务类模型 147
6.5.3  AEM业务类模型的替换模型 148
小结 149
复习题 149
讨论题 149
案例题 149
解答题 150
案例分析 150
小案例—广告费用评估 150
练习 151
第7章  领域对象模型 152
7.1  联系人管理—领域 152
7.2  领域用例模型 153
7.2.1  用例和执行者 153
7.2.2  用例联系 153
7.2.3  联系人管理的用例模型 154
7.2.4  联系人管理的可替换用例模型 156
7.3  领域术语表 157
7.4  领域类模型 158
7.4.1  类和属性 159
7.4.2  类之间的联系 159
7.4.3  联系人管理的类模型 160
7.4.4  联系人管理的可替换类模型 161
小结 162
复习题 163
讨论题 163
案例题 163
解答题 163
案例分析 163
小案例—时间日志 164
练习 165
第8章  第1次迭代需求和对象模型 166
8.1  用例模型 167
8.2  用例文档 167
8.2.1  概要描述、前置条件和后置条件 168
8.2.2  基本流程 168
8.2.3  子流程 169
8.2.4  异常流程 171
8.3  概念类 171
8.4  补充规格说明 172
小结 174
复习题 174
讨论题 174
案例题 174
解答题 175
案例分析 175
小案例—时间日志 175
第9章  体系结构设计 176
9.1  体系结构层和依赖性管理 176
9.1.1  体系结构模块 177
9.1.2  包依赖性 178
9.1.3  层依赖性 179
9.1.4  类依赖性 180
9.1.5  继承依赖性 181
9.1.6  方法依赖性 184
9.1.7  接口 187
9.1.8  事件处理 190
9.1.9  相识 194
9.2  体系结构框架 197
9.2.1  模型-视图-控制器 197
9.2.2  表示-控制-中介者-实体-基础 199
9.3  体系结构模式 203
9.3.1  外观 203
9.3.2  抽象工厂 204
9.3.3  责任链 205
9.3.4  观察者模式 205
9.3.5  中介者 207
小结 208
复习题 209
解答题 209
案例分析 209
小案例—联系人信息管理 210
练习 213
第10章  数据库设计和编程 214
10.1  从软件工程角度介绍关系数据库 214
10.1.1  表 215
10.1.2  引用完整性 216
10.1.3  概念和逻辑数据库模型 218
10.1.4  实现业务规则 219
10.1.5  数据库应用逻辑程序设计 220
10.1.6  索引 222
10.2  将临时对象映射成持久记录 225
10.2.1  对象数据库、SQL:1999和阻抗不匹配 225
10.2.2  对象-关系映射 226
10.3  用于电子邮件管理的数据库设计和创建 230
10.3.1  数据库模型 231
10.3.2  创建数据库模式 232
10.3.3  示例数据库内容 233
小结 234
复习题 234
讨论题 234
案例分析题 235
解答题 235
案例分析 235
小案例—联系人信息管理 235
第11章  类设计和交互设计 236
11.1  从用例需求中寻找类 237
11.1.1  从电子邮件管理系统的用例需求中寻找类 237
11.1.2  电子邮件管理系统的初始类设计 240
11.2  类设计的体系结构细化 241
11.2.1  电子邮件管理系统类设计的体系结构细化 244
11.2.2  体系结构细化后电子邮件管理系统的类设计 245
11.2.3  类的实例化 246
11.3  交互 246
11.3.1  序列图 247
11.3.2  通信图 249
11.3.3  交互概述图 249
11.4  电子邮件管理系统中的交互 251
11.4.1  “登录”交互 251
11.4.2  “退出”交互 252
11.4.3  “查看待发邮件”交互 253
11.4.4  “显示邮件文本”交互 254
11.4.5  “发送邮件”交互 254
11.4.6  “错误的用户名和密码”交互 255
11.4.7  “错误的选项”交互 256
11.4.8  “邮件过多”交互 257
11.4.9  “不能发送邮件”交互 257
小结 257
复习题 258
讨论题 258
案例分析题 259
解答题 259
案例分析练习 259
小案例—时间日志系统 259
小案例—联系人信息管理系统 260
第12章  编程和测试 261
12.1  基于软件工程的Java快速指南 261
12.1.1  类 261
12.1.2  类的关联与集合 264
12.1.3  Java中的数据库访问 270
12.2  测试驱动开发 276
12.2.1  JUnit框架 277
12.2.2  邮件管理系统测试驱动开发 279
12.3  验收测试和回归测试 283
12.3.1  电子邮件管理系统的测试脚本 285
12.3.2  测试输入、输出和电子邮件管理系统的回归测试 286
12.3.3  电子邮件管理系统中测试脚本的实现 288
12.4  第1次迭代运行时的截图 291
小结 294
复习题 295
解答题 296
指南和案例分析练习 296
小案例—时间日志系统 297
小案例—联系人信息管理系统 297
第13章  第1次迭代代码评注 298
13.1  代码概览 298
13.2  acquaintance包 300
13.2.1  IAConstants接口 300
13.2.2  IAEmployee接口 300
13.2.3  IAContact接口 301
13.2.4  IAOutMessage接口 302
13.3  presentation包 303
13.3.1  PMain类 303
13.3.2  PConsole类 304
13.4  control包 310
13.5  entity包 315
13.5.1  IEDataSupplier接口 315
13.5.2  EEmployee类 317
13.5.3  EContact类 318
13.5.4  EOutMessage类 320
13.6  mediator包 322
13.7  foundation包 329
13.7.1  FConnection类 329
13.7.2  FReader类 331
13.7.3  FWriter类 331
小结 332
第1次迭代问题和练习 332
第三部分 软件重构与用户界面设计
第14章  第2次迭代需求与对象模型 334
14.1  用例模型 334
14.2  用例文档 335
14.2.1  概要描述、前置条件和后置条件 335
14.2.2  基本流程 336
14.2.3  子流程 337
14.2.4  异常流程 340
14.3  概念类和关系表 341
14.4  补充规格说明 342
小结 343
复习题 343
第15章  体系结构重构 344
15.1  重构的目标代码 344
15.2  重构方法 345
15.2.1  提取类 345
15.2.2  方法归类 346
15.2.3  提取接口 347
15.3  重构模式 349
15.3.1  标识映射模式 349
15.3.2  数据映射器 350
15.3.3  可替换的数据映射器策略 353
15.3.4  延迟加载 355
15.3.5  工作单元 362
15.4  重构后的类模型 363
小结 365
复习题 365
讨论题 365
案例分析题 366
解答题 366
第16章  用户界面设计与编程 367
16.1  用户界面设计准则 367
16.1.1  用户控制 368
16.1.2  界面一致性 369
16.1.3  界面容错性 369
16.1.4  界面可适应性 370
16.2  用户界面组件 370
16.2.1  容器 371
16.2.2  菜单 375
16.2.3  控件 376
16.3  用户界面事件处理 378
16.4  模式与用户界面 381
16.4.1  观察者模式 381
16.4.2  装饰模式 383
16.4.3  责任链模式 383
16.4.4  命令模式 384
16.5  邮件管理的用户界面 385
小结 388
复习题 389
解答题 390
第17章  基于Web的用户界面的设计与编程 391
17.1  Web客户端层可用的技术 392
17.1.1  基本HTML 392
17.1.2  脚本语言 394
17.1.3  applet:轻量级和重量级 395
17.2  Web服务器层可用的技术 399
17.2.1  servlet 399
17.2.2  JSP 401
17.3  无状态因特网系统上的事务 404
17.4  模式与Web 406
17.4.1  观察者模式 407
17.4.2  组合模式 407
17.4.3  工厂方法模式 408
17.4.4  策略模式 408
17.4.5  装饰模式 409
17.4.6  模型-视图-控制器模式 409
17.4.7  前端控制器 410
17.4.8  JSP标签复用 410
17.4.9  控制解耦:Struts 414
17.5  电子邮件管理系统的servlet实现 415
小结 420
复习题 421
解答题 421
第18章  第2次迭代代码评注 422
18.1  代码概览 422
18.2  acquaintance包 423
18.3  presentation包 424
18.3.1  PWindow类 425
18.3.2  PMessageDetailWindow类 430
18.3.3  PMessageTableModel类 432
18.3.4  PDisplayList类 435
18.3.5  PDisplayList.Filter类 437
18.4  control包 438
18.4.1  CAdmin类 438
18.4.2  CMsgSeeker类 439
18.5  entity包 440
18.6  mediator包 443
18.6.1  MModerator类 443
18.6.2  MDataMapper类 444
18.7  表示层:applet版本 449
18.8  表示层:Servlet版本 451
18.8.1  PEMS类 451
18.8.2  PEMSEdit类 457
小结 458
第2次迭代的问题与练习 459
第四部分 数据工程与业务组件
第19章  第3次迭代需求与对象模型 465
19.1  用例模型 465
19.2  用例文档 466
19.2.1  概要描述、前置条件和后置条件 466
19.2.2  基本流程 467
19.2.3  子流程 468
19.2.4  异常流程 474
19.3  概念类和关系表 475
19.4  补充规格说明 477
19.5  数据库规格说明 478
小结 479
复习题 480
第20章  安全性与完整性 481
20.1  安全性设计 481
20.1.1  自主授权 482
20.1.2  强制授权 489
20.1.3  企业级授权 490
20.2  设计完整性 492
20.2.1  空值与默认值约束 493
20.2.2  域与check约束 493
20.2.3  唯一键与主键 494
20.2.4  外键 495
20.2.5  触发器 496
20.3  电子邮件管理系统的安全性与完整性 500
20.3.1  电子邮件管理系统的安全性 500
20.3.2  电子邮件管理系统的完整性 507
小结 509
复习题 509
解答题 510
第21章  事务与并发 511
21.1  系统事务的并发性 512
21.1.1  ACID特性 512
21.1.2  隔离级别 513
21.1.3  锁模式和级别 514
21.1.4  事务模型 515
21.1.5  并发控制模式 517
21.2  业务事务中的并发性 519
21.2.1  业务事务执行语境 519
21.2.2  业务事务和组件技术 520
21.2.3  跨层的事务服务 520
21.2.4  离线并发模式 524
21.3  电子邮件管理系统中的事务和并发 527
21.3.1  单层事务模型 527
21.3.2  工作单元和事务支持 528
小结 529
复习题 530
解答题 531
第22章  业务组件 532
22.1  企业级JavaBean 532
22.1.1  EJB基础 534
22.1.2  实体Bean 536
22.1.3  会话Bean 540
22.2  Java业务组件 541
22.2.1  创建实体组件 541
22.2.2  创建视图组件 544
22.2.3  创建一个应用模块 545
小结 546
复习题 547
第23章  第3次迭代代码评注 548
23.1  代码概览 548
23.2  acquaintance包 548
23.3  presentation包 550
23.3.1  PWindow类 550
23.3.2  PTableWindow类 561
23.4  control包 564
23.5  entity包 565
23.6  mediator包 568
23.6.1  MModerator类 568
23.6.2  MDataMapper类 572
23.6.3  MUnitOfWork类 577
23.7  foundation包 582
23.7.1  FConnection中的事务 582
23.7.2  执行FWriter中的语句 583
23.7.3  在FReader中查询数据库 584
23.8  数据库代码 585
23.8.1  Ref Cursor结果集 585
23.8.2  检索邮件 585
23.8.3  检索部门的邮件 586
23.8.4  删除一个邮件 587
23.8.5  创建一个邮件 588
23.8.6  报表生成 589
23.8.7  OutMessage表上的触发器 591
小结 592
第3次迭代的问题和练习 593
参考文献 594
索引 598

教学资源推荐
作者: (美)Stephen R. Schach 著 范德比尔特大学
作者: 窦万峰
作者: Stephen R.Schach
参考读物推荐
作者: [加]托马斯·埃尔(Thomas Erl) [德]安德烈·托斯特(Andre Tost) [印]萨塔德鲁·罗伊(Satadru Roy) [英]菲利普·托马斯(Philip Thomas)著
作者: [英]桑德罗·曼卡索(Sandro Mancuso) 著
作者: [美]伦·巴斯(Len Bass),[美]保罗·克莱门茨(Paul Clements),[美]瑞克·凯兹曼(Rick Kazman) 著