敏捷方法 - 极限编程与工程实践

前面我们介绍了Scrum、精益和看板,这三种都偏向于过程管理,代表敏捷方法论的一大派系。在敏捷领域,还存在另一大派系面向工程实践,代表性的有极限编程(eXtreme Programing,XP)。这两个派系分别从开发方法和管理方法给出了各自关于敏捷方法论的阐释,但两种之间也存在一定的共性。

针对如何实施敏捷方法,目前主流的做法就是把极限编程与其它过程管理框架合起来一起应用,通过Scrum、看板等先确定软件开发的基本流程和步骤,再通过极限编程中的各项工程实践来具体实现这些流程和步骤。本文对极限编程同样做一个简要介绍。

1. 极限编程方法

极限编程方法试图解决的问题包括软件不能适应需求变化、软件缺陷多、代码质量低、设计不良、项目中浪费大、开发效率低等各个方面。对于如何解决这些问题,极限编程认为可以提炼出一批工程实践用于指导软件开发工作。

回到迭代模型,极限编程是迭代思想的一种表现形式,包括多种迭代形式,分别为分钟级迭代、小时级迭代、每日迭代、数日迭代、一周迭代和季度迭代,每一种迭代形式都有对应的工程实践(见下图)。除此之外的一系列工程实践也确保每种迭代形式能够正确有效的执行。

敏捷方法 - 极限编程与工程实践_第1张图片

在引入极限编程过程中,我们也发现不能完全套用流程,可以从工程实践出发,先引入面向技术的简单的工程实践,再扩展到交互和流程性工程实践。很多时候也推荐与Scrum等管理框架进行整合。

2. 极限编程工程实践

极限编程包含了大量可以直接使用的工程实践,下图列举了其中的一部分,更多的工程实践课参考《敏捷开发的艺术》一书。工程实践的分类可能有不同的标准,通常在敏捷开发中,团队级别的思考和协作意识是一个重要话题,可以构成一个分类;基于迭代模型的计划和发布方法在开发过程中的应用是敏捷区分其他方法论的关键,可以构成一个分类;极限编程从派系上是一种开发方法,开发也可以构成一个分类。

敏捷方法 - 极限编程与工程实践_第2张图片

协作与工程实践包括结对编程(Pair Programming)、信息化工作场地、真实用户参与、统一协作语言(Ubiquitous Language)、站立会议、编码规范、迭代演示、上级汇报等。计划发布与工程实践包括用户故事(User Story)、发布计划、迭代计划、计划游戏和持续集成(Continuous Integration,CI)等。而测试驱动开发(Test Driven Development,TDD)、客户测试、重构、简单设计、试验方案(Spike Solution)等工程实践属于开发范畴。

在诸多极限编程工程实践中,一般认为结对编程和测试驱动开发属于比较难以做到的实践,而信息化工作场地、站立会议、重构、试验方案实施起来相对就容易很多。而有些工程实践我们认为推行起来有难度但还是需要我们努力去实施,包括统一协作语言、编码规范、持续集成、发布计划和迭代计划、故事和估算、客户测试等。

当你的团队规模逐步变大,就需要考虑团队成员之间的有效沟通和协作问题,这种有效的沟通和协作通常已经很难通过面对面交流来实现,而必须要有相对完备的文档和过程资产,这时候敏捷尤其是极限编程中的部分工程实践是可以也是应该作为一种过程集成化的手段嵌入到团队运作中去,例如把大团队分组成小团队,大团队有自己完整的工作流程,而在小团队内部可以实行坐在一起、站立会议等实践,这种敏捷实践的嵌入式推行方式相对比较容易,效果也不错。

 

如果对文章感兴趣,可以关注我的微信公众号:程序员向架构师转型,或扫描下面的二维码。

我出版了《系统架构设计:程序员向架构师转型之路》、《向技术管理者转型:软件开发人员跨越行业、技术、管理的转型思维与实践》、《微服务设计原理与架构》、《微服务架构实战》等书籍,并翻译有《深入RabbitMQ》和《Spring5响应式编程实战》,欢迎交流。

你可能感兴趣的:(研发管理)