互联网行业的业务需求变化快,交付周期成为企业核心竞争力之一,轻量级的,更能适应变化的敏捷软件开发方法,开始被认可并迅速流行。
在京东,越来越多的项目也已经或计划采用敏捷开发模式了。那么,什么是敏捷开发?为什么需要敏捷开发?以及敏捷试点项目开始前需要做哪些准备工作?本文将对此做个简单的介绍。
为什么需要敏捷开发?
敏捷开发的出现很好的解决了传统瀑布式开发的痛点:
传统的瀑布式开发是预定义式的阶段性开发模式,需求->设计->开发->测试->部署上线。
它的主要痛点是:
1、对需求变化的响应差,业务方或用户在早期见不到实际的产品,没法及时给出反馈。如果在后期需求变化,因为设计和编码已经部分完成,软件变更的成本非常高。
2、早期的问题可能到后期的测试才能发现,而研发如果对需求理解有偏差,会引起及其严重的资源浪费和项目延期。
3、不利于人员的协作。各阶段有专门的人负责,工作未完成,进入下一阶段前,其他资源在等待阶段。
而敏捷不断的进行迭代增量开发,小批量,早交付,及时获得用户反馈。敏捷本质是一个实验性的过程,不断的根据实际情况,做出适应性的调整,最终交付符合业务价值的产品。同时敏捷非常强调团队合作,鼓励业务,产品,研发的紧密配合。
在京东,已经通过了把大项目拆解成小项目,分为项目一期,二期等上线,减少了瀑布模型带来的弊端。但有些项目工期还是要几个月,这种情况可以尝试敏捷开发。
有人对瀑布和敏捷的比较做了个造车的形象比喻:瀑布式方法造汽车,客户只有到最后才能看到产品。而敏捷方法每个迭代结束,都会产出测试过的交付物,让客户试用,根据反馈不断调整,客户的满意度不断提高。
此图片来源自Henrik Kniberg的博客
以上是敏捷带来的很多好处,但不是说传统的瀑布方式就是一无是处了。如果项目的需求很稳定,确定性高,比如平台改造,组件化等,用瀑布方法也很好。瀑布和敏捷都有自己的适用场景,可以并存。
什么是敏捷?
敏捷是指有能力对业务需求的变化做出快速响应,同时控制风险。能够灵活的,快速的高效的根据实际情况做出适应性调整。
敏捷开发是以人为核心,业务价值驱动的,采用迭代、增量的方法的一种轻量级的开发模式,能够很好地适应需求变化,快速交付高质量的软件。
敏捷也有自己的价值观,体现在下面的敏捷宣言里(2001年发表) 敏捷宣言本质是揭示一种更好的软件开发方式,启迪人们重新思考软件开发中的价值和如何更好的工作。
如何开始敏捷项目?
部门内初次试用敏捷方式,一般会先运行个试点项目,积累经验,并根据实际情况做持续的改进。
1、充分沟通,达成一致
在敏捷实施开始前,需要和业务方,团队充分的沟通,让大家理解为什么需要敏捷开发,以及需要达到哪些目标等。
如能得到领导层面的支持认可,将会更顺畅的实施。
2、做好敏捷的培训辅导工作
如果团队从未实践过敏捷,初期需要一些培训和辅导工作。同时多和已经应用敏捷的团队做交流,借鉴经验。如有培训需求,也可以联系笔者或企业信息化部的技术学院。
3、工具的准备
工具的支持在敏捷实践中起着很大的作用。理想的情况下,如业务需要,从代码检入source,到部署到生产环境可以实现自动化,做持续的集成,测试和部署。
同时工具需支持需求管理,任务分配跟踪,报告生成等功能。每一个需求,可以链接到对应的任务,代码,测试用例,BUG。(例如:JIRA提供的敏捷功能)
各种工具很多,京东也正在投入精力做工具的建设,如在开发的行云系统。和已经使用的一些自动化测试工具,sonar,乐哦等。开始敏捷前,可以选用合适的工具做支持。
下面是业内常见的DevOps工具链:
4、后勤的准备
理想的情况,团队成员座位要比较靠近,方便沟通交流,有团队独立的工作区。同时需要一些大白板,玻璃墙,便事帖等工具,以方便大家讨论问题,应尽量准备好所需的环境。
5、因地制宜的选择合适的敏捷实践
每一个项目,团队和产品都不一样,需要根据项目/产品具体情况,灵活选择最适合自己的敏捷实践,避免教条化。
常见的敏捷方法有Scrum,看板和XP极限编程几种。其中scrum和看板注重于开发的管理,XP注重于编程实践。实际应用中可以将几种方式结合。
另外,还有一些敏捷框架方法,是适用于规模化的,大型的,需要多个团队,几十人或上百人以上合作开发同一个产品的应用场景的(例如:SAFe,LeSS),本文不再赘述。
下面是常见的敏捷方法的简单介绍,大家根据实际情况采用适合的方法:
SCRUM
Scrum采用固定的迭代周期,由一些标准的事件组成,包括需求梳理会议,迭代计划会,每日站会,演示会和回顾会。这些会构成了完整的PDCA反馈环,形成稳定的软件交付节奏。
看板
SCRUM强调专注,在一个迭代周期里,不鼓励需求经常的变化,并且实施起来成本比较高。(需要一定的培训和角色分配)
如果项目的需求变化更加的频繁,计划比较难做,或者需要快速启动敏捷方式。看板可以是一个很好的选择。
看板的规则包括可视化整个需求交付的过程,限制并发任务数,收集度量数据持续的优化等。
极限编程
极限编程的一些实践方法,包括TDD,结对编程等,实施起来成本比较高,需要根据实际情况做出选择。
上面介绍了开始敏捷项目前,要做的一些准备工作。
战术有千条,首条要肯打。只停留在理论阶段,永远也无法实践落地,所以我们的准备工作不要求尽善尽美,尽快开始实施敏捷,在实践中才能不断的学习和提高。
结束语
本文介绍了敏捷开发带来的好处和实施敏捷前要做的一些准备工作。但是需要提到,敏捷不是万能的,它不是能快速解决一切问题的‘银弹’。但敏捷能很好的暴露问题,促进问题的解决。
希望大家在实践中不断总结经验,沉淀成有京东特色的敏捷方法论,实践集。