BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

敏捷十年的个人反思​

| 作者 Stephen J. Mellor 关注 0 他的粉丝 ,译者 陈宇 关注 0 他的粉丝 发布于 2011年8月4日. 估计阅读时间: 7 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

本文是《敏捷宣言》10周年系列纪念文章之一,该系列文章将陆续在InfoQ上发表。

被邀请参加那次产生了敏捷宣言的会议我感到很惊讶,因为我所做的工作一直都是关于建模方面的。与Paul Ward一起著作的三卷本《结构化开发实时系统》,与Sally Shlaer合作的两本面向对象分析的图书都专注于分析和设计,而很少把深受敏捷实践者喜爱的编码和测试作为重点。

此外,我刚拜读过Kent Beck的极限编程。不重视前期思考、憎恶模型和反对文档,这吓了我一跳。然而,这显然是轻量的、极限的或是敏捷的达到目的的方法。因此我决定参加会议。事实上,在冬日的洛矶山脉无事可做。

我自我介绍时说,我是个想阻挠他们邪恶计划的间谍。而会议中我发现许多关于 过程的观点听起来不错(比如,与客户交流,时间窗),对模型的反对确实不合理。是的,对“前期大规模设计”的过分强调是存在的,但模型确实也还有些价值。 是的,撰写文档(和模型)已被视作最终目标,但显然正确的回应是不要让无意义的文档妨碍来自建模的生产效率增长。

那么为什么模型如此糟糕?因为它们并不执行,我被如此告之。然而我十多年来的工作都专注于构建可执行模型。这次会议前几天我与几乎所有的宣言签署者有过一段对话,有时对话不只一次。对话如下图所示:

这一意见相左的出现,是因为我们在“模型”这个词的含义上各持己见。一些签署人把模型视为草图(如果他们真的思考过模型的话),画在餐巾纸上用于沟通的草图,用完就扔。最让人愤怒的是把模型视作蓝图,画完后扔给隔壁言听计从的开发人员。这些观点我都不认可。我认为模型能运行。

虽然我们在2001年就在执行模型,用我们自己的动作语言运行。我在会议中不断的听到,没法用统一建模语言(UML)写个显示“Hello World!”程序。然而事实上在UML中显示“Hello World!”是可以做到的,当然这并不容易。实际上这是个编写代码的广告。如果建模想要被广泛地视为是可执行的,就需要解决这一问题。

在1997年,当UML作为标准被接受时,在模型中只能实现七种动作,其中之一是“无解释字符串。”(签署者认为模型不能执行当然是可以谅解的!)我曾提议为UML提供一个标准动作语言。一些人立即建议标准化Java,或Smalltalk,或...

但一门现有的编程语言是不能胜任的,因为它的抽象层次太低。所以它会(在某种程度上)把应用程序概念和实现混杂在一起。例如,当我们构建一个特定的数据结构(一个客户的列表,也就是一堆指向账户列表的指针)时,我们已经做出关于实现的决定。在UML中,我们会把这表示为一个关联,但不会指定它的实现。

此外,我们在代码中操作这一数据时,不得不要考虑到我们所选用的实现方式。例如,要统计某一顾客的所有账户余额,我们需要遍历链表。更简单的方式是说(以某种方式)“统计这名客户的所有账户余额”。

我们并不是非要能够在UML中执行模型——我们能通过加入代码就做到这点。我们想要的是达到更高的生产率,而这来自远离实现的更高抽象层次。我们也希望能够在不改变问题的描述的情况下,改变对实现的想法。如果我们把客户和账户放入数据库实现中,UML模型也应有同样的应用含义。

在接下来的十二年间,我们(对UML进行标准化的对象管理组织的成员,尤其是来自模型驱动解决方案的Ed Seidewitz)创作出一系列的标准,定义了允许在UML中进行的动作的种类;为了执行定义了一个UML的子集;明确地为这一子集定义了语义;并(终于!)为UML定义了一个标准动作语言。

在这一语言中,上面的例子会写成这样:

myCustomer.account.balance -> reduce '+'

其中“reduce”是一个操作,执行一个二元运算,从myCustomer遍历至他们所有的账户生成的一组余额,然后不断重复‘+’直至剩下一个值为止。当然这可以转化为实现,或用链表,或用数据库,或用其他。在任何规格说明书中都没有列表,仅对需要做什么有一个非常简洁的声明。(顺便说一下,该语言有一个设计需求:它应易于为Java程序员使用,其中许多语法与Java相似。在这儿给出的例子不是想让人迷惑,而是为了阐明摆脱实现的力量。)

