从理论上初步了解敏捷开发

今日闲来无聊看了微信的一个宣传短视频,里面讲了微信的四个很重要的特性:极致精神,克制,敏捷开发,传帮精神。对于敏捷开发之前稍有涉略,但是也忘的七七八八了,便借此机会重学了一遍敏捷开发的原理。


为什么需要敏捷开发

在传统的瀑布式开发中,需要等上一阶段的任务完全完成后才能开始进行下一个阶段。好比你点了10道菜,厨师要等到10道菜都做好了才给你一起上,那作为消费者肯定是不乐意的。而在软件开发中,要等到产品完全完成后才上线势必会延误市场时机。因此,软件开发的模型不再使用瀑布模型了,更多的企业倾向于使用敏捷开发。

敏捷开发并不追求前期完美的设计、完美编码,而是力求在很短的周期内开发出产品的核心功能,尽早发布出可用的版本。然后在后续的生产周期内,按照新需求不断迭代升级,完善产品(也就是:先定一个小目标)。

敏捷开发有很多种方法,包括了XP(极限编程),SCRUM(迭代式增量软件开发过程),RUP等。


XP

客户作为团队成员:这里的客户是指定义产品特性并对其进行排列优先级的人或者团体,即今天我们俗称的产品、业务分析师、项目经理等一类人。极限编程所追求的是“客户”和开发人员在同一个环境中工作。面对面沟通,是最有效最简洁的交流方式。

良性计划:极限编程中,开发人员和客户要先确定最重要的需求,以保证快速响应和进行工时预估。需求可以随时进行调整。

简单设计:采用能够解决当前需求的最简单设计。只有在确定真的需要引入某些基础结构(比如数据库、通信服务框架)性价比更高时,再去引入它们。将重复或相似度较高的代码变成函数,封装成一个统一的抽象集合,然后在使用时调用即可(这也将进一步减少代码间的耦合)。

结对编程:一个人进行编码,另一个进行观察并寻找代码中的错误和可以改进的地方,但是这种编程方式已经很少见了。更多的是由同一开发人员独立完成单元测试代码编写和功能代码编写。

持续集成:多次的check in和check out并进行merge,使用源代码控制工具。

TDD(测试驱动开发) :先编写测试代码(单元测试),再编写功能代码。

UAT(验收测试):用来验证系统是否满足它所声称的具有其功能的黑盒测试方法。验收测试是关于系统特性的最终文档。单元测试作为可编译可运行的系统内部结构的文档,验收测试是有关系统特性的可编译执行的文档。

重构:重构后的程序读起来应比之前好很多,工作的也应该更好。程序应该变得更易理解和修改,且程序结构各部分之间互相隔离。


SCRUM

SCRUM则是一种开发流程框架,也可以说是一种套路。SCRUM框架中包含三个角色,三个工件,四个会议,听起来很复杂,其目的是为了有效地完成每一次迭代周期的工作。

在项目启动之前,会由团队的产品负责人(Product owner)按照需求优先级来明确出一份Product Backlog,为项目做出整体排期。

随后在每一个小的迭代周期里,团队会根据计划(Sprint Plan Meeting)确定本周期的Sprint Backlog,再细化成一个个Task,分配给团队成员,进行具体开发工作。每一天,团队成员都会进行Daily meeting,根据情况更新自己的Task状态,整个团队更新Sprint burn down chart。

当这一周期的Sprint backlog全部完成,团队会进行Spring review meeting,也就是评审会议。一切顺利的话,会发布出这一版本的Release,并且进行Sprint回顾会议(Sprint Retrospective Meeting)。


XP和SCRUM的区别

迭代长度的不同:XP的一个Sprint的迭代长度大致为1~2周, 而Scrum的迭代长度一般为 2~ 4周。

在迭代中, 是否允许修改需求:XP在一个迭代中,如果一个User Story(用户素材, 也就是一个需求)还没有实现, 则可以考虑用另外的需求将其替换, 替换的原则是需求实现的时间量是相等的。而Scrum是不允许这样做的,一旦迭代开工会完毕, 任何需求都不允许添加进来,并有Scrum Master严格把关,不允许开发团队受到干扰。

在迭代中,User Story是否严格按照优先级别来实现:XP是务必要遵守优先级别的。但Scrum在这点做得很灵活,可以不按照优先级别来做,Scrum这样处理的理由是:如果优先问题的解决者,由于其它事情耽搁,不能认领任务,那么整个进度就耽误了。另外一个原因是,如果按优先级排序的User Story #6和#10,虽然#6优先级高,但是如果#6的实现要依赖于#10,则不得不优先做#10。

软件的实施过程中,是否采用严格的工程方法,保证进度或者质量:Scrum没有对软件的整个实施过程开出工程实践的处方,要求开发者自觉保证。但XP对整个流程方法定义非常严格,规定需要采用TDD、自动测试、结对编程、简单设计、重构等约束团队的行为。


Devops

敏捷开发的重心是开发,devops的重心是开发和运维的协作。Devops是Development和Operations的合成词,其目标是要加强开发人员、测试人员、运维人员之间的沟通协调。如何实现这一目标呢?需要我们的项目做到持续集成、持续交付、持续部署。


有用的参考文章

趣文:三分钟了解敏捷开发

敏捷开发:极限编程简述

什么是持续集成?该怎么做?

一分钟告诉你究竟DevOps是什么鬼?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值