作者: 巫婆艾
原IBM Advisory Software
Engineer,参与并见证IBM敏捷成功转型。原汇丰科技西安有限公司资深项目经理。现任某外企Scrum Master。擅基于不同文化形态下的敏捷实践裁剪。相信实践是检验真理的唯一途径。
什么是敏捷?
敏捷软件开发是基于敏捷宣言定义的价值观和原则的一系列方法和实践的总称。自组织、跨职能团队运用适合他们自身环境的实践进行演进得出解决方案。是一种通过创造变化和响应变化在不确定和混乱的环境中取得成功的能力。
敏捷开发简史
20世纪90年代初,一些轻量级的软件开发方法越来越受到公众的关注,这些方法包括:
- 1991, Rapid Application Development(RAD)
- 1994 Dynamic systems development method (DSDM)
- 1995, Scrum
- 1996, Crystal Clear ,Extreme Programming (XP)
- 1997, Feature-driven development(FDD)
2001年,Martin Fowler,Jim Highsmith等17位软件开发人员聚集在犹他州的Snowbird,讨论他们的共同想法和各种软件开发方法。经过讨论他们达成了在价值观和原则的共识,并共同发布了敏捷软件开发宣言和相应的十二条原则,宣告了敏捷开发运动的开始。会议之后,敏捷联盟成立,鼓励业界从业者进一步探索和分享想法和经验。
2003年,《 Lean Software Development: An Agile Toolkit 》出版,精益开发方法被业界广泛认知,并完善了敏捷开发方法。
2006年至今,Google、微软、IBM、亚马逊、华为等公司在大规模软件开发中开始应用敏捷,掀起敏捷应用热潮。
核心思想
敏捷开发(Agile Development)它不是一门技术,它是一种软件开发的流程。它采用是一种以人为核心、迭代、循序渐进的开发方法,指导我们用规定的环节去一步一步完成项目的开发,这些方法论强调了:
- 开发团队和业务干系人之间的密切合作;
- 商业价值频繁交付;
- 紧密合作的自组织团队,以及代码匠艺、验证和交付代码的巧妙方法。
为什么说是以人为核心?
相比较瀑布模型而言,敏捷开发更强调开发团队与业务专家之间的紧密协作,面对面的沟通(认为比书面的文档更有效),紧凑而自我组织型的团队,能够很好地适应需求变化的代码编写和团队组织方法,也更注重人在软件开发中的作用。
什么是迭代?
迭代是指把一个复杂且开发周期很长的开发任务,分解为很多小周期可完成的任务,这样的一个周期就是一次迭代的过程;同时每一次迭代都可以生产或开发出一个可以交付的软件产品。
常见的敏捷开发方法
- Scrum
- 水晶方法,Crystal
- 特性驱动开发,FDD/Feature Driven Development
- 精益软件开发,Lean Software Development
- 极限编程,XP Extreme Programming
- Kanban
敏捷开发的优势
- 敏捷开发属于增量式开发,对于需求变更较多的项目而言,可以很大程度上响应及拥抱变化。
- 因为市场变化越来越快,需要一种及时快速的交付形式,而敏捷开发则能更好地适用于此。
- 敏捷开发可以最大程度体现80/20法则的价值,通过增量迭代,每次都优先交付那能产生80%价值效益的20%功能,可以最大化单位成本收益。