软件工程及软件方法学
-
小型团队软件开发(美)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高级应用(德)Sinan Si Alhir著;韩宏志译编辑推荐:UML是一种通用建模语言,得到多种工具的支持,已经被视为行业标准。UML用于指定,显现,构建和记录系统密集过程的工作。本书详细介绍了UML的相关知识,既可用作教材,也可作为参考书。路标是本书的一个重要主题,它提供了一个综合性架构来解决关键决策点及其关系,将UML和过程紧密联系在一起。本书重点讨论UML的使用规则,组合原理和实用示例。本书围绕UML结构分析使用UML、构建UML模型的基本准则。分析如何在路标上下文中有效使用UML,选出一个成熟方案,而不是过早采用特定过程。提供详细实例,以便您在系统开发生命周期建模时进行参考并作出正确决策。阐释UML元素之间的依赖方式,并分析UML如何支持生命周期过程的可跟踪性和可伸缩性。图表清晰明畅,有助您理解UML核心概念及技术。本书观点新颖,论述精辟,编排精当,内容翔实准确,既可作为软件工作及相关专业的教材,又可供UML软件项目的设计、开发和管理人员参考使用。 -
软件工程辅导与提高王小铭,林拉编著本书以专题讨论的形式介绍了软件工程的概念、技术与方法。内容包括软件工程与软件过程、软件工程方法学、软件项目管理和软件工程新方法等四个部分的十八个专题,每个专题都通过对主要知识点的提问和解答,详细地向读者讲述问题的背景,以及如何去理解和掌握问题的要点,达到课程辅导与提高的目的。本书内容与形式新颖,注重对概念和方法的理解,结合软件开发实践总结了课程学习的重点和难点,编有各部分内容的思考与练习,既可作为高等学校计算机专业软件工程的教学参考书与学习辅导材料,也可供软件工程师,软件工程项目管理与开发人员学习参考。 -
软件工程冷英男主编本书介绍了软件工程的基本概念、技术与方法,内容包括:软件开发模型,系统分析,需求分析,软件设计,编码,软件测试,维护,软件配置管理,软件度量和软件体系结构与软件设计模式等。本书取材精练,各章配有习题并有比较具体的示例,便于学习和自学。本书注重原理,结合实践,兼顾传统技术与新技术,繁简适当,逻辑清楚,可作为高职高专院校计算机专业和相关专业的教材,也可作为软件技术人员的参考书。 -
过程模式(美)Scott W. Ambler著;王海鹏译;王海鹏译本书延续了《过程模式(上册)》的内容,描述了软件开发生命周期的后半部分。在这本书中,作者通过一组成熟的过程模式,描述了交付和维护复杂的企业级系统的工作。本书提供了许多图表,有助于读者理解书中的内容。本书与《过程模式(上册)》一起,为软件开发经理提供了目前能得到的最完整的过程模式系统,这些过程模式经过了顶级的面向对象技术人员和教师的实践验证。本书是一本软件开发的优秀书籍,适合于软件开发人员、项目管理人员阅读参考,对相关专业的研究人员也有很好的参考价值。·对面向对象软件开发过程的概述。·对软件开发过程的细分,将其细分为四个阶段,并描述了所有必需的跨项目任务。·基于UML方法学的详细指导意见,说明了如何完成、测试和维护执行关键任务的应用。 ·一些从实际出发、经过验证的建议,针对如何管理人员、项目、风险、复用、基础设施、提交产物和质量。·大量图表展示了所有的概念和过程。 -
软件测试求生法则(美)威廉·派瑞(William E.Perry),(美)兰德尔·莱斯(Randall W.Rice)著;周震译;周震译成功的软件测试仅仅凭借技术能力是远远不够的,软件测试还需要技术以外的东西——人际沟通和交往能力。作者积累数十年软件开发和测试经验,揭示出软件测试面临的几大人际挑战,包括获得软件培训、与开发人员保持良好关系、争取管理人员的支持、与客户保?纸涣鳌⒙悴欢媳浠男枨笠约叭绾窝Щ崴挡弧ǜ嫒砑馐缘幕迪⒌龋⑶彝ü咛宓陌咐彩隽私饩稣庑┨粽降牟呗孕苑椒ā?软件中的错误几乎总会导致开发成本、进度和质量的失控。当所有的人都认为软件可以投入生产的时候,测试却通不过,于是项目延期、成本超支等问题都来了,测试人员就成为责无旁贷的受过者。现实中,测试人员总会处于开发人员和管理人员的“两败俱伤”的困境。成功的软件测试仅仅凭借技术能力是远远不够的,软件测试还需要技术以外的东西——人际沟通和交往能力。作者积累数十年软件开发和测试经验,揭示出软件测试面临的几大人际挑战,包括获得软件培训、与开发人员保持良好关系、争取管理人员的支持、与客户保持交流、满足不断变化的需求以及如何学会说不——报告软件测试的坏消息等,并且通过具体的案例讲述了解决这些挑战的策略性方法。本书的特色在于强调软件测试中所需要的人际沟通以及谈判能力,教给测度人员处理“办公室政治”的技巧。从而保证按时高效地交付软件项目。本书是广软件开发和测试人员的必备指南。 -
基于构件的产品线工程(德)Colin Atkinson等著;顾剑[等]译;顾剑译本书特点:●通过可运行的实例,以集成的方式举例说明KobrA方法中的关键理念。●附录中提供了KobrA元模型和KobrA过程的参考指南。本书系统地描述了KobrA方法,该方法支持模型驱动的、基于UML的构件表示;并描述了能够支持软件开发和演进的产品线方法。这就使得在软件的整个生命周期,都可以充分利用基于构件的开发方式的优势,极大地提高构件的可重用性。本书提供以下技术:●开发模型驱动的架构(MDA),此架构中系统的特点与具体实施平台无关。●有效地、可验证地将模型转换为代码。●系统地将COTS构件重用于新的应用中。●提高构件的质量以及提高由构件组装的系统的质量。本书重点讲述了怎样通过将基于构件的开发与产品线方法相结合,最大程度地改善和提高构件的可重用性和软件生产效率。全书分为五部分:第一部分大致介绍了背景知识以及KobrA方法,第二部分介绍构件建模;第三部分讲述构件的具体化;第四部分讲述产品线工程及其相关概念;最后一部分是项目监控。本书主要适合于致力于构件重用和MDA研究的软件工程师,以及希望进一步了解基于构件进行开发或者产品线工程的关键原则及其之间相互关系的学者和学生。 -
嵌入式与实时系统开发(美)Bruce Powel Douglass著;柳翔等译;柳翔译本书无疑是这一领域中创作的著作……每个人都可以把它作为教材和参考书。本书深入浅出地介绍实时系统的开发过程和技术,提供成功的嵌入系统编程方式,书中采用面向对象软件开发的实践技巧,分析如何提高实时编程的质量。本书结合嵌入式系统编程中最新概念,使用统一建模语言以及来自于对象技术中的最佳实践,揭示了实时系统开发过程中复杂问题和细节问题,阐明了可调度性,行为模式,实时框架等重要主题,以期帮助读者成为更加有效的实时编程人员。随书光盘包括:书中的模型和两个在实时系统和嵌入式系统开发过程中特别有用的应用程序。本书将实时系统、对象建模、快速开发过程以及系统保险性等几个完全分离的学科统一起来,重点介绍了使用统一建模语言进行基于模型的实时系统和嵌入式系统开发以及被称为ROPES的基于风险的迭代开发生命周期。本书共分为四部分,包括:基础知识、分析、设计、高级实时对象建模。另外,书后还包括三个附录,总结了UML符号表示并介绍了两个工具——PhapsodyTimeWiz。本书适合作为计算机科学专业本科生或研究生教材,同时也可作为专业软件开发人员的参考书。 -
软件开发问题框架(英)Michael Jackson著;金芝等译;金芝译《软件开发问题框架》分析了许多现实世界中的实例问题,讲述了如何在实际中识别和结构化问题。既给出了大问题也给出了小问题,展现了问题类的层次性本质,并讨论了每个问题的不同方面。《软件开发问题框架》适用于系统分析、系统规格说明以及软件和需求工程领域的教师、学生和从业者,以及对软件开发的概念和智能工具感兴趣的任何人。 -
高级用例建模(美)Frank Armour,(美)Granville Miller著;饶若楠译本书为软件工程实践者提供了一个全面而易读的对用例建模的指南,同时阐明了高级用例建模思想,描述了实现用例建模的过程,并讨论了各种用例建模问题。本书的两位作者是业内的资深专家,拥有深厚的技术背景和丰富的实践经验。全书结构严谨,条理清晰、图文并茂,是一本非常优秀的面向对象的专业书籍。本书适合各类软件人员阅读,同时还非常适合作为高等院校计算机及相关专业面向对象分析(OOA)课程的教材。“这本书不仅仅是一本介绍用例的书。作者利用他们丰富的经验,给出了一系列极好的、有深刻见解的详细例子,解释了一些关键问题并提出了士。何使用用例的宝贵建议。”——MariaEricsson软件开发者经常利用用例来阐明他们所构造的系统应该执行的行为。尽管用例驱动的软件系统分析、设计和测试变得愈来愈流行,但很少有书阐述用例在整个软件生命周期中的作用。本书满足了这类需要,它描述了如何为复杂的软件开发项目创建用例模型,采用了大量实例来解释概念性的信息。作者扩展了面向对象大师IvarJacobson的工作,使用统一建模语言(UML)作为描述书中模型的符号。本书主要针对专业人员,同时也包含将用例技术与业务过程相联系的信息。本书阐述了在一个框架中创建和维护用例模型的过程,该过程可以根据具体情况进行定制。本书作者是在软件开发中应用用例的先驱者,他们介绍了很多经验,主要涵盖以下主题:■应用用例模型的过程模型■如何保证用例建模工作循着正确的路线进行■用例建模中的提示和易犯的错误■如何组织大型系统开发的用例模型■高级用例建模和RUP框架的相似点■用例对用户界面设计的作用■高质量用例建模的指南
