《持续集成》是一本由(美)Paul M.Duvall;Steve Matyas;An著作,机械工业出版社出版的平装图书,本书定价:35.00元,页数:218,特精心从网络上整理的一些读者的读后感,希望对大家能有帮助。
《持续集成》精选点评:
●图书馆借的,快速扫完了,内容还可以,不过不是针对具体的CI工具的guide,大概讲述了过程和其中的思想。
●搞持续集成的孩子你伤不起。。。
●学习
●基础理论讲的很清楚,无论是搞开发还是做管理的都应该读一读。
●内容老旧,毕竟成书时间较早。
●难得CI都能写到200页
●CI是什么?为什么CI?这本书给你答案。
●现在都持续集成了,看了一下,补充一下前边的理论就够了。
●确实是本好书!! 2008 Jolt Award
●思路清楚,读完之后要做的是就是找一个CI 服务器用起来。一边使用一边改进... build -> deploy->testing
《持续集成》读后感(一):CI初级指导书
这是一本关于CI的初级指导书。围绕着CI服务器的几个功能进行了介绍。 CI就是一种自动化组装生产线的理念。对代码库变更的持续轮询,然后执行构建脚本进行集成,其中包括编译、静态代码检查、自动化测试、部署等动作。 它里面提到了初级构建、全面构建等概念,值得我们关注。
《持续集成》读后感(二):没有营养,不推荐读
没有营养,忘记是从哪里看到推荐来的,很失望。 持续集成,对实践敏捷开发具有重要的意义,持续集成,迭代发布,自动测试,随时有可用的版本,尽早接受用户的反馈,指导研发不偏离客户的实际期望。 但本书不讲这些东西,粗率看了一遍,没有弄明白本书主题到底是什么。 给2星,不推荐读。
《持续集成》读后感(三):不错的书,对于做项目的人来说值得一读
一本不错的书,可操作性很强,全书列举了CI系统的优缺点,如何去使用CI系统,什么时候使用等等,相当的详细。最后在附录中还列举了很多的参考工具,所以对于想要用CI系统的人来说,有着很大的参考价值,推荐看看。
唯一的遗憾就是,在C++领域没有怎么发现CI系统的介绍,不过Java和DotNet方面的介绍很多,使用这两门语言的有福了。
《持续集成》读后感(四):一般般
这市面上也没什么比较好的书讨论继续集成了,所以只好给个“还好”。
持续集成很多的公司都有做,虽然方法可能不一样,但大概的思想和这本书是差不多的。具体到不同的公司不同的业务肯定不一样,所以也没必要死按照这本书来做。
书上讨论的很多工具算不上过时,也不是最好的——凑合凑合还是不错的。
事实上确实和它的副标题一样,持续集成是软件质量改进和风险降低之道。
《持续集成》读后感(五):有点老,但了解概念还是不错
第一部分 CI的背景知识:原则与实践
第一章 启程
一次构建:不止是一次编译(或是动态语言中的某种称谓)。一次构建可能包含编译、测试、审查和部署以及其他一些事情。一次构建是将源代码放在一起,并验证软件可以作为一个一致的单元运行的过程。
涉及到的工具和参与人员包括:开发人员、版本控制库(如subversion)、CI服务器(如CruiseControl)、构建脚本(如Ant)、反馈机制(如email)、集成构建计算机。
CI的特征:与版本控制器系统的连接;构建脚本;某种类型的反馈机制;集成源代码变更的过程。
其子过程包括:源代码编译;数据库集成;测试;审查(如静态和动态分析);部署;文档与反馈。
第二章 引入持续集成
CI的价值在于:
减少风险
缺陷的检测和修复变得更快
软件的健康程度可以测量
减少假定
减少重复过程
减少重复过程的劳动,让人们有时间做更多的需要动脑筋的、更高价值的工作。
通过对一些重要过程(如测试盒数据库集成)自动化,克服项目中的某些成员对实现改进的抵制。
在任何时间、任何地点生成可部署的软件
增强项目的可见性
有效地决策:CI系统可以对当前的构建状态和品质指标提供及时的信息。
注意到趋势:如构建成功或失败、总体品质以及其他相关的项目信息。
对开发团队的软件产品建立起更强大的产品信心
阻碍团队使用CI的原因:
增加了维护CI系统的开销
变化太大
失败的构建太多
额外的硬件/软件成本
开发者应该执行这些动作
对于在项目中实现CI的团队和个人很有好处的7项实践:
经常提交代码:进行小的变更;在每个任务之后进行提交。
不要提交无法构建的代码
立即修复无法集成的构建
编写自动化的开发者测试
必须通过所以测试和审查
执行私有构建
避免签出无法构建的代码
第三章 利用CI减少风险
CI能够缓解的一些关键风险:
没有可部署的软件:利用CI系统随时构建可部署的软件。创建一个可重复的构建过程,使用版本控制库中的所有软件资产。
很晚才发现缺陷:每次变更时都执行开发者测试,这样就能够在软件开发生命周期中尽早发现缺陷。
缺少项目可见性:经常运行构建,随时了解项目的健康状况。如果有效地应用CI实践,项目的状态就不再是一个问题。
低品质的软件:在每次变更时执行测试和审查,这样就能通过了解复杂程度、重复情况、设计、代码覆盖率和其他因素发现可能进入代码中的潜在缺陷。
第四章 针对每次变更构建软件
执行单命令构建 – Martin Fowler说:“把所有需要的东西都放到源代码版本控制库中,以便于您通过单个命令就能构建整个系统。”
将构建脚本从IDE中分离 – 因为:(1)每个开发者可能使用不同的IDE,找出每个IDE中配置文件的差别会很困难;(2)CI服务器必须在无人干预的情况执行自动化的构建,因此开发者执行的自动化构建脚本,同样也应该能够由CI服务器执行。
集中放置软件资产 – 一种方法是使用版本控制库来存放所有文件,除了代码,还包括:
组件,包括源文件和库文件;
第三方组件,如JAR文件、库、DLL等
配置文件
初始化应用程序的数据文件
构建脚本和构建环境设置
某些组件的安装脚本
让构建快速失败 – 好的构建知道如何快速地失败。在构建的许多部分都成功之后再失败,这让人很恼火,而且您在确定失败的目标时也会失去宝贵的时间。创建快速失败构建的主要步骤如下:集成组件;运行真正的单元测试;执行其他自动化的过程。
构建类型:
私有构建:开发者在向版本控制库提交代码之前,要先进行私有构建。
集成构建:集成构建集成项目团队向版本控制库中的主线提交的变更。
发布构建:准备好发布给用户的软件。
构建触发机制:
用户驱动:由某人手工发起构建
定期执行:由时间驱动,不论是否发生了变更。
轮训变更:一个进程以固定的时间间隔唤醒,从版本控制库中签出变更。如果检测到变更,它就执行集成构建。
事件驱动:与轮训变更类似,但是是由版本控制库出发的,基于实现定义好的变更事件。
使用CI服务器 – 如果您打算自己写一个CI服务器,可能需要包含下面的一些功能:
以特定的时间间隔轮训版本控制库中的变更
定期执行某种操作
标识出“安静期”,在这段时间内项目不进行集成构建
支持不同的构建脚本工具,包括命令行工具
向相应人员发送电子邮件
显示以前构建的历史
显示一个web信息面板,这样每个人都可以查看集成构建的信息
为不同的项目支持多个版本控制系统
执行快速构建 – 快速反馈对CI是很关键的。集成构建的时间越短,您就能越快收到反馈信息。可以按如下方式分析并减少构建时间:
收集构建测量数据
分析构建测量数据
选择并实现改进
重新评估,有必要则再次重复这个过程
集成构建测量的指标:
编译时间
源代码行数(SLOC)
审查的种类数
平均组装生成时间
测试执行时间(根据分类)
成功构建和失败构建的比例
审查时间
部署时间
重建数据库的时间
集成构建计算机系统资源和使用情况
版本控制系统的负载
可以采取的改进方法:
使用专门的集成构建计算机
增强集成构建计算机的硬件能力
改进测试性能
安排集成构建的顺序
优化基础设施
优化构建过程
单独构建系统组件
改进软件审查的性能
执行分布式集成构建
第二部分 创建全功能的CI系统
第五章 持续数据库集成(Countinuous Database Integration, CDBI)
项目成员通常执行的数据库集成活动可以自动化:删除数据库;创建数据库;插入系统数据;插入测试数据;迁移数据库和数据;在多个环境下建立数据库实例;修改列属性和约束条件;修改测试数据;修改存储过程(包括函数和触发器);取得对不同环境的访问权;备份/恢复大量数据。
共享数据库集成脚本是一项最佳实践,直接而简单。所有软件资产都要放到版本控制库中,这包括了所有数据库资产:
删除、创建表和视图的DDL,包括约束条件和触发器
存储过程和函数
实体关系图
针对不同环境的测试数据
具体的数据库配置
利用结合构建脚本使数据库集成自动化,持续执行,在对数据库或源代码进行修改后就执行。将数据库资产放入版本控制库,确保它们有单一来源。测试并审查你的数据库脚本和代码。确保所有数据库集成都由构建脚本管理,所有数据库资产都签入版本控制库,所有(与数据库打交道的)开发者都有一个数据库沙盒。
第六章 持续测试
系统工程有一项原则,线性系统的可靠性是每个系统组件的可靠性的乘积。对于包含100个组件的线性系统来说,如果每个组件的可靠性是99%,整个系统的可靠性就只有37%。所以作为底线,如果我们要构建真正可靠的软件系统,我们就必须确保对象层面的可靠性,这只能通过成功的单元测试来实现。
源代码的可靠性取决于测试覆盖率,测试的价值取决于它们执行的频率。通常将测试分为4个自动执行的分组:
单元测试:可利用NUnit或JUnit这样的单元测试框架。这些单元测试应该没有外部依赖关系,不会依赖于文件系统或数据库。
组件测试:利用NUnit或JUnit这样的单元测试框架,让您的组件测试自动化,如果用到数据库,就是用DbUnit或NDbUnit。这些测试涉及更多对象,通常比单元测试需要花更长的时间来执行。
系统测试:系统测试比组件测试执行的时间更长,通常涉及多个组件。
功能测试:利用Selenium(针对Web应用程序)和Abbot(针对GUI应用程序)这样的工具,可以让功能测试自动化。功能测试从用户的角度执行操作,通常是自动化测试套件中执行时间最长的。
将测试分为一些组,您可以按不同的时间间隔来执行那些较快(如单元测试)和较慢的测试(如组件测试)。根据新的缺陷编写测试,增加代码覆盖率,确保这个缺陷不会再次出现。利用数据库测试框架确保数据处于“已知状态”,这有助于使组件测试可重复。将测试用例限制为一个断言,您可以花较少的时间来追踪测试失败的原因。
第七章 持续审查
利用工具进行自动化的代码审查能够解决80%的问题,让人来处理另外20%的重要问题。审查基于一组预先定义的规则分析代码。审查者(或静态和动态的分析工具)是由确定的标准指导的,团队应该坚持这些标准(通常是一些编码或设计方面的测量指标)。
通过持续执行审查,可以减少发现缺陷和后续修复之间的时间。
复杂度被证实与缺陷有关。请利用您的审查工具来监控代码的复杂度,采取措施来监控复杂度的变化趋势,利用测试用例和重构来降低缺陷的风险。
通过定量地描述配件/包或对象之间的耦合,架构方面的耦合指标可以有效地定位代码的长期维护问题。这些测量指标可以揭示在面对改变时的相关风险。
传入耦合(Afferent Coupling),也称作Fan In
传出耦合(Efferent Coupling),也称作Fan Out
不稳定性 = 传出耦合/(传出耦合 + 传入耦合)。值为1表示不稳定,值为0表示稳定。
编码标准有利于不同团队的开发者对代码的共同理解。通过持续地监控和审查代码,您的团队可以保持遵守架构和编码指南。问题可以早发现、常发现,从而避免了长期的维护问题。
重复的代码可能导致下列问题:增加维护成本,因为需要多次发现、报告、分析和修复缺陷;不确定是否存在其他缺陷(重复的代码还没有找到);对于额外编写的代码增加了测试成本。
判断代码覆盖率:利用像NCover、Cobertura或Clover等工具来确定测试代码实现的代码行覆盖率或分支覆盖率。利用这些信息来确定哪些地方需要更多的测试。
第八章 持续部署
持续部署能工作的软件,您的项目将从中受益。虽然每个应用程序、每个平台和每个目标领域都有独特的需求,但随时随地发布能工作的软件的过程主要有6大步骤。在版本控制库中打上标签,说明一组文件时相关的。提供干净的环境可以减少关于已有软件资产的假定,如果漏掉这些软件资产,最简单的构建版也会无法运行。为构建版打上标签,这为二进制文件提供了名称,报告可以基于这个标签。确保所有测试都执行成功,这让您确信软件能够像希望的那样工作。生成反馈报告有助于让大家了解构建版中包含的功能、缺陷和需求。最后,回滚构建版的能力意味着如果出现了什么问题,您仍然可以向用户提供最新的能工作的版本。
第九章 持续反馈
在正确的时间,以正确的方式,将正确的信息发送给正确的人 —— CI是让这种反馈信息自动化、目标化和实时化(持续化)的最好工具。
正确的信息:构建状态;审查报告;测试结果。
正确的人:项目经理;构建负责人;技术负责人;开发者;业务分析师。(注意信息的开销 – 向项目中的每一个人发送信息通常只会导致每个人都忽略该信息)
正确的时间:当问题发生时;每天;每周。(持续集成核心 – 持续集成的核心是减少缺陷引入、发现和修复之间的时间间隔)
正确的方式:电子邮件;Ambient Orb;SMS;声音;X10;Windows任务条;宽屏显示器;浏览器插件;即时消息;RSS;小应用程序。
附录A CI资源
持续集成Web站点/文章
Automation for the people : Continuous feedback
Automation for the people : Continuous Inspection
Automation for the people : Remove the smell from your build scripts
Continuous Integration
Continuous Integration
Daily Build and Smoke Test
IntegrateBotton.com
Realizing continuous integration
CI工具/产品资源:AnthillPro; Apache Continuum; Bamboo; BuildForge; Continuous Integration Server Matrix; CruiseControl; CruiseControl.NET; Draco.NET; Gauntlet; Luntbuild; ParaBuild; PMEase QuickBuild; Sin.
构建脚本资源:Ant; Groovy; Maven; NAnt; Rake.
版本控制资源:ClearCase; CVS; MKS; Subversion.
数据库资源:Hypersonic DB; Mckoi; MySQL; Oracle; PostgreSQL.
测试资源:Agitator; DbUnit; Fit; FitNesse; Floyd; HtmlUnit; JUnit; JWebUnit; NDbUnit; NUnit; Selenium; SQLUnit; TestEarly.com; TestNG; utPLSQL; Watir; xUnit Test Patterns.
自动化审查资源:Checkstyle; Clover; Cobertura; EMMA; FindBugs; FxCop; JavaNCSS; JDepend; NCover;NDepend; PMD; Simian; SourceMonitor.
部署资源:Capistrano.
反馈资源:Ambient Devices; Google Talk; Jabber; X10; Lava Lamps.
文档资源:Doxygen; Javadox; NDoc.
附录B 评估CI工具
构建工具和构建计划安排工具的一些有价值的基本功能和扩展功能:
构建工具——基本功能:代码编译;组件打包;程序执行;文件操作。
构建工具——扩展功能:执行开发者测试;版本控制工具集成;文件集成;部署功能;代码品质分析;可扩展性;多平台构建;加速构建。
构建计划安排工具——基本功能:构建执行;版本控制集成;构建工具集成;反馈;为构建打上标签。
构建计划安排工具——扩展功能:项目间依赖关系;用户界面;制品发布;安全。
工具与软件开发过程的其他要素集成的程度:
该工具是否支持您目前的构建配置?
该工具是否需要安装其他软件才能运行?
该工具是否与您的项目使用同一种语言编写?
可靠性:工具的成熟度。
寿命:考虑工具的将来,要在健康的用户群和开发团队中寻找证据。
易用性:工具配置和使用起来越容易,它就越好。
==========
徐毅:独立敏捷顾问,经验丰富的国内知名敏捷及精益教练,专注于敏捷软件开发、Scrum、敏捷转型、敏捷测试、测试自动化、robotframework等。