首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

敏捷开发:雪山之上的宣言,十八年后仍回响不断

文章已提请相应维权机构保护,未经许可严禁转载,否则将承担一切相应后果。

开发模式演进史(二)

2001年2月11日,17名软件工程师在美国犹他州瓦萨奇山上的雪鸟滑雪场聚会。他们都是颇有名气的工程师,是极限编程、SCRUM、Crystal等各种新式开发方式的代表。他们多年来被传统的瀑布式开发的各种缺点所拖累,试图找出一些取代它的新方式。 接下来的两天里,在白雪皑皑的雪山中,他们滑雪娱乐,也讨论一些关于软件开发的问题。在2月13日,聚会结束的时候,他们发表了《敏捷软件开发宣言》,倡导以轻量级的敏捷开发取代传统的重量级的瀑布式开发,这也宣告了敏捷开发时代的到来。

雪鸟滑雪场,敏捷开发诞生之地,同时也是著名的滑雪胜地

敏捷软件开发的四个基本价值观:

“我们一直在实践中探寻更好的软件开发方法,身体力行的同时也帮助他人。由此我们建立了如下价值观:

个体和互动 高于 流程和工具

工作的软件 高于 详尽的文档

客户合作 高于 合同谈判

响应变化 高于 遵循计划

也就是说,尽管右项有其价值,

我们更重视左项的价值。”

以上引号内的内容摘录于《敏捷软件开发宣言》。

除了这四个基本价值观之外,敏捷软件开发宣言还包含了12条基本原则,阐述了敏捷软件开发的方方面面。其中最重要的是这一条:

“经常地交付可工作的软件,相隔几星期或一两个月,倾向于采取较短的周期。”

这就是这种新开发思想被命名为敏捷的由来。传统的瀑布模型,把软件开发分为多个环节的流程,从需求分析到设计再到具体代码实现。比如如果计划的时间是一年,可能用第一个月做需求分析,第二个月做架构设计,接下来七个月做代码实现,再然后一个半月做集成,最后再用一个半月做测试。这样的话,在集成完成之前的十个半月里,软件都是不可工作不能用的。

而敏捷模式改变了这一点,敏捷模式把大的完全软件分成一个个小的功能(story),每个功能,用二到八周来进行开发(大部分时候控制在六周以下)。同时,他并没有否定瀑布模型里面提出的每一个环节的意义,从需求到实现到测试的每个环节仍被执行。只不过,相对于瀑布模型把整个软件开发过程作为对象分为多个环节并先后执行,敏捷开发把拆分成的各个小功能作为对象,对着一个个小的功能分别执行相应的环节流程。比如这个小功能准备四周完成。可能就用三天来做需求分析,三天做架构设计。两周做代码实现,再各花三天做集成和测试。下一个功能的需求分析和架构设计等环节,到做下个功能的时候再开始做,而不是像瀑布模式那样把所有功能的需求分析。架构设计放在一起做。如果这个软件由八个功能组成,这个功能是第三个被完成的功能的话,那他和之前被完成的两个功能从完成之日起就应该能工作,虽然后面还有五个其他功能没有开始开发。

以下我们对敏捷开发的四个核心价值观做逐一分析。

敏捷开发和传统瀑布式开发,认识上最大的区别也是最关键的变化,在于,敏捷开发认同开发的不可预测性,承认计划赶不上变化,也就是敏捷价值观的第四条。归根结底,敏捷开发,从头到尾都是在承认变化不可避免且无法准确预知的情况下,想方设法的如何采取种种措施,来更好的拥抱变化和适应变化。

客户合作高于合同谈判。这条强调与客户之间的沟通以及合作,而不是仅仅去履行从一开始合同上的要求的义务。很多时候,客户一开始其实也并不了解他们真正想要的东西。他们会给我们一些需求,其中有些需求可能是虚假的,或者是片面的。就像汽车大王福特所说的:“如果我当年去问顾客他们想要什么,他们肯定会告诉我:‘一匹更快的马’。”在敏捷开发过程中,开发团队应不断就已经完成的部分,向客户寻求反馈,这可能会帮助客户逐渐发现和理清他们真正的需求。客户的需求和优先级可能会变化,可能本来要求做功能A,现在要求改做功能B,我们的最终目标是让客户满意,达到他们想要的成果,而不是死板的履行合同。

工作的软件高于详尽的文档。在传统的瀑布模式里面,由于,每个环节都耗时特别长,并且所有的东西都要按计划执行,所以从一开始就必须为所有功能准备特别详细的文档。而敏捷开发,由于功能是逐个实现的,对文档的要求没有那么多。同时,在实现每个功能的时候,就保证软件在每个已实现的部分都是能工作的状态。因为对于最终用户来讲,相应的开发文档对他们意义并没有那么大,他们只是关心已经可用的功能。

尤其是在时间不足,承诺给用户的功能,不能按时交付的时候,采用敏捷开发的项目,可以根据当前所剩的资源,相应的对需求和设计进行取舍。比如可以直接砍掉后面部分还未开始开发的功能,把已经实现的功能交付给用户,让用户先使用部分功能。因为在敏捷开发中,每一个功能都独立地经历了从需求到设计到集成和测试等多个环节,保证是可以工作并经过充分测试的,这样至少可以把承诺的部分功能,高质量地交付给用户。而按照传统瀑布式开发的项目,如果时间不足的情况下,由于所有功能是同时开发的,有可能还处在开发或者集成的阶段,一个功能都无法工作,没有任何东西可以拿给用户。或者就只能压缩集成和测试的时间,草草的交付给用户,有可能很多bug没被发现,留下很多隐患。

个体和互动高于流程和工具。敏捷开发强调激发个体的主动性,对每个成员都给予信任,进行充分放权,发挥他们的潜力。重视团队里每个个体的互动,倡导团队成员之间面对面直率的进行沟通,即使是在有坏消息的情况下。敏捷开发鼓励团队里每一个成员都像在初创公司一样的工作。

注意,敏捷价值观并没有否定掉传统软件开发模式里面,文档、工具和计划的作用,只是相对而言更注重拥抱变化和可工作的软件,这就是宣言原文里面“尽管右项有其价值,我们更重视左项的价值。”所阐述的意思。

最后,敏捷开发的精髓在于迭代。相对于传统瀑布式开发到最后一下子交付整个项目,敏捷开发小步快跑地每次交付一部分功能,在项目一步步向前推进的过程中,随着不断清晰的需求和一次次客户反馈,相应的修正项目的航向,调整优先级。先完成最起码的需求,确保有可以工作的代码可以交付给用户。在有多余资源的情况下,再在此基础上一次次优化和提高,最后达到一个精益求精的结果。这样的思想和方法论,不仅仅适用于刚开始时看起来迷雾重重的,不知道前方有哪些隐藏的艰难险阻的软件开发,也适用于其他各种有类似性质,难于预测而充满变化的活动,而这些活动包括却不仅限于工程类项目,比如创业,比如人生。这,就是十八年前雪山上宣言一直回响至今的原因所在。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190202G01QUP00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券