2013-02-21 93 views
2

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

我想我们所有的开发者了解TDD,他们将测试的东西推到服务器之前,所有的时间。它推动推送的代码必须在推送之前通过,所以我们需要ci服务器,因为我们总是有绿灯。

所以我的问题是,如果我们有一个很好的团队,始终遵循TDD的规则发展,我们需要CI服务器?

回答

4

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

通常,CI服务器将配置在夜间运行更长的集成测试,看是否有重大的变动已经出台。

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

例如,您可能正在引用已安装到程序文件目录中的第三方库。由于它们安装了第三方库,因此它在每个开发人员计算机上均可正常生成,但在构建服务器上,您会检测到错误的引用,因为构建会失败。另外,让CI服务器运行构建和提交测试不仅会更快地突出显示集成问题,还可以在提交后立即通知团队内的所有开发人员,以便立即明确问题的根源。

1

首先我怀疑所有项目都可以负担得起TDD,因为它是昂贵的,往往developpers倾向于直接编码功能,而忘记了测试,即使是简单的单元测试。 实际应用时,TDD将检测功能上的问题,但不一定包含集成在一起的包含许多不同组件的大型项目的全面范围。一个简单的例子是将许多部分组合在一起工作,但是没有使用与相同api对齐的部分(oups我使用了错误的库版本...)。具有完整的产品版本有助于发现与集成相关的问题。以连续的方式进行分析有助于在引入问题时找到问题,单元测试可能无法检测到这些问题,因为单元测试专注于单独的每个功能或子功能。

4

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

Continuous Integration is an Attitude, Not a Tool

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

  1. 人类是易犯错误的,即使有最好的意图,他们并不总能让事情正确。服务器是自动化和可预测的。
  2. 服务器在比典型开发人员工作站更清洁的环境中运行构建。这可以突出显示在您部署/运输之前未被注意的问题。
  3. 如果你支持多种平台,一个好的CI服务器可以很容易地为你测试它们。
  4. 如果你有很多集成测试,这可能比单元测试慢,那么要求所有开发人员在签入前都要运行它们可能是很麻烦的。相反,他们可以运行快速单元+烟雾测试来捕捉99%的问题,并让CI服务器运行整个套件。
  5. 服务器可以维护构建历史,显示一段时间内的趋势。例如,这对漂移分析(检查性能趋势)非常有用。
  6. CI服务器提供了许多您可能感兴趣的附加功能,例如支持发布版本,灵活的日程安排,通知和parellel构建等,从服务器到服务器各不相同。

总结:您不需要服务器就能获得CI的关键优势。但是你可以从正确的服务器软件中获得很多相关的好处。

+0

非常感谢您的详细解答。我真的很喜欢第一点:) – nXqd 2013-02-22 22:55:39