早在2001年,承蒙其他签署人的好意,撰写宣言是用了“软件”(包含了可执行模型)一词,而不是“代码”(更具体。)说良心话,就这点而言我觉得我可以成为一名宣言的签署者,同时继续促进可执行建模。十年过去了,我们有了一个供敏捷建模用的标准动作语言。

我们很少在同一个句子里看到“敏捷”和“建模”这两个词,但它们一点也不冲突。恰恰相反,建模者能从实施敏捷的人身上学到许多(例如,尽早为模型构建测试),遵循敏捷过程的人还能受益于提高的生产率和轻松的客户沟通,这种轻松的沟通则来自于分享与客户结对建模构建出的可执行图表。无疑,所有人都能获益。

更多详细信息,包括重要参考文献,请查看这一链接

关于作者

Stephen J Mellor是一名独立教师及顾问,专注于实时和嵌入式系统的架构方法。他的著作有,结构化开发实时系统(早在1985年),对象生命周期,可执行UML 和MDA精粹。他还是(也许有点让人吃惊)敏捷宣言的签署人。直到最近,他成为Mentor Graphics公司嵌入式软件部门的首席科学家,在Project Technology有限公司被收购前,他还是这一公司的创始人和轮值主席。他参与了对象管理组织(OMG)的许多UML/建模相关的活动,他是OMG架构委员会的成员,这一委员会为所有OMG标准做最后的技术把关。

Mellor先生曾担任IEEE Software顾问委员会主席十年之久,并两次担任这本杂志的客座编辑,最近一次是为了一个关于模型驱动开发的问题。他也是位于澳大利亚堪培拉的澳洲国立大学副教授。

查看英文原文:A Personal Reflection on Agile Ten Years On


感谢崔康对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家加入到InfoQ中文站用户讨论组中与我们的编辑和其他读者朋友交流。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

敏捷在现实在 by 吴 顺

现实中,似乎成了无标准开发、无文档开发、无需求开发的草台班子,为自己的开发模式换名的工具。同时,也是一部分人吹嘘的技术名词!

Re: 敏捷在现实在 by 李 中华

敏捷侧重人,而不侧重过程;侧重结果,而不侧重文档。
所以,现实中很多团队忽略了过程和文档,再加之TDD、重构等重要过程做的一塌糊涂,造就了一团糟。

Re: 敏捷在现实在 by 李 中华

不侧重=不需要。
我估计很多人是这样理解的。

敏捷宣言的签署人中居然有位建模专家! by 高 翌翔

刚开始看到标题下写着作者Stephen J. Mellor只是觉得似曾相识,文章最后明确提到他是“敏捷宣言的签署人之一”,这才恍然大悟,原来在敏捷宣言下曾看到过他的大名!

确实,我所看到、听到的关于建模的建议都是写在餐巾纸或是白板上的快速分析,记得《敏捷软件开发》中Bob大叔曾多次提到类似的做法。可是,当合上书时,应该如何分析你的问题域?餐巾纸或白板并不能给你提供任何答案!这时我才意识到,Bob大叔在书中并未给出答案,他只是演示了一些敏捷匠人的招式罢了,完全没有涉及任何决策分析方法的讨论,但是我相信决策分析方法已完全溶入Bob大叔的血液之中,所以他才能随心所欲、手到擒来。

我认为分析的结果应该是领域字典和领域模型,它们可以是正规的文档形式,例如Word+UML等,或者是非正规的文档形式,例如经验丰富的Bob大叔+餐巾纸。由此可见,Mellor先生强调的是模型的标准化及其更丰富的语义表达,而Bob大叔则更重视经验,强调通过快速迭代修正分析错误。

可见,分析建模从来就没有消失,只是在宣传敏捷时被刻意回避了。而找到适合自己的分析建模方法才是关键!我个人更看好“领域驱动设计(DDD)”。

只有经历过了解过标准的流程, 才可以谈裁减和敏捷 by Yan Gandof

否则, 做出来的东西很容易什么都不像.

Re: 敏捷宣言的签署人中居然有位建模专家! by 王 勇

同样上面的说法,敏捷前提是成为技术大牛,否则,就是有敏捷的承诺,也无法实现。

Re: 敏捷宣言的签署人中居然有位建模专家! by Chen Guanghui

同样上面的说法,敏捷前提是成为技术大牛,否则,就是有敏捷的承诺,也无法实现。


很多时候若滥用敏捷,agile变成了fragile

Re: 敏捷在现实在 by L YD

有道理

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

8 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT