公元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有什么关系呢? 我们下次再聊。