我能想到很多使用它的充分理由;然而,它有什么缺点呢?

(除了购买另一台服务器)

使用每日构建来代替它有哪些优点?

有帮助吗?

解决方案

(值得注意的是,我所说的“持续集成”是指 自动化的 与集成 自动化的 构建过程和 自动地 运行测试并 自动地 检测每个部件的故障。

还值得注意的是,“持续集成”仅意味着主干或测试服务器。这并不意味着“推动每一项变革”。

有很多方法会导致持续集成错误。)


我想不出有什么理由不进行持续集成测试。我想我假设“持续集成”包括测试。仅仅因为它可以编译并不意味着它可以工作。

如果您的构建和/或测​​试需要很长时间,那么持续集成可能会变得昂贵。在这种情况下,请在提交之前运行与您的更改明显相关的测试(覆盖率分析工具,例如 开发::CoverX::覆盖 可以帮助发现哪些测试与哪些代码相匹配),在提交后使用类似的东西进行集成测试 SVN::通知, ,如果失败则提醒开发人员。使用类似的方法存档测试结果 阴燃. 。这使得开发人员能够快速工作,而不必坐下来观看测试套件的运行,同时仍能及早发现错误。

也就是说,只需做一些工作,您通常就可以加快构建和测试过程。很多时候,缓慢的测试是由于每次测试都必须进行太多的设置和拆卸,导致系统耦合性太强,需要设置整个系统来测试一小部分。

解耦通常会有所帮助,将子系统分解为独立的项目。较小的范围更容易理解并更快地构建和测试。每次提交都可以进行完整的构建和测试,而不会给程序员带来不便。然后可以将所有子项目收集在一起进行集成测试。

在每次提交时运行测试套件的主要优点之一(即使是在提交之后)是您知道是什么破坏了构建。不是“我们昨天做的某件事破坏了构建”,或者更糟糕的是“我们昨天做的四件事以不同的方式破坏了构建,现在我们必须解开它”,而是“修订版 1234 破坏了构建”。您只需检查该修订版即可发现问题。

进行每日构建的优点是至少您知道每天都会进行完整、干净的构建和测试运行。但无论如何你都应该这样做。

其他提示

我认为它没有任何缺点。但是为了论证,这里有 Eric Minick的文章在UrbanCode (“它是关于测试而不是构建。”)他批评了基于 Martin Fowler的工作说他们没有足够的时间进行测试。

“为了在CI中取得真正的成功,Fowler声称构建应该是自我测试,并且这些测试包括单元和端到端测试。同时,构建应该非常快 - 理想情况下不到十分钟 - 因为它应该在每次提交时运行。如果有大量的端到端测试,那么在构建时执行它们同时将整个过程保持在十分钟以内是不现实的。

在每次提交时添加对构建的需求,并且需求开始变得不可能。选项可能是反馈较慢或删除了一些测试。“

James Shore 有一系列精彩的博客文章,讨论了认为使用像 CruiseControl 这样的 CI 工具意味着正在进行持续集成的危险:

设置 CI 服务器的一个危险是目标偏移,认为重要的是“保持构建通过”而不是“确保我们拥有高质量的软件”。因此人们不再关心测试需要多长时间运行。然后他们在签入之前需要很长时间才能运行所有这些程序。然后构建不断中断。然后构建总是被破坏。因此人们注释掉测试以使构建通过。软件的质量下降了,但是嘿,构建正在通过......

通常有两种情况我认为持续整合不是很有意义。请记住,我是CI的主要倡导者,并尽可能地使用它。

第一个是当roi没有意义的时候。我目前正在开发几个小型内部应用。这些应用程序通常非常简单,开发的整个生命周期大约需要一到两周。要正确设置CI的所有内容可能会加倍,我可能永远不会再看到这笔投资了。您可以争辩说我会将其恢复到维护状态,但这些应用程序在更新时可能会被丢弃。请记住,您的工作可能是发布软件,而不是达到100%的代码覆盖率。

我听到的另一个场景是,如果你不打算对结果做任何事情,CI就没有意义了。例如,如果您的软件必须被发送到QA,并且QA工作人员每隔几天才能真正查看新版本,那么每隔几个小时就有一次构建是没有意义的。如果其他开发人员不打算查看代码指标并尝试改进它们,那么跟踪它们是没有意义的。当然,这并不是CI不是一项好技术的错,而是你的团队缺乏愿意接受CI。然而,在这种情况下实施CI系统是没有意义的。

启动时,需要一段时间才能完成所有操作。

如果添加测试,覆盖范围,静态代码检查,重复搜索,文档构建和部署,可能需要很长时间(数周)才能正确完成。在那之后,维护构建可能是一个问题。

例如,如果您向解决方案添加测试,您可以让构建根据某些条件自动检测它们,或者您必须手动更新构建设置。自动检测更难以正确。覆盖范围相同。与文档生成相同......

没有进行持续集成的唯一好理由是,当你的项目工作到你的集成测试没有在很长一段时间内发现任何缺陷并且他们花费太多时间来运行时你做一次构建的时间。换句话说:你已经做了足够的持续集成,你已经向自己证明了你不再需要它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top