软件工程及软件方法学
-
UML和模式应用(美)Craig Larman著;方梁等译;方梁译本书英文版面世以来,便广受业界专家和读者的好评。全书叙述清晰、用词精炼,构思巧妙,将面向对象分析设计的概念、过程、方法、原则和个人的实践建议一一道来,博引多家观点,以实例为证,将软件的分析和设计的过程叙述得如逻辑推理一般,于细节处见真知。本书是一本经典的面向对象分析设计技术的入门书,适用范围非常广,从刚刚入门的初学者,到已经有一定对象技术知识但希望进一步提高开发水平的中级读者,甚至是资深的专业人员,都可以从本书获益匪浅。同时,本书也很适合作为高等院校计算机专业及软件学院相关课程的教材和各类培训班的辅导教材。"人们经常问我,引导他们进入00世界的最佳图书是哪一本。读过本书之后,它已经成为我的惟一选择。:MartinFowler能够透彻解释事物的人太少了,而真正理解软件分析和设计的人就更少,但是,Larman恰恰拥有这两方面的能力。:JohnVlissides本书是经典的OOA/D、迭代式开发和UML方面的入门书,已被翻译成多种语言并在业界和高等院校中广泛使用。它可以帮助开发者和学生掌握OOA/D的重要原则和最佳实践:不仅仅是绘制UML,而是在软件设计过程中应用它们。作者通过精炼的研究案例,逐步介绍了有关OOA/D的关键技能,同时强调了软件分析和设计过程中最重要的活动、原则和模式。内容包括:需求和用例:识别和记录需求领域对象建模:理解领域中的相关对象,它们的属性及其关系架构:创建灵活、健壮和可维护的分层架构基本的对象设计技术:掌握重要的技能,包括:为对象分配职责,用信息专家模式、中介模式和受保护变化模式等原则设计对象的协作设计模式:用广泛应用的模式(如策略模式、工厂模式、适配器模式、观察者模式、模板模式和命令模式等)创建健壮的对象和框架。迭代开发和敏捷"UP":应用简洁、基本的统一过程的活动和最佳实践组织建模和开发本书在第1版的基础上进行了彻底改写,新增了案例研究问题,并更新了有关模式、用例、统一过程、架构分析等方面的讨论。本书提供了如何应用对象宋进行思考和设计的透彻和实用的指南。 -
基于CPLD\FPGA的数字通信系统建模与设计段吉海等编本书主要介绍了基于CPLD/FPGA的数字通信系统的设计原理与建模方法。从通信系统的组成、EDA概述及建模的概念开始(第1~2章),围绕数字通信系统的VHDL设计与建模两条主线,讲述了常用基本电路的建模与VHDL编程设计(第3章),详细地介绍了数字通信基带信号的编译码、复接与分接、同步信号提取、数字通信基带和频带收发信系统、伪随机序列与误码检测等的原理、建模与VHDL编程设计方法(第4~9章)。全书主要是基于CPLD/FPGA芯片和利用VHDL语言实现对数字通信单元及系统的建模与设计。 全书内容新颖,循序渐进,概念清晰,针对性和应用性强,既可作为高等院校通信与信息专业的高年级本科生教材或研究生的参考书,也可供科研人员及工程技术人员参考。 -
Rational统一过程(美)Per Kroll,(美)Philippe Kruchten著;徐正生,陈逸,邓启威译;徐正生译每个软件开发团队都有意或无意地遵循某种过程。在一两个人或几个人组成的开发团队中,过程是很简单的。他们只产生很少的文档,分析和设计也不是很正规,项目的源代码在所有制品中占有很重要的地位。在几十人甚至上百人的开发团队中,团队成员通常分布在不同的大厦甚至是世界各地,因而过程也有更多规定。?且嘈锤嗟恼轿牡担蜕嬷诤献饕黄鹛致巯钅康姆治龊蜕杓疲⑼ü嵋椤⒄故尽⑽牡岛推渌破凡鞣治龊蜕杓啤O钅康拇胨淙灰埠苤匾皇窍低持诙嘀破分械囊桓鲎槌刹糠帧<虻サ墓毯透丛拥墓滩⒉皇嵌粤⒌模好恳桓鑫侍饬煊颉⒚恳恢挚⒎绞胶兔恳桓龅ザ赖南钅慷夹枰屎咸囟ㄐ枨蟮目⒐獭?也就是说,无论规模大小,所有成功的项目都有一些共同特征。相反,不成功的项目都不具备这些特征。通过观察一个成功的项目就会发现:团队成员合作得很好,每个开发人员都努力完成自己的活动和制品,同时与其他团队成员协调一致地工作。这种项目通常都很灵活、易于适应需求变更,并且它具有可预测性、可靠性,能够产生高质量的代码。总而言之,这些项目遵循的过程是开发工作方式的一部分,这个过程是不可见的,但是它的精神却通过团队成员生产的制品不断传递下去。Rational统一过程(或叫做RUP)的灵魂体现了这个不可见的过程。RUP不断地发展,它浓缩了不同领域数以千计的项目经验。PerKroll和PhilippeKruchten是最有资格以有效、务实的方法介绍RUP的人,他们在Rational软件公司创立并在世界范围内推广RUP的过程中起到了十分重要的作用。有些开发人员抵制使用RUP,他们认为RUP只不过用来减少代码。事实上,RUP并非他们想像的那样,它可以帮助开发团队成员更好地配合,把主要精力放到开发有价值的代码上。Per和Philippe首先介绍了RUP的灵魂,然后阐明如何在不同类型和规模的项目中应用RUP。在介绍了如何应用RUP后,本书讨论了更实际的问题,包括如何把RUP引入开发组和要避免哪些问题。本书首先让不同涉众接受RUP,然后分别从项目经理、系统分析员、系统架构师、开发人员和测试人员的角度介绍RUP。成功项目的开发过程看起来很简单,但实际上有很多深层次的思想蕴含在其中。在本书中,Per和Philippe以易懂、实用的方法阐述了这些思想。读完本书,相信你的项目也将会体现RUP的灵魂。GradyBoochRational软件公司首席科学家2003年2月虽然目前有数以千计的项目有效的使用Rational统一过程,但是一些开发团队仍然不敢轻易使用它。他们认为实施一个新的软件开发过程可能会很困难。本书的目的就是要告诉读者RUP实际上是很简单的。本书解释了RUP的基本软件开发原理,并指导读者在自己的开发组织中应用它。通过阅读本书,读者将会学到:·Rational统一过程的根本原理,数以百计的成功软件项目证明它是有效的;·在实践中如何通过遍历RUP项目的各个阶段应用这些原理;·在RUP项目中,项目经理、系统分析员、系统架构师、开发人员、测试人员和过程工程师担当的角色和职责;·如何以最小的风险不断采用并配置统一过程;·如何辨别失败项目的特征,如何避免失败。Rational统一过程(RationalUnifiedProcess,或RUP)①是由Rational软件公司研发并推广的一套软件工程过程框架。它凝结了众多领域成功的软件开发最佳实践经验的精华,很多计算机科学家曾为之共同努力。RUP在多年的实际应用过程中,被广泛应用在不同领域。它提供了一整套严格的方法来分配并管理软件开发组织中的任务和责任。通过应用RUP,软件开发团队可以生产出满足最终用户需求的高质量的软件产品,并且可以有效地控制项目的进度和预算。RUP指导软件开发者如何有效地应用现代软件最佳实践:迭代开发、以架构为中心进行开发的方法、在开发过程的每一个阶段化解风险及持续地验证软件质量等。虽然有数以千计的项目正有效地使用RUP,但是一些开发团队仍然不敢轻易使用它,他们认为实施一个新的软件开发过程?赡芑岷芾选J导噬希琑UP并不困难也不复杂。编写本书的目的就是要告诉读者RUP实际上是很简单的。本书解释了RUP的基本软件开发原理,并指导读者在自己的开发组织中应用它。本书还告诉读者如何在一个开发组织或项目中量身定制RUP过程配置。为什么写这本书在帮助软件企业应用RUP的十几年时间和开发RUP产品的六年时间中,我们有机会了解到RUP中哪些部分是很有效的,哪些不是。我们看到过很多成功应用RUP的例子,同时也看到了一些项目和开发团队在应用它时遇到的挑战。我们有幸与很多软件开发实践的先行者一同工作,并且通过日常的工作从他们身上学到了很多宝贵的经验。最近,我们看到了很多软件公司“过分地”应用了RUP。是的,事实确实是这样。我们觉得有必要写一本关于RUP的书,不仅要告诉读者应该去做什么,生产什么样的产品,并且要告诉读者如何正确地应用它,应该避免做什么。我们要给读者解释如何在实践中应用RUP,在一个特定项目中什么时候应用RUP的哪些部分。我们想帮助读者理解如何在不同规模和不同类型的项目中应用RUP。在这本书中,我们想和读者分享我和同事们在多年的实践中积累的宝贵经验。我们的目的是为项目经理、系统分析员、系统架构师、开发人员、测试人员、过程工程师和其他的团队成员以及涉众提供一个易懂的关于RUP的指导。我们通过提炼使用RUP的多年实际经验来达到这个目的,告诉每个角色要了解哪些最本质的内容,解释在RUP中如何扮演他们的角色。这本书不是RUP产品自身的替代品。这本书提供了几百页的实际开发指南,而RUP产品提供了长达几千页的指导,包括关于角色和活动的诸多方面的指导,同时还提供了可以加快开发进度的模板。并且它紧密地结合了开发工具、搜索引擎、图形导航和其他一些基于网络的特性。与本书不同的是,RUP是不断发展的,始终为应用项目提供最新的指导。最后,本书还指导读者结合特定的需求定制RUP的框架。从本书中可以学到什么通过阅读本书,读者将会学到:·RUP的基本原理,数以百计的成功软件项目证明它是有效的;·在实践中如何通过遍历RUP项目的各个阶段应用这些原理;·在RUP项目中,项目经理、系统分析员、系统架构师、开发人员、测试人员和过程工程师担当的角色和职责;·如何以最小的风险不断采用并配置RUP;·如何辨别失败项目的特征,如何避免失败。读者对象本书是为下列读者编写的:·正在使用或准备使用RUP的开发团队的所有成员,包括需要引入并大致了解RUP概念的管理人员和想要了解RUP的实际应用的管理人员·软件项目的实践者:要深入了解RUP并结合其特定角色应用RUP的项目经理、系统分析员、系统架构师、开发人员、测试人员和过程工程师·要了解如何将RUP应用在其组织中的管理人员和过程工程师本书的结构和内容本书分为四个部分:介绍、浏览、应用和基于角色的指导。第一部分介绍RUP。第1章解释了什么是RUP及开发和应用RUP的动机。第2章“RUP的灵魂”介绍了RUP的基本原理,它是通过总结很多成功的开发案例而得到的,并被精炼为几个简单的方针。理解这些原理有助于在项目中更好地应用RUP。第3章提供了一个比较不同过程的方法,并用这个方法对RUP和其他敏捷过程、传统的过程和像SEICMM和SPICE这样的过程评估框架进行比较。这些比较有助于理解针对不同的项目选用什么样的RUP配置。第4章提供了一个应用RUP的小项目的例子:一个人在一个星期内完成的项目。抛开大型项目的规范,可以更好地认识RUP的本质。第二部分通过讲述RUP的四个阶段更深入地描述了RUP。这四个阶段是:初始阶段、细化阶段、构造阶段和移交阶段。第5章介绍?绾斡τ玫椒ǎ赋稣馑母鼋锥沃谐<奈蠼狻5?6~9章分别对这四个阶段做了详细的介绍。我们把注意力集中到每个阶段的目的上,并且指导读者如何达到这些目的。这有助于在实际项目中集中精力完成最重要的活动。另外,从时间顺序——应用在实际项目中的顺序——的角度描述了RUP的活动,让读者理解在一个项目中,什么时候执行哪些活动。采用RUP需要开发组织有一些预备知识。第三部分提供了支持流水线型实现的一些重要领域的基础知识。第10章介绍RUP产品,解释如何对其进行扩展和配置以适用于特定的项目或开发团队。第11章简要介绍了有助于实现包含增量展示、试验性项目和培训课程的过程的一些策略。经验表明,项目经理完成从瀑布模型到迭代开发的转变是很困难的。第12章指导项目经理如何计划RUP项目。这么多年以来,我们见过很多使用RUP的成功案例和失败案例。第13章描述了一些失败的案例,并指导开发者避免重蹈覆辙。RUP产品提供广泛的软件开发活动的指导。第四部分,第14~18章对软件项目中的五种主要角色分别提供指导,这五种角色是:项目经理、系统分析员、系统架构师、开发人员和测试人员。分别站在每种角色的角度上解释RUP,描述他们的任务、需要具备的素质和主要活动,并推荐相应的读物和培训教材。本书没有一个独立的章节介绍过程工程师的工作:这个角色的描述包含在第10章和第11章中。如何阅读本书根据读者在软件组织中的角色和希望从本书学到的内容来分,我们推荐下面的阅读方法:·如果只是想对RUP有一个基本的认识,阅读第1、2、4章。·如果想对RUP有一个全面的了解,通读第1~9章。·如果想根据特定的角色详细了解RUP:——项目经理,阅读第1~14章。——系统分析员,阅读第1~9、13和15章(可选读第8、9章)。——系统?芄故Γ亩恋?1~9、13和16章。——开发人员,阅读第1~9、13、17章(可选读第6章)。——测试人员,阅读第1~9、13、18章。——过程工程师,阅读第1~11、13章。·对于执行官(executive)如果想对RUP有一个大概的认识,并了解采用RUP需要做哪些工作,阅读第1、2、4章和第11章。更多的信息本书的最新信息,包括更新、相关文章、论坛和作者演讲时间表可以在以下网址找到:brhttp://www.rupmadeeasy.com。RUP产品的附加信息,包括数据表和产品演示版本可以在Ratioanl软件公司的主页上找到:http://www.rational.com/products/rup。对于已经使用RUP产品的读者,在Rational开发者网络(RationalDeveloperNetwork,RDN)的RUP知识中心上可以找到更多资源:http://www.rational.net。研究机构可以联系Rational软件公司索取关于RUP的软件工程课程的信息:http://www.rational.com/corpinfo/college_relations/seed/index.jsp致谢Ratioanl统一过程集中了数以千计的天才软件开发实践者经验的精华。我们能有机会和他们在一起工作来开发RUP产品并编写这本书,感到非常荣幸。本书离不开RUP产品及其当前产品开发小组,他们是:MikeBarnard、AmandaBrijpaul、SusanBuie、MargaretChan、FionnaChong、ErinCurtis、PhilipDenno、CarlosGoti、DebraGray、BjörnGustafsson、SigurdHopen、KelliHouston、LarsJenzer、JohnLambert、BruceMacIssac、BrysantMacy、GlenysMacIsaac、JohnRingoen、DanShiffman、PaulSzymkowiak和ChinhVo。Rational小组和技术专家在很多年的研发及使用RUP的过程中积累了宝贵的经验。他们指出了RUP中哪些部分有效,哪些部分无效。我们很感谢这些专家提出的精辟见解,在这里特别感谢:GoranBegic、ThomasBichler、KurtBittner、AnthonyCrain、SamCourtenay、JérômeDesquilbet、MariaEricsson、CarlosGoti、JimHeumann、JoeMarasco、Pan-WeiNg、AndyPhillipson、GaryPollice、LesleeProbasco、WalkerRoyce、JohnSmith和IanSpence。还要感谢GradyBooch,他审阅了本书并为本书作序。当一个法国人和一个瑞典人在一起写书时,书稿的语言必然有许多需要改进之处。Rational软件公司的编辑CatherineSouthwood、MikePerrow和MarleneEllin以极大的热情和专业精神帮助我们解决了这个问题,还要感谢我们的编辑KellySweeney和JosephFatton。我们还要特别感谢我们的妻子SusanKroll和SylvieKruchten,她们耐心地陪伴我们度过很多个用于编写此书的周末和夜晚。最后,要感谢出版社的朋友:MaryO’Brien,Addison-Wesley产品与市场部的人员,其中包括TyrrellAlbaugh和ChristopherGuzikowski,他们帮助本书顺利出版。 -
小型团队软件开发(美)Gary Pollice等著;宋锐,张静,张煜译;宋锐译本书不是一本关于RUP、敏捷开发过程或者项目管理的教材,而是一份来源于实际工作的“战地”报告。它记录了一个小型的分布式团队,经历许多变化最终成功地完成任务,向用户交付一个有价值的、可用的软件产品的过程。在本书中,这些“战士们”以直述的方式讲述了他们的故事,没有试图去“执导”有关的内容。我经常听到:“我们不需要采用一个开发过程,因为我们的项目又小又简单。”可能你也有类似的感觉。但是,实际上你总会采用某种开发过程,而且这一过程很可能是临时发明出来的。在我们的行业中有一种普遍存在的印象,就是一个预先描述好的开发过程只适合于大公司、用于大型项目、管理几百个开发人员;而对于小型项目来说,这种开发过程只会使开发人员过得更加痛苦。在本书中,你将会看到一个很小的团队在解决一个中等的项目时,如何按照他们的需要采用和剪裁RUP这样一个描述化的开发过程。他们并没有因为采用这一开发过程而增加过多的正规性。他们只选择了那些对自己有用的要素,甚至采用了类似PSP(PersonalSoftwareProcess,个体软件开发过程)、极限编程(eXtremeProgramming)以及其他一些敏捷开发方法。我也经常听到:“让我看看你到底是如何做的。”成功项目的例子和某些不成功项目的反例常常是导致开始采用一个新开发过程的关键。仅仅埋头于书本中或者网站上,苦读一页页有关某种理想处理方法的描述,对于我们大多数人来说都太抽象了。包装好的、与理论严格匹配的完美示例没有太多的说服力。本书最大的价值在于,它带领读者接触到一个实际项目中的真实经历,包括了其中的失败、错误的开始以及各种限制;而作者以批判的眼光来分析他们所采取的做法,以及这些做法为什么会成功或者失败。我们从自己的经验以及与别人经验的对比中进行学习。“噢,是的,我知道这种模式;我也曾经处于这种境地。啊,你是这样解决的。”本书讨论了在传统的开发过程(包括RUP)中都没有涉及到的问题。作者大胆地探索了关于开发人员、关于形成一个团队的力量、关于分布式环境中的通信联系、关于使用基于Internet的协作工具等方面的内容,而所有这些要素都是当前许多小型开源软件项目的组成部分。最后,本书强调了一个常常在计划中标明了,而在赶着完成任务的过程中通常被遗忘的关键性的实践步骤:自省(self-reflection),有时也被称为事后分析(post-mortem)或者回顾(retrospective)。这一步骤就是暂时停下,回头看看我们做过的、我们是如何做的,看看哪些做法有效,哪些做法无效,以及导致这种结果的原因。而这整本书就是一个非常完整的事后分析的极好例子,坦白而谦虚。本书不能代替你没有做的那些事后分析和回顾,但是可以让你意识到可能错过了哪些东西。那么,哪些人需要使用这本书以及何时需要这本书?可能性有很多:如果你刚接触现代的开发过程,如RUP、敏捷开发方法、PSP等等,那么本书可以让你了解它们的精髓,而不用深入到细节中去。如果你不确定该如何处理小型的分布式项目,你将可以学到极有价值的内容,这些内容的作者也曾经问过自己那些你可能会提出的问题。他们对这些问题曾经做出过选择,这些选择的对与错都通过最终的结果反映了出来。你很可能发现一些熟悉的模式,从书中的解答和解决方案中学会一些东西;这意味着在你自己的项目中犯的错误会更少。如果你是这些方法的专家,那么本书将为你打开新的途径——如何结合不同的方法或者缩减一个开发过程,并告诉你自省的价值。我从这本书中学到了许多关于RUP的知识,并学会了从不同的角度来看待它。感谢Gary、Jas、Liz和Chris与我们分享他们的经验。——PhilippeKruchten于加拿大温哥华在本书中,GaryPollice、LizAugustine、ChrisLowe和JasMadhur四位作者以自己的亲身经历说明了如何在一个小型团队、小型项目中应用Rational统一过程。其中包含了对开发过程中各种做法的原因和结果的全面分析,说明了开发团队如何对开发过程与开发环境进行动态的调整。本书的主要内容包括:如何在开发人员、开发过程和开发工具之间寻求平衡,并且在软件开发的整个过程中动态地维持这种平衡;如何组合RUP和敏捷开发原则中的多征方法来建立团队自身的开发过程,并且在项目进程中对开发过程进行适当的调整;如何选择适当的开发工具来对团队的活动提供支持,尤其是对于一个小型的分布式团队需要考虑哪些问题;客户的参与和意见关系到软件产品最终能否有效地满足客户需求。对本书的赞誉“我向所有那些希望在小型项目中实施RUP的人强烈推荐此书。Pollice和他的伙伴们揭开了笼罩着RUP的神秘面纱,并且在保证不遗失其精华的基础上进行了有效的缩减。此书是所有RUP使用者的必备书籍。”——丰田汽车销售公司过程工程学顾问ChrisSoskin“许多RUP使用者都在寻找其实际应用的例子,此书恰恰为如何在小型项目中实际应用RUP提供了非常好的示例。它将引导你穿越从项目启动到项目完成的不同阶段。作者非常成功地强调了他们所遭遇的困难以及他们所取得的成功。”——IBM公司Rational软件公司RUP部门经理PerKroll“这本书明了易读,且有许多对软件开发人员有帮助的好东西,所以我很喜欢它。它描述了一个小型团队如何有效地使用RUP——一种通常被认为只适用于大型的、规范度高的团队的开发过程。作者以直截了当的方式表达了许多严肃的事实与建议。每个人的书架上都应该有一本这样的书。”——NetObjectives公司高级顾问DanRawsthorne博士软件开发的目标是向用户交付具有一定价值的产品。为了提高工作效率,你必须在开发人员、开发过程与开发工具之间维持适度的平衡。每个人似乎都有自己最喜欢的开发工具、技巧和开发过程。软件公司把开发工具和方法卖给你,帮助你提高构建软件时的效率。顾问们向你宣讲他们的方法,试图让你相信他们知道如何帮助你的机构和项目团队做得更好。而我们开发人员则不停地学习新的技术、采用新的工具,来帮助我们在更短的时间里以更高的质量完成更多的工作。我们这些作者在各种软件项目中工作和对之进行观察的时间累计起来超过了七十五年。根据这些年中所得到的经验,我们得出一个结论,很可能一些聪明的读者也已经想到了:每一个项目都不一样,那些帮助某个团队取得了巨大成功的方法如果不具有通用性,可能会导致另一个团队的惨痛失败。每个团队都需要确定如何使用一个特定的开发过程,然后不断地进行调整才能取得进步。而在这种不会停止的变化面前,一个项目团队如何知道改变哪些做法可以获得最大的效果?我们的答案是,依靠学习尽可能多的技术,依靠学习有效使用支持不同技术的开发工具,然后确定哪些组合可以工作得最好,以及它们在什么情况下最有效。这也意味着一个不断学习的过程。好的程序员从其他的程序员那里学习。他们通过查看代码和阅读关于不同编程方法的书籍进行学习。测试人员通过学习测试专家的技巧、研究测试设计方案和学习如何使用新技术与新工具来获得提高。实际上,每一个独立的实践者都可以从其他从事相同工作的人那里,或者通过观察范例来学到知识。每个实践者都需要形成自己高效工作的风格,既作为独立的个人也作为一个更大的团队的一员。团队也一样需要利用其他团队如何工作的范例,来形成自己团队协同工作的风格。本书是关于一个小型团队如何开发一个软件工具的例子。它是关于我们做了什么以及为什么这样做的一本大事记。我们尝试着解释了为什么某些做法有效(或者无效),并讨论了下一次我们会改变些什么。在此过程中,我们特别指出了所获得的经验和教训,并提供了一些将这些经验通用化的思路。读者所要做的,就是观察我们所做的工作并汲取我们的经验。如果你正在从事小型的软件开发项目,你将立刻根据我们的经历发现一些问题。你可能已经面临一些我们曾遭遇的问题,并按照自己满意的方式解决了,或者你仍在试图找到合适的解决方法。我们希望本书能够为你提供一些有用思路,帮助你选择和使用合适的开发工具,与他人一起有效地工作,并选择最适合你个人和所在团队风格的技术。本书的所有作者都曾在软件行业的不同类型项目中工作了许多年,从很小的项目到很大的项目都曾涉及。我们对自己的工作都充满热情。我们在为Rational软件公司(现已被IBM公司收购)工作时相互结识。启动此项目的Gary曾经在第一个RationalSuite项目中工作,然后转到RationalUnifiedProcess,即RUP团队工作。Liz和Chris曾和Gary一起在RationalSuite团队中工作,而Jas是RUP团队的成员。我们看到过采用RUP或者其他开发过程并取得成功的项目,我们也看到过同样采用这些开发过程却失败了的项目。我们希望?彩龅恼飧鱿钅磕苋〉贸晒ΑN颐侨衔约喝肥党晒α恕8匾氖牵颐堑目突衔颐浅晒α耍饩褪俏颐堑墓适拢M隳芄幌不端?关于本书在本书中,我们讲述了我们如何作为一个团队一起工作的故事。我们谈及了面对的一些技术障碍以及克服它们的方法。我们描述了遇到的一些模式以及我们如何将它们应用于自己的团队、项目以及代码。我们说明了这个小团队如何发展了一种在成员之间以及与用户之间进行有效交流的方法。我们还讨论了所采用的不同技术和方法,并根据不同的开发方法学,如RUP、极限编程(XP)等等,进行了调整。本书并不包含任何一种特定软件开发技术的全部技术细节。它并没有描述一个开发过程。它并不是关于编写高效的代码、调试方法、测试技巧、需求管理或者过程工程的书。不过本书涉及了所有上述主题。PSPTools项目本书是关于我们开发一个软件项目——PSPTools的经历的大事记。PSPTools的目标是为WattsHumphrey的PSP(PersonalSoftwareProcess,个体软件开发过程)提供自动化的支持。在版本1中,我们为支持PSP等级1实现了计时器和数据收集工具。(关于PSP的更多内容,请参见附录B。)本书包含了屏幕截图、表格以及其他反映我们工作进展的材料片段。为了使读者可以了解我们的实际工作方式,我们据实地展现了自己的经历以及最终的软件,而不是理想化地解释我们希望如何工作。在本书的网站www.awprofessional.com/titles/0321202945,包含了我们的所有代码、其他一些非代码的项目制品、到其他有用网站的链接以及其他后来发生的新闻。我们也很希望能够听到大家的意见,无论是对此书的反映,还是关于你自己的软件开发经历。我们的电子邮件地址是psptools@yahoo.com。本书的组织结构本书的组织结构如下:第1~3章介绍此项目的相关情况。我们介绍了自己进行软件开发的方法;对于在开发人员、开发过程与开发工具之间维持平衡的重要性的观点;及对PSPTools项目的描述。第4、5、6、8、10和11章分别从团队和过程的角度说明了这个项目。我们讨论了RUP的不同阶段以及我们在每一阶段中做了什么。第7章和第9章提供了有关我们所处理的代码和使用的技术的详细情况。这两章并不是对整个应用的全面展示,而是用于体现一些代码的风格并解释我们所做的一些技术决策。我们希望这两章能够鼓励你从本书的网站下载整个项目内容来进行更深入的研究。附录中提供了一些主题的信息,如RUP、PSP和XP,我们假设你对它们已经有一定程度的了解。谁需要阅读此书?如果你是下列人士之一,那么你应该阅读此书:一个正在寻求有关的技术指南,以使得团队整体以及其中的个人都能更有效率工作的项目领导者。书中也讨论了我们所使用的开发工具以及它们的替代产品,还提供了关于如何使用类似RUP之类的开发过程来帮助、促进交流的实践性建议。一个工作于小型项目的独立实践者(一个程序员、一个测试员或者一个分析师)。本书可以帮助你学会如何在不增加无理负担的情况下,与团队中的其他成员进行交流。这里推荐了一些可能会有帮助的工具,并展示了如何有效地应用一种开发过程来指导、帮助你集中注意力,而不是给你增加负担。一个工作于开源项目的独立实践者。本书没有专门讨论开源开发,但确实提供了一些类似于开源项目的经验。它提供了一个如何组织分布于不同地点的团队开展工作的范例。显示了这个团队如何调整其工作风格与使用的开发工具,以适应地理的分隔、完全不同的开发工具以及在相互独立的网络上进行工作。其他对小型项目或者敏捷开发技术感兴趣,并对它们如何与其他开发过程(如RUP)结合感到好奇的独立实践者。致谢如果没有很多人的努力与贡献,本书将不可能得以出版。然而对于文中出现的任何错误,我们将承担相关责任。我们要感谢以下人士,他们的工作使得本书内容更为丰满、有趣和可信。Gary感谢整个开发团队。你们中的每一个人都在整个项目过程中提供了自己的见解、知识、努力与支持。RajSrinivasan在我们急需测试人员的时候加入进来,提供了有所侧重的、有益的问题报告。我要特别感谢PhilippeKruchten和PerKroll,从他们那里我领会了RUP的精神,从而形成了我自己在小型项目中使用RUP的风格。敏捷开发社区中的许多活跃分子教会了我很多事情,我试图将它们包含于我个人的开发过程中。我尤其感谢与BobMartin、RonJeffries和RandyMiller的交流。我确信其他的作者和我一样感谢为本书提供了极有价值的见解的审阅者们。除了PerKroll和PhilippeKruchten,我们很荣幸地请JamesDunion、MagnusLyckå、BobMartin、DanRawsthrone和ChrisSoskin对我们的工作进行了审阅。我们也很感谢来自于Rational软件公司的支持。最后,我们感谢Addison-Wesley出版公司那些过去和现在帮助我们完成本书的人们,他们是:PaulBecker、MaryO’Brien、BrendaMulligan、AmyFleischer、PatrickCash-Peterson,以及我们有才华的、仁慈的编辑RebeccaGreenberg。感谢你们付出的时间和无尽的耐心。Liz非常感谢我的经理KarlHakkarainen,他支持并鼓励我在此项目中进行工作。感谢Gary领导了这一项目,同时感谢其他作者——Chris、Jas和Gary——在完成项目的过程中与他们一起工作非常开心。最后,我还要感谢本书的审阅者们,他们充满理解力的、大量而风趣的评论促使此项目富有成果。Jas真诚地感谢Gary、Liz和Chris,感谢你们的善意、友好、见解与支持。Chris我想感谢与我同一办公室的SteveZerfas。他一直忍受着作为PSP项目一个组成部分的大量会议电话。他也比任何人更多地听我说:“在PSP项目中,我们……”。如果没有我的经理DaveZygadlo的宽宏许可,我将无法在此项目中工作。他即使在“午夜项目”不时地延伸到白天后仍保持着活力。最后,我希望感谢我的妻子Carmen,她对我写程序到深夜或长途旅行去拜访Gary从无怨言,而且始终欢迎Gary在来参加编程讨论时访问我们家。 -
UML设计及应用赵从军主编本书从UML的基础、设计和应用等方面全面地叙述了UML的知识和技术。全书分为四篇。第一篇为UML基础,主要介绍了UML的基础知识、RUP软件开发过程和Rational Rose工具的使用;第二篇为UML设计模式,从分析、设计和系统架构方面介绍了UML如何构建软件的重用与模式;第三篇为UML分析设计Visual Basic应用程序,通过实例详细讲解了用例分析和类图设计、动态元素分析、类图到数据库表的映射、组件到VB构件的映射和UML类图与Visual Basic代码的转换;第四篇为UML分析设计Java应用程序,通过实例讲解了Java的UML设计和UML类图与Java代码的转换。本书涉及多个知识层面,图文并茂,由浅入深。可作为高职高专软件技术专业及计算机相关专业的教材,也可作为软件设计与开发人员的参考书。 -
软件工程的敏捷管理(美)David J. Anderson著;韩柯等译;韩柯译本书是一本观点鲜明、新颖独特的专著,全面论述当前比较流行的软件生产敏捷方法,着重介绍敏捷方法的理念和创新。书中并没有简单地否定传统软件生产方法,而是比较全面地分析了各种方法的适用场合。本书作者是特征驱动开发这种敏捷方法的创始人之一,他在书中介绍了很多自己亲身负责和参与的项目管理实例。本书具有很好的参考价值,适合软件开发经理、开发人员、用户以及在校学生阅读。敏捷方法如今已经炙手可热。但是,敏捷开发要想被管理人员广泛接受,还必须在管理上进行调整。本书作者向经理们说明,怎样才能通过重点运用EliGoldratt在其名著《TheoryofConstraints》中提出的方法,靠科学管理使敏捷方法如虎添翼。不管你使用的是XP、Scrum、FDD还是其他敏捷方法,通过本书,你都可以学会如何针对工程过程的所有阶段制定管理原则,集中精力构建可以提供最大客户价值并取得显著业务成果的软件。给出适用于敏捷方法的业务案例:实用工具和原则。如何为下一个项目选择敏捷方法。”关键链项目管理”和约束驱动的价值流控制的突破性应用。为软件项目的敏捷经理定义四种新角色。 -
实用软件工程教程王珍玲主编软件工程是介绍软件开发方法、提高学生软件开发能力的一门课程。《实用软件工程教程》一书全面系统地介绍了软件工程的概念、原?砗偷湫偷募际醴椒ǎ弊帕樯芰巳砑こ痰囊恍┳钚录际醴椒ā1臼榧冉樯芰巳砑こ痰睦砺壑叮庇峙浜鲜道镏莆绽砺壑逗图际醴椒ǖ氖迪帧H楣卜志耪拢谌莅ㄈ砑こ谈攀觥⑷砑尚行匝芯俊⑷砑枨蠓治觥⑷砑杓啤⒊绦虮嗦搿⑷砑馐浴⒚嫦蚨韵蟮娜砑こ獭⑷砑诵杏胛ず腿砑钅抗芾恚恳徽潞竺媾溆邢嘤Φ南疤猓靡园镏屠斫獗菊碌闹叮保诟铰贾懈隽巳肯疤獾牟慰即鸢福┒琳卟慰际褂谩?本书是针对高职高专院校计算机应用专业学生编写的教材,同时适宜高等专科院校、成人教育学院、函授大学等大专层次的理工科计算机专业的学生使用,也可供有一定实践经验的软件开发人员、计算机科学爱好者参考使用。 -
软件工程经济学(英)Barry W.Boehm著;李师贤等译;李师贤译本书阐述软件工程经济学的基本原理和分析方法,包括COCOMO模型分析,多目标决策分析,软件生命周期定量模型,软件项目的工程经济学基础,软件生命周期成本估算方法,以成本效益分析、边际分析、风险分析为基础的决策方法以及软件成本估算技术等。本书使用了大量案例,深入浅出、概念清晰,较好地结合了理论与实践。本书适合作为大学高年级本科生和低年级研究生的软件工程经济学基础课程的教材,也可供广大软件从业人员参考。前言:工程经济学课程已成为硬件工程师教育的一个标准组成部分。但到目前为止,软件工程师却缺少相似的、适合的软件工程经济学课程。这样导致的结果就是,大多数软件工程师没有机会掌握并利用那些有重要意义的经济学概念、技术和案例,而这些恰恰对他们以后的职业生涯、对所编制软件的易用性和价值都有重要作用。所以,本书的主要目标是为美国高年级本科生和一年级研究生,提供软件工程经济学的基础课程。即本书的两个目的是:1.易于学生学习。2.便于教师讲授。我也努力使本书能够达到第三个目的:3.为这一领域的专业人士提供帮助。因为这三类读者有一定的差异,所以我对学生、教师和熟练的软件工程师分别给出了指导,作为他们学习本书的起点。本书的基本结构如图A所示。第一部分介绍背景、动机和软件工程目标框架等,为后续的内容打下基础。第二、三部分包括两个互相补充的主题:软件生命周期定量模型,应用于软件项目的工程经济学基础。第四部分详细讲述了软件生命周期成本估算的方法,它是以第二部分较简单的成本模型为基础,同时,又进一步支持第三部分的软件工程经济学的分析技术。图A也显示了本书的每一部分所解决的基本问题。例如:第四部分不仅讲述了软件成本估算、理解影响软件成本因素问题,还探讨了像“如何利用这种理解来提高软件项目的可见性及控制,进而提高软件生产率?”这类问题。图B显示了本书的每一部分中的章节。例如,图B显示了分等级的软件成本估算模型细节的逐级层次,这个模型通常称为COCOMO(COnstructiveCOstMOdel)。顶层是在第5章~第7章讲述的基本COCOMO(BasicCOCOMO)模型,基本COCOMO模型是一个简单的公式,将软件项目的成本仅仅估算为已交付源指令规模的函数。接下来是中等COCOMO(IntermediateCOCOMO)模型,在第8章和第9章介绍,它估算软件项目成本是规模和其他成本驱动属性(costdriverattribute)的函数,如人员经验与能力、计算机硬件约束、现代编程规范(modernprogrammingpractice)的使用程度等。第23章讲述了最精确、最详细的一层,那就是详细COCOMO(DetailedCOCOMO)模型,并在第24章~第27章给出了其详尽的细节,它利用成本驱动属性,按每个阶段、每个子系统、每个模块分别估算软件产品的成本。第24章~第27章详细解释了各种软件成本驱动因子属性是如何影响完成软件生命周期每一阶段所需工作量的。COCOMO模型不仅给出了估算公式,也给出了该模型为什么能得出这些结果的最好解释。第24章~第31章详细讨论了软件生命周期成本估算知识的前沿问题(frontier),并提出了需要进一步研究的广泛课题(agenda)的建议,以扩展我们在软件生命周期及其经济学方面的知识。图A本书的结构—主要讲述的问题深深地感谢那些鼓励我,为我提供数据与意见的人们。真希望能把他们都列出来。……致学生未来几年内,你将有机会在一间屋子里和一群人一起讨论,决定将要进行的一个重要的新软件工作需要用多长时间、花多少钱,这是一个好机会。这些人中,也许有一到两名对软件很了解,其他大多数都了解不深。这些人可能是高层经理、业务分析员、市场专家或生产线计划者之类的人员。总的说来,他们将根据边际投资回报率、成本收益率(cost-benefitratio)、现值(presentvalue)和风险暴露(riskexposure)之类的概念进行讨论,并做出决策。图B本书的结构—部分与章节还有其他一些人,对这个项目很感兴趣,但不在这间屋子里。这包括将为你工作的、或同你一起从事软件工作的人员,还包括一些用户,那些不得不使用你们团队正准备生产的这个软件的用户。无论是否意识到,事实上,他们未来几个月甚至几年的命运,很大程度上依赖于你和其他非软件人员能在多大程度上对软件工作的范围、预算、进度做出实事求是的决策。屋子里的非软件人员没法做出决策,因为他们对你所做的软件技术性权衡没什么感觉。所以对你来说,与他们交流、理解他们思考并做出决定所依据的经济学概念,就显得特别重要。如果你能做到这一点,你就有机会改变软件开发人员与面向业务人员之间那种敌对关系,把它变成一种能相互理解、承诺和信任的关系。在这本书里,我们将尽量提供必要的概念与技术,使你既能从编程角度,又能从经济学的角度进行思考。除了这些概念的实际应用之外,希望你会发现它们具有相当的刺激性,就像当时我对计算机与信息处理领域提出一种新的见解时那样。我发现它们对说明如下问题有很大帮助:*为什么信息是有价值的?*为什么人们要采用软件产品?*人们如何决定需要什么样的信息处理产品?*为什么软件生命周期是这样的?就像其他方面的研究一样,当我们更好地理解了软件工程领域为什么会存在,才能更好地在软件工程中进行实践。致教师在这里,我想说明以下三点:1.软件工程经济学对教师和学生来说都是一个具有刺激性的、内容丰富的主题。2.本书可用作软件工程经济学方面的教材,讲授一学期或一学年均可,也可以作为更通用的软件工程课程的辅助教材。3.软件工程经济学是一个有重要意义的、成果累累的研究领域。首先,我想你会发现,软件工程经济学是一门有趣的、有价值的学科。微观经济学是一门精致的、清晰的、精确的学科。为什么这么多人需要计算机、软件和处理过的信息?风险和信息价值使得这个行业有令人鼓舞的前景。由于分析影响软件成本的因素很重要,所以目前出现了许多的软件工程指南并对软件生命周期产生了影响。此外,我还认为每个人不必都把自己沉浸到行业的实践与术语中,去寻找软件工程经济学相关的例子与应用。当我还在USC时,对学校开发的各种计算机与软件应用,及学校对计算机与软件成本的关心程度(特别在学校经费紧张的时候)印象深刻。所以,本书尽量避免行业术语,尽可能多地包含面向大学的问题和实例,从而使本书采用的材料较为熟知。本书的基本内容很适合一学期或一学年的课程。此课程的主要学习目标如下:*了解对软件成本影响最大的因素,并由此来确定估算的软件项目成本。*理解软件工程中的微观经济学的基本概念。*将经济学分析技术应用到软件工程决策中。下表给出了在一学期内讲授本书的课程安排,时间显得有点紧:周书的章节主题11~4软件生命周期:经济学观点25~6简单软件成本模型3,47~9中等软件成本模型:影响软件成本的因素51~12成本效益分析:生产函数、规模经济、方案选择6-复习,期中考试713~15多目标决策分析:净值、现值、品质因素816~18多目标决策分析:约束、系统分析、不可量化目标919~2风险、不确定性和信息的价值121~22实用的软件成本估算技术1131~32案例研究:软件生命周期成本分析与控制12-期末考试如果是第一次讲授软件工程经济学这门课,上述这些内容比较适合一个学年的课程安排,要使一个学期的教学效果令人满意,最好只安排讲授1~18章的内容,也能基本达到学习目标。这门课程适合美国高年级的本科生和一年级的研究生,惟一的前提条件是学生基本熟悉编程过程(或上过相当于两年的计算机科学方面的课程)和一定的微积分基础。为练习软件成本估算模型,我强烈推荐使用有指数运算(Xy)功能的计算器。虽然为使没有计算器的同学也能运用这个模型,在书中我加进了很多曲线,但这毕竟不太精确,也不方便。最后,我希望你能进一步深入研究软件工程经济学,研究软件开发过程自身具有的基本问题,如:*为什么软件开发成本这么高?*是什么因素使软件成本上升或下降,各因素之间如何相互作用?*是什么活动消耗了大部分的成本?*新的软件技术如何降低软件成本?在本书的第四部分,我列举并分析了由63个软件项目的成本及其开发属性组成的数据库,试图回答以下这个问题:“为使项目数据有助于以后其他项目估算和理解其软件成本,我们应该如何解释这些数据?”本书所描述的成本模型,是回答上面这个问题的第一步,但还有待于进一步地去做大量有价值的研究。深入分析这63个项目的数据,就能进一步得到很多有价值的新观点。另外收集、分析更多的观察与实验数据,会得到更多这方面的见解。第四部分大多数章节的最后,都有“进一步研究的主题”一节,说明要阐明上述这个问题的一些最有前途的方向。希望你和你的学生能尝试一下。致在职的软件工程师可以想像在你的软件工程生涯中,已经形成了很多个人原则,来指导估算软件成本、进行软件产品和项目所需的决策。我相信这本书能帮助你利用他人的经验,校准自己的经验法则,能为你的软件成本估算、软件工程决策提供一些其他有用的技术。我也希望,你读这本书的过程是一次激动人心的、充满收获的经历,就像我当初看到,我所用到的各种表面上无关的技术和决策方针,而事实上就是经济学原则的一部分时那样。可以根据个人兴趣与需要选择本书的某些部分阅读,而不是从头到尾地读一遍。以下是根据个人兴趣可以进行的选择。*如果主要想提高自己(或机构)估算软件开发成本的能力,那最好从第21章和第22章的软件成本估算方法开始看,接着再看第4章~第9章的软件生命周期和基本与中等COCOMO模型。*如果你还对估算软件维护成本或其他软件相关成本有兴趣,可阅读第3章、第31章。*如果你还对完成一个详细的软件成本估算模型有兴趣,并想对其加以裁剪,以适合自己的机构,阅读第23章、第29章。*如果你主要对特定软件属性(如,项目人员能力、现代编程规范的使用或语言级别等)对软件成本的影响有兴趣,请阅读第24章~第28章中的相应的内容。*如果你主要对提高软件经济学决策的分析能力有兴趣,请阅读第1章~第18章。*如果你主要对软件项目计划和控制技术有兴趣,请阅读第31章第6节和第32章。然而,即使你只对某一方面的主题有兴趣,我还是推荐你阅读一下第1章~第3章的介绍性内容和第33章的提高软件生产率。这些章节提供了实现更有效的、更令人满意的和更具生产率的环境所需要的背景与方法,在这样的环境中我们能反复演练软件工程活动。 -
软件工程杨文龙,古天龙编著本书是1997年出版的高等学校规划教材《软件工程》的修订版。全书共5篇10章,系统地介绍了软件、软件工程与软件工程模式,软件开发方法,质量与质量保证,计划与管理,工具与环境等最新内容。各章附有习题。读者将从本书中纵览软件工程发展的全貌,了解和掌握软件工程各领域重要的原理、方法、技术、应用和关系,为研究软件工程的理论和从事软件工程实践,以及更深入的学习打下良好的基础。本书适合大学计算(机)学科各子学科(软件工程、计算机科学、计算机工程和信息系统)研究生、本科生、高职高专学生及在职的技术和管理专业人员用作教材或参考书。 -
数据结构题解·综合练习赵宇,邱镭编著本辅导教材是针对“计算机应用、计算机信息管理”专业课程,并结合数据结构教学大纲编写而成的。全书共11章,前10章中每章先介绍该章的主要知识点和重点内容,对基本概念和方法作了扼要的讲解;然后给出习题与参考答案,其中,习题包括选择题、填空题和思考题三部分。第11章为综合练习。本书可作为《数据结构》教材的辅导用书,也可以作为大专院校相关专业学生的参考书。
