一段时间以来,由于学习的需要,涉及到了很多软件系统分析与设计以及软件体系结构相关的问题。而软件系统开发流程中,不得不提到的,便是敏捷开发。
接下来,将由浅入深地来分析分析敏捷开发的基本概念,然后说明一下敏捷开发的代表–XP(极限编程)与Srcum过程。
敏捷开发概念与价值观
敏捷开发运动历史相对于整个软件开发而言算是较为悠久的,其真正开始的标志是01年2月提出的”敏捷宣言(Agile Manifesto)”,这项宣言由17位当时称之为“轻量级方法学家”所编写签署的,他们的核心价值观是:
以上来自于敏捷宣言的官方网站,敏捷宣言作为指导敏捷开发的核心思想,下面简单地解释一下其内容的基本含义。
个体和互动高于流程和工具。往往勤于沟通合作,目标明确的个人优秀的团队比那些使用最高级工具的团队做得更好,因为软件产品是人完成的,中间有太多的不确定性,因此互动与个人能力对变化的适应性就显得尤为重要;
工作的软件高于详尽的文档。能够让软件能够顺利给用户交付使用是最终的目的,并不在乎将项目开发的过程文档写得多么漂亮,由于敏捷开发注重效率,而如此耗时的工作在后期并没有很好的效益。
客户合作高于合作谈判。让客户参与到软件开发的过程中,能够更好地了解客户的需求。
响应变化高于遵循计划。软件开发的过程中,往往会有诸如需求,设计等的改变,对于传统的瀑布模型将软件开发定义地过于死板,不具有对变化的适应性,开发出来的产品很可能并不是满足需求的“高质量”产品。
敏捷开发特征总结
关于敏捷开发的特征问题,网上已经有相当多的介绍资源,以下仅仅按照个人的体会针对一些与传统开发方式差异较大的部分进行总结。
以瀑布模型为代表的开发方式有着严格的过程化,没有较强的响应变化的能力,不利于了解用户变化的真正需求。而敏捷开发实际上是测试驱动的。了解了用户的需求之后设计测试用例,编写测试代码,如果产品能够通过所有测试,那么其就是一个可以release的版本。
敏捷开发的主要文档是测试文档。传统的开发过程中特别看中需求分析,设计与实现等部分的文档,而敏捷开发则更为注重测试文档。其本质原因是因为敏捷开发的过程中,伴随着极其快的软件版本迭代,如果注重实现等的文档,很容易产生代码修改不一致的问题。而如果以测试文档为主要文档,则便于项目的管理。同时也可以减轻团队成员调整带来的学习成本。
敏捷开发以合作为中心,也就是实现代码共享。敏捷开发过程的代码不是为一人所有,任何人都有权利看到所有代码并原则上允许修改所有代码,并不需要征得原作者同意。这在很大程度上就降低了人员调动所带来的风险。
敏捷开发要求开发人员的水平基本相当,一般而言,较高。由于敏捷开发的代码共享性以及代码的高需求适应性,其对开发人员的整体水平要求较高,同时开发人员之间的水平基本相当。
敏捷开发典型代表
当下用得比较多的,有两类敏捷开发的方法。一类是XP(极限编程),另外一类是Scrum。由于两者都是基于敏捷开发价值观的具体实现,因此下面简单地谈谈两者之间的差异。
区别之一: 迭代长度的不同
XP的一个Sprint的迭代长度大致为1~2周, 而Scrum的迭代长度一般为 2~ 4周.
区别之二: 在迭代中, 是否允许修改需求
XP在一个迭代中,如果一个User Story(用户素材, 也就是一个需求)还没有实现, 则可以考虑用另外的需求将其替换, 替换的原则是需求实现的时间量是相等的。 而Scrum是不允许这样做的,一旦迭代开工会完毕, 任何需求都不允许添加进来,并有Scrum Master严格把关,不允许开发团队收到干扰。
区别之三: 在迭代中,User Story是否严格按照优先级别来实现
XP是务必要遵守优先级别的。 但Scrum在这点做得很灵活, 可以不按照优先级别来做,Scrum这样处理的理由是: 如果优先问题的解决者,由于其它事情耽搁,不能认领任务,那么整个进度就耽误了。 另外一个原因是,如果按优先级排序的User Story #6和#10,虽然#6优先级高,但是如果#6的实现要依赖于#10,则不得不优先做#10.
区别之四:软件的实施过程中,是否采用严格的工程方法,保证进度或者质量
Scrum没有对软件的整个实施过程开出养个工程实践的处方。要求开发者自觉保证,但XP对整个流程方法定义非常严格,规定需要采用TDD, 自动测试, 结对编程,简单设计,重构等约束团队的行为。因此,原作者认为, 这点上,XP的做法值得认同的,但是却把敏捷带入了一个让人困惑的矛盾, 因为xp的理念,结合敏捷模式,表达给团队的信息是“你是一个完全自我管理的组织, 但你必须要实现TDD, 结对编程, …等等”
不难发现,这四个区别显见的是: Scrum非常突出Self-Orgnization, XP注重强有力的工程实践约束。
一般建议, 在管理模式上启用Scrum, 而在实践中,创造一个适合自己项目组的XP(“start with Scrum and then invent your own version of XP.”)
总结
通过对敏捷开发相关理念以及突出特点的了解,个人觉得其思想是一种很不错的范式。后续承担的某项目本人将尝试使用敏捷开发。