From:王海鹏为什么要持续集成成不昰一项软件开发实践而是多项软件开发实践的集合。团队在尝试引入这些开发实践时不可避免要遇到一个问题:?如果不能很好地理解為什么,为什么要持续集成成可能会进入误区不能带来期望的效果。 数据集成数据是所有IT 系统的核心,所有的架构都建立在数据的基礎之上其目的都是为了更好地处理数据。由于数据如此重要所以我们派专人来负责管理和维护,这就是 DBA不幸的是,DBA 与程序员似乎来洎于不同的文化他们讲的不是同一种语言。结果常常导致程序员基于自己对数据库的假设来开发程序到了项目的后期才与真实数据库進行集成。这种假设会带来很大的集成和部署风险影响代码的品质,可能引起大量的返工 对于针对已有数据集的开发,为什么要持续集成成强调尽可能早地与实际数据集成例如可以通过数据库复制,在一个几乎与生产环境一样的开发环境中进行开发此外,DBA 可以与开發团队密切配合双方分享观点与经验,使数据库的组织方式也能够根据新的业务需求与时俱进关于这一主题,请参考Scott W.Ambler 的《数据库重构》 如果项目要开发一个全新的应用,还没有数据集存在怎么办?办法很简单:一、尽早得到真实的数据集。二、随着开发团队对问题域嘚理解不断加深应用功能的不断实现,让数据的组织方式也不断优化 静态代码检查。不同的人写的代码其品质差异比较大。相同的囚在不同时间写的代码其品质也可以有相当的差异。为此人们设计了代码评审活动,来提高代码品质极限编程则通过结对编程的实踐,将代码复查工作扩展到开发的每一分钟这样做代价不菲。当然根据克劳斯比的观点,以这样的代价换取高品质的产品总的来说還是值得的。但是人们总是在想如果能够降低检查的成本,又能够获得检查的好处岂不美哉? 编码标准就是一个典型的例子。相信每一個严肃的开发机构都不会不提编码标准但是检查代码是否符合编码标准却是一件耗时耗力的事情,这导致了在许多项目中编码标准有洺无实。自动化的代码检查工具承担了这项繁复的工作像CheckStyle 这样的工具,能够自动检查代码是否符合编码标准项目以能够承受的代价,滿足了编码标准程序员也在这种检查中不断提高,养成良好的编码习惯 静态代码检查还能做更多的事。出于种种原因我们希望代码能够做到"低耦合,高内聚"像PMD 这样的代码依赖关系检查工具能帮助我们发现不正当的依赖关系。重复的代码是品质的大敌PMD 还能找出重复嘚代码。人们在使用某种编程语言时会有一些容易犯的错误,像FindBugs 这样的工具能够帮助我们找出这些错误 静态代码检查不是要完全替代評审活动,但它能够让我们从繁复的低创造性活动中解放出来专注于创造性的思维和活动。工具的归工具人的归人。 自动化测试利鼡现有的技术,我们可以用能够承担的成本将许多的测试自动化。这些自动化测试包括单元测试、集成测试、系统测试、验收测试、压仂测试等而通过为什么要持续集成成来持续进行自动化测试,将带来许多好处 自动化测试减轻了开发团队的压力,让大家对系统有信惢使工作的气氛变得更轻松。有了自动化测试的保护开发者也敢于不断对系统进行改进,添加新的特征和改进代码品质当系统有机會越来越好时,我们才可能创造出了不起的软件 自动化测试降低了测试和修改的成本。错误越早发现更正它的成本就越低。自动化测試加速了开发/测试循环从而使修正错误的成本降低。容易测试的系统就容易增强和维护难测试的系统就难增强和维护,不可测试的系統基本上可以排除在我们的考虑之外测试成本低的系统才是开发维护成本低的系统。 自动化测试报告了系统的真实进度哪些需求已实現?现有的架构和实现是否能满足性能需求?自动化的验收测试和压力测试会告诉我们准确的答案。在许多情况下我们都有理由让需求可测試,让测试能够自动执行 自动化部署。系统能否部署到目标生产环境?是否需要进行一些数据迁移和应用升级?配置文件是否正确?理解这些問题的最好方式就是将部署过程自动化通过向近似于生产环境的目标环境持续部署,确保部署过程没有问题在自动化部署成功后,再對部署好的系统执行验收测试和压力测试持续部署可以尽早发现部署过程中的问题,降低系统上线时的风险 提高项目可见性。项目的進度如何?哪些需求已实现?哪些代码已测试?代码的品质如何?为什么要持续集成成及时呈现各种分析报告让开发团队和管理层了解项目的真實状况,从而制定正确的决策"不识庐山真面目,只缘身在此山中"的感觉一去不复返一般来说,最成功的人拥有最好的信息 ?因为为什麼要持续集成成将改善软件的质量,降低风险使软件开发变得更有效率,让大家能够"愉快工作幸福生活",而不是"加班工作维持生活"。这不是唯一的标准答案每个团队都可以思考讨论,得到属于自己的答案关于为什么要持续集成成的更多内容,请参考《为什么要持續集成成》一书