随着Agile开发方法的流行,大家都希望自己Agile一些。然而,Agile软件开发宣言,只提供了一些概括性的原则,并没有具体说如何操作。举例来说,Agile强调软件,而不是文档,那么在项目开发过程中,到底需不需要文档呢?每个开发周期多长?如何设置检查点呢?这些具体操作的问题,在Agile的方法层面,并没有得到解决。所以,很多程序员又开始苦恼了,他们希望一个可以操作的流程来执行项目,最好这个流程易学,易用,容易上手。Scrum就是这么一种框架(Framework),用于实现项目管理和敏捷开发。
其中两点值得注意:
1)Scrum是一个框架(Framework),而Agile 软件开发是一个开发方法(Methodology);框架是复杂实体或过程的抽象,据有较好的可执行性;方法更多的是理论指导和一些原则。
2)Scrum可以用于项目管理,这样项目经理和主管就很高兴了,他们自然成为Scrum的拥护者了。
那么Scrum究竟是什么意思?"Scrum"这个词来自于橄榄球运动,指的是两个队伍争锋相对的争球,通常发生在小小犯规或有人受伤后的开球阶段,所以Scrum看起来想合法的打群架一样。Scrum开发方法就是指整个开发过程中,大家紧紧抱团的概念,不讲究太多次序感。
橄榄球中的Scrum,文明的打群架
1991年,杰夫·萨瑟兰在Easel公司开发了轻量级的迭代方法,并首次称之为Scrum。1995年,在奥斯汀举办的OOPSLA '95上,萨瑟兰和施瓦伯联合发表了论文首次提出了Scrum概念。施瓦伯和萨瑟兰在接下的几年里合作,将上述的文章,他们的经验,以及业界的最佳实践融合起来,形成我们现在所知的Scrum。
2001年,施瓦伯与 麦克·比窦(Mike Beedle)合著了《敏捷软件开发-使用Scrum过程》一书,介绍了Scrum方法。这本书成为Scrum的经典之作。同年,Agile软件开发宣言也诞生了,所以这本书也极大的推动了Agile软件开发的普及。
讲了这么多的背景,那么究竟是什么Scrum,我并不着急介绍;因为,介绍Scrum的文章太多了,着急的读者可以先搜索引擎之,有很多快速入门的书。我想先给大家一些试验数据,看看Scrum究竟有没有用?
下面的数据是来自InfoQ网站2008年做的调查《Scrum在中国——企业实施情况调查实录》详细,结果如下:
出于保护企业和个人隐私的缘故,大部分被采访人的具体信息均已隐去,其名单如下:
姓名(职务) |
公司性质 |
实施方式 |
实施时间 |
结果 |
璎珞天色,负责过程改进 |
某知名大型互联网公司 |
自底向上 |
2006年3月 |
成功 |
kaverjody,Scrum Master | 某知名大型软件企业 |
自顶向下 |
2005年12月 |
成功 |
David,Engineer |
某知名大型互联网公司 |
自顶向下 |
失败 | |
张汉东,Scrum Master |
Nibirutech,创业型公司 | 全面推进 |
2007年11月 |
成功 |
赵师容,Senior Engineer | 某创业型公司 |
自顶向下 |
失败 |
大家可以看到,Scrum不是万能的,有成功的也有失败的,大型公司可能失败,小公司也可能失败。所以,如果你是一个Scrum的新手,一定要做好失败的准备。
好了,进入正题了,什么是Scrum,简单的说就是下面这个图;(网上很多Scrum图都是大同小异,而且大多为英文的,所以我按照自己理画了个中文的)。
先介绍最简化的Scrum模型,如下:
主要角色:
a) 产品负责人(Product Owner): 定义产品功能
b) Scrum主管(ScrumMaster) : 负责每个Sprint(1-4周)协调工作,轻量级的项目管理;
c) 小组成员(Team):真正干活的人,大约5-7个为宜。
主要产出:
a) 产品功能列表(Product Backlog)
b) 冲刺活动列表(Sprint backlog) : 每个Sprint的主要活动
c) 发布的产品功能
主要关键活动:
a) 在每个Sprint前,都有计划会议,用于讨论出冲刺活动列表(Sprint Backlog)
b) 每天都有15分钟的会议,所有小组成员都发言“自己干了什么?有什么问题?明天做什么?”,每人只有2分钟时间。
c )每个Sprint结束,都应该有可发布的功能
好了,这就是Scrum最主要的流程,在这个主流程之外,当然有很多可以自定义的活动等。
好了Scrum模型就是这样,那么如果采用Scrum模型,对测试有什么影响呢?我的感觉是,它对测试管理的影响非常大,主要表现在以下几个方面:
1)测试活动很难有效地加入到Sprint Backlog中去
对于开发人员来说,代码编写的活动内容比较确定,时间也比测试好估计一些。 但对于测试活动,制定计划时候很难列出详细的内容和时间估计,特别是在只有几个星期的时间内。有时候,一个麻烦的Bug,可以耽误整个测试的进度。
2) 开发活动的灵活性给测试任务的执行带来挑战
Scrum模型中,任务的进展往往没有严格的关联性,开发人员可以选择性开展工作;虽然测试人员可以对开发人员的活动提出一些要求,但是开发人员的灵活性很大,测试人员经常要花很多时间应对灵活的开发进度。
3) Scrum模型提供的Burndown图表,并不完全适合测试管理
Scrum提供的Burndown图,主要可以跟踪活动的完成率,但是这个图形与软件测试的实际进展,软件质量之间。
4) 由于Scrum强调快速迭代开发,测试的周期缩短,节奏加快。
5) Scrum增量开发模式,使得软件的升级测试和部署测试更为重要