软件工程的本质:运用SEMAT内核
作者 : (美)Ivar Jacobson, Pan-Wei Ng, Paul E. McMahon, Ian Spence, Svante Lidman 著
译者 : 陈钟 等译
出版日期 : 2013-11-29
ISBN : 978-7-111-43280-7
定价 : 55.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 255
开本 : 16
原书名 : The Essence of Software Engineering: Applying the SEMAT Kernel
原出版社: Pearson Education Asia
属性分类: 教材
包含CD :
绝版 :
图书简介

SEMAT(Software Engineering Methods and Theory,软件工程方法和理论)是一个国际倡议,旨在确定一个软件工程的公共基础或通用标准。它得到了一些全球软件工程领域最杰出的贡献者的支持。通过创建一种简单的语言来描述方法和实践,SEMAT团队将这个公共基础表示为一个由所有软件开发基本要素组成的内核(或框架)。
本书介绍了这个内核并展示了如何在开发软件和改进团队工作方式时运用这个内核。本书是为软件专业人员、教育工作者和学生而非软件方法论者写的。对于所有需要评价和选择他们工作最佳实践的软件开发团队的成员,本书的实用性和价值远远胜过任何一个方法的描述或应用。

图书特色

Ivar Jacobson 博士
组件与组件架构、用例、统一建模语言(UML)和Rational统一过程(RUP)之父。他在现代业务建模和面向方面的软件开发方法方面做出了杰出贡献。近年来他致力于如何以一个超轻型或敏捷方式处理方法和工具的研究工作。他开发出一个实践概念,现在已经被开发者和工具制造者所采用。现在他是一个世界范围的网络——SEMAT的领导人之一,试图革新软件开发方式。他还是六部影响巨大的畅销书的主要作者,IJI(Ivar Jacobson International)公司董事局主席,IJI公司的分部遍布美国、英国、荷兰、中国、新加坡、瑞典和加拿大。

Pan-Wei Ng(黄邦伟)博士
乐于与各个层次的开发者和软件专业人员一起工作。他曾经成功指导了多家大型系统开发组织(其中每个产品发布都涉及数百万行代码和数百人参与),将他们的工作方式转向精益和敏捷方式的同时不会忘记改进他们的代码、体系架构、基于用例的测试。黄博士是IJI公司的首席顾问和亚太总部的技术总监。他也是《基于用例的面向方面的软件开发》一书的共同作者(Addison-Wesley,2005)。黄博士的信条是要让事情可见和实用,他从SEMAT创立伊始就是内核背后的一个活跃的思想贡献者。特别是他在帮助一个大型、跨文化的外包开发项目提高软件工程能力时发明了状态卡片。

Paul E. McMahon
PEM系统公司的主管,在过去15年间一直担任独立咨询顾问,帮助软件组织增强敏捷性和过程成熟度。他发表了40余篇文章,许多是关于敏捷开发和使用CMMI的教训的。他是一位CSM (Certified Scrum Master),师从于Scrum的共同创始人之一,他还是认证的精益六西格玛黑带大师。他具有超过25年的工程和管理经验,曾供职于洛克希德马丁公司和Link Simulation公司等。他从瑞士启动会议开始就是SEMAT计划中的一位领导人。他的著作包括:《CMMI+敏捷整合开发:更快改进性能的案例与实用技术》(Addison-Wesley,2011),《虚拟项目管理》(CRC Press,2000) 。

软件工程巨擎返璞归真,回归软件工程基本层面
全球软件社区广泛支持,全新标准已获OMG通过
SEMAT发展的重要里程碑,软件工程领域的大事件

软件既是艺术又是科学产物,它同时需要激情和规范。编写好的软件既需要想象力和创造力的自由翱翔,又需要残酷现实的工程权衡。本书尝试描述这种平衡。
Robert Martin
Ivar Jacobson和他的同事们的工作,作为SEMAT倡议的一部分,已经采用了一种系统化的方法来确定一种经得起时间和认知检验的软件工程原理与实践的“内核”。
Bertrand Meyer
软件开发产业需要一个用来定义软件开发实践的内核及语言,这些实践可以被混合及配对,可以被其他组织引进,可以被度量,可以被集成,可以被比较和对照它们的速度、质量及价格。这本充满思想的书给了一个思考问题的良好基础,以及一种解决该需求的语言,每个软件工程师都应该阅读这本书。
Richard Soley
这是一本与众不同的书,是引导我们重新认识软件、软件工程和人的关系的书。书中阐述了SEMAT的本质,分享了运用SEMAT内核解决具体问题的案例和有效性。本书是SEMAT发展的一个里程碑,也是软件工程领域的一件大事。我相信这本书对众多软件从业人员和软件工程学者都有重要的参考价值。
陈 钟


SEMAT(Software Engineering Method and Theory,软件工程方法和理论)是一个国际倡议,旨在确定一个软件工程的公共基础或通用标准。它得到了一些全球软件工程领域最杰出的贡献者的支持。通过创建一种简单的语言来描述方法和实践,SEMAT团队将这个公共基础表示为一个由所有软件开发基本要素组成的内核(或框架)。
本书介绍了这个内核并展示了如何在开发软件和改进团队工作方式时运用这个内核。本书是为软件专业人员、教育工作者和学生而非软件方法论者写的。对于所有需要评价和选择他们工作最佳实践的软件开发团队的成员,本书的实用性和价值远远胜过任何一个方法的描述或应用。

