“我的TDD实践”系列之CI持续集成

写在前面:

  我的TDD实践这几篇文章主要是围绕测试驱动开发所展开的,其中涵盖了一小部分测试理论,更多的则是关注工具的使用及环境的搭建,做到简单实践先行,后理论专精的目的。

TDD实践系列文章:

  1.TDD概念篇

  2.CI持续集成

  3.SVN架设篇

  4.UnitTest单元测试

  

简介

  CI(Continuous Integration)持续集成,最重要的服务对象是TDD,它是一个集合概念,包括自动构建build项目,自动分析代码,自动测试,自动邮件报告,自动预编译检查,自动发布等等,这些都围绕一个中心词“Auto”,当然它不能帮您自动完成代码 :)。所有这些操作,直接解放了项目管理者,每日构建集成(Build every day)将会很大程度上提高项目的稳定性,代码的健壮性及随时反馈。

  持续集成经典定义:www.martinfowler.com/articles/continuousIntegration.html

  持续集成是一种能让团队成员友好“集成”(integrate)工作的软件开发实践,通常每个人最少每日“集成”一次,也就是说每天都要进行大量的“集成”(multiple integrates per day)。每一次集成都被自动构建器(automated build including test)尽可能快的检测集成错误。许多团队开发者发现,这种方法极大的降低了团队简集成的问题,而且能让团队更快的开发出有凝聚力,结合力的软件(cohesive software)。 

                                                                                                                  --- Martin Fowler 

  持续集成拓扑图:

  

  从实用性角度来说,持续集成避免了因为某人突然发生的Bug,导致团队的人员必须等待这个Bug被修复,持续集成每日集成则大大降低了这种事情发生的概率或者控制在一个合理发生Bug的时间内(一个工作日)。

  1. 什么样的集成“频率”才是合理的?

  

  2. 持续集成具体的优势和劣质在哪里?

    2.1. 可能出现的问题:

      2.1.1. 增加了维护CI的成本:起初可能是要在配置环境上花费些功夫,但比起使用效率上以及代码健壮性控制上,则CI更有意义。

      2.1.2. 需求更改过于频繁,功能复杂:TDD开发的一个原则是“尽可能用最简单的代码完成一个需求,不添加额外的功能,如果需求改变,则让测试部通过,然后重构,即不要一次完成将来可能的任务,只注重当前”。

      2.1.3. 增加软硬件成本和团队学习曲线(Study Curve):同第一条定律,学习曲线则可根据团队情况逐渐深化。

      2.1.4. 团队成员将不得不编写测试和构建项目:有了这些团队成员可以只关注编写代码和调试代码,比起修复那些被测试人员发现的bug,更多的利用了Coder的个人才能。(啰嗦一句,本人曾深受过那些莫名其妙的bug所带来的危害,有些还是由于其他人的改动导致的,这样不得不F11跟踪代码来理解Bug产生的流程,绝大多数时刻是极其痛苦的。)

      2.1.5. 旧项目是否能用CI: 即使旧项目中没有单元测试,也可以用CI中的源代码管理等诸多功能。这里除非有绝对的意义,否则也不建议在旧代码的基础上补充单元测试。

    2.2. 应用CI的优势:

      2.2.1. 降低软件风险提高软件的质量:测试代码覆盖率越高,提供的稳定性就越高,建议代码覆盖率80%以上,所谓的二八原则?!

      2.2.2. 增强项目的透明度:集成服务器持续的反馈集成信息,包括集成是否成功,Bug修复的时间,修复Bug的时间等。

      2.2.3. 迅速构建:更快的发现问题,以及要求构建时间平均在1.9分钟左右。

  3. 持续集成相关工具介绍:

    3.1. 源文件管理系统(Source file control system):SVN ,TFS(VSS),Github。。。。

      具体内容请参考,本系列的其他文章:请返回文章前言

    3.2. 持续集成服务端(平台):

      3.2.1. TFS Server:微软一体化解决方案。

      3.2.2. TeamCity:近些年流行起来的CI集成平台,由JetBrains维护。

      3.2.3. CruiseControl.Net: 老旧的平台,脚本配置,06年更新过一回。

    3.3. 单元测试工具:

      MSTest,NUnit

      具体内容请参考,本系列的其他文章:请返回文章前言

    3.4. 代码分析工具:

      FxCop,StyleCop,Ncover

      具体内容请参考,本系列的其他文章:请返回文章前言

    3.5. 其他工具:

      SandCastle文档构建,Mock框架,Inject框架

      具体内容请参考,本系列的其他文章:请返回文章前言

