谈谈敏捷开发
引言
敏捷开发是一种从上个世纪九十年代开始逐渐引起广泛关注的一些新型软件开发方法,是一种应对快速变化的需求的一种软件开发能力。常言道:“天下武功,唯快不破”,此言用于形容“敏捷”的威力相当合适。敏捷意思为快,但敏捷思想不仅仅求快,它更多强调“多快好省”,产出得多,产出得快,产出得好,同时节省各种成本,既经济又实用。它们更强调程序员团队与业务专家之间的紧密协作、面对面的沟通(认为比书面的文档更有效)、频繁交付新的软件版本、紧凑而自我组织型的团队、能够很好地适应需求变化的代码编写和团队组织方法,也更注重软件开发过程中人的作用。
敏捷开发宣言和原则
敏捷宣言的价值观
- 个体和互动 高于 流程和工具
- 工作的软件 高于 详尽的文档
- 客户合作 高于 合同谈判
- 响应变化 高于 遵循计划
也就是说,尽管右项有其价值,我们更重视左项的价值。
敏捷宣言的原则
- 我们最重要的目标,是通过持续不断地及早交付有价值的软件使客户满意。
- 欣然面对需求变化,即使在开发后期也一样。为了客户的竞争优势,敏捷过程掌控变化。
- 经常地交付可工作的软件,相隔几星期或一两个月,倾向于采取较短的周期。
- 业务人员和开发人员必须相互合作,项目中的每一天都不例外。
- 激发个体的斗志,以他们为核心搭建项目。提供所需的环境和支援,辅以信任,从而达成目标。
- 不论团队内外,传递信息效果最好效率也最高的方式是面对面的交谈。
- 可工作的软件是进度的首要度量标准。
- 敏捷过程倡导可持续开发。责任人、开发人员和用户要能够共同维持其步调稳定延续。
- 坚持不懈地追求技术卓越和良好设计,敏捷能力由此增强。
- 以简洁为本,它是极力减少不必要工作量的艺术。
- 最好的架构、需求和设计出自自组织团队。
- 团队定期地反思如何能提高成效,并依此调整自身的举止表现。
敏捷宣言中这些价值观和原则,所谓入门容易精通难,在旁人或者入门者看来也许略显空洞,所言无物;然而,敏捷精髓的实践者们一直坚信着这些理念,觉得它们字字珠玑,所言极是。不管我们是走敏捷的哪个流派,都不妨在实践敏捷的过程中,回过头来看看这些价值观和原则,想必会常看常新,大有裨益。
Scrum核心
团队密切协作
敏捷开发中,最核心的就是人。
不是说每个人坐在自己的格子间里,各自独立开发,定期向领导汇报工作就完事了,敏捷开发需要做到几个关键点:
- 定期会面。通过定期高效会议让开发人员保持紧张有序的工作状态。
- 及时告知项目进展。鼓励遇到问题一定要及时告知,让所有利益相关者都能够及时了解项目的最新进展。
- 知识共享。把知识分享出来,可以提升整个团队的开发能力,是对团队的一种投资。
- 代码共享。把代码集中在版本管理工具之中,团队任何人都有访问权限。
- 代码审查。针对代码的每个改动,都需要相关人员做代码审查。
不断反馈和调整
敏捷开发与传统瀑布式开发一个最大的不同就是,并非一次定终身。
软件开发不是线性过程,它存在很多的不确定性,有一定的动态波动,所以需要不断的反馈、调整,快速响应变化。
- 需求调整。在产品落地前,你是不可能制定出完美需求方案的,客户也并不一定能够清晰的知道他想要的软件产品到底是什么样子。所以,要做好需求不断变化的心理准备,也要有快速响应需求变化的能力。
- 功能调整。收集客户反馈、用户反响,来不断调整和优化软件功能。
- 代码重构。在开发的过程中,需要不断的重构代码,保持代码清晰、内聚、整洁。
保持软件可用
传统软件开发的方式是,等代码编写完毕,所有功能都完成之后,再集中测试和上线,在这之前,软件都是用户不可用的。
在信息快速发展的今天,这显然太落伍了,可能等你软件开发个一年半载,外面都变天了。
敏捷开发,另一大特色,就是保持软件一直可用,在最小可用版本基础之上,不断做功能迭代,不断发布新的版本。
通俗点讲就是,先做一个简化版本出来,让用户一直有软件可用,而后再逐步添加更多的功能,「小步快跑」式的做开发,而非一步到位。
这样做的好处,也是为了能够不断收集用户反馈与需求,及时调整开发方向。
短迭代 增量发布
这一条是上一条的延伸。
所谓「迭代」就是,重复下一个开发周期,此刻你可以想象一下 while loop。
用迭代的方法在前一版本之上逐步开发新的功能,发布新的版本,即:增量发布。
迭代周期不宜过长,一年半年显然就太久了,尽量要缩短迭代周期,保持开发过程稳步前进。
但短迭代并不意味着太过频繁,每天或者每周迭代一次的话,很可能会过犹不及,半个月到一个月应该是一个不错的时间节点。当然这只是参考建议,具体的迭代周期还应根据真实情况量力而行。
提早集成 不断集成
「集成」的含义就是,把软件的各个模块,新旧代码统一整合在一起,能够正确编译、运行,并且能够通过一系列的单元测试。
敏捷开发要求开发人员,不要临到软件发布或者交付的当天才开始集成,也不要很久才集成一次,尽可能的做到提早继承、频繁集成。理论上讲,每添加进一些新的代码,最好都要做一次集成。
通过提早集成、不断集成,能够尽早发现代码中的问题,保持软件的状态一直是可用的。
自动化集成、测试与部署
敏捷的另一个关键点是,通过技术手段把集成、测试与部署这些非常耗时的操作自动化。
至于为什么要自动化,如果你是一个人开发一个几千行的程序,那确实没必要自动化,确切的说,也没必要应用什么敏捷开发。
针对开发大型软件的团队而言,编译、测试过程有可能都非常的耗时,编译有时会花上半天的时间,测试可能会持续好几天。而且是多人协作共同开发,如果纯手动的话,你想象一下如果两个人想前后脚提交代码,岂不是要等上好几天的时间,等前面那个人集成结束之后,后面那个人才可以开始集成?
把集成、测试与部署自动化的好处就是,把这些耗时的纯体力劳动扔给机器去做,它做完了,只要返回你一个最终结果就好了,而且两个人同时 Check In 时也不会受到影响。
这副图涵盖了自动化集成、测试以及部署的流程。
开发者 Check In 之后的所有工作将都交给机器去做,它们都有专门的工具 ,包括集成工具、测试工具,当然这些工具可以使用第三方的,也可以自己开发。
一般情况下,这一系列的工作都跟版本管理工具绑定在一起,你只要 Check In 就会触发集成、测试,甚至还有部署。而你,只要专心的等待结果就好。
总结
在流程上,敏捷最大的特色是迭代式开发。敏捷开发可以用一句话概括:拥抱变化,轻量文档,团队合作,多个短的冲刺周期
参考文章: