敏捷的原则和实践方法
敏捷的十二大原则
敏捷宣言是专家们从软件开发的经验中总结来出来的,它是高度凝练的思维,而后依据这四条价值观,我们衍生出来了更具体的十二大原则,对敏捷宣言进行了更具有实操性的解释,具体内容如下:
- 我们最重要的目标,是通过持续不断地及早交付有价值的软件使客户满意。
- 欣然面对需求变化,即使在开发后期也一样。为了客户的竞争优势,敏捷过程掌控变化。
- 经常地交付可工作的软件,相隔几星期或一两个月,倾向于采取较短的周期。
- 业务人员和开发人员必须互相合作,项目中的每一天都不例外。
- 激发个体的斗志,以他们为核心搭建项目。提供所需的环境和支援,辅以信任,从而达成目标。
- 不论团队内外,传递信息效果最好效率也最高的方式是面对面的交谈。
- 可工作的软件是进度的首要度量标准。
- 敏捷过程倡导可持续开发。责任人、开发人员和用户要能够共同维持其步调稳定延续。
- 坚持不懈地追求技术卓越和良好设计,敏捷能力由此增强。
- 以简洁为本,它是极力减少不必要工作量的艺术。
- 最好的架构、需求和设计出自自组织团队。
- 团队定期地反思如何提高成效,并依此调整自身的举止表现。
敏捷实践:敏捷方法和最佳实践
有了思维的支撑以后,我们就要想着如何实行,所以接下来,我们一起来学习敏捷方法。敏捷方法主要包括了 Scrum 方法、DSDM 方法、水晶方法、特性驱动方法和 SCRUMBAN 等等。我们主要来看一下几个比较重要的方法。
Scrum
Scrum 是现在最流行的敏捷方法 ,它主要是面向开发和维护复杂产品的。这个结构框架很好理解,可以用“3355”来全盘概括,意思是 3 种角色、3 种工件、 5 种仪式和 5 种价值观。Scrum 的难点不在于框架知识,而在于如何实践。想要掌握 Scrum,就需要你坚持使用,在不断的实践中升级本领,丰富的实践经验就会帮你见招拆招,解决遇到的问题。在这里你只需要先知道这些,因为这个框架非常重要,所以在后续的课程中,我会结合实践为你详细解释,帮助你掌握。
Agile-scrum.png
DSDM
其次是 DSDM 方法,DSDM 就是动态系统开发方法。它具体的实施思路是这样的:在时间进度和可用资源预先固定的情况下,力争最大化地满足业务需求(传统方法一般是需求固定,时间和资源可变),然后交付所需要的系统。对于交付的系统,必须达到足够的稳定程度,确保可以在实际环境中运行;对于业务方面的某些紧急需求,必须做到在能够在短时间内满足,并在后续迭代阶段中对这些功能进行完善。
水晶方法
水晶方法是一种提倡机动性的方法,包含具有共性的核心元素,每个原色都含有独特的角色、过程模式、工作产品和实践。发明人将水晶方法细化为透明水晶方法论(Crystal Clear)、黄色水晶方法论(Crystal Yellow)、橙色水晶方法论(Crystal Orange)以及红色水晶方法论(Crystal Red)。这几种水晶方法论按照项目重要程度以及参加人员规模来进行划分。
水晶方法更强调组织,它会教你如何进行组织转型,同时也是一套可以根据不同的组织进行“因地制宜”裁剪的方法。
特性驱动方法
特性驱动方法简称 FDD,它是一个模型驱动(model-driven)、短期迭代(short-iteration)的过程,也就是说 FDD 是一个开发过程,过程就有起点和终点,FDD 的起点是创建一个全局的模型轮廓,通过两周一次的"特性设计-特性实现"的迭代,逐渐丰富模型功能内容。
特性驱动方法在平常地工作中使用较多。它最大的特点是需要一个全面的架构,这意味着设计和建模已经非常清晰了,所以它比较适合不需要试错的产品,也就是说需求范围很确定的项目。比如合同制项目中,乙方承接甲方的开发项目时,乙方会清晰的告知你需求,而你只要按照需求做出产品即可。腾讯的很多游戏就是采用的这个方法,比如欢乐斗地主这款游戏。
自适应软件开发方法
自适应软件开发方法的具体定义是:
-
基于复杂自适应系统理论,改善软件推测、协作和学习过程,建立新的价值观:自适应比优化重要;
-
关注人(技能)和交流,将开发过程放在第二位,关注工作的软件而不是文档,它强调和客户协作及对变更的适应;
-
定义以人为本的、领导-协作管理模型。领导的重点不是指令,而是创造一个文化氛围,使自适应和协作能够有效运行,除此之外,还要创造一个协作结构,使多个团队能够进行有效沟通。
它是更加适合需求多变、开发期短的软件项目。可以说它就是敏捷的雏形,但是更适用于开发内部,这是因为它不强调交付的价值,也没有过多关注到市场和用户的变化。
持续集成方法
持续集成方法是一种工程实践方法,具体来说就是每当开发人员提交一行代码,就能通过机器自动编译、自动测试,然后自动发布。开发团队通常每天集成一次,就能产生一个新版本供团队和用户体验,其目标是通过快速产生的版本可以尽快把问题暴露出来,进一步提高开发生产的效率。
因为我在腾讯互娱做过持续集成的项目,所以我对此比较熟悉。我当时主导生成了一套自动化的生产系统,我们那个时候称它为 SODA(Software Development Accelerator,软件研发加速器) ,后来被腾讯蓝鲸项目收编,不过最让我开心的是后来腾讯大大小小的游戏都接入了持续集成,这是让我感觉到自豪的一件事情。
有了方法论,那么我们就可以参考敏捷的最佳敏捷,以此来衡量我们和最佳实践的差距,将此作为标准不断地改进。