2

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

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

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

4

3 回答 3

5

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

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

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

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

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

于 2013-02-21T22:03:23.393 回答
4

所有团队都应该进行持续集成,但这并不意味着您需要有 CI 服务。詹姆斯·肖尔(James Shore)对此发表了一篇经典文章:

持续集成是一种态度,而不是工具

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

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

总而言之:您不需要服务器即可获得 CI 的主要优势。但是您可以从正确的服务器软件中获得很多相关的好处。

于 2013-02-22T06:12:37.710 回答
1

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

于 2013-02-21T22:00:34.397 回答