Ian Spence
IJI公司首席科学家和主任咨询顾问,他专注于大型敏捷方法运用和基于实践的组织架构变革。作为一个经验丰富的敏捷教练,他曾经为上百个项目引进迭代和敏捷实践,与各种规模(从5人到150人)的团队一起工作。他还成功地引导为数众多的大型转型项目,涉及政府、电信、金融和Internet初创公司等多个领域,和各种规模软件组织(从5个人的小公司到5000人的大型公司)一起工作。他现在的兴趣包括:敏捷用于大型项目、敏捷外包以及利用敏捷度量驱动可持续变更等。他是两部有影响的软件开发著作的共同作者:《用例建模》(Addison-Wesley,2002)和《迭代软件开发项目管理》(Addison-Wesley,2007)。他还是开发SEMAT内核的小组负责人。

Svante Lidman
Hansoft AB公司的高级生产力专家。在其25年的工业界生涯中,他曾经担任过开发经理、规划经理、项目主管、咨询顾问、培训师,供职过的公司包括IJI、Microsoft、Rational Software和其他公司等。在最近的五年中,Svante主要专注于大型项目中精益、敏捷方法的采用。他是团队动态管理和大型精益与敏捷软件开发实践的主要演讲人。



 译 者 简 介

陈 钟
教育部计算机类专业教学指导委员会副主任,北京大学博士生导师、教授,现任信息科学技术学院计算机系主任,曾任北京大学软件与微电子学院院长。陈钟教授是SEMAT 中国区主席,《软件工程的本质:运用SEMAT内核》中文翻译组组长。

图书前言

每个研发软件的人都知道这是一个复杂且具有风险的业务,并且总是对能够帮助他们更好开发软件的新思想保持警惕。幸运的是,软件工程仍然是一个年轻且处于成长中的行业;一个每年在最佳实践中见证新的创新和改进的行业。只需要看看已被软件开发团队广泛采用的精益和敏捷的思想所带来的改进和效益,就可以体会到这些新思想对于我们软件产业发展是必不可少的。
  成功的软件研发团队需要在快速交付可工作的软件系统、满足各利益相关者的要求、控制他们的风险以及改进他们的工作方法之间寻求一个平衡。为此,他们需要一种有效的思维框架——一种能在他们目前工作方法和任何其他他们想要采纳的新思想之间建立桥梁的思维框架。本书以一种可以付诸实践的内核方式介绍了这种思维框架——我们相信这种思维框架将会对希望平衡他们的风险以及改进他们的工作方法的任何团队带来帮助。
启发
  本书受“软件工程方法和理论SEMAT行动呼吁书”(SEMAT Call For Action ,见图 P-1)启发并且是对它的一种直接回应。它本身是重构软件工程进程中的一小步。

SEMAT(Software Engineering Method and Theory,软件工程方法和理论)在2009年9月由Ivar Jacobson、Bertrand Meyer和Richard Soley创立。他们感觉到从根本上改变人们运用软件开发方法的时机已经到来。他们一起编写行动呼吁书,这个行动呼吁书用短短几行文字就指明当前软件工程实践中的若干问题、xxvii解释为什么要行动起来以及建议需要做什么。图P-1是行动呼吁书的一个摘要。



图P-1 SEMAT行动呼吁书(摘要)

  SEMAT行动呼吁书得到了广泛的支持,包括一个不断增加的签约方和支持者列表。行动呼吁书中有关软件行业趋向于时尚和流行时装发展的趋势断言,使得有些人认为SEMAT和它的支持者们拒绝接受新的思想。其实这远不是事实。就如同你将会在本书中看到的一样,他们非常热衷于新的思想——事实上本书全部是来自SEMAT自身的一些新思想。SEMAT和它的支持者们所反对的是那些由于人们仅仅因为他们相信某些方案是时髦流行的,或因为来自于同事压力或公司政治因素而采用了不恰当方案,并因此造成的不够精益、不够敏捷的行为。
 当前列表可以在网站www.semat.org上找到。
 SEMAT愿景宣言可以在SEMAT网站www.semat.org上找到。
  2010年2月,SEMAT创始人将行动呼吁书发展成为一个愿景宣言。与这个愿景相一致,SEMAT专注于两个主要目标:
  1.寻找一个由广泛接受的要素组成的内核。
  2.定义一个坚实的理论基础。
  在很大程度上讲,这两项任务是相互独立的。寻找内核和它的要素是一项务实的运动,这项运动要求人们拥有软件开发的长期经验和许多现行方法的丰富知识。定义理论基础是学术研究并且可能要经过多年才能获得一个成功的结果。
公共基础的力量
  SEMAT的第一步是为软件工程鉴别一个公共基础。这个公共基础被表现为一个由基本要素组成的内核(这个内核对所有软件开发工作是通用的)和一种用于描述方法和实践的简单语言。本书介绍了SEMAT内核,以及在开发软件和团队与团队成员间沟流交流时如何使用这个内核。本书是一本面向软件从业人员而不是面向方法学者的一本书。它重点是运用而并非详细描述或阐述这门语言。
 “Essence-Kernel and Language for Software Engineering”可在www.semat.org下载。
  一个具有相似属性的内核在2006年第一次由Ivar Jacobson International(www.ivarjacob-son.com)公司开发。这个内核已经充当了SEMAT内核的启发和经验基础。
  内核首先发布在SEMAT的 OMG提案中。如图P-2 和图P-3所示,xxix内核包含了少量在开发软件系统时的“我们一直使用的事物”(基本进展元素)和“我们一直在从事的事情”(基础活动)。定义“我们总是需要拥有的技能”的工作也在不断推进,但是这需要等以后版本的内核才能进行,这方面的工作不在本书讨论范围之内。
  在这里我们不会深究内核的细节,因为这是第1章的主题,但是值得花几分钟去思考为什么通过这种方式构建公共基础是如此重要。将如你通过本书中实际示例所看到的,内核提供的不仅仅是一个概念模型,内核能够提供:


