如何实施极限编程?

敏捷开发
• 阅读 235

极限编程虽然是敏捷开发的一种主要方法,但真正实施极限编程的团队比率很低,只有可怜的7%(数据来源:《2021年度敏捷状态报告》)。是什么原因阻碍了极限编程的推广和实施呢?结合我们自身实施极限编程的经验体会来看,我觉得可能有如下的原因:

首先极限编程并没有Scrum和看板那么酷。Scrum会对流程有明显的改动,很容易让团队感知到变化。作为改革的推动者,Scrum教练也更能体现自己的价值。看板本身就非常强调可视化,所以在价值呈现方面有先天的优势。但是极限编程的实践更多的是集中在工程侧,流程方面相关的实践又与Scrum有相似的地方,不太容易体现自己的价值。

其次极限编程的实施需要长期的过程,坚持下来并没有那么容易。就拿极限编程里面最简单的实践编码规范来讲,相信每一个研发团队都有自己的编码规范,但实际的执行情况如何呢?我想大部分的团队是形同虚设吧。

还有些实践的落地实施比较有争议。极限编程大多是修炼内功,做内部质量,但这些对于交付项目和功能、满足交付时间来说,贡献在于长期,而短期看来是会影响交付日期的。

比如结对编程是一个很好的的实践,但很多团队的管理者第一反应就是:太浪费时间了,怎么可能用两个人的时间做同一件事呢?再比如测试驱动开发(TDD),有的敏捷教练会坚持认为不做TDD就不是敏捷。但在实践中,TDD除了写功能代码之外还要写测试代码,对开发人员对编码习惯和意识也是很大的挑战,时间上的投入也会比较多,这些因素都会阻碍TDD的推行。代码Review也是同理,这段时间并没有短期内的产出,在管理者看来就是花费了额外的时间。

有的实践落地实施起来比较有难度和挑战。比如重构,在没有充分的自动化测试覆盖的前提下,对现有的代码进行重构很可能是一件费力不讨好的事情。很有可能改了一个地方,反而引发了更多的问题——那就多一事不如少一事。

阻碍团队实施极限编程还有一个客观原因是研发团队普遍处在资源极度紧张的状态。时间和人力资源都要最大限度地做新功能,在这种状态下没有人会主动来做自动化测试、做重构。

极限编程实施的效果也很难度量。现在的研发团队普遍缺少有效的度量体系,所以实施极限编程前后的变化很难让团队和公司的管理层认知到。

总结下来,一个并不是那么酷的方法,容易做的不容易坚持,有挑战的又做不来,即使做下来效果又没有那么明显,再加上时间又很紧,所以很少有人采用也是常理。

尽管极限编程实施起来有各种的困难,团队更应该实施极限编程,而且应该尽早实施。一个团队要想做到持续交付,工程能力是基础。极限编程是目前市面上提升研发团队工程能力最有效办法。 通过实施极限编程,提高团队的工程交付能力,可以在竞争中建立自己的优势。而且极限编程是一种复利型的投资,越早实施,回报率越高。

那么应该如何做来真正实施极限编程呢?

首先极限编程需要一位对团队有足够影响力的管理者来推动。如果有可能的话,这个角色最好是CTO这样level的管理者。只有自上而下的推广,才有可能真正促进极限编程实践的落地。毕竟做极限编程是需要做一些资源投入,如果高层不给足够的支持和授权,单纯靠研发团队自发推动,是很难坚持的。

其次逐步实施极限编程。 实施极限编程不会对现有的项目管理流程进行变革性的改动,团队可以从比较简单的实践开始,到逐步采用比较复杂的实践。比如编码规范、代码集体所有权等,都是比较简单易行的实践,而且实施效果比较好。而有一些比较有挑战的实践,则可以先从细小的地方开始。比如持续集成,我们可以先做到每日提交。只要能够及时更新代码并将自己的改动提交到库里面,其他同事也及时更新代码并及时提交,这就是一个集成的过程。再比如TDD,可以先从单元测试开始。如果单元测试还有难度,可以先从整理测试用例开始。通过整理测试用例,培养开发人员的测试意识。当一位开发人员有了测试意识之后,再来写代码的时候就会有相应的标准,从而写的更稳重、更严谨。

把“公司要求做极限编程”变为“我要做极限编程”。可以在平时的迭代过程中,给团队预留一定的时间,让大家来尝试一些以前没有做过的实践,并鼓励大家在团队内部进行分享。每个团队都会有比较积极活跃的开发者,他们也会有提升自己的诉求。只要给他们一些支持,他们会很乐意尝试新东西的。万事开头难,只要有人开始做,就可以慢慢地影响其他人。

积极地推进结对编程和代码评审实践。如果一个团队决定开始做极限编程,在做好编码规范的前提下,可以积极推进结对编程和代码评审。这两个实践非常有利于好的规范、知识和经验在团队内部传承。我们团队的结对编程和代码评审是常态,随时都会进行。

万事开头难,决定了就去做,一份努力就有一份的收获。种一棵树最好的时间是十年前,其次是现在,实施极限编程,任何时候都不会晚。

更多优质实践分享,欢迎关注敏捷开发!

点赞
收藏
评论区
推荐文章
捉虫大师 捉虫大师
2年前
太极限了,JDK的这个BUG都能被我踩到
hello,大家好呀,我是小楼。之前遇到个文件监听变更的问题,刚好这周末有空研究了一番,整理出来分享给大家。从一次故障说起我们还是从故障说起,这样更加贴近实际,也能让大家更快速理解背景。有一个下发配置的服务,这个配置服务的实现有点特殊,服务端下发配置到各个服务的本地文件,当然中间经过了一个agent,如果没有agent也就无法写本地文件,然后由client
Karen110 Karen110
3年前
人工智能数学基础8:两个重要极限及夹逼定理
一、极限公式1二、极限公式2e为常数2.71828…变体:使用案例:三、夹逼定理夹逼定理英文原名SqueezeTheorem,也称两边夹定理、夹逼准则、夹挤定理、挟挤定理、三明治定理,是判定极限存在的两个准则之一。是法国著名数学家、物理学家约瑟夫·路易斯·拉格朗日(JosephLouisLagrange,17361813)提出的。3.1、数
Karen110 Karen110
3年前
人工智能数学基础7:极限、极限运算、ε-δ语言、ε-N语言、级数和函数连续性
一、极限的定义及四则运算1.极限:某一个函数中的某一个变量,此变量在变大(或者变小)的永远变化的过程中,逐渐向某一个确定的数值A不断地逼近而“永远不能够重合到A”(“永远不能够等于A,但是取等于A‘已经足够取得高精度计算结果)的过程中,此变量的变化,被人为规定为“永远靠近而不停止”、其有一个“不断地极为靠近A点的趋势”。极限是一种“变化状态”的描述。此变
Wesley13 Wesley13
3年前
Scrum vs Kanban,如何选择?
两大方法虽然敏捷诞生只有20年的时间,但却帮助了很多企业取得了成功,在这期间也出现了各种敏捷方法论和思想体系,这篇文章,我们试图去讨论一个问题:对于准备实施敏捷的团队,在Scrum和Kanban两种方法之间如何选择?(特别说明:有人会说Kanban其实是一套思想体系,不是方法论,这里我们不想陷入概念之争,只想解释他们适用的场景,所以下文中
Stella981 Stella981
3年前
Maven总结
何为maven?1.Maven主要是基于Java平台的项目构建,依赖管理和项目信息2.Maven是优秀的构建工具,跨平台,消除构建的重复,抽象了一个完整的构建生命周期模型,标准化构建过程3.管理分布的项目信息,版本控制系统,轻松获取项目文档,测试报告,静态分析报告,版本日志报告等4.极限编程(XP)
Wesley13 Wesley13
3年前
TDD 测试驱动开发
测试驱动开发,英文全称TestDrivenDevelopment,简称TDD,是一种不同于传统软件开发流程的新型的开发方法。它要求在编写某个功能的代码之前先编写测试代码,然后只编写使测试通过的功能代码,通过测试来推动整个开发的进行。这有助于编写简洁可用和高质量的代码,并加速开发过程。1概述KentBeck先生最早在其极限编程(XP)方法论中,向大
敏捷开发 敏捷开发
5个月前
为什么必须要做极限编程?
为什么必须要做极限编程?
敏捷开发 敏捷开发
5个月前
无结对,不编程
极限编程里面有一个比较有争议实践就是结对编程。很多团队的管理者在谈到结对编程的时候,第一反应是浪费时间:本来一个人可以干的事情要安排两个人干,不是浪费时间吗?那结对编程到底会不会浪费时间呢?结合我们禅道团队自身十几年的结对编程实践,跟大家做一下分享。首先来
敏捷开发 敏捷开发
5个月前
将代码集体所有权进行到底!
极限编程中有一个实践是代码集体所有权(CollectiveOwnership)。这个实践从字面意思理解起来很简单,就是大家共同拥有代码,都有权限浏览、修改代码。这个实践从表面看是一个技术问题,只不过是源代码管理系统的权限如何设置的问题。但从本质上来讲,这是
敏捷开发 敏捷开发
5个月前
极限编程里最容易被忽略的实践
在前面的一篇文章里面我和大家聊过了极限编程的重要性,今天想和大家聊聊极限编程里面最简单但也往往最容易被忽略的实践——编码规范。说到编码规范,每一个开发人员都非常熟悉,每一个团队也都有自己的编码规范。但实际的执行情况如何呢?估计大多数的团队都是形同虚设,编码