我们在实践中可能会遇到如下情况:当询问团队成员迭代是否完成时,每个成员对完成是有不同的理解的,有的成员认为代码编写好就算完成;有的认为还需要优化一下,确保功能运行正常;还有的认为需要编写自动化用例并经过测试才算完成,不同的成员的“完成”之间有很大的差距。
为了解决这个问题,团队 需要对完成的定义、完成的标准做统一的要求,即对DoD要有明确的定义。
DoD全称为Definition of Done 也叫完成定义,DoD的目标只有一个: 是否可以交付使用。当某个需求被描述为“完成”的时候,所有人都要理解“完成”意味着什么。这就是 Scrum 团队的“完成”定义,用来评估产品增量是否完成。一般DoD可分为 用户故事DoD、发布DoD等。
团队开发中用户故事完成的标准主要包括:
1.代码编写完成;
2.代码审查完成;
3.代码提交完成;
4.单元测试通过;
5.功能测试已经验收通过;
6.自动化测试已经验收通过等等。
当然这个标准是团队共同讨论出来的,团队愿意共同遵守的原则,一旦确定,团队就应共同遵守,此外DoD不是一成不变的,在随着时间的推移、经验的积累、迭代的进展,团队可在迭代回顾会上讨论DoD的优化修改从而不断完善。
而AC通常和用户故事绑定是一个完整的整体,在做用户故事梳理拆分的同时,也会对AC进行确定。通过AC(验收标准)可以消除客户和开发团队之间因需求产生的歧义,使开发能更好地理解细节,还能让客户及时了解开发过程,让他们检查功能是否符合实际的业务需求。总的来说AC能够确保用户故事被正确地完成。
DoD与AC之间的区别在于 DoD (完成定义)对所有用户故事都是通用的,而AC(验收标准)适用于特定的用户故事,此外每个用户故事的AC(验收标准)根据用户故事的内容来制定。一般来说AC是根据用户故事实现的条件有哪些,制定出用户故事开发的边界范围,DoD是对迭代交付的用户故事质量要求,用来确保产品的长久的适应性。
总结来看两者之间:
共同点
1.都是代表质量的指标,适用的范围不一样;
2.都需要团队和产品负责人共同讨论并得出结果。
不同点
1.完成的定义是普遍性的,对每一个用户故事都适用;验收标准是具体的,只针对特定用户故事适用;
2.完成的定义不需要客户参与讨论制定;验收标准可能有客户参与,并从中提取。
举个例子来解释二者的区别:
需求1:客户要吃牛排。
验收标准AC:
1. 7分熟;
2. 上脑部位。
需求2: 客户要吃青椒肉丝。
验收标准AC:
1. 特辣;
2. 青椒、瘦肉多一点;
3. 3两肉;
完成的定义DoD:
1.食物清洗干净;
2.厨房保持卫生,标准称重;
3.餐盘收拾清洗消毒干净;
4.确保服务态度,微笑服务。
引用一位专家画的图来表示这2个概念的关系:
右上角AC和DoD都完成了,高质量完成了用户需要,即菜品上对了,质量高。
左下角AC和DoD都没完成,菜品上错了,质量糟糕。
左上角是AC完成了,DoD没有完成,即菜品上对了,质量不好。
右下角是AC没有完成,DoD完成了,即质量很好,菜品不是用户需要的。
因此在开发时,不 仅要关注AC还要关注DoD,利用他们从不同的视角去保证产品的质量,否则会导致产品后续出现比较多的问题。