图P-2 基本进展元素


图P-3 基础活动

   团队推断他们所取得的进展和项目工作健康度的一种思维框架。
  团队组合和持续改进他们的工作方式的一种框架。
  改进沟通,标准化的度量,分享最佳实践的一种公共基础。
  容易理解且具有良好互操作性的方法与实践定义的基础。
  最重要的是,帮助团队理解他们进展到了哪里以及他们下一步应该做什么的一种方法。
图P-4 内核的指导原则

大思想
  是什么使得内核不仅仅是一种软件工程的概念模型?这本书究竟有什么新东西?这可以概括成图P-4中显示的三个指导原则。
内核是可付诸实施的
  内核的一个特色是“基本进展元素”(things to work with)被处理的方式。这些处理方式被表达为一系列阿尔法,而不是工作产品(例如文档)。一个阿尔法是软件工程活动中与评估项目进展和健康度相关的一个基本元素。如图P-2所示,SEMAT已经认定了七种阿尔法:机会(Opportunity)、涉众(Stakeholders)、需求(Requirements)、软件系统(Software System)、工作(Work)、工作方式(Way of Working)和团队(Team)。这些阿尔法由一个简单的(表示这些阿尔法的进展和健康度的)状态集合来刻画。举例来说,一个软件系统(Software System)先后经过“架构选定”(Architecture Selected)、“可演示”(Demonstrable)、“可使用”(Usable)、“发布就绪”(Ready)、“正式运营”(Operational)和“已退役”(Retired)状态。每个状态有一个检查表,用于指定能够达到这个状态所需要的标准。就是这些状态使得内核可以付诸实施并且使得它能够指导软件开发团队的行为。
  “Opportunity”在本书中译为“机会”而不是译为“商机”,旨在表达涵盖商业和非商业性的任何可能——译者注。
  “Stakeholders”在本书中为简化起见,选择翻译为“涉众”,意指软件系统的“利益相关者”或“干系人”——译者注。
  内核显示了软件开发不是一个线性过程而是一个协作元素构成的网络;平衡和维护这些元素可以有效且高效地促进团队工作进展,可以消除浪费并开发出伟大的软件。内核中的这些阿尔法为驱动和推动软件开发工作提供了一个整体框架,而不用考虑运用的是哪些实践或者遵循了哪种软件开发方法论。xxxii
  如同实践被加入内核一样,额外的阿尔法将被加入用来表示要么驱动内核阿尔法的进展,要么抑制或阻止进展的事情。例如,需求不会被作为整体处理,而是会被分解为需求项逐条逐步处理。这些针对每条单独的需求项的处理将会驱动或抑制整个需求的进展和健康度。需求项可以具有许多不同类型,例如,它们可以是特性(features),用户故事(user stories)或者是用例切片(use-case slices);所有这些都可以表示为阿尔法并可以跟踪它们的状态。将这些小条目关联成粗粒度的内核构成要素的好处是允许作为一个整体跟踪工作的健康状况。这为单独条目底层跟踪提供了一个必要的平衡,使得团队能够理解并优化他们的工作方式。
内核是可扩展的
  内核的另一个独特之处是它可以被扩展以支持各种不同的开发(例如新的开发,老系统的功能增强,内部开发,离岸外包开发、软件产品线,等等)。内核允许你增加各种实践,例如用户故事(user stories)、用例(use cases)、基于组件的开发(component-based development)、架构(architecture)、结对编程(pair programming)、每日站立会议(daily stand-up meeting)、自组团队(self-organizing teams)等,以便建立自己需要的方法集合。例如,不同的方法可能会组合在一起,用于内部开发或外包开发,或者用在安全关键的嵌入式系统开发和后台管理报表系统开发。
  主旨想法是实践分离。当术语“实践”在工业中已经被广泛使用了很多年后,内核有一个具体明确的用来处理和分享“实践”的方法。“实践”被描述为有区别的、独立的、模块化的单元,xxxiii使得团队能够在用或不用之间做出选择。这区别于传统方法,这些方法将软件开发视作无法分离实践的“汤”,并且当团队选择从一种方法转换到另一种方法时使得他们获得新方法优点的同时不得不接受它们的缺点。
内核是可实践的
  也许内核最重要的特性是在实践中它被使用的方式。软件开发方法的传统方式倾向于关注支持过程工程师或质量工程师。相比之下,内核是一个可亲身实践的、具体可见的思维框架,关注支持软件专业人员从事他们工作。
  例如,内核可以通过卡片的使用而被触摸和应用(见图P-5)。当团队成员开始从事他们的日常工作任务时,卡片为他们提供了简明的事项提醒和线索。完全不同于概念性讨论,卡片通过提供实际的检查表和提示,把内核变成了团队每天使用的东西。这相比于传统方法过度强调方法描述而非方法使用、xxiv常常是仅被团队的新人参考的情况是有根本性差异的。


