敏捷开发,听到这个词,想必大家也都不陌生,很多地方都在讲敏捷——敏捷实践、敏捷管理、敏捷开发等等。那他们所讲的敏捷和我今天要讲的敏捷开发,是不一样的概念吗?其实,说不一样,是不太准确的。敏捷开发主要体现的是一种思想,敏捷的思想。这次我的分享是比较聚焦于软件项目的敏捷开发实践。但敏捷思想适用于所有的活动。
什么是敏捷开发?
敏捷开发(Aglie Development)不是指某一种具体的方法论、过程或框架,而是一组价值观和原则。
怎么理解呢?
首先,敏捷并不是一门具体的技术,而是一种理念或者说是一种思想。他可以指导我们更加高效的开发。
其次,敏捷开发都具有以下共同的特征:
迭代式开发、增量交付、开发团队和用户反馈推动产品开发、持续集成、开发团队自我管理等。
最后,相比于“传统”的瀑布开发模式,敏捷开发是一种“现代”的开发模式。
以往的软件工程已瀑布开发模式居多,瀑布开发模式比较适用于开发周期以年计算的大型软件系统,任何环节都是基于上一个环节的输出,才能往下进行的。
随着互联网的兴起,信息变得透明,而且传播速度之快,导致市场变化加速,用户需求加速变化,如果用软件工程的开发模式,做出来的软件,没有面世就被淘汰了。
敏捷开发顺应时代的发展,追求的是快速迭代,灵活应对变化,弱工具、弱流程的管理方式,注重实效快速响应市场需求,所以说敏捷开发是一种“现代”的开发模式。
在敏捷开发中,软件项目在构建初期就被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用的状态。
以古典老师的《超级个体》为例。全年的超级个体,可以看做是一个大项目(大目标),把这个大目标分解成一个一个小目标,每周一个主题,每个主题都是可以单独完成,具备可单独使用,也可以集成在一起使用。把每一周的主题集成在一起,最终就实现了《超级个体》这个大目标。
具体敏捷开发实践
我们一直说敏捷开发是一种指导思想或开发方式,但经过20多年的发展,具体的软件项目中敏捷开发有哪些呢?
Scrum,极限编程(XP),精益软件开发(Lean Software Development),动态系统开发方法(DSDM),特征驱动开发(Feature Driver Development),水晶开发(Crystal Clear)等等。
我所比较了解的是Scrum,极限编程(XP)。区别是scrum有一套标准的流程规范,xp注重实践。现实中2者结合使用。
《敏捷宣言》
通过身体力行和帮助他人来揭示更好的软件开发方式。
经由这项工作,形成了如下价值观:
个体与交互 重于 过程和工具
可用的软件 重于 完备的文档
客户协作 重于 合同谈判
响应变化 重于 遵循计划
在每对比对中,后者并非全无价值,但我们更看重前者。
敏捷开发十二原则
1.我们的最高目标是,通过尽早和持续地交付有价值的软件来满足客户。
2.欢迎对需求提出变更——即使是在项目开发后期。要善于利用需求变更,帮助客户获得竞争优势。
3.要不断交付可用的软件,周期从几周到几个月不等,且越短越好
4.项目过程中,业务人员与开发人员必须在一起工作。
5.要善于激励项目人员,给他们以所需要的环境和支持,并相信他们能够完成任务。
6.无论是团队内还是团队间,最有效的沟通方法是面对面的交谈。
7.可用的软件是衡量进度的主要指标。
8.敏捷过程提倡可持续的开发。项目方、开发人员和用户应该能够保持恒久稳定的进展速度。
9.对技术的精益求精以及对设计的不断完善将提升敏捷性。
10.要做到简洁,即尽最大可能减少不必要的工作。这是一门艺术。
11.最佳的架构、需求和设计出自于自组织的团队。
12.团队要定期反省如何能够做到更有效,并相应地调整团队的行为。
敏捷开发宣言比较抽象,但是敏捷开发十二原则就非常具体了,上面的十二条原则都是开发过程的经验总结。
例如第12条原则,团队要定期的反省,也就是我们日常说的复盘,这一点上一期思想夜宴就做的不好。这一期开始调整,及时的复盘总结,今天的最后一项是总结互评,希望通过总结互评,感谢每一位的付出,也希望大家总结本次活动的优点及不足,怎么样才能做出更好的思想夜宴活动。