◆本书价值
软件的两大难题是1)确定软件需求,2)确定软件离目标的距离。通过软件的持续集成,让我们能直观的感受到软件开发在稳步向前推进,而且软件的质量是有一定保障的。
要成为一名专业的软件工程师,编程语言固然是初学者的必修课程。然而,持续集成也是初学者必须要了解的课程之一。软件开发的发展,必然是为了持续提升开发效率和开发质量。持续集成就是为此而生。
本书没有详细介绍持续集成的详细方法,而是以系统的视角介绍持续集成产生原因,以及每个检查背后面临的问题和解决之道。对团队采用持续集成具有很好的指导价值。
◆阅读收获
- 了解CI的价值
- 如何进行持续集成
- 进行持续集成的注意点
- CI系统包括哪些步骤和检查,每个步骤都有哪些工具
◆金句精选
1. 随着项目复杂度的增加,对集成和确保软件组件能一起工作提出了更高的要求,要早集成,常集成。
2. CI是一些基本实践,它不是软件开发中最炫的工作,但软件集成在今天复杂的项目中至关重要。
3. 构建是按一个按钮的事。
◆作者简介
[美]Paul M. Duvall、stephen M.Matyas、Andrew Glover
Paul M. Duvall和Andrew Glover分别是Stelligent公司的CTO和总裁。Stelligent是一家咨询公司,它们通过优化软件开发过程、帮助团队可靠地、快速的开发出更好的软件。
stephen M.Matyas是AutomateIT的副总裁。它通过自动花来改进软件开发。
◆精华解读
以下内容为《持续集成软件质量改进和风险降低之道》一书的精华解读,供广大书友们学习参考,欢迎分享,未经允许不可用做商业用途。
◆目录
一、CI的价值
二、引入持续集成的要求
三、持续集成的原则
四、构建过程的度量指标
五、CI系统的主要功能
◆正文
一、CI的价值
- 1、降低风险
检测和修复变得更快
检测结果可以测量
- 2、减少重复过程
从编译、数据库、测试、审查、部署、反馈等方面提高效率、减少工作量,从而降低研发费用
- 3、持续生成可用的软件
- 4、增强项目的可见性
- 5、对产品建立起强大的信心
二、引入持续集成的要求
- 1、经常提交代码,不要次提交许多代码,而是分解成小任务,快速编写、测试、提交、构建。
- 使用SVN、GIT进行代码版本管理,使代码提交更容易
- 2、不要提交无法构建的代码
- 在提交代码前先执行私有构建。
- 3、立即修复无法集成的构建
- 4、编写自动化的开发者测试
- 5、必须通过所有的测试和审查
三、持续集成的原则
1、自动化的构建脚本
比如使用ant创建自动化构建脚本。
2、单命令构建
通过一条命令或按钮,就能启动所有的构建过程。
3、构建脚本从IDE总分离
避免IDE和构建脚本产生耦合,所以要将构建脚本和IDE分离
4、集中存放软件资产
为了避免不同环境产生错误,将软件用到的各种资源集中存放到版本库中。
资源包括:
- 组件,(源文件、库文件)
- 第三方组建,jar、dll等
- 配置文件
- 初始化应用程序的数据文件
- 构建脚本、构建工具、构建环境设置
- 安装脚本
5、创建一致的目录结构
目录结构是构建的前提
6、让构建快速失败
尽早的发现构建问题,让最容易发现问题的构建放前面。
7、针对不同的环境构建
由于软件运行在不同的环境,比如开发环境、测试环境、客户环境,针对不同的环境要有不同的构建。可以利用配置文件,适配不同环境。
不同环境常见的不同有:日志级别、服务器配置、数据库连接、框架配置。
8、面对不同对象的构建
私有构建,开发者提交代码前,执行私有构建,防止代码提交后集成失败。
集成构建,使用独立的服务器对项目进行构建,一般每天晚上构建,或者用户触发。
发布构建,发布软件时执行的构建。
四、构建过程的度量指标
- 编译时间以及它与过去编译时间的比较
- 代码行
- 审查的种类
- 平均打包时间
- 测试执行时间
- 成功构建和失败构建的比例
- 审查时间
- 部署时间
- 重建数据库的时间
- 构建计算机的资源使用情况和性能
通过分析构建测量指标,优化构建过程。
- 将自动化测试按类别分开,在不同的时间执行这些测试。
- 基于审查工具的结果,重构测试。
- 对复杂环境,使用模拟mock/桩stub对象的方式进行测试。
- 将运行时间长的集成测试单独进行测试。
- 并发执行测试。
- 按构建类型(私有构建、集成构建、发布构建),执行不同的测试。
大项目的主要问题是保持构建的迅捷。可以有以下方法,定期执行运行时间长的过程、分解成子项目独立构建。
五、CI系统的主要功能
1、数据库集成
数据库SQL脚本集成,包括建库、建表、建数据。
创建数据库沙盒,使开发者间的数据库不会互相干扰。
2、持续测试
单元测试,独立的类级别测试。TestNG
组建测试,使用API进行测试。DbUnit
系统测试,将整个系统运行起来后,用于验证外部接口,如web页面、web服务等。JWebUnit
功能测试,以用户的视角测试应用程序,模仿用户的行为。工具有Selenium框架
3、持续审查
审查是静态的,测试是动态的。审查基于一组预先定义的规则分析代码。测试是执行软件的功能。它们都只是指出软件的问题。
- 代码复杂度。圈复杂度(CCN,代码的分支路径)<10。长的方法,长的类。工具javaNCSS/PMD/Checkstyle
- 设计审查,耦合度(传入耦合-Fan in,传出耦合-Fan out)反映架构问题,目标是高内聚低耦合。 不稳定性=传出耦合/(传出耦合-传入耦合)。工具JDepend
- 编码规范。PMD/Checkstyle
- 减少重复代码。 PMD-CPD/Simian
- 测试覆盖率。计算方法:执行的代码行/总代码行。工具:Cobertura、EMMA、Clover
4、持续部署
使用干净的环境部署软件。
每次构建都打上一个标签(包括源码打上标签、构建动作打上标签),发现问题时,方便协调开发团队对问题的定位。
当构建失败或需要使用以前的版本时,能快速撤销部署,回滚到之前版本。
5、持续反馈
通过邮件、短信、IM等方式,及时发送构建报告。
◆结语
目前在中大型公司或项目,CI系统作为基础支持系统,集成到开发框架中。通过了解了CI系统背后的深层原因,了解软件的困境和解决方法。当面对低效率和低品质的软件开发,才能从容应对,提出解决之道。