图P-5 卡片使得内核具体可见
内核正在运转
  尽管本书的理念对于你们中的许多人来说是新颖的,但在工业界和学术界它们已经被成功应用。
  内核思想的早期采纳者包括:
 在所有这些情况下,他们使用由Ivar Jacobson International公司发展而来的内核和实践。
  慕尼黑再保险公司(MunichRe),世界领先的再保险公司,相关的“协作模型”被组装起来用来覆盖全部软件和应用的工作范围。四个协作模型被建立在同一个来自12个实践的相同集合的内核上。这些模型被认为具有探索性,标准化,可以维护和支持。
  富士通服务公司,在软件工程内核的早期版本上构建了Apt工具包,其中包含敏捷模型和瀑布模型方法。
  一家主要的日本消费电子公司,他们的软件过程被定义在内核的早期版本上,允许他们帮助团队应用新的实践以及管理他们的离岸外包开发供应商。
  KPN,在横跨13个计划的300多个项目中采用了基于内核的过程,作为转向迭代开发的一个组成部分。内核同时也为实施一个新的以结果聚焦为导向的质量保证过程提供了基础,使其可以应用到所有的项目中而不用关心项目使用了什么方法或实践。xxxv
  一个主要的英国政府部门,引入了基于内核的敏捷工具集来管理敏捷开发,并能以一个独立于实践的方式跟踪项目进展和健康度。
  在瑞典皇家理工学院,内核已被用在大学第一年和第二年的软件工程课程中:
  第一年的课程由Anders Sjgren讲授。在学生启动了他们的项目之后,Anders与学生们一起进行SEMAT阿尔法遍历并匹配到他们的项目结果中。这个阶段,学生们将有机会自己了解和评估阿尔法,以及深入了解项目的进展和健康度。
  第二年的课程由Mira Kajko-Mattsson讲授。这个阶段,当学生们使用他们选定的开发方法运转他们的项目时,他们被要求主动使用SEMAT内核。Mira创建了一个软件开发场景示例,并评估这个场景下的每一个阿尔法、它的状态和状态检查表条目。学生们也被要求针对他们自己的项目运转和评估做相同的事情。
  这些课程教给学生如下经验教训:
  内核确保了一个项目中有关软件工程的所有必要方面都已被考虑到。通过对照内核阿尔法匹配项目结果,学生们能够容易识别他们采用的开发方法的好的一面和坏的一面。xxxvi
  内核使得学生们通过最小的教学努力为将来从事软件工程工作做好准备。通过遵循所有内核阿尔法,学生们可以学习软件工程工作的整个范围并因此了解在他们的职业生涯中需要掌握的知识和技能。
内核与敏捷方法及其他现存方法的关系如何
  内核可以与目前所有受欢迎的管理和技术实践(包括Scrum、看板、风险驱动迭代、瀑布开发、用例驱动开发、验收测试驱动开发、持续集成、测试驱动开发等)一起使用。它将能帮助新的创新软件产品开发的团队,也能帮助涉及改进、优化和维护已有成熟软件产品的团队。它可以帮助各种规模的团队——从一个人的“乐队”到过千人的大型软件工程计划。
  例如,内核支持敏捷宣言的价值观。通过专注于检查表和结果,以及内在的实践独立性,内核重视个体和交互胜过过程与工具。通过专注于专业软件开发团队的需要,内核重视团队工作和完成团队职责胜过遵循方法。
  内核不与现存方法以任何形式产生竞争,不管这些方法是敏捷的或其他类型方法。相反,内核对于团队选择的方法是不可知论的。即便你已经选择,或者正在使用一种特定的方法,内核仍然能够帮助你。不管使用什么方法,就如同Robert Martin在本书序言中所指出的一样,项目——即便是敏捷项目——也可能失常,这时团队需要知道更多。这就是内核的真正价值所在。xxxvii它可以指导团队回到正确的方向上,扩展他们的方法,或处理他们工作方式之间的严重分歧。在任何时候它专注于软件专业人员的需求,重视 “方法的使用”胜过“方法定义的描述”(这是过去习以为常的做法)。
  内核不仅仅支持现代的最佳实践。它还适用于大量已经被开发出来软件所需要进行的维护。这些软件可能存活几十年而且需要以一种高效的方式进行维护。这意味着你对这个软件使用的方法将不得不随着软件自身而变化。新的实践将需要被引入,作为对正在使用的实践的补充。内核提供了从传统方法(如单一瀑布方法)向多个敏捷或其上的现代方法渐进式迁移的机制。它允许你通过“实践-再实践”的方式改变你的传统方法,同时维持和提高团队的交付能力。
内核将如何帮助你
  内核的使用对你和你所在团队都有很多益处——无论你已经是一个有经验的老手、或者是有志成为软件专业人员的新手。例如,它提供能够帮助你评估软件开发工作进展和健康度、评估你当前的实践、改进你的工作方式的指导。它也将帮助你改进交流沟通,更容易地在团队之间变动,以及接受新思想。它也将通过提高团队之间、供应商之间、开发组织之间的互操作性,促进整个产业的发展。
  通过为软件方法定义提供一个独立于实践的基础,内核也彻底地革新了定义方法和分享实践的方式。例如,通过允许团队混合和搭配来源不同的实践以建立和改进他们的工作方式,内核解决了工业界遭遇到的两个主要的方法论问题:xxxviii
  1.团队不再被他们的方法所束缚。如果可能和需要,他们可以通过增加或移除实践来持续改进他们的工作方式。
  2.方法论学者不再需要浪费他们的时间来描述完整的方法:他们可以用一种简洁且可重用的方式轻而易举地描述他们的新思想。
  内核最终对于学术界也有好处,尤其对于教育和研究领域。内核将会为软件工程基础课程的创建提供一个基础,随后可以补充使用具体实践的额外课程——既可以作为起始教育课程的一部分,又可以作为学生进一步职业发展的一部分。同样重要的是,内核的能力足以作为一个共享的参考模型,并可以促成进一步的深入研究和试验。
