敏捷与测试的故事(1) -初识敏捷

2010-04-11  欧阳辰 

公元2000年左右,随着互联网软件的发展和软件开发的普及,越来越多的程序员意识到软件工程书籍中的瀑布式开发,传统迭代和螺旋开发,已经无法指导快节奏的软件开发,这些旧方法已经Out了。为了与时俱进,这些程序员需要了解新的开发方法(Methodology),武装自己的理论水平;他们发现轻量级的软件开发方法和实践,已经如雨后春笋一般,四处出现,而且种类繁多,让人眼花缭乱。比如说,极限编程(eXtreme Programming),功能驱动的开发(Feature Driven Development),Scrum, 测试驱动的开发(Test Driven Development)等等。这些方法虽然名字不同,但是基本都是一些轻量级的开发方法,其方法之间有很大的互补性,换句说,在一个真正的软件项目中,相关的方法或实践很有可能都会涉及到。这可难坏了这些程序员们,他们不知道用哪一种开发方法为好?

公元2001年的二月,这个难题出现了转机,这个转机就发生在美国犹他州的滑雪胜地雪鸟(SnowBird)。犹他州的丰富地貌曾将早期的探险家惊叹不已,这是一个冒险与享乐的世界。有17个软件达人在雪鸟滑雪场聚在一起,他们一起聊天,吃饭,滑雪。这些人中,有极限编程的创始人Kent Beck,有Object Mentor的创始人 Robot .C.Martin(他也是《Agile(敏捷)》的作者),还有很多轻量级方法的创始人。在几天的吃喝谈乐中,他们把困扰很多程序员的难题解决了。他们发布了一统江湖的“敏捷软件开发宣言(Agile Software development manifest)”,他们使用统一的术语“敏捷(agile)”,来表示轻量级的软件开发方法,并且为敏捷软件开发提出了4个价值和12个原则

 

犹他州滑雪胜地,雪鸟

那么什么是敏捷呢? 牛津大辞典是这么解释的:moving quickly and lightly;汉语大辞典的解释:灵敏迅速。中外字典的解释不谋而合。举一个例子就更清楚了,曹丕当了皇帝以后,怕曹植威胁自己的地位,想迫害曹植,有一次让曹植在七步之内做成一首诗,否则就把他处死。曹植快速写出了“七步诗”,免得一死。曹丕这么说的“先帝每夸汝诗才敏捷,朕未曾面试。今限汝七步之内,成诗一首。如若不成,当坐汝欺诳之罪。”曹植把诗写出来了,而且非常敏捷,非常Agile。 所以,敏捷其实就是两方面含义:一是快速,二是机敏(把事情做好)。

回到敏捷宣言,让我们来看看这些价值,

个体与交互  胜过(Over)  过程与工具

可以工作的软件 胜过  面面俱到的文档

客户协作  胜过  合同谈判

响应变化 胜过  遵循计划

简单评论一下这些价值,这些价值其实谈到了三个主体和他们的关系,主体包括人,软件(代码),和用户,并且三者的紧密合作,以便一起应对变化。我将我的理解,抽象为下图。

 

敏捷软件开发的核心价值

这些价值看起来很美,不是么?其实所有被书面化的价值都是很美的。例如,美国公司安然公司,他们公司的价值就是“诚信”,但是它们因为不诚信而倒闭了。因此,如果一个公司号称采用敏捷开发模式,并不代表这个公司真正的实现了这些价值。如果你采访一个软件公司的开发经理/总监,他们大多都会说他们在采用敏捷软件开发,如果你采访这个软件公司的员工,你会发现既然认为他们使用敏捷开发的比例会低的多。

我们在看看12个原则吧

