“ The Essence of Software Engineering(软件工程精髓)”的出版,将帮助更多的读了解软件工程方法和理论(SEMAT)倡议。这本书给出的可执行的核心(kernel),有助于软件开发组织理解并改进其工作方法。
书中所给出的核心,由两部分组成:团队进行软件的过程中,我们总会拥有的与我们总会去做的。团队可以使用核心元素来讨论如何完成需要做的工作,并根据需求探索完成这些事情的不同方法。核心让团队能够聚焦于结果而不是文档或活动。团队成员则可以在日常工作中使用卡片上对元素的描述,让团队能够对工作方法进行自我评估并进行持续的自我改进。
这本书是 SEMAT 方面的首部著作,它重点针对敏捷方法和软件开发方式,并由此确认了敏捷是软件开发中的一种可用而且相关的方法。这本书对正在采用敏捷和精益方法的组织机构来说非常有帮助,因为它通过软件工程的核心,积极地支持自我组织的敏捷概念。
InfoQ 采访了 Ivar Jacobson。他是该书的作者之一,同时也是 SEMAT 的一位领导者——SEMAT 的宗旨是将软件工程“重新定义”为一门严肃的学科。
InfoQ:谢谢 Ivar 接受我们的采访,请问为什么你现在的兴趣集中在 SEMAT 上?
Ivar:大约自 2000 年起,我的兴趣就从软件开发中的技术实践部分转移到了人类实践方面。我注意到,在开发者社区中,仅有很小比例的成员采用了我们已经开发的各种奇妙技术。今天,整个开发者社区已经接近 2000 万人,但采用率并没有增长。与此同时,敏捷运动却在快速成长。我认同敏捷宣言,并欢迎敏捷社区中不断涌现的大量新的实践。在我的公司里,我们向全世界学习,并将许多现存实践——例如用例和架构——进行转变,使其成为超轻量级、敏捷和精益的。
我们的焦点已经转移到大型企业如何运用敏捷上,我们发展出三项扩展敏捷的规则,并将其运用在当前与客户的工作之中。在工作中,我们注意到软件社区拥有一些更基本的问题需要解决——现存方法未能这些问题,而如果我们能够做到,那么我们所做的将适用于所有现存方法——无论它们是否属于敏捷方法。SEMAT 正是为此而生。我们注意到,我们正在面对的是一项艰巨的任务,或许需要很多年才能取得成功。我们注意到,前行的道路充满曲折,而且在很长一段时间里恐怕都不会获得回报。此外,我们还注意到,要想取得成功,需要走出一条与过去完全不同的道路来面对这些方法。
InfoQ:能否请你为那些不太了解的读者,简要介绍一下软件工程方法和理论(SEMAT)?
Ivar:SEMAT 创建于 2009 年,其宗旨在于“基于坚实的理论,经过验证的原则,以及包含广泛认同且对特定用户可扩展的核心元素的最佳实践,来重新发现软件工程”。这是我们的宣言。我们已经识别出许多软件社区中的关键问题,例如“像时装业流行的时尚多于工程学科”、“大量方法及其变种,而其分别缺乏理解或虚假地作大”,以及“业界实践和学术业界存在分歧”。
现在有超过 50 名来自世界各地的志愿者,正在积极地参与 SEMAT 的工作;并有超过 2000 人支持这一项目。SEMAT 已经迈出了它的第一步,也即是得到了被称为精髓(Essense)的核心——它已经被采纳为标准。精髓(Essense)代表着我们使用方法方面的范式转移。历史上,所有的方法都表现为描述(如论文、书籍、手册)的形式,但运用 SEMAT 工作时,焦点将从谈论(描述)转移到实操工作。当开发者们在实际工作中使用他们选择的方法时,将从精益和敏捷潮流中得到支持。
InfoQ:这本 SEMAT 书籍描绘了一套软件工程的核心元素。这些元素是什么?
Ivar:核心包括那些在开发软件时我们总会拥有、以及总会去做的事情。在所有软件开发进程中,它是通用的——无论敏捷还是前敏捷。SEMAT 拥有许多全新的理念。我们将其中之一称之为 Alpha 概念。在 7 年多的时间里,我们一直运用这一概念,而它的价值也经由我们公司的众多客户得到了验证。这一概念让团队能够聚焦于实操,而不是文档化描述工作。团队能够使用与实践或方法无关的方式,来评估他们工作进程的进展和健康度。团队能够在任何时刻找出自己身处何方,以及接下来将要向哪里前进。这让团队能够采用结果导向的方式,而不是文档驱动或是以活动为中心的方式。Alpha 概念还支持其他若干理念,例如,某个方法由构建在通用核心之上的多个实践组成。得益于 Alpha 概念,我们已经能够创建一套健壮的、可扩展的、直观的核心。
InfoQ:你刚才提到了 SEMAT 采用的新理念之一——Alpha 概念。能否为我们再多介绍一些?
Ivar:SEMAT 依赖两个重要原则:1)运用方法时保持敏捷;2)分离关注点。当我们研究精髓(Essence)时,这些原则几乎从各个方面指导了我们的工作。
InfoQ:对软件工程来说,是什么使得运用方法时保持敏捷变得如此重要?
Ivar:“运用方法时保持敏捷”这个原则需要心态上的转变,类似于与从传统软件开发向敏捷开发转变所必需的条件。例如 a)由整个团队掌握团队的方法,而不是仅由少数精选的方法学家掌握;b)聚焦于方法的使用,而不是方法的全面阐述;c)让团队的方法演进发展,而不是保持方法一成不变。
InfoQ:你提到分离关注点是指什么?
Ivar:分离关注点可以有多种解读,不过我们所运用的,可以简单描述为“让基础元素保持简单,但允许在不改变基础元素的前提下对其进行扩展”。一般来说,人类在推动事物演进的时候都会使其复杂化。例如,软件的第一个发行版往往比较简单,因为它只有最少的功能。而如果软件取得了成功,人们就会希望增加特性。为了实现这一目标,人们会认为必须改变已有的内容,才能够容纳新增特性。因此,软件会变得更加复杂。好消息是我们其实不必如此。实际上我们可以扩展已完成的工作,而不必对其进行变更。
InfoQ:书中提到核心是可执行的,其目标是“在软件专家执行自己的工作时,为其提供帮助”。能否对此展开详细说一说?
Ivar:说起核心是可执行的,我们的意思是:处于进程中的时候,核心因我们的使用而变得活跃起来。在每个进程中总是普遍存在的基本元素——例如需求、软件系统、团队和工作——随着工作的进展和实践的运用,而从一个状态转移到另一个状态。其中一些或许可以被描述,而其他的或许只是隐性知识。例如软件系统将会经历以下状态:架构选项、验证、可用、就绪、可运行和退出。
InfoQ:核心使用了“Alpha”和“状态”两种说法,来描绘软件开发方法。能否为我们进一步解释一下如何使用它们?
Ivar:在核心中有 7 个 Alpha:需求、软系统、工作、工作方法、团队等等。他们代表了在一次工作进程中,我们需要取得进展的不同维度。而它们每一项都有自己的状态集,包含了随着我们工作进程的进展而需要进入的状态。
在使用精髓(Essence)进行工作时,我们首先要做的事情是评估目前已经达到了哪个状态。对每个 Alpha 和每个状态来说,都有一系列检查点,它们表明了要达到该状态需要满足的大量条件。一旦我们明确了自己处于哪个状态,我们就将要决定下一步行动将要转移的目标状态,也即是在下一个迭代或冲刺中想要达到的那个状态。对这样的每一步行动来说,都有大量需要完成的任务。具体需要做哪些任务,取决于我们所运用的实践。如果这些实践是隐性的,那么我们就基于团队共识来运用它们。如果它们有对应的说明,那么我们就从实践描述中获得它们。
InfoQ:当一支团队决定改变自己的工作方式时,是否能够选择自己需要的实践?他们何时能够开始运用这些实践?
Ivar:小而精的团队能够如愿使用核心。他们必须理解核心中的 Alpha 以及对应的状态,而后便可以基于已有的经验和知识,在团队内部就如何改变状态达成共识。能力弱一些的团队则需要一些关于如何改变状态的指导。之后他们将能够从实践库中选择实践,而这些实践将被添加到核心之上——现在,开发这样的库是 SEMAT 的首要任务。目前 SEMAT 只开发了少数实践,以验证这个理念是可用的,其中包括 Scrum 实践和一种用例切片实践。基本上,这些实践是为那些对细节不那么感兴趣的人开发的。社区中的大部分开发者,都乐于看到每个实践只配备一份概要描述。然而,另外一些人则需要更细化的指导以配合其领域中的规则,例如那些开发关系到生命安全的系统的人们。实践库将同时满足上述以及其他若干种用户类型。
InfoQ:精髓(Essence)在 Alpha 和工作成果之间划清了界限。那么它们的区别在哪里?
Ivar:首先我们使用工作成果的概念,来代表文档和其他类似产物。
就像我在前面所说的,Alpha 是精髓(Essence)中的关键元素。它们拥有状态,并使用检查点对状态进行了定义。某个 Alpha 的状态并不是由工作成果的产出直接决定的,而是由其进展和健康情况(由检查点定义)决定。而核心只拥有七个 Alpha。
我们可以在核心之上“谱写”实践。对每个实践,我们都能够为其“增加”特定的 Alpha。工作成果也会与实践相伴;因此他们可以是针对特定实践的。每个工作成果都依附于某个 Alpha。其中部分工作成果附在核心的 Alpha 上,部分则附在与实践相关的 Alpha 上。由此我们得到了精髓(Essence)的一个有趣特性:对某个产品来说,工作成果的数量是 Alpha 数量的 N 倍——N 最高可能达到 10。因此我们强调 Alpha 而不是工作成果,是为了聚焦于谈论 10 项元素而不是 100 项,这着实是一项进步。
此外,在精髓(Essence)中,每个工作成果都有一项属性:“详细等级”,它有若干不同等级的取值,例如隐性、概要、列表……一直到完整描述。对敏捷项目来说,这一属性一般都处于较低的详细等级。而对关系到生命安全的系统来说,一般要求高等级的细节。另外,我们都知道,工作成果拥有较高详细等级,并不能保证它的 Alpha 发展到新的状态。
从我个人来自于实际的大规模通信产品的经验来说,大部分文档都只是编写出来,却永远不会有人去读。或许我应该更准确地说,文档中的大部分内容永远不会被读到;它们并不是为了促进理解,而只是用来填充模板。使用精髓(Essence)方法,产品文档将会被显著地减少到真正必须的程度。工作进展可以用 Alpha 来衡量,而不是海量文档。
InfoQ:能否给出一些更具体的例子,来说明 SEMAT 如何运用分离关注点原则来设计精髓(Essence)?
Ivar:核心非常简单,但它可以通过实践来扩展,从而构建更多高级方法而不必做出改变。这里有一些例子:a)将核心与实践分离;b)将 Alpha 与工作成果分离;c)将重要的东西与细节分离。
将重要内容与细节分离,让我们能够对不同用户类型使用不同的描述。全世界 2000 万开发者中的大部分参与者,都对综合描述并不感兴趣;他们只是想要知道什么是重要的。然而,就像我们刚刚讨论过的一样,部分开发者——例如生命安全相关系统的开发者——有责任非常详尽地定义他们的实践。与次关键系统的开发者相比,他们需要更详细的描述——但又不能将之复杂化。
InfoQ:你之前曾提到,实现 SEMAT 的道路将是崎岖的,而且距离获得回报还很远。听起来似乎使用敏捷思想,来尽早考虑风险以及尽早交付成果,会有助于实现从社区获取快速反馈的目标?
Ivar:这个问题不错。当然,我们在开发精髓(Essence)时确实采用了迭代的方式。精髓(Essence)同时包含由通用元素组成的核心,以及一种语言。我们设计该语言是为了描述核心元素、描述在核心之上的实践,以及描述组成实践的整体方法。
这项工作始于三项架构刺探(architectural spikes,注:指软件整体中的一部分,用来诊断和测试潜在的架构)——冲刺、迭代——在每个架构刺探里我们演进核心、语言和核心之上的少量实践。我们尝试了多套核心元素、语言结构和实践,最终收敛得到现在精髓(Essence)中的内容。我们特意让这门语言变得非常简单,以适用于那些对形式化方法并不是非常感兴趣的参与者。通过使用分离关注点原则,我们增加了语言结构来表达更多细节,以便需要的人使用。
InfoQ:SEMAT 如何协助跨越软件工程研究,与使用行业惯例的应用之间的鸿沟?
Ivar:当然,这还有待观察,但某些证据表明这或许会发生。在 SEMAT 中我们拥有一支伟大的团队,正在致力于我们所谓的“理论领域”。他们正在寻找软件工程领域的通用理论。今年五月底,我们在旧金山的 ICSE13 上有一场非常成功的研讨会,共有 25 位与会人士出席,并发布了 10 篇论文。目前为止,这项工作还处于起步阶段,我们正在建立对理论的需要,并正在识别对这样的理论的要求。
我们期望精髓(Essence)的核心将能够以重要角色的身份,出现在对软件工程(或者说软件开发)到底是什么的定义中——在我看来,对创建一个实用的理论来说,它可能是最需要的。此外,衡量进展的能力也有助于评估任何理论。话虽如此,我们并没有推动理论家将精髓(Essence)运用到他们的理论工作中。
显然,我们的目的在于获得一套实践理论,最终能够在开发软件过程中提供帮助。包括我在内的一些人认为这个理论将从社会技术方面,认识到软件开发是一项运用技术实践的人类活动。
InfoQ:如果某个组织机构想要使用 SEMAT,是否能够找到一些关于核心的专业培训课程,他们又该如何申请?
Ivar:现在已有针对核心及其应用的许多不同等级的培训。在 SFO 有一份与 GTSE 研讨会有关的三小时的精髓(Essence)教程,它于 6 月 7 日在莫斯科、6 月 20 日在柏林现身。在学院方面,在佛罗里达亚特兰大大学、哥伦比亚国立大学、瑞典皇家理工学院、挪威奥斯陆大学,以及其他许多学校中作为课程进行讲授。自 2007 年以来,我们公司就在讲授核心。我们还在欧洲、美国和中国讲授“敏捷与 SEMAT——完美伙伴”。据我所知,还有许多其他公司有兴趣提供 SEMAT 及其产出的培训。
InfoQ:某个组织机构如果想要使用 SEMAT,是否会涉及一些费用?例如授权或认证的费用?
Ivar:使用 SEMAT 无需授权费用,而且还有一些免费的工具。不过,认证分为若干不同等级,而且会产生费用。
InfoQ:如果人们想要进一步了解 SEMAT,或是拥有某些困惑,又或想要获得帮助,他们应该怎么做?
Ivar:大家可以访问 SEMAT 网站,从中找到一些新闻,并了解全世界各地正在发生什么。如果他们真的很想深入了解,那么可以去阅读精髓(Essence)规范。
如果人们有兴趣参与到推动这项工作前进的队伍中,他们可以成为一名支持者。联系我或者 SEMAT 的任何工作人员,我们会找到一些有趣的东西来创建。
关于 Ivar Jacobson
Ivar Jacobson**** 博士是组件和组件架构、用例、UML 及 Rational 统一过程的缔造者。他在现代业务建模和面向方面(aspect-oriented)软件开发领域都有所建树。最近,Ivar 一直致力于研究如何用敏捷和精益的方式,来处理方法和工具。
在 2004 年,Ivar 获得了来自瑞典歌德堡的 Chalmers 理工学院办法的 Gustaf Dalen 奖章。同时他也是北京大学国际名誉顾问、秘鲁圣马丁大学荣誉博士。他是六本有影响力的畅销书的主要作者,以及两本 UML 著作的合著者(与 Grady Booch 和 James Rumbaugh 一道)。Ivar 还是 Ivar Jacobson International 的创始人,其分支涉及全球七个国家。要了解 SEMAT 的更多信息,请访问 IJI SEMAT 支持页面。
查看英文原文: The Essence of Software Engineering: Book Review and Interview with Ivar Jacobson
评论