Continuous Integration如何提高软件质量?

时间:2009-08-14 17:48:34

标签: continuous-integration

我认为使用CI的最大优势之一是检测缺陷的能力,这使得集成和部署任务变得更加容易。

然而,我不清楚CI如何提高软件质量。显然,使用一个好的测试套件可以减少错误,但它是否会改变其他软件质量因素,例如可维护性,完整性或一致性?

7 个答案:

答案 0 :(得分:3)

CI确保已签入的内容将编译并且单元测试将通过。

因此,您可以为用户提供每个构建并对其进行测试,以确保软件满足其需求。

在敏捷环境中,这是帮助人们在不经历发布周期的情况下开始使用代码并进行尝试的重要方法。

答案 1 :(得分:2)

我认为这已足够(original text by Joel :))

  

以下是一些好处   每日建设:

     
      
  1. 修复错误后,测试人员会快速获得新版本并重新测试   看看这个错误是否真的得到了修复。
  2.   
  3. 开发人员可以感觉更加安全,他们所做的改变是不会的   打破1024的任何版本   生产的系统,没有   实际上有一个OS / 2盒子   桌子要测试。
  4.   
  5. 在计划之前检查更改的开发人员   每日建立知道他们不是   要通过其他人来管   检查“破坏的东西”   构建“ - 就是这样的东西   导致没人能够编译。   这相当于蓝色   整个死亡的屏幕   编程团队,并发生了很多   当程序员忘记添加新内容时   他们创建的文件到存储库。   构建在他们的机器上运行良好,   但当其他人退房时,他们   得到链接器错误并停止冷   做任何工作。
  6.   
  7. 外部团体,如营销,测试版客户网站等等   需要使用不成熟的产品即可   选择一个已知的构建   相当稳定并继续使用它   而
  8.   
  9. 通过维护所有每日构建的存档,当您发现一个   真的很奇怪,新的bug和你有   不知道是什么导致它,你可以使用   二元搜索历史   存档以确定何时首先查找错误   出现在代码中。结合   很好的源控制,你可能   追踪到哪个办理登机手续的原因   问题。
  10.   
  11. 当测试人员报告程序员认为已修复的问题时,   测试人员可以说出他们的构建   看到了问题。然后   程序员在办理登机手续时看着   修复并弄清楚它是否是   真的很固定。
  12.   

答案 2 :(得分:2)

天儿真好,

我强烈推荐Martin Fowler的original paper on CI。这是一个简短的阅读,甚至在Benefits of Continuous Integration上有一个部分。

哦,Martin Fowler是Kent Beck推出这个概念的第一批人之一。我建议的那篇论文的第一版是从千禧年开始。

顺便说一下,在大型项目(> 3,500kSLOC)上使用它并看到它带来的诸多好处之后,我是CI的忠实粉丝。

HTH

“Avahappy,

答案 3 :(得分:1)

因为您在询问其他质量因素:

  • 可维护性:CI强制您的构建过程完全自动化,因此任何人都可以在知道CI时设置项目。这非常适合团队中的新开发人员,甚至是一个完整的团队。

  • 可维护性:您可以根据代码质量指标添加测试,从而确保代码库保持合理清洁。

  • 一致风格意义上的一致性:您可以通过自动化测试检查一下。然后它将成为你的CI的一部分

  • 完整性:我想我们可以先创建一套验收测试,告诉你什么时候完成。但我不认为这是可行的。

但我觉得这个问题有点奇怪。 CI提供有关测试结果的快速反馈,这是一个巨大的价值。你为什么要寻找更多理由?

答案 4 :(得分:1)

有一些明显的简易CI有助于代码质量和一些微妙的方式。

显而易见的方法是直接通过改善反馈来做到这一点。这些反馈可能是运行单元测试和捕获缺陷,但它也可能正在运行像Crap4J这样的代码指标,因此您可以看到代码随着时间的推移发生了什么。

更加微妙的效果来自于您拥有CI安全网的信心。我访问过的很多团队知道他们有丑陋的代码,但是他们害怕修复它,因为它们可能会破坏某些东西而不会发现它为时已晚。感觉如果你错误地认为你的CI系统会在5分钟内告诉你,那就非常有用了!

最后,这只是额外时间的结果。使用CI,您可以更快地发现一些问题,这使它们更容易修复。现在,您如何将节省的时间再投资?如果您将其用于重构或进行额外测试(或者如果您包括QA团队,则两者都有),您最终将获得更高质量的代码。

答案 5 :(得分:1)

CI本身主要是关于开发人员之间源代码中所有更改的互操作性。

但是,您可以获得一致性的最大优势是,具有此类设置的内容允许您执行以下操作:

  • 自动部署
  • 各种形式的构建后任务:
    • 测试
    • 报告
    • 通知
    • 源代码的解释

通过部署方法IMHO实现一致性,并确保未部署任何未首先确认的内容;所有事情都像以前一样有效。

对于我独自工作,没有必要在任何人(CI)之间整合变化,但最大的好处就是其他一切。

答案 6 :(得分:0)

简而言之,持续集成(或CI)服务器是一个专用机器,其唯一目的是运行构建,也就是说,它将不断地将新构建集成到给定系统中。通常,CI服务器通过创建HTTP服务器并侦听要发送给它的数据来工作。然后,HTTP客户端可以将数据发布到此服务器,从而触发服务器以启动构建。例如,您可以告诉GitHub在每次提交时触发CI服务器,然后在CI上使用Grunt或类似工具来连续执行任务,例如在新代码到达时分析,编译,修改和部署构建。这种简化的部署方法非常有价值,因为它减少了开发迭代时间。