《敏捷软件开发:用户故事实战》—2 编写故事
第二章
编写故事
在这一章里,我们将介绍如何编写故事。为了创建好的故事,我们需要关注六个特征。一个好的故事应该具备以下特征(INVEST):
l 独立的(Independent)
l 可协商的(Negotiable)
l 对用户或客户有价值的(Valuable to users or customers)
l 可估算的(Estimatable)
l 小的(Small)
l 可测试的(Testable)
《极限编程》(Extreme Programming Explored)和《重构实践手册》(Refactoring Workbook)的作者比尔·威克(Bill Wake)建议用单词首写字母缩写INVEST指代这六个特征(Wake 2003a)。
独立的
我们应该尽量避免故事之间相互依赖。故事间的相互依赖会导致优先级排序和计划出现问题。例如,假设客户选定了一个高优先级的故事,而这个故事却依赖于一个低优先级的故事,这样就会产生问题。
故事间的相互依赖也会使估算变得更加困难。例如,假设我们在BigMoneyJobs网站上工作,需要编写故事:公司如何为在网站上发布职位进行付费。我们可以写出如下这些:
1. 公司可以用Visa信用卡对发布职位进行付费。
2. 公司可以用万事达信用卡对发布职位进行付费。
3. 公司可以用美国运通卡对发布职位进行付费。
假设开发人员估算需要3天的时间来支持第一种信用卡(不管它是哪种),然后给第二种和第三种各分别需要1天。对于像这些有相互高依赖关系的故事,你不知道如何对每个故事进行估算—哪个故事应该给3天的估算?
当故事间出现这种依赖时,有两种应对方法可以避免。
l 将相互依赖的故事合并成一个更大但独立的故事。
l 寻找一种不同的方式来拆分故事。
将不同种类的信用卡合并成一个独立的大故事(“公司可以使用信用卡对发布职位进行付费”)是不错的,因为合并后的故事只需要5天时间。如果合并后的故事花费的时间要比这长得多,通常一个更好的方法是找一个不同的维度来拆分故事。如果对这些拆分后故事的估算时间更长,那么另一种拆分方法如下:
1. 客户可以用一种信用卡支付。
2. 客户可以用另外两种信用卡支付。
如果你不想将这些故事合并在一起,并且无法找到一个很好的方法来拆分它们,那么你还可以采用简单的方法,即在故事卡上放两个估算值:较高的估算值给二者之间必须在前面完成的故事,较低的估算值给后面接着要完成的故事。
- 点赞
- 收藏
- 关注作者
评论(0)