扫盲贴:敏捷开发,你真的够了解吗?
Posted 华为开发者社区
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了扫盲贴:敏捷开发,你真的够了解吗?相关的知识,希望对你有一定的参考价值。
▼
2001年,敏捷开发被提出。15年后的今天,敏捷开发依旧很火热。“敏捷”如此流行,作为开发人员的你,是否真的够了解?
今天,我们站在前人的肩膀上,一起来看看火了15年的敏捷开发到底是什么?它与传统开发模式又有何区别?敏捷开发的实施又能为开发人员带来什么?
一、什么是敏捷开发?
简单来讲,敏捷开发不是一门技术,而是一种开发模式、开发方法,也就是一种软件开发的流程,它会指导我们用规定的环节去一步一步完成项目的开发。
敏捷开发以人为中心,注重开发者体验;敏捷开发强调:快速反应、快速迭代、价值驱动。
什么?你对于敏捷开发的整体概念还没有清晰的认识?看完下面这几点,你就会懂更多:
它适用于软件,因为软件是软的,可以改。要是硬件,改起来就没那么方便了;
它适用于客户不知道自己要啥的情况,其实,这样的客户占绝大多数。因为客户不知道要啥,所以你需要不断帮客户弄明白他到底想要啥。换句话说,你需要和客户沟通、合作、倾听反馈、持续改进;
它适用于竞争激烈的市场,这样的情况下,赶在竞争对手前交付一个不完美但至少能用的产品非常重要;
它适用于快速变化的市场,你在埋头造一辆汽车的时候,客户已经想开飞机满天飞了,这就需要你能一步步的把汽车改成飞机,还能按时交付。
其次,敏捷开发是一套工具集,里面有形形色色的工具,你可以不搞敏捷,但可以用那么一两个来提高工作效率;
再其次,敏捷开发是一种企业管理方式。
二、为什么要实施敏捷开发?
敏捷开发模式可以增强应对需求变化的能力、提高产品质量、提升开发效率、缩短支付周期。
根据Scott Ambler在2008年发起的网上调查结果显示:敏捷对生产率、质量、满意度、成本都有明显改进:
(点击图片,查看大图)
三、敏捷开发与传统开发有何区别
敏捷开发模式出现之前,开发者一直采用的是传统开发模式。那,敏捷开发与传统开发模式有何区别?敏捷开发的优势何在?
传统开发模式:开发人员和项目参与人员接到客户开发需求之后,会事先整理出一套开发文档,开发过程按照这个文档来进行,过程中客户基本上不参与到产品的验收和体验中,待项目成品出来之后才与客户进行项目交接,这样的开发模式可能会导致最后开发出来的成品并不是客户想要的,而这时候再去修改会产生很大的问题。
敏捷开发模式:按照规定模式/流程来开发,少写文档,只写必要的文档,传统开发模式里出现的问题也完全可以避免。
敏捷开发采取迭代式开发的形式,即每个阶段有每个阶段需要完成、并且能使用的产品,这一阶段只要开发某几个功能,不多增加其他功能,且这些功能的产品必须是可以使用的,这一阶段产品完成之后与客户进行对接交付,客户没意见之后,在进行下一阶段的开发。
传统开发模式里,软件开发过程是确定的、可测的。只要在一开始努力收集到需要的信息并制定好计划,然后忠实的执行计划就应该可以成功。而在敏捷开发模式里,世界是变化的,有很多不确定性的。
啥?对于传统开发和敏捷开发之间的区别还不清楚?看完下面这张图,你就能了解:
如上图所示,软件更像一个活着的植物,软件开发是自底向上逐步有序的生长过程,类似于植物自然生长。
敏捷开发遵循软件客观规律,不断的进行迭代增量开发,最终交付符合客户价值的产品。就像上图所示的植物生长过程一样,一个阶段一个阶段的来,并不是一次性交付。
四、敏捷开发实践
上述段落阐述的都是敏捷开发的理论和指导思想,但是它没有明确告诉我们到底采用什么样的流程进行开发,而Scrum和XP就是敏捷开发的具体方式,你可以采用Scrum或XP方式进行敏捷开发。
(敏捷开发的内容)
敏捷软件开发是以短周期迭代为核心,包含团队、工作件、管理和技术优秀实践的集合。
Scrum专注于如何管理和交付你的产品,Scrum会强调团队工作方式。XP却是考究于如何去做你的工作;
XP说的更多的是告诉程序员应该做什么,相对比,Scrum是一种项目管理方法论;
XP的与众不同之处在于它是一种体系,而不是一种解决方案。
可以把Scrum理解为快速而富有激情的开发。
Scrum开发流程中包含三大重要角色:产品负责人(Product Owner)、流程管理员(Scrum Master)、开发团队(Scrum Team)。
产品负责人:主要负责确定产品的功能和达到要求的标准,指定软件的发布日期和交付的内容,同时有权力接受或拒绝开发团队的工作成果。
流程管理员:主要负责整个Scrum流程在项目中的顺利实施和进行,以及清除挡在客户和开发工作之间的沟通障碍,使得客户可以直接驱动开发。
开发团队:主要负责软件产品在Scrum规定流程下进行开发工作。
那么,如何进行Scrum开发呢?下面一张图就能解释清楚:
XP(Extreme Programming的缩写),中文译为极限编程。XP旨在通过具体工程实践的合理搭配,让开发者能够快速的响应客户需求。XP强调:客户与研发人员的反馈、测试与开发的反馈、结对之间的反馈……
在XP中,常见的工程实践有:
测试驱动开发(TDD)
也叫单元测试先行,单元测试被认为是描述单元需求(大部分是函数的需求)一种手段,测试用例成为一种自动化的单元测试代码,首先通过单元测试确定要实现什么,即所谓WAHT的部分,再实现产品代码,即HOW的部分,产品代码的编写始终以需求来驱动。
验收测试驱动开发(ATDD)
ATDD是对用户故事的级别的需求说明、分析、再驱动实现,他们都要求测试前置,即关注WHAT。
结对编程
即两个人一起编写代码,共享显示器及键盘,一位同事担任的是navigator的角色,另一位是driver的角色。结对编程的前提是代码集体所有制,即代码为团队所共有,团队为代码的质量共同承担责任。
持续集成
软件开发中,软件的代码由不同的人编写,需要将所有的代码从不同的位置收集到一处,然后进行编译,编译之后放到验证环境中进行部署。这就需要团队的成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。
五、敏捷开发总结
说了那么多敏捷的好处,但必须强调的是:
敏捷不是说出来的,而是干出来的;
敏捷不是不写文档,而是少写文档,只写必要性的文档;
敏捷开发是一种软件过程方法和工具,敏捷开发本身并不能代表架构设计。
华为开发者社区
在一起 创梦想
官方微博:@华为开发者社区(新浪微博)
以上是关于扫盲贴:敏捷开发,你真的够了解吗?的主要内容,如果未能解决你的问题,请参考以下文章