敏捷开发
敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。
已上介绍来源于百度百科,就我个人理解,敏捷开发的作用,是将以前瀑布式开发一次性需要上线的东西,拆分成为多个可以在不同阶段分开独立上线的功能,采取迭代更新的方式,可以让需要交付的最终结果中的一部分提前移交用户测试,发现问题及时整改。从用户角度上来看,可使用的东西尽早交付可以提高用户体验;从开发者角度上来看,避免了闭门造车的情况,有问题可以提前发现,并且功能被拆分成多个子项,也便于进行项目进度跟踪。
敏捷不是指某一种具体的过程或者框架,而是一组价值观和原则,需要大家遵守一系列的规范
敏捷开发流程
在日常开发过程中,我所在的团队也开始尝试使用敏捷开发的方式进行开发,以下是我在敏捷开发过程中对于流程的一些总结:
1.Event Storming
早期需求讨论时,可以让业务、产品经理、开发共同参与讨论,梳理出史诗级的用户故事。此过程可以让开发早介入,提前了解业务北京及流程
2.用户故事地图
根据Event Storming每一个事件,细化每一个点,梳理出mvp(每次都是可用的功能集合)
3.用户故事
用户故事地图文档化,整理到confluence,层级如下:
项目->史诗(按子域或模块划分)->用户故事(谁是什么角色,能干什么,目的是什么)
4.设计评审
做领域上下文的划分(每块都是微服务一个服务的划分,跟领域模型映射起来对应代码实现) + 技术实现方案(ISR)
5.Sprint规划
此过程也可称作定义里程碑,需要确定每个冲刺做哪些事,制定每个冲刺的计划及时间
6.Sprint规划会
Spring规划会:依赖于用户故事,全员参加,对子任务拆分(按照每个人物1-3人天的颗粒度,把任务拆解到能编码的程度)
7.Sprint设计
从此步开始已经进入正式开发流程,需要做的准备工作的流程如下:
流程设计->领域建模(可以采用架构师主画,全员沟通的形式)->统一语言->接口设计(方便前后端联调,可以使用yapi平台)
注:在此过程中统一语言尤为重要,因为不论是开发过程中的沟通,还是业务、产品经理和开发间的沟通,如果出现名词含义不统一的情况,在沟通中是很浪费时间的
8.测试驱动开发
前期单元测试、功能测试、接口测试
可以针对代码需要实现的逻辑,先进行测试用例的编写,然后为了支持测试用例的通过来进行产品代码开发,此过程成为TDD(测试驱动开发)
这点个人认为实现起来难度还是比较大的,本人所在团队在进行实验的时候,这点做得不是很好,基本还是采用的传统的开发业务代码,然后编写测试用例的方法
9.Sprint执行
在每个Sprint开发过程中实行看板管理,站会
通过Confluence和Jira关联,将之前输出在Confluence的用户故事创建成Jira任务
每天开站会,快速过一下每个人前一天完成的任务,以及遇到的问题
10.Sprint评审
每个Sprint结束之前要给用户演示系统,评审已经实现的功能和与用户需求的差异
这个过程中发现的问题可以在下一个Spint中解决,推动项目流程向正确的方向上发展
11.Spring回顾
每个Spring结束后,大家坐到一起针对已经完成的上一个Sprint进行回顾,总结做的好的地方和不好的地方,也可以输出自己对团队开发的意见或者问题。这个过程有利于日后的合作与开发,对提升工作效率有一定帮助
自身实践中的不足
总的来说,目前我参与的敏捷开发项目不是很成功,我总结了一下,有几个不足的地方,今后还需要在实践过程中不断完善
1.如果项目是从0到1做的话,在项目早期实现了自动化测试脚本,但是很多接口的逻辑和参数等非常不稳定,导致开发或测试人员频繁返工
2.TDD的模式还是不好实现,目前还没有掌握测试驱动开发的最佳实践,还需要深入学习一下
3.开发任务很紧,code review做的不够