如何阅读这本书
  本书适合于在开发软件、研究软件开发或分享软件开发经验方面特别需要有一个清晰的参考框架的人士。
  对于软件专业人员,本书的目标是展示内核如何帮助你解决在每天工作中所面对的挑战。本书描述了内核如何用在从小规模开发到大规模开发的各种不同的情景中。xxxix
  对于学生以及其他有志成为软件开发专业人士的人,本书的目标是阐明软件专业人员所面临的挑战以及如何解决这些挑战。本书将为你进一步学习提供一个坚实的基础并帮助你学到那些只有通过实践才能学到的东西。
  本书的组织结构特别适合于循序渐进的学习,并逐步引入和阐明了各种概念。我们希望本书对于软件专业人员、教育工作者和学生有用,我们期待你的反馈。
  本书在结构上分为七个部分。
  第一部分——内核思想解释
  举例概述内核是如何被使用在实践中的。
  第二部分——使用内核运行一次迭代
  示范内核是如何用于运行一个迭代的。
  第三部分——使用内核运行一个软件开发工作
  描述你可以如何使用内核运行一个完整的软件开发工作——从想法到运营——用一个规模适中的项目为例。
  第四部分——利用内核来拓展开发
  展示内核在支持不同实践、不同组织和不同领域方面的灵活性。
  第五部分——内核如何改变你在工作中运用方法的方式
  后退一步并讨论如何将内核成功高效地运用到你所处的具体情形中的原则。
  第六部分——真正新在哪
  总结SEMAT和本书的要点以及关键不同之处。xl
  第七部分——结语
  前瞻性地讨论未来我们如何能够从内核中获得更多的价值。
延伸阅读

上架指导

计算机\软件工程

封底文字

软件既是艺术又是科学产物,它同时需要激情和规范。编写好的软件既需要想象力和创造力的自由翱翔,又需要残酷现实的工程权衡。本书尝试描述这种平衡。
——Robert Martin
Ivar Jacobson和他的同事们的工作,作为SEMAT倡议的一部分,已经采用了一种系统化的方法来确定一种经得起时间和认知检验的软件工程原理与实践的“内核”。
——Bertrand Meyer
软件开发产业需要一个用来定义软件开发实践的内核及语言,这些实践可以被混合及配对,可以被从其他组织引进,可以被度量,可以被集成,可以被比较和对照它们的速度、质量及价格。这本充满思想的书给了一个思考问题的良好基础,以及一种解决该需求的语言,每个软件工程师都应该阅读这本书。
——Richard Soley
这是一本与众不同的书,是引导我们重新认识软件、软件工程和人的关系的书。书中阐述了SEMAT的本质,分享了运用SEMAT内核解决具体问题的案例和有效性。本书是SEMAT发展的一个里程碑,也是软件工程领域的一件大事。我相信这本书对众多软件从业人员和软件工程学者都有重要的参考价值。
——陈钟

SEMAT(Software Engineering Methods and Theory,软件工程方法和理论)是一个国际倡议,旨在确定一个软件工程的公共基础或通用标准。它得到了一些全球软件工程领域最杰出的贡献者的支持。通过创建一种简单的语言来描述方法和实践,SEMAT团队将这个公共基础表示为一个由所有软件开发基本要素组成的内核(或框架)。
本书介绍了这个内核并展示了如何在开发软件和改进团队工作方式时运用这个内核。本书是为软件专业人员、教育工作者和学生而非软件方法论者写的。对于所有需要评价和选择他们工作最佳实践的软件开发团队的成员,本书的实用性和价值远远胜过任何一个方法的描述或应用。

作者简介

(美)Ivar Jacobson, Pan-Wei Ng, Paul E. McMahon, Ian Spence, Svante Lidman 著:Ivar Jacobson 博士组件与组件架构、用例、统一建模语言(UML和)Rational统一过程(RUP)之父。他在现代业务建模和面向方面的软件开发方法方面做出杰出贡献。近年来他致力于如何以一个超轻型或敏捷方式处理方法和工具的研究工作。他开发出一个实践概念,现在已经被开发者和工具制造者所采用。现在他是一个世界范围的网络——SEMAT的领导人之一,试图革新软件开发方式。他还是六部影响巨大的畅销书的主要作者,IJI(Ivar Jacobson International)公司董事局主席,IJI公司的分部遍布美国、英国、荷兰、中国、新加坡、瑞典和加拿大。 Pan-Wei Ng(黄邦伟)博士乐于与各个层次的开发者和软件专业人员一起工作。他曾经成功指导了多家大型系统开发组织(其中每个产品发布都涉及数百万行代码和数百人参与),将他们的工作方式转向精益和敏捷方式的同时不会忘记改进他们的代码、体系架构、基于用例的测试。黄博士是IJI公司的首席顾问和亚太总部的技术总监。他也是《基于用例的面向方面的软件开发》一书的共同作者(Addison-Wesley,2005)。黄博士的信条是要让事情可见和实用,他从SEMAT创立伊始就是内核背后的一个活跃的思想贡献者。特别是他在帮助一个大型、跨文化的外包开发项目提高软件工程能力时发明了状态卡片。 Paul E. McMahon PEM系统公司的主管,在过去15年间一直担任独立咨询顾问,帮助软件组织增强敏捷性和过程成熟度。他发表了40余篇文章,许多是关于敏捷开发和使用CMMI的教训的。他是一位CSM(Certified Scrum Master),师从于Scrum的一位共同创始人的学生,他还是认证的精益六西格玛黑带大师。他具有超过25年的工程和管理经验,曾供职于洛克希德马丁公司和Link Simulation公司等。他从瑞士启动会议开始就是SEMAT计划中的一位领导人。他的著作包括:《CMMI+敏捷整合开发:更快改进性能的案例与实用技术》(Addison-Wesley,2011),《虚拟项目管理》(CRC Press,2000) lan Spence IJI公司首席科学家和主任咨询顾问,他专注于大型敏捷方法运用和基于实践的组织架构变革。作为一个经验丰富的敏捷教练,他曾经为上百个项目引进迭代和敏捷实践,与各种规模(从5人到150人)的团队一起工作。他还成功地引导为数众多的大型转化项目,涉及政府、电信、金融和Internet初创公司等多个领域,和各种规模软件组织(从5个人的小公司到5000人的大型公司)一起工作。他现在的兴趣包括:敏捷用于大型项目、敏捷外包以及利用敏捷度量驱动可持续变更等。他是两部有影响的软件开发著作的共同作者:《用例建模》(Addison-Wesley,2002)和《迭代软件开发项目管理》(Addison-Wesley,2007)。他还是开发SEMAT内核的小组负责人。 Svante Lidman Hansoft AB公司的高级生产力专家。在其25年的工业界生涯中,他曾经担任过开发经理、规划经理、项目主管、咨询顾问、培训师,供职过的公司包括IJI、Microsoft、Rational Software和其他公司等。在最近的五年中,Svante主要专注于大型项目中精益、敏捷方法的采用。他是团队动态管理和大型精益与敏捷软件开发实践的主要演讲人。 译者简介: 陈钟教育部计算机类专业教学指导委员会副主任,北京大学博士生导师、教授,现任信息科学技术学院计算机系主任,曾任北京大学软件与微电子学院院长。陈钟教授是SEMAT 中国区主席,《软件工程的本质:运用SEMAT内核》中文翻译组组长。

译者简介

陈钟 等译:暂无简介

译者序

本书终于和大家见面了,作为SEMAT中国的主席和本书翻译组的组长,我感到非常高兴。这是SEMAT发展的一个里程碑,也是软件工程领域的一件大事。
  本书英文版在写作过程中就受到SEMAT社区的广泛关注。英文版定稿不久SEMAT国际就积极地组织其他各国语言版本的翻译,中文版是最先启动的,其他还包括西班牙文版、俄文版等。我们也和大家一样,怀着兴奋、好奇和忐忑不安的心情开始阅读原著,并力求在深入理解SEMAT精髓理念的基础上同时把原英文版的文字准确、完整地映射到我们熟悉的汉语中,追求“信达雅”的翻译目标。然而,由于东西方文化的差异,直至完成译稿之后还是感觉有许多不尽如人意的地方。
  首先,我们很愿意向软件开发者和软件工程学者推荐这本书。这是一本与众不同的书,是引导我们重新认识软件、软件工程和人的关系的书。软件工程从1960年NATO会议上首次提出,已经走过50多年的历程,也出版过许多相关的书籍。但多数高校使用的软件工程教材强调软件产品开发与维护的工程属性和训练,而现实工作中软件开发者遵循在学校很少开课的敏捷开发方法。业界号称各种软件开发的模型和方法多如牛毛,甚至高级软件开发主管也感到无所适从。问题究竟出在哪里?正像我的导师杨芙清院士所指出的:软件是人们智慧的产品,兼具工程和艺术属性,因此软件工程师需要有数学的思维、工程的严谨和艺术的创造三位一体的训练。杨院士这一高屋建瓴的见解也成为北京大学创办软件学院,培养软件工程复合型、创新性人才的指导思想。我作为北京大学软件学院的创始院长,从2002年起在历时八年的任职工作中,跟随杨院士努力创建一个工程和艺术交融的软件工程教育环境,促进软件工程人才的成长,办学实践不仅得到国家级教学成果一等奖,更重要的是得到了社会的认可。我从北京大学软件学院院长岗位卸任后,恰逢Ivar先生发起SEMAT倡议后来中国与中国软件工程届交流并获得杨芙清院士的认可,在杨院士的推荐下我参与了早期的准备工作并担任了SEMAT中国主席,与国内软件工程同行共同反思软件工程理论与方法学。通过参与SEMAT国际标准化的研究与讨论,特别是和国际大师们的接触和交流,结合自己的工程实践,我看到工匠文化深厚的欧洲人对软件的工程与艺术不仅有深刻的认识,而且从理论的层面把工程和艺术有机结合起来,让理论、方法和实践有机统一,让开发、维护和使用软件的人们在一个共同的理论基石上协同发展。这或许就是SEMAT的与众不同之处。它没有教给你一个具体的新方法,但却教给你一个重新思考并有效建立软件与人的新体系的工具。更为可喜的是,SEMAT国际同仁们并不止步在SEMAT思想,而是经过不懈努力让SEMAT内核成为OMG的标准,进一步规范和指导软件工程实践,并为推动人们进一步丰富和发展SEMAT奠定了理论框架和技术基础。在本书出版之际,我们已经高兴地看到关于SEMAT内核标准的最后一轮OMG投票已获得通过。
  这本书阐述了SEMAT的本质,分享了运用SEMAT内核解决具体问题的案例和有效性,虽然篇幅有限涵盖不了更多的内容,但它是SEMAT的一个里程碑。我相信这本书对众多软件从业人员和软件工程学者都有重要的参考价值。
  其次,关于本书术语的翻译和理解。东西方文化的差异导致术语的选取和理解可能会存在差异或者空白,这个问题很难仅仅从字面翻译上来对应。举例来说,SEMAT在设计内核时选择了希腊字母阿尔法作为一个重要的构件,对于一个中国人来说,当你第一次听到或看到阿尔法时,你会想到什么?对于欧洲人可以很自然从字母表的位置常识理解它是第一和重要的概念,但对于中国人它更像一个抽象的概念而没有一个常识性的背景。事实上,阿尔法在SEMAT标准中也是经过反复斟酌最终确定的一个术语,之前软件工程界并没有使用过这个术语。在本书中我们选择直译为“阿尔法”,虽然感到不甚满意,但也只能如此,希望读者深入了解全部内容之后能够形成相应概念。
  本书的另一个特点是建立关于内核阿尔法及其状态的概念群,其中有许多概念具有敏捷文化色彩。众所周知,大量敏捷开发方法及其术语的中文翻译是非常不统一的,以至于许多中文文档干脆选择直接使用英文单词或短语表达而不去翻译,本书中提及的Scrum、spike等。
  书中介绍内核的七个阿尔法:包括Opportunity、Stakeholder、Requirements、Software System、Work、Team、Way of Working,大部分我们可以形成共识,其中Opportunity翻译成“机会”而没有称为“商机”,泛指所有商业或非商业目标的开发;Stakeholder意指“利益相关者”、“干系人”,但为了出现在卡片上更为简明,本书采用了“涉众”的译法。
  第三,关于本书的翻译组织。本书采取了一种基于迭代方法的新型翻译模式,有8位成员有幸参与到翻译过程中,阅读原著,之后平行翻译各个章节的第一版,在第一版的基础上通过研究生讨论班讲解各自的理解,对概念、方法、实例等进行深入理解,之后形成术语表并迭代修订出第二版。然后重新分工进行交叉阅读,修订形成第三版。在第三版的基础上重新进行翻译和精化,集中统一校对,对归纳出的共性问题进行讨论,并通过举行中国SEMAT研讨会和学术界及工业界同仁们进行交流和研讨,最终定稿。
  在这里,我要感谢翻译组中的每一位成员(马擎宇、梁卫国、沈玮、袁子晴、蔡飞志、周濛、汪博、郑聃崴)参与初稿翻译,研究讨论班的讲解和实践,以及交叉阅读所做出的贡献。感谢马擎宇在翻译过程中为协助整理术语表和集中统一格式排版所做出的贡献。
  第四,致谢。我要代表翻译组感谢复旦大学赵文耘教授,北京航空航天大学刘超教授和吴玉美副教授,清华大学刘强副教授和白晓颖教授,武汉大学何璐璐博士,南京大学陶先平教授,上海大学缪淮扣教授,北京大学孙艳春教授等,他们不仅代表国内7所大学支持直接参与了SEMAT的研究和教学的活动,而且通过阅读原著、参加SEMAT研讨会等为本书的翻译和定稿给予了大力的指导。
  我要代表翻译组感谢IJI公司的团队参加SEMAT中国研讨会并提供相关资料对翻译中文稿提出宝贵的意见。我还要感谢山东潍坊高新技术产业开发区管委会张龙江副主任专程来北京参加SEMAT中国研讨会并在近三年来对SEMAT发展的关注与支持。感谢中创软件陈志平副总裁、软件行业协会系统与软件过程改进分会王钧秘书长、CSDN蒋涛总裁等对SEMAT中国的积极推进支持。我要感谢美国佛罗里达州大西洋大学的Shihong Huang 教授和原书作者之一 Pan-Wei Ng(黄邦伟)先生对SEMAT中文术语和概念的有益讨论。
  我还要特别感谢Ivar先生在推进SEMAT标准化以及本书翻译过程中通过Skype所进行的跨时空的、经常的、细致的讨论,不论他在欧洲、美国、中国或开曼群岛的任何时区,都能够让我和翻译组的同学们近距离感受到这位大师的真知灼见和工作热情,也为更好地拟合东西方文化差异提供了非常有益的帮助。
  感谢机械工业出版社对本书出版所给予的大力支持。
  最后,进一步与读者交流与互动。本书的翻译只是SEMAT中国工作的一个开端,我们还将进一步组织OMG标准及其他重要相关文献的翻译出版,以期为中国广大的软件开发者提供最好的帮助。欢迎广大读者通过SEMAT中文网站www.semat.org.cn或英文网站www.semat.org关注SEMAT的最新进展,积极反馈意见并分享各种工具和资源。

