什么是敏捷软件开发
敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。
敏捷开发和传统开发(比如瀑布模型)有何区别
敏捷开发的核心是迭代开发(iterative development)。敏捷一定是采用迭代开发的方式。对于大型软件项目,传统的开发方式是采用一个大周期(比如一年)进行开发,整个过程就是一次"大开发";迭代开发的方式则不一样,它将开发过程拆分成多个小周期,即一次"大开发"变成多次"小开发",每次小开发都是同样的流程,所以看上去就好像重复在做同样的步骤。
敏捷开发的好处
早期交付敏捷开发的第一个好处,就是早期交付,从而大大降低成本。降低风险敏捷开发的第二个好处是,及时了解市场需求,降低产品不适用的风险。由于敏捷开发可以不断试错,找出对业务最重要的功能,然后通过迭代,调整软件方向。相比传统方式,大大增加了产品成功的可能性。如果市场需求不确定,或者你对该领域不熟悉,那么敏捷开发几乎是唯一可行的应对方式。
敏捷软件开发的流程
图片来源于网络,这张图相对全面的体现了敏捷软件开发的流程
敏捷软件开发的原则
Robert大叔的《敏捷软件开发》大体上给出了12个原则
- 我们最优先要做的是通过尽早地、持续地交付有价值的软件来使客户满意。交付得越频繁,最终产品的质量越高。
- 我们欢迎需求的变化,即使到了开发后期,敏捷过程依然能够驾驭变化,为客户创造竞争优势。
- 经常交付可以工作的软件,从几个星期到几个月,时间间隔越短越好。
- 在整个项目开发期间,业务人员和开发人员必须朝夕相处在一起。
- 围绕斗志高昂的人构建项目。
- 在团队内部,最有效率也最有效果的信息传达方式,就是面对面的交谈。
- 可以工作的软件是进度主要的度量标准。
- 敏捷过程提倡可持续开发。出资人、开发者和用户应该总是保持文档的开发速度。
- 对卓越技术和良好设计的不断追求有助于提高敏捷性。
- 简单-尽可能减少工作量的艺术是至关重要的。
- 最好的架构、需求和设计都源自自我组织的团队。
- 每隔一段时间,团队都要总结如何更有效率,然后相应地调整自己的行为。
敏捷软件开发常见方式
通过如下报告(大概是16年左右),大致上可以看到敏捷在整个开发方式的趋势,敏捷中Scrum独占鳌头
常见的敏捷开发方式如下:
敏捷开发 - 面向工程管理:极限编程(XP)
极限编程(ExtremeProgramming,简称XP)是由KentBeck在1996年提出的,是一种软件工程方法学,是敏捷软件开发中可能是最富有成效的几种方法学之一。XP是一种近螺旋式的开发方法,它将复杂的开发过程分解为一个个相对比较简单的小周期;通过积极的交流、反馈以及其它一系列的方法,开发人员和客户可以非常清楚开发进度、变化、待解决的问题和潜在的困难等,并根据实际情况及时地调整开发过程。极限编程透过引入基本价值、原则、实践方法等概念来达到降低变更成本的目的。
敏捷开发 - 面向过程管理:Scrum方式
Scrum是迭代式增量软件开发过程,是敏捷方法论中的重要框架之一,通常用于敏捷软件开发。Scrum包括了一系列实践和预定义角色的过程骨架。Scrum中的主要角色包括同项目经理类似的Scrum Master角色负责维护过程和任务,Product Owner代表利益所有者,Developer Team包括了所有开发人员。
典型的中小团队开发流程详解
一直想总结一个比较完善的开发流程,但是各个公司的规模,文化和开发方式有很大的差异;后期会加入其它公司的研发流程。
项目研发流程规范
- 比较适合大一点的公司和团队,需求,UI,测试,产品经理和开发独立;
- 采用前后端分离, 前端采用前端开发框架提供页面,后端提供数据接口等;
- 有完善的CI&CD环境;完善的代码分支,权限控制和分配;
- Scrum敏捷开发,每个Sprint为2-4周,周期根据User Story量进行调整;
- 这个研发流程中最好再 加入不同的部门及角色负责相应流程的标注;
- 以及各个阶段,各个角色所需要有的产出;