持续集成服务端搭建

  本节主要叙述几种持续集成服务端的搭建及其中一些小的细节上的说明,由于时间原因,没有更深层次的说明更多的功能特性,这确实是不足之处,待今后有时间补充。

  1. CruiseControl.Net(CC.net):

    a) 介绍:Thoughtworks旗下产品,免费,需配置脚本文件。

      官网:http://confluence.public.thoughtworks.org/display/CC/Understanding+the+alternatives+to+CruiseControl

    b) 安装步骤:

i. 下载CCnet:http://sourceforge.net/projects/ccnet/?source=dlp

ii. 点击安装包,进行默认安装。

iii. 安装完之后,如果是默认安装的话,在%Program Files%\CruiseControl.NET\server,找到文件ccnet.config并用记事本打开并编辑。

iv. 网上有很多配置文件,如下是我的配置文件,

    c) 手动运行:在安装程序中启动CruiseControl.Net,验证是否成功。

    d) 日志文件在:D:\CI\ArtifactWork\buildlogs目录下。

    e) 查看相关记录:http://localhost/ccnet(前提是请安装IIS)

    f) 客户端使用CCTry 获取反馈。

  2. TeamCity

    a) 介绍:简而言之,小项目免费,大项目付费。Web配置代替脚本配置。

        官网:http://www.jetbrains.com/teamcity/

     拓扑图:

     b) 安装步骤:

i. 下载:http://www.jetbrains.com/teamcity/download/download_thanks.jsp

ii. 默认安装。(需更改端口防止冲突,选择user account登录)

iii. Web配置:

        1. 配置视频:http://www.jetbrains.com/teamcity/documentation/demos/installation_new/index.html

                   http://www.jetbrains.com/teamcity/documentation/userguide.jsp

        2. TeamCity在线文档:http://confluence.jetbrains.com/display/TCD8/Configuring+General+Settings

        3. 登录配置网页进行相关设置,http://localhost:8011/login.html(安装时,更改了端口号为8011防止冲突)

          3.1. 点击 Create New Project

          3.2. 点击 Create build configuration。(也可先创建一个子项目,然后再新建一个配置)

          3.3. 点击左上角的 Create and attach new VCS root, 然后VCS 类型选择SVN,如下配置:

      

          3.4. 保存之后,继续配置:

             选择自动构建的方式:选择Microsoft Visual Studio,也可选择其他的构建器,如MSBuild。

          3.5. 增加一个Build Feature,这里可暂时不选择,直接跳过此步骤:点击网页右侧的导航栏,选择第4步。

          3.6. 在导航中点击第5步:Build trigger

          3.7. 这里已经完成了基本配置,更多高级选项请参考TeamCity官方资料。

  

  3.Team Foundation Server(TFS)

    a) 介绍:与VS2010集成,一体化解决方案,当然没有免费的午餐。

      官网:http://msdn.microsoft.com/zh-cn/vstudio/ff637362.aspx

        拓扑图:

     b) 安装步骤:

      请参见:http://msdn.microsoft.com/zh-cn/vstudio/ff637362.aspx

      

      

参考资料:

  《Continuous Integration IN .NET》          Marcin Kawalerowicz 

      

 

