敏捷持续集成(CruiseControl版):高效研发之道
分類: 图书,计算机/网络,程序设计,Java Java Script J2EE,
作者: 罗时飞 编著
出 版 社: 电子工业出版社
出版时间: 2008-6-1字数: 537600版次: 1页数: 315印刷时间: 2008/06/01开本: 16开印次: 1纸张: 胶版纸I S B N : 9787121065576包装: 平装编辑推荐
持续集成CruiseControl的权威之作,CI理论与实践并重,如期交会高质量复杂软件产品的必由之路。
围绕持续集成及CruiseControl进行讲解。CI是当前应用最广泛的敏捷实践之一,而CruiseControl是功能最强大、历史最悠久的Cl服务器,基于CruiseControl实施CI工作意义不寻常。
■全书从阐述可回归性、敏捷性开始,揭开研究CI及CruiseControl的序幕,这便是“初涉持续集成”部分
■“敏捷持续集成”部分专注于CI实战,鬻领读者深入Subversion、CVS、VSS、ClearCase等主流SCM工具的持续集成实践中
■研究CI实战背后的理论知识成为“持续集成权威指南”部分的重点,由持续数据库集成、持续单元及集成测试、持续评审、持续部署、持续功能及负载测试、持续反馈构成
■“CruiseControl高级特性”部分是属于CruiseControl自身的盛宴,由分布式集成构建、CruiseControl内核研究及扩展构成
■附录A深入而细致地阐述了全家福
本书围绕持续集成及CruiseControl进行讲解。CI是当前应用最广泛的敏捷实践之一,而CruiseControl是功能最强大、历史最悠久的CI服务器,基于CruiseControl实施Cl工作意义不寻常。全书从阐述可回归性、敏捷性开始,揭开研究CI及CruiseControl的序幕,这便是“初涉持续集成”部分;“敏捷持续集成”部分专注于CI实战,带领读者深入Subversion、CVS、VSS、ClearCase等主流SCM工具的持续集成实践中;研究CI实战背后的理论知识成为“持续集成权威指南”部分的重点,由持续数据库集成、持续单元及集成测试、持续评审、持续部署、持续功能及负载测试、持续反馈构成;“CruiseControl高级特性”部分是属于CruiseControl自身的盛宴,由分布式集成构建、CruiseControl内核研究及扩展构成;附录A深入而细致地阐述了全家福。
内容简介
在并重“理论与实践”思想的指引下,作者踏上了持续集成及CruiseControl的写作行程。全书共分为5部分内容:第1部分(初涉持续集成)由持续集成概述(第1章)、实施持续集成(第2章)构成,这部分内容的着眼点在于阐述相关的背景知识及初步认识持续集成;第2部分(敏捷持续集成)由基于Subversion的持续集成实战(第3章)、基于CVS的持续集成实战(第4章)、基于VSS的持续集成实战(第5章)、基于ClearCase的持续集成实战(第6章)构成,这部分内容将实战摆在了首当其冲的位置:第3部分(持续集成权威指南)由持续数据库集成(第7章)、持续单元及集成测试(第8章)、持续评审(第9章)、持续部署(第10章)、持续功能及负载测试(第11章)、持续反馈(第12章)构成,研究实战背后的理论知识成为了这部分内容的重点;第4部分(CruiseControl高级特性)由分布式集成构建(第13章)、CruiseControl内核研究及扩展(第14章)构成,这是属于CruiseControl自身的盛宴;第5部分由维护CC配置文件(附录A)构成,它是查找CruiseControl配置文件相关知识点的权威去处。
本书适合作为CI集成人员、Java/Java EE开发者、架构师、项目及产品开发经理的参考书,同时,本书非常适合于高校相关专业的学生,以及对持续集成有兴趣的各类读者。
作者简介
罗时飞独立Java EE顾问,西安交通大学硕士,将近10年的JavaEE开发、架构经验,理论与实践并重。对Java EE平台、敏捷方法及开源技术有深入研究。出版图书多本。曾被评为电子工业出版社的“优秀作译者”。他一直在依托http://www.open-V.com网站专职从事企业级Java的推广工作,其近期代表作品有《敏捷Acegi、CAS——构建安全的Java系统》、《精通Spring
2.0》、《精通EJB 3.0》(译著)。
目录
第1部分初涉持续集成
第1章持续集成概述
1.1敏捷软件研发
1.1.1提炼重复任务一实现可回归性的重要前提
1.1.2敏捷性——奔向成功的致胜法宝
1.2何谓持续集成
1.2.1驱动CI的引擎——CI服务器
1.2.2敏捷配置管理
1.3CruiseControl初探
1.4小结
第2章实施持续集成
2.1CruiseControl的下载和安装
2.1.1登录到CruiseControl的遗留Web控制台
2.1.2登录到CruiseControl的新一代Web控制台
2.2connectfour示例分析
2.2.1connectfour项目背景
2.2.2分析confi9.xml配置文件
2.3自定义CruiseControl的运行时行为
2.3.1保护JMX HttpAdapter适配器
2.3.2借助于RMl操控CruiseControl服务器
2.3.3调整CruiseControl的JVM内存使用
2.4小结
第2部分敏捷持续集成
第3章基于Subversion的持续集成实战
3.1CruiseControl内置的SCM支持
3.2Subversion的安装及配置
3.2.1安装Subversion
3.2.2配置及初始化Subversion配置库
3.3Spring PetClinic概述
3.4借助Subversion和CruiseControl实施持续集成
3.4.1从Subversion检出petclinic项目
3.4.2配置confi9.xml
3.4.3触发持续集成工作
3.4.4查看持续构建结果
3.5Subversion客户端支持
3.6CmiseControl若干技巧
3.6.1模块化Ant文件
3.6.2稳健应对构建失败
3.6.3控制收集修改集合的策略
3.6.4自定义构建产出物的分发渠道
3.6.5借助SVNLabellncrementer插件控制构建Label的生成
3.7小结
第4章基于CVS的持续集成实战
4.1CVS的安装及配置
4.2基于CruiseComrol的持续集成实战
4.2.1检出位于CVS配置库中的petclinic项目
4.2.2配置confi9.xml
4.2.3开始实施Cl
4.3CVS客户端支持
4.4CruiseControl若干技巧
4.4.1自定义邮件分发策略
4.4.2控制不同项目的并行构建能力
4.4.3监控Jogs中的日志文件
4.4.4传递给各构建脚本的系统属性
4.4.5借助CVSLabellncrementer插件控制构建Label的生成
4.4.6自定义构建时机
4.5小结
第5章基于VSS的持续集成实战
5.1VSS的安装及配置
5.1.1VSS petclinic配置库的初始化工作
5.1.2借助Eclipse VSS插件导入petclinic项目
5.2实施基于VSS的持续集成
5.2.1“检出”petclinic项目
5.2.2配置confi9.xml
5.2.3调整Antbuild.xml构建文件
5.2.4涉CI之初
5.3CruiseControl单次构建过程详解
5.4小结
第6章基于ClearCase的持续集成实战
6.1ClearCase Explorer客户端的安装及配置
6.1.1设定CLEARCASEPRIMARY GROUP环境变量
6.1.2创建共享目录
6.1.3借助ClearCase Explorer创建静态视图
6.2CruiseControl持续集成的实施
6.2.1验证ClearCase Explorer是否正常
6.2.2实施基于ClearCase的持续集成
6.3ClearCase Remote Client for Eclipse工作情形
6.4ClearCase相关资源介绍
6.5小结
第3部分持续集成权威指南
第7章持续数据库集成
7.1持续数据厍集成概述
7.1.1DBA的痛楚
7.1.2将SQL脚本作为SCM配置项
7.1.3持续RDBMS集成
7.2数据库集成具体实践
7.2.1Ant4壬-务
7.2.2数据库的销毁工作
7.2.3数据库的创建工作
7.2.4数据库中已有数据的删除工作
7.2.5数据库中初始数据的准备工作
7.2.6集成各Ant目标
7.2.7手工运行“db-ci”目标
7.3小结
第8章持续单元及集成测试
8.1持续单元及集成测试概述
8.1.1开发经理的烦恼
8.1.2引入测试覆盖度
8.1.3持续单元及集成测试
8.2有关单元及集成测试的具体实践
8.2.1基于JUnit及Clover的持续集成
8.2.2Cobertura使用介绍
8.2.3EclEmma概览
8.3小结
第9章持续评审
9.1持续评审概述
9.1.1架构师揪心的那些事
9.1.2量化开发规范
9.1.3持续评审
9.2持续评审实践
6.2CruiseControl持续集成的实施
6.2.1验证ClearCase Explorer是否正常
6.2.2实施基于ClearCase的持续集成
6.3ClearCase Remote Client for Eclipse工作情形
6.4ClearCase相关资源介绍
6.5小结
第3部分持续集成权威指南
第7章持续数据库集成
7.1持续数据库集成概述
7.1.1DBA的痛楚
7.1.2将SQL脚本作为SCM配置项
7.1.3持续RDBMS集成
7.2数据库集成具体实践
7.2.1Ant任务
7.2.2数据库的销毁工作
7.2.3数据库的创建工作
7.2.4数据库中已有数据的删除工作
7.2.5数据库中初始数据的准备工作
7.2.6集成各Ant目标
7.2.7手工运行“db.ci”目标
7.3小结
第8章持续单元及集成测试
8.1持续单元及集成测试概述
8.1.1开发经理的烦恼
8.1.2引入测试覆盖度
8.1.3持续单元及集成测试
8.2有关单元及集成测试的具体实践
8.2.1基于JUnit及Clover的持续集成
8.2.2Cobertura使用介绍
8.2.3EclEmma概览
8.3小结
第9章持续评审
9.1持续评审概述
9.1.1架构师揪心的那些事
9.1.2量化开发规范
9.1.3持续评审
9.2持续评审实践
9.2.1详细设计评审
9.2.2PMD
9.2.3Checkstyle
9.2.4JDepend
9.2.5JavaNCSS
9.2.6FindBugs
9.2.7Fortify
9.3小结
第10章持续部署
10.1持续部署概述
10.1.1烦恼的不只是你
10.1.2制度化部署过程
10.1.3持续部署
10.2有关持续部署的具体实践
10.2.1部署测试版本的petclinic应用
10.2.2主流应用服务器内置的Ant部署支持
10.2.3SmartFrog
10.3小结
第11章持续功能及负载测试
11.1持续功能及负载测试概述
11.1.1功能及负载测试人员的烦恼
11.1.2脚本化功能及负载测试工作
11.1.3持续功能及负载测试
11.2有关持续功能及负载测试的具体实践
11.2.1基于Selenium的自动化功能测试
11.2.2基于ApacheJMeter的自动化负载测试
11.3小结
第12章持续反馈
12.1持续反馈概述
12.2有关持续反馈的具体实践
12.2.1E-mail
12.2.2Ant脚本
12.2.3RSS
12.2.4FTP
12.2.5组合使用各种子元素
12.3小结
第4部分CruiseControl高级特性
第13章分布式集成构建
第14章CruiseControl内核研究及扩展
附录A维护CC配置文件
书摘插图
第1部分初涉持续集成
第1章持续集成概述
1.1敏捷软件研发
在以往几年的Java EE软件架构、咨询工作当中,作者一直将“可回归性、敏捷性”摆在最为重要的位置,它们在衡量一项工作的完成质量和速度方面起到了至关重要的作用。
诸多开发者都应该有这种经历,自己编写了大量的测试代码,然而每次手工运行它们之前,或者要手工往数据库添加一些测试数据(种子数据,Seed Data),或者将现有RDBMS中的~些测试数据删除,这些已存数据可能是执行上次测试代码期间的“成果”。与此同时,在每次手工运行完这些测试代码后,有可能会将现有RDBMS中的数据彻底删除或破坏掉等情况发生。可以看出,这类测试代码不具有可回归性。由于受到上述多方面因素的干扰,使得测试代码的运行结果具有不确定性。最终,使得用于完成单元或集成测试目的的测试代码没有真正用起来,进而宣告当前项目的代码测试工作失败。
软件研发期问,不具有可回归性的场景举不胜举。再比如,作者看到大量的中小型软件研发团队经常是直接基于本地的集成开发环境手工打包WAR,并直接将打好的WAR包部署到生产环境中,Eclipse、NetBeans等IDE工具就能够承担这一“重任”。这类研发团队是否考虑到:不同开发者的本地配置都会存在这样或那样的差别,比如JDK版本、Eclipse中项目属性设置的不同。更有甚者,这类WAR包的打包工作没有由专人负责。一旦日后生产环境反映研发团队提交的WAR包存在问题时,比如缺少某个属性文件,如何追溯并解决这类问题呢?后果不堪设想。如果要手工完成,至少要在专门的机器上进行吧?或者,最好有一份详细的打包文档,从而使得Web应用的打包工作能够流程化。
可回归性,即尽可能将重复劳动交给计算机去完成,也就是说研发人员(软件从业人员,包括CI集成人员)需要最大化计算机的价值。自从人类发明计算机以来,它们最擅长的,就是完成重复劳动,而且毫无怨言地工作。与此同时,我们要善于将软件研发期间涉及到的各种重复劳动提炼出来,并将这类劳动托付给计算机完成,进而使得我们能够尽可能地把宝贵的时间投身于智力劳动上。这也体现了现阶段计算机与人类间社会分工的差异性。如果能够改善测试代码的质量,无论数据库中存在的数据是什么,测试结果都是确定的,这也说明,“运行测试代码”这项工作已经是一种具有重复性质的体力劳动。这就是一种可回归性的体现,因为测试代码的运行结果不再依赖于某某人、某某先决条件。类似地,如果借助于Apache Ant或Maven完成Web应用的编译、打包工作,则这也不愧是一种可回归能力的体现。
……