持续集成系统-敏捷开发的基石
敏捷需求分析、敏捷项目管理、敏捷软件开发已经被大家炒的很热了。在目前这种项目复杂多变的情况之下似乎“敏捷”都已经成为了不二之选。
就像一门优秀语言的出现会影响一个软件开发人员职业生涯的5年,10年,甚至更长时间一样,一门优秀的软件项目管理思想和最佳实践的出现和普及对软件从业人员的影响都将是深远的。敏捷软件开发模式可能是大家讨论最为激烈的。而持续集成的概念在敏捷开发中也被频繁的提及。目前的淘宝、腾讯、百度在介绍他们的敏捷开发时,无一不对持续集成系统进行了重点阐述。持续集成到底是什么,有着怎样的魅力,能让这么多成功的互联网公司如此青睐?下面就让我们来揭开它的神秘面纱。
持续集成(Continuous Integration)这个术语源自 XP(极限编程)的一个最佳实践,随着XP近几年的推广持续集成被大家认可并实践,但持续集成并非 XP 的专利,持续集成完全可以应用在采取非XP方法的项目里面。持续集成也不是一个新的概念,在这个术语出现之前,每日构建(daily build)提供同样的含义,这个典型的代表就是微软,他们每天的工作都开始于每日零点的版本构建。持续集成和每日构建主要区别就在于实施的频率上,随着 XP 社区的大师级人物 Martin Fowler等人所著《Continuous Integration》为其正名,持续集成这个术语就越来越多地出现在原来每日构建出现的位置。
大师Martin Fowler对持续集成是这样定义的:
持续集成是一种软件开发实践,即团队开发成员经常集成它们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件。
我们可以这么理解大师的定义:持续集成就是及早地将开发人员的代码集成起来,通过各种工具来及时地发现代码中存在的问题,以确保代码质量的稳定性和准确性,而且持续集成是一个实践,其实也是一个集成的原则和指导思想,项目需要根据各自的特点定制具体的集成策略来达到尽早并快速的发现解决问题。
持续集成有哪些特点?
持续集成有以下几个要点:
1. 有统一的源代码库
从事过开发项目的同事都知道,一般一个初具规模的项目的代码行数都是上万行,分割成文件也是成千上百个,只能用源代码管理工具来管理,例如比较流行的clearcase,Subversion等。开发人员基于同一个源代码库进行开发是进行持续集成的一个前提。
2. 实现了版本构建自动化
持续集成的一些工具都支持Ant,Maven,Maven2,Msbuild等编译工具,可以根据不同的任务采用不同的编译工具,完成构建所需环境配置并自动完成版本的构建。
3. 测试完全自动化
持续集成可以使用findbugs进行静态代码检查和执行单元测试脚本,还直接调用自主开发的自动化测试脚本,进行系统和功能测试,充分验证系统功能的完整性和准确性。
4. 每次代码递交后都会在持续集成服务器上触发一次构建
在开发过程中,如果开发人员本地的编译环境存在差异,就可能会出现开发人员A的修改在他本地验证通过,但提交到版本库后,开发人员B下载到他自己的机器上却无法编译通过。为了避免出现这种情况,需要创建了专门的持续集成服务器,统一编译环境的配置,开发人员的每一次提交都会在持续集成服务器上进行集成和测试。这样就保证开发人员从Subversion版本库中获取到的版本完全可用。
5. 测试环境要和产品发布的实际环境一致。
持续集成的目的就是为了快速集成并验证问题,然后发布,所以持续集成的测试环境必须和产品实际的运行环境保持一致,这样用户才能拿到真正通过测试检验的产品。
6. 自动部署
持续集成构建的版本可以自动进行部署。
持续集成带来哪些价值?
从前面的介绍不难看出持续集成的价值:
1. 减少风险
持续集成一天中可以进行多次的集成并做相应的测试,有利于提前发现缺陷,将问题消灭在项目的前期,在很多程度上避免了将问题遗留到项目后期的风险。
2. 减少重复过程
从代码提交到软件发布的过程包括代码编译、测试、部署以及反馈等环节,每个环节对于开发工程师而言是费时费力而又没有产出的过程,并且每次代码的修改都会重复这个过程。CIS可以将这些重复的动作都变成自动化的,无需太多人工干预,可以将项目成员将这种周而复始的过程中解放出来从而投入到其他更有价值的工作中去。
3. 可以随时生成可交付的软件
我们利用持续集成,可以经常对源码进行修改,并将这些习惯及时和其他代码进行集成,而且如果发现问题,会在第一时间只好开发人员解决,问题会很快得到修复。如果没有持续集成,这些问题有可能到交付前的集成测试的时候才发现,有可能会导致延迟发布产品,而在急于修复这些缺陷的时候又有可能引入新的缺陷,最终可能导致项目失败。
4. 增强项目的可见性
持续集成可以提供一些数据,使我们对项目的进度趋势进行预测并进行有效的决策:
1) 有效决策:持续集成系统为项目构建状态和质量指标提供了及时的信息,CIS还可以报告功能完成度和缺陷率。
2) 体现趋势:由于经常集成,我们可以看到一些趋势,如构建成功或失败、总体质量以及其它的项目信息。
5. 建立团队对开发产品的信心
持续集成可以建立开发团队对开发产品的信心,因为我们可以清楚的知道每一次构建的结果,知道我们对软件的改动造成了哪些影响,结果怎么样。
持续集成的这种实践目前在一些互联网公司得以应用,只是不同公司会根据各自的项目特点进行创建和开发,比较典型的就是淘宝,腾讯,百度等。Ophone产品也根据自己的特点创建了持续集成系统,后续会进行详细介绍。