陈钟
2013年4月

图书目录

译者序
Robert Martin作序
Bertrand Meyer作序
Richard Soley作序
前言
致谢
第一部分 内核思想解释
第1章 简要介绍如何使用内核4
1.1 为什么开发优秀软件具有很大的挑战性5
1.2 认识软件工程的本质:内核6
1.3 应用内核处理特定挑战:一个例子6
1.3.1 进入问题的要点7
1.3.2 处理挑战8
1.4 学习如何使用内核处理开发挑战9
第2章 关于内核的一些更多的细节10
2.1 如何使用内核处理特定挑战:一个例子11
2.2 阿尔法介绍11
2.3 阿尔法使用状态帮助团队取得进展14
2.4 更多关于内核的内容16
第3章 纵览完整的内核17
3.1 内核的组织结构18
3.2 对于进展和演变是本质的事物:阿尔法19
3.3 对于做什么是本质的事情:活动空间23
3.4 所需的本质功能:能力25
3.5 更多关于内核的内容26
第4章 利用卡片使内核阿尔法变得具体27
4.1 使用卡片帮助处理特定挑战:一个例子28
4.2 使内核活跃起来30
第5章 通过实践了解更多有关内核的细节32
5.1 使实践变得清晰33
5.2 实践的明确程度34
5.3 从实践中构建方法35
5.4 学习方法和实践36
第6章 内核可以为你做什么37
6.1 开发卓越软件38
6.2 成长40
6.3 学习40
6.4 演进41
延伸阅读42
第二部分 使用内核运行一次迭代
第7章 使用内核运行迭代:计划-执行-检查-调整44
7.1 使用的术语45
7.2 计划-执行-检查-调整45
7.3 设定场景47
7.4 下几章的重点48
第8章 计划一次迭代49
8.1 用阿尔法状态指导计划50
8.1.1 确定当前的进展51
8.1.2 确定下一步工作目标52
8.1.3 确定如何完成目标52
8.2 确定当前状态52
8.3 确定下一个状态54
8.4 确定如何达到下一组状态55
8.5 内核如何帮助你进行迭代计划56
第9章 执行和检查迭代57
9.1 使用内核执行和检查迭代58
9.2 执行和检查我们故事中的迭代58
9.3 内核如何帮助你执行和检查迭代62
第10章 调整工作方式63
10.1 使用内核调整工作方式64
10.2 调整我们故事中的工作方式64
10.3 内核如何帮助你调整工作方式66
10.3.1 明确工作方式66
10.3.2 改进工作方式67
第11章 使用明确的需求项状态运行一次迭代68
11.1 使用明确的需求项完成工作69
11.2 计划我们故事中的迭代71
11.3 进行我们故事中的另一次迭代71
11.4 调整我们故事中的工作方式74
11.5 讨论76
延伸阅读76
第三部分 使用内核运行一个软件开发工作
第12章 运行一个软件开发工作:从想法到运营78
12.1 我们故事中的人物和他们一路上所面临的挑战79
12.2 了解组织环境79
第13章 创建业务案例81
13.1 准备开始我们的故事82
13.2 了解机会和涉众84
13.3 了解解决方案86
13.4 准备工作88
13.5 制定一个概要计划89
13.6 建立时间进度表93
13.7 内核如何帮助你开始94
13.7.1 拥抱你的涉众94
13.7.2 指导开发95
13.7.3 预先计划95
第14章 开发系统96
14.1 构建骨架系统——让它能工作99
14.2 涉众参与100
14.3 开始开发101
14.4 建立一个各方都认可的工作方式103
14.5 使骨架系统可用——让系统工作得更好105
14.6 保持涉众参与106
14.7 演化一个可用的系统107
14.8 找到一个好的工作方式109
14.9 演进为可部署的解决方案——结束工作110
14.10 通过验收111
14.11 准备交付112
14.12 完成!完成开发工作114
14.13 内核如何帮助你开发卓越的软件115
第15章 运营软件116
15.1 设置场景117
15.2 上线——成功地部署系统119
15.3 部署系统120
15.4 两个团队之间的移交122
15.5 支持系统直到其退役124
15.6 我们的故事结束126
延伸阅读127
第四部分 利用内核来规模化开发
第16章 规模化意味着什么130
第17章 细化内核来提供更多细节133
17.1 对于缺乏经验的成员将“实践”变得精确134
17.2 实例:需求获取的实践135
17.3 实例:验收测试的实践137
17.4 了解实践是如何协同工作的138
17.5 “明确的实践”的价值140
第18章 拓展内核来适配不同类型软件开发141
18.1 商定需要使用的实践142
18.2 适应你的开发生命周期143
18.3 在开发过程中增量式地建立一个方法144
18.4 大型组织中的方法146
18.5 让团队控制他们的方法147
第19章 向上规模化内核来适用大型复杂软件开发148
19.1 大型软件开发的例子149
19.2 利用阿尔法来组织工作150
19.3 利用阿尔法进行可视化开发153
19.4 利用阿尔法来协调开发团队154
19.5 让团队成员参与内核的规模化156
延伸阅读156
第五部分 内核如何改变你在工作中运用方法的方式
第20章 考虑与不考虑方法158
20.1 不停地思考方法159
20.2 做比说强160
第21章 敏捷运用方法161
21.1 是整个团队而不是小部分人拥有方法162
21.2 关注于方法使用胜过综合方法描述163
21.3 不断演化团队的方法而不是保持方法固定不变164
第六部分 真正新在哪
第22章 重建方法166
22.1 并不缺少方法,缺少的是基础——内核167
22.2 内核重视实践性168
22.3 内核是可付诸实施的、可扩展的168
第23章 在方法上应用关注点分离原则170
23.1 将内核从实践中分离171
23.2 将阿尔法从工作产品中分离172
23.3 将本质从细节中分离173
第24章 关键区分174
24.1 方法上的创新175
24.2 方便软件开发团队和专业人员的实用工具175
第七部分 结语
第25章 这并不是终点178
第26章 ……,但是现在可能是序幕的结束180
第27章 愿景实现之时183
27.1 对于软件专业人员184
27.2 对于产业界185
27.3 对于学术界185
27.4 令人激动的未来186
延伸阅读186
附录
附录A 概念和符号190
附录B 本书所涉及内容相比内核的差异191
B.1 内核和本书都包含的内容191
B.2 内核不包含但本书包含的内容191
B.3 内核包含但本书不包含的内容192
附录C 参考文献193
C.1 SEMAT工作文献193
C.2 SEMAT:其他文档和参考文献193
C.3 其他参考文献195
作者介绍196
业内人士对本书的评价198
索引206

教学资源推荐
作者: [美]保罗·阿曼(Paul Ammann);杰夫·奥法特(Jeff Offutt) 著
作者: [美]Jeffrey L.Whitten,Lonnie D.Bentley,Kevin C.Dittman
参考读物推荐
作者: Glenford J.Myers,Tom Badgett,Todd M. Thomas,Corey Sandler
作者: 邱郁惠
作者: (美)Glenford J. Myers, Tom Badgett, Corey Sandler 著