我的TDD实践---CI持续集成的更多相关文章

  1. Gitlab CI 持续集成的完整实践

    Gitlab CI 持续集成的完整实践 本着公司团队初创,又在空档期想搞点事情,搭建了私有Gitlab的契机,顺便把持续集成搭建起,实现了对Python服务端代码的单元测试.静态代码分析和接口测试的持 ...

  2. CI持续集成

    CI持续集成 “我的TDD实践”系列之CI持续集成 写在前面: 我的TDD实践这几篇文章主要是围绕测试驱动开发所展开的,其中涵盖了一小部分测试理论,更多的则是关注工具的使用及环境的搭建,做到简单实践先 ...

  3. GitLab CI持续集成配置方案

    目录 1. 持续集成介绍 1.1 概念 1.2 持续集成的好处 2. GitLab持续集成(CI) 2.1 简介 2.2 GitLab简单原理图 2.3 GitLab持续集成所需环境 2.4 需要了解 ...

  4. Git Hooks、GitLab CI持续集成以及使用Jenkins实现自动化任务

    Git Hooks.GitLab CI持续集成以及使用Jenkins实现自动化任务 前言 在一个共享项目(或者说多人协同开发的项目)的开发过程中,为有效确保团队成员编码风格的统一,确保部署方式的统一, ...

  5. 【补充】Gitlab 部署 CI 持续集成

    上一篇:<劈荆斩棘:Gitlab 部署 CI 持续集成> 上一篇所配置的.gitlab-ci.yml: stages: - build - test before_script: - ec ...

  6. [原创]CI持续集成系统环境--Gitlab+Gerrit+Jenkins完整对接

    近年来,由于开源项目.社区的活跃热度大增,进而引来持续集成(CI)系统的诞生,也越发的听到更多的人在说协同开发.敏捷开发.迭代开发.持续集成和单元测试这些拉风的术语.然而,大都是仅仅听到在说而已,国内 ...

  7. Ubuntu Docker 安装和配置 GitLab CI 持续集成

    相关文章: Ubuntu Docker 简单安装 GitLab 劈荆斩棘:Gitlab 部署 CI 持续集成 目的:在 Ubuntu 服务器上,使用 Docker 安装和配置 GitLab Runne ...

  8. CI持续集成系统环境--Gitlab+Gerrit+Jenkins完整对接

    原文地址https://www.cnblogs.com/kevingrace/p/5651447.html 近年来,由于开源项目.社区的活跃热度大增,进而引来持续集成(CI)系统的诞生,也越发的听到更 ...

  9. 物联网架构成长之路(47)-利用GitLab实现CI持续集成

    0.前言 前段时间,考虑到要练习部署一套CI/CD的系统.一开始考虑到Jenkins,随着这两天的了解,发现最新版的GitLab已经提供有CI/CD集成了.所以本次博客,干脆一步到位,直接用GitLa ...

随机推荐

  1. 【阅读笔记】《C程序员 从校园到职场》第四章 变量和函数

    参考: Contents: 一.数据类型(对基本数据类型进行重定义——规范化) 二.变量和函数  (命名规则,注意事项) 三.静态变量及其使用 一.数据类型(对基本数据类型进行重定义——规范化) 1. ...

  2. MariaDB Role

    一.MariaDB Role介绍 MariaDB从10.0/10.1版本开始支持role. Role相当于各种权限的集合,可以给多个账户统一权限的修改直接通过修改role来实现,不需要每个账户一个一个 ...

  3. 7.5 C++基本序列式容器

    参考:http://www.weixueyuan.net/view/6402.html 总结: vector可以理解为可以在两端插入.删除数据的数组,它提供了丰富的成员函数,用于操作数据. begin ...

  4. SQL-24 获取所有非manager员工当前的薪水情况,给出dept_no、emp_no以及salary ,当前表示to_date='9999-01-01'

    题目描述 获取所有非manager员工当前的薪水情况,给出dept_no.emp_no以及salary ,当前表示to_date='9999-01-01'CREATE TABLE `dept_emp` ...

  5. 使用MyEclipse开发Java EE应用:用XDoclet创建EJB 2 Session Bean项目(一)

    [MyEclipse最新版下载] 一.创建一个EJB项目 1. 选择File>New Project,选择EJB Project,然后单击Next. 2. 在Project name字段中输入f ...

  6. 查看文件 ls -lh

    查看文件 ll ls -l --block-size=k ls -lh

  7. Intellij IDEA生成foreach或者loop 快捷键

    iter Iterate (for each..in) itin Iterate (for..in) itli Iterate over a List itar Iterate elements of ...

  8. Oracle备份归档日志文件的两种方法比较

    备份归档日志方式有两种:  1 单独备份归档日志:backup archivelog all  2 在执行备库时一起备份归档日志:backup database plus archivelog;  这 ...

  9. mysql 数据库关于my.int 的相关问题

    最好在建库的时候直接建好 create database db1 charset utf8; my.int  在mysql的目录里 名曰配置文件    里面主要是内容就是 1 一般用到的就是编码不统一 ...

  10. android小程序-电子钢琴-多点触控

    我在第一篇博客<android小程序-电子钢琴-滑动连续响应>中实现了一个简单地7键钢琴,这几天把它又完善了一下,增加了多点触控,按键也增加了一个低音区和一个高音区,使得又可以多弹一点简单 ...