突破:程序员如何练就领导力
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

8.4 模式应用案例

应用案例:ATDD(Acceptance Test Driven Development)验收测试驱动开发在敏捷软件开发中的应用

在敏捷软件开发中,测试驱动开发(TDD)是一个非常有名的开发实践,而近年来,越来越多的敏捷开发团队开始关注和使用验收测试驱动开发(ATDD)。实际上,验收测试驱动开发所倡导的方法,和本章中介绍的目标制定的模式,有异曲同工之处。

图14用4个D总结了ATDD的基本流程,下面我们来看看这四个D是如何与上面提到的目标制定“三步法”对应的。

图14 ATDD验收测试驱动开发流程图

1. ATDD中第一个D:讨论(Discuss)

当一个Scrum团队接到一个需要实现的功能需求时,第一步需要做的,就是对这个功能需求进行拆分,分解为若干小的所谓“用户故事(User Story)”。这与本章目标制定“三步法”中第一步按照金字塔原理,对目标从上至下的分解是一致的。正如福特汽车公司创始人亨利·福特曾经说过的:“对我来说,没有什么事情是特别困难的,只要我把它分解为若干小块的工作。”在ATDD中,把一个范围较大、看起来实现困难的功能需求拆分为若干易于实现的用户故事,同在目标制定中,将中长期目标拆分为若干易于实现的短期小目标,其实都遵循了福特所谓的“拆分”理论。

2. ATDD中第二个D:提炼(Distill)

在ATDD中,最重要的一步,就是为每一个拆分之后的用户故事制定验收标准。这么做的好处在于,当敏捷开发团队和产品经理从客户的角度讨论如何才能算是满足需求(被验收)的时候,从另一个角度,就是避免了软件开发团队常犯的一个问题:即在澄清“客户想要的是什么”(也即是What部分)之前,已经开始思考“如何进行技术实现”(也就是How部分)。同时,产品经理和敏捷开发团队一同讨论验收标准的过程,也是一个通过双向的沟通,让彼此能更好地理解需求的过程。这与本章目标制定“三步法”中第二步按照“以终为始”的思想遵循着同样的理念。

3. ATDD中第三和第四个D:开发(Develop)和演示(Demo)

当大的需求被拆分为小的用户故事,并且每个用户故事都有了验收标准之后,敏捷团队就可以进行具体的代码开发,以及单元测试,而测试团队也同时会基于验收标准开发(自动化)验收测试用例。接下来,在演示(Demo)环节,客户,产品经理和团队一起,通过团队演示在本次迭代中所完成的用户故事,以及客户和产品经理一同按照验收标准对功能进行验收,最终确定该用户故事是否能够最终被认定为“完成”。

对于无法满足验收标准的用户故事,客户和产品经理的反馈都会被作为下一个迭代的重要输入。同时,在演示阶段,客户也可能会对需求进行变更,从而引发对用户故事范围和验收标准的重新审视,这也是在敏捷开发中倡导的,高频率地给客户展示所完成的工作的原因。这与本章目标制定“三步法”中第三步“定期对目标进行回顾和更新”一样是应用了PDCA循环的理念。

对很多敏捷实践者来说,ATDD似乎是一个很“虚”的概念。本章我们用4个D来描述ATDD的基本流程,并通过对比本章中目标制定的模式,阐释这些流程背后的原理和思想,希望能够帮助你拨开笼罩在ATDD上的那层迷雾,让你对ATDD有“豁然开朗”的新认识!