持续集成 - 是否需要?

时间:2013-02-21 21:38:59

标签: continuous-integration

我有这个问题来验证我对持续集成的了解。由于我的理解:持续集成将帮助我们检查构建是否尽可能快地存在任何错误或错误[红灯]。

我假设我们所有的开发人员都知道TDD,他们会在将某些内容推送到服务器之前一直进行测试。它意味着推送的代码必须在推送之前传递,因此我们需要ci服务器,因为我们总是有绿灯。

所以我的问题是,如果我们有一个总是遵循开发中TDD规则的优秀团队,我们是否需要ci服务器?

3 个答案:

答案 0 :(得分:4)

这取决于您的CI服务器正在做什么。在提交到中央源代码存储库之前,您可以让每个开发人员在本地运行所有单元测试,但是开发人员如何知道要运行哪些单元测试?他们必须运行所有这些,以及所有集成测试,UI测试等。这可能需要很长时间才能进行大量测试。

通常,CI服务器将配置为在一夜之间运行更长的集成测试,以查看是否已引入任何重大更改。

此外,您忽略的CI服务器的另一个重要功能是实际构建源代码。当您提交对源代码存储库的更改时引入构建错误是很常见的,因为您忘记提交新文件,或者假设您的源代码正在构建它所构建的开发环境。

例如,您可能正在引用已安装到程序文件目录中的第三方库。这在每台开发人员计算机上构建都很好,因为他们安装了第三方库,但是在构建服务器上,您会检测到错误的引用,因为构建会失败。

此外,让CI服务器在提交时运行构建和测试不仅会更快地突出集成问题,而且还可以在提交后立即通知团队内的所有开发人员,因此问题的根源立即显现。

答案 1 :(得分:4)

所有团队都应该进行持续集成,但这并不意味着您需要拥有CI服务。詹姆斯肖尔有一个经典的帖子:

Continuous Integration is an Attitude, Not a Tool

所以如果你有这种态度,即使没有服务器,你也可以获得CI的巨大好处。也就是说,CI服务器可以提供多种帮助:

  1. 人类是错误的,即使有最好的意图他们并不总是把事情做对。服务器是自动化且可预测的。
  2. 服务器在比典型的开发人员工作站更清洁的环境中运行构建。这可以突出显示在部署/发货之前不被注意的问题。
  3. 如果您支持多个平台,那么一个好的CI服务器可以轻松地为您测试它们。
  4. 如果你有很多集成测试,这可能比单元测试慢,那么要求所有开发人员在预签入时都要运行它们是很麻烦的。相反,他们可以运行快速单元+冒烟测试来捕获99%的问题,并让CI服务器运行整个套件。
  5. 服务器可以维护构建历史记录,显示一段时间内的趋势。例如,这非常适合漂移分析(检查性能趋势)。
  6. CI服务器提供了许多增加的功能,从服务器到服务器,您可能感兴趣(例如,支持发布版本,灵活的调度,通知,parellel版本)。
  7. 总结:您不需要服务器来获得CI的主要优势。但是,您可以从正确的服务器软件中获得许多相关的好处。

答案 2 :(得分:1)

首先,我怀疑所有项目都能负担得起TDD,因为它很昂贵且经常开发人员更喜欢直接编写功能并忘记测试,即使对于更简单的单元测试也是如此。 当真正应用时,TDD将检测特征上的问题,但不一定是包含许多不同组件集成在一起的大型项目的全尺寸。一个简单的例子是将每个部分组合在一起工作,但是没有使用与相同的api对齐的部分(oups我使用了错误的库版本......)。 完整的产品构建有助于发现与集成相关的问题。以连续的方式使用它有助于在引入问题时找到问题,单元测试可能无法检测到这些问题,因为单元测试分别关注每个特征或子特征。