Steve Freeman 写了一篇 blog 拥抱极限编程(Do do XP) 来反驳我的这篇文章。
我开始厌倦了和那些坚持认为Scrum离开了极限编程就不再有价值的人的无休止的论战。 Scrum 很好用 — 但前提是实施者必须从基础上理解它的价值所在和实施原则。 你应用Scrum所处的环境条件决定了你在实施过程中应该采取哪些措施。 比如,在教堂里实施Scrum和在软件开发中实施Scrum有着不同的一套实施策略。而这两种情况下的实施措施又和传统的Scrum有不同之处。
极限编程的拥护者动不动就抱怨在软件工业中Scrum没有提供很好的开发原则。 但就目前极限编程被业界采纳的缓慢进度来看,真正应该受责备应是XP的缺少实践措施的问题,XP应该为这种状况负责。
从八十年代到九十年代,随着开发语言的进步和更适合于软件设计,人们开发和测试的方式发生了改变。 在广大的面向对象群体中,有些概念正在缓慢的、但广泛的被人们所接受。例如持续反省、限制责任、测试代码优先(TDD)、持续集成、推迟设计、编码规范、以及结对编程等。 所谓的极限编程 (Kent Beck和他的一些同事所做的) 也就是将所有的这些好的实践方法集中到一起打成一个包,再加上Jeff Sutherland 1993年在Easel公司实践出的Scrum模式。 某种意义上说,这也就有抽象Scrum概念的第一次具体的实现。
这些都很成功。 然而他们的这些实践经验的推广和采纳并没有像他们想象的那样进行。 也许就是因为取了个极限编程的错误名称; 也许是因为主要的、嗓门最大的拥护者非要说这是唯一真理的原因; 也许是因为管理者恐惧这个新出现的异类,暗中作梗反对它; 也许是因为,说到底,XP也不过是另一种开发方法。 我不知道。 我只知道,只有很少的开发团队宣称和承认采用了XP。
然而与此同时,Scrum正在获得强大的发展动力。 并不需要多少华丽的理由,实际情况却是Scrum正在被为数不少的团队接受,正在用它来改进我们软件的开发过程。 反而是XP现在想来分一杯羹。 他们确实很饥饿。
首先,让我把问题说明白。 我十分赞同软件开发团队采用一些已知的实践指导来提高代码质量、生产更高水平的软件作品。 但为什么这么多人不愿意这么做? 我不太喜欢把十几个任务打个包直接丢给团队,也不喜欢事先指定一种开发方法让他们必须遵守。 那样做很显然违反了“people over process”和自我管理原则。 在好的Scrum实施里,团队成员应根据自身情况找到适合自身的实施策略,这样的Scrum应用过程才是与实际相结合、才有意义。 这才是我追求的进步。 有些Scrum团队一直没有找到很满意的开发方法,这说明Scrum实施方式需要改进,而不是去告诉团队成员强制实施。
我有一个问题思考:如果XP从来没诞生过,有多少团队愿意完全接受所有XP所推荐的方法? 我相信会有很多。 我相信这些宝贵的开发经验会自然而然的被程序员和团队们采用,对我来说,关心的是经验本身,而不是他们出现的形式。 我从来没有“done XP“,但我显然可以写出高质量的软件。 XP的错误就在于坚持要求全盘接受。 这并不是XP的创始人的初衷,可现在却搞成这样。 很可能就是XP导致了这些好的实践经验不被人接受。 很讽刺,不是吗?
另一个大问题是,XP论述写于12年之前,于此至今已有40多种新的语言诞生。 XP倡导者在向人们推荐12年前的、现在可能过时的经验 — 12年相当于整个软件工业年龄的四分之一。 惊人吧。 让人们去发现适合自己的开发方法,他们将会总结出最有效的开发经验,这远不是几个脑瓜好用的人在上个世纪末能创造的。
我强烈要求Scrum倡导者停止与XP的争吵,我们讨论的应该是软件艺术。 这才是我们在这个领域里急切需要的最终目标。 幸运的是,现在有一个有着自己的manifesto的软件艺术运动正在逐步为人们所关注。 最终,我们可以通过好的软件艺术实践运动重新改革我们这个领域,而不是使用那些修修补补的策略。
开发者们:Don’t do XP。 我们要实现一个通常意义上的指导框架,解决多年来的困扰,构建以人为本的核心基础。让我们重新为艺术而工作。或者从此离开这个行业。
英文原文:Don’t do XP
我一直都是测试驱动开发,一般XP和Scrum结合使用,这么做make sense。
最近关于极限的话题都集中在软件开发的四个不同的部分的流程:需求收集,设计和开发软件,测试结果和整体项目的管理。 正式的需求定义和分析解决了不能实现或是反映顾客需求的问题。 在实现功能之前的正式设计,解决了重新定义目标,操作一致性,减少反复作业。 测试在沟通客户之前抓住问题。项目管理解决跨部门合作的协调问题。
额外的处理步骤,角色和工作帮助许多团队享有较高的成功和客户满意度。
与此同时,一些项目非常成功但是没有与文档相结合,没有细节设计和项目计划。许多有经验的程序员获得成功却没有这些多余的步骤。项目成功的因素被看作是人,而不是技术或是方法被使用,这一点并不被看好。
感觉做开发,最重要的还是跟客户确定需求,了解整个软件是解决什么问题的。根据需求,写个需求规格说明书,把具体到每个细节写好后,然后在设计数据库,编码。