敏捷开发宣言已经面世二十年了,敏捷开发也早已从小团队扩展到中大型团队,出现了很多规模化敏捷开发框架,如SAFe、LeSS、Scale-Scrum、Scrum of Scrum等。很多以前没有接触过敏捷开发的企业,也直接开始引入规模化敏捷了。在引入的过程中,遇到各种水土不服,其中很普遍的一个现象是,由于缺乏基本的工程技术能力,通常想通过管理方法解决工程技术问题,结果自然是不好的。规模化敏捷需要我们在管理上改进提升,同时基本的工程技术实践是不能少的。下面就一些基本的工程技术实践做一些探讨。
1、用户故事地图
在规模化敏捷开发过程中,需求的拆分和对齐,是多个Scrum团队在日常开发过程中进行协作的第一步,做好了这一步,才有规模化的基础,否则就是各个不同的团队,各做各的。在做需求的拆分和对齐时,有一个很好的工程实践是用户故事地图。
用户故事地图是在讲大故事的同时进行拆分。它是一个模式,团队对整个产品或整个特性达成共识,将大的用户故事进一步拆分。当多个团队一起在同一个产品下进行开发时,我们需要有一个全景图,用户故事地图很好的满足了这一要求。用户故事地图还有助于多个团队达成共识,见下图:
用户故事地图贯穿各个团队的产品发布地图,可以帮助大家以可视化的方式展示依赖关系。用户故事地图需要注意一下几点:
在用户故事地图的顶部是主干,主干通常分为两级。一级是最基本的故事流,当故事流长度变得过长的时候,需要增加一级来进行总结概况。
地图要涵盖整个发布计划,几个团队在一个共同的用户故事地图上协作,因为要开发的这个大版本,没有一个团第可以单独发布自己的特性,各个团队都需要对发布进行整体考虑。
地图要涵盖贯穿多个用户和系统的叙事主线。地图从左边的角色开始,角色相关的活动会用到屏幕上的基本控件,这些控件用于显示信息、图片和视频;接下来,其他列席角色通过活动,将这些基本控件组合成页面;然后编辑角色为页面添加内容。真个主干讲述一个故事,故事中描述不同角色如何在各自的站点创建和管理内容。
2、持续集成
需求拆分是多团队协作的开始,而集成则是结束。在规模化敏捷中,多团队要想能够更好地协作,集成就不能是一次性的,而是持续的,每天都多次进行的。每次一点小的增加就进行集成,最后才能有完整特性和完整产品的顺利集成,解决产品在想当长一段时间处于不可用状态,每增加一点小的特性,都可以交付价值。
有了持续集成,软件在每次修改之后都会被证明是可以工作的(具有足够全面的自动化测试集),即便它被破坏了,团队也很快就能知道,并且立即修复。高效使用持续集成,才能够高效地实现多团队间的协作。实现持续集成需要做到三件事:
版本控制。与项目相关的所有内容都必须提交到一个版本控制库中,包括产品代码、测试代码、数据库脚本、构建与部署脚本,以及所有用于创建、安装、运行和测试该应用程序的东西。
自动化构建。能够在命令行中启动构建过程,人和计算机都能通过命令行自动执行应用的构建、测试和部署。
团队共识。持续集成不是一种工具,而是一种实践。它需要开发团队给予一定的投入并遵守一些准则,需要每个人都能以小步增量的方式频繁地将修改后的代码提交到主干上,并一致认同“修复破坏应用程序的任意修改是最高优先级的任务”。
只有应用好持续集成的实践,多团队协作才能有效地进行。
3、代码集体所有制
在多团队协作时,当某个团队有一个小的修改,需要其他团队做出相应的配合时,怎么去处理呢?有些团队说,我们可以把修改提交给相应的团队,等待他们处理,或者要求他们加急处理。这样做必然会影响到相应团队的工作安排,或者打乱他们的工作,或者被拒绝,然后可能陷入无效的沟通协调。
怎么解决这种问题呢?代码集体所有制可以很好地解决这个问题。在代码集体所有制的规则下,需要进行小的修改时,我们可以直接修改,然后通知对应的团队或模块负责人进行代码审核。而不需要等待对方团队去排期修改。
另外,在代码集体所有制下,当团队中人员互相流动时,大家也能很快地开展工作,减少工作交接。
在代码集体所有制下,各团队需要就代码规范和代码的质量标准达成共识。只有高质量的代码才能实现集体所有制。如果有人的代码写出一团乱麻,其他人无法看懂,显然也无法去进行修改,这样的代码质量是做不到集体所有的。代码集体所有制一般会结合代码评审一起使用。
4、TDD和重构
TDD和重构是两个工程实践,为什么放在一起说呢?因为这两个实践联系的非常紧密。没有测试就不能放心大胆的重构,不采用TDD写不出好的测试。TDD的标准做法是:先写一个测试,然后写代码实现这个测试,然后重构。所以,我在这里把这两个实践放在一起。
TDD的实践出来了很久,争议也比较大。为什么在多团队协作中,TDD很重要呢?我们前面提到,多团队之间首先要进行需求拆分,然后各自开发,然后要进行集成。集成的时候会涉及到交互,我们需要先设计好交互,才能够集成起来。设计好的交互怎么保证呢?这时就需要写一个测试,针对各个团队之间的交互写好测试,由测试来驱动各个团队内部的设计。同时,各团队在开发过程中,可以继续采用TDD的方式逐步驱动出设计细节。
身是菩提树,心是明镜台;时时勤拂拭,莫使惹尘埃。为了能够持续保持好的代码质量,能否持续地高效集成和协作,重构就必不可少。
通过这几个工程实践,我们可以打造出规模化敏捷的基础,为业务上能够持续快速交付价值提供支持,减少无效的管理沟通,让团队能够聚焦于业务和开发,提高整体效益。
网友评论