1。我们最优先要做的是通过尽早的、持续的交付有价值的软件来使客户满意
2。即使到了开发的后期,也欢迎改变需求。敏捷过程利用变化来为客户创造竞争优势
3。经常性的交付可以工作的软件,交付的间隔可以从几周到几个月,交付的时间间隔越短越好
4。在整个项目开发期间,业务人员和开发人员必须天天都在一起工作
5。围绕被激励起来的个来构建项目。给他们提供所需要的环境和支持,并且信任他们能够完成工作
6。在团队内部,最具有效果并且富有效率的传递信息的方法,就是面对面的交谈
7。工作的软件是首要进度度量标准
8。敏捷过程提可持续的开发速度
9。不断地关注优秀的技能和好的设计会增强敏捷能力
10。简单----使未完成的工作最大化的艺术----是根本的
11。最好的构架、需求和设计出自与自组织的团队
12。每隔一定时间,团队会在如何才能更有效地工作方面进行反省,然后相应地对自己的行为进行调整

好了,看完这么多原则,有人会频频点头,承认这些都是好原则,应该遵循;有人会不敢苟同,会说很多原则都没有可操作性,例如第4条,业务人员必须天天和程序在一起,那么白天上班市场人员如何可能与晚上熬夜的程序混在一起呢。不过,我认为以下几条是非常关键的,如果能将这些做好,就可以称“相当敏捷了”。

1。我们最优先要做的是通过尽早的、持续的交付有价值的软件来使客户满意
[评] 传递价值给用户是软件开发的核心目标,而快速,持续是敏捷的特点。

6。在团队内部,最具有效果并且富有效率的传递信息的方法,就是面对面的交谈
[评] 面对面的交谈比众多项目状态报告要有效率的多,面对面的交谈能得到更丰富更直接的反馈。

10。简单----使未完成的工作最大化的艺术----是根本的
[评]  简单就是美;人们往往需要花很长时间和很多教训,才能悟出这个道理,体会到什么是过分设计(OverDesign)。这也是保持Agile的秘诀。

最后,说了这么多,敏捷到底是什么东西呢?这么多价值和原则,如何选择呢? 其实,敏捷就是一种快速,灵敏的一种氛围(Climate),如果一个团队士气很高,大家觉得已经实现了“快速,持续为用户创造价值”,那么这个团队是足够敏捷了。大家一起愉悦的工作,而且客户满意,That is it.

 

客户,程序员,项目经理总能愉悦的聊天,这是敏捷的终极目标。

好了,说这么多敏捷开发,那么Scrum又是什么东西呢?它和Agile有什么关系呢? 我们下次再聊。

562°/5486 人阅读/14 条评论 发表评论

关敏  2010-04-11

好文章,学习了


刘俊  2010-04-12

学到了很多知识,不过我现在是被敏捷搞的疲惫不堪了。自动化脚本写的速度跟不上需求变的速度。成天加班,士气低落


欧阳辰  2010-04-12

如果你是做GUI自动化测试,可以看看我的另外文章 :)
http://www.testwo.com/space-227-do-blog-id-64.html


李辅炳  2010-04-12

现在各大公司都在推“敏捷”,关于她,可谓是仁者见仁,智者见智。但这些都不缺,缺的是解惑人。。。


袁永云  2010-04-12

学习了


谢明志  2010-04-13

不错的文章。


关敏  2010-04-13

学习了


王恩建  2010-04-13

作为一个比较懒的程序员,我个人很喜欢“可以工作的软件胜过面面俱到的文档”,虽然这并不是为懒人考虑的。“响应变化”是一个心态180度转变,从被动到主动,我更愿意理解为“拥抱变化”。


欧阳辰  2010-04-13

在一些XP的书里面,有拥抱变化的说法(Embrace Change):)


李维敏  2010-04-13

喜欢create变化


欧阳辰  2010-04-14

"Change is a gift from God" 是我喜欢的一句话, 我常常将它送给要离职同事 :)


杨阳  2010-04-16

不错不错。值得学习与借鉴。


缐名星  2010-04-21

领教了


夏洁  2010-05-18

所谓的敏捷测试和“与开发紧密结合的”“快速测试”Rapid Testing 是不是一回事呢?


登录 后发表评论