Testing 使用构建脚本和持续集成的原因是什么?

Testing 使用构建脚本和持续集成的原因是什么?,testing,msbuild,continuous-integration,Testing,Msbuild,Continuous Integration,我试图通过构建脚本、夜间构建和持续集成等技术来理解这个想法,但我没有看到它的优势。以此为例: 我们是一个由4人组成的开发应用程序的团队,没有单元测试。我们还使用Subversion进行源代码控制 通过使用自定义构建脚本和诸如持续集成之类的东西,我们可以获得什么好处?您是否需要为此进行单元测试 我还可以提到,我们在本地机器上开发,当代码运行时,我们只需更新生产服务器上的svn签出。如果您没有,您需要等待,直到有人决定执行集成构建,以了解冲突或不一致的提交。集成构建是一个包含所有开发人员更改的构建。

我试图通过构建脚本、夜间构建和持续集成等技术来理解这个想法,但我没有看到它的优势。以此为例:

我们是一个由4人组成的开发应用程序的团队,没有单元测试。我们还使用Subversion进行源代码控制

通过使用自定义构建脚本和诸如持续集成之类的东西,我们可以获得什么好处?您是否需要为此进行单元测试

我还可以提到,我们在本地机器上开发,当代码运行时,我们只需更新生产服务器上的svn签出。

如果您没有,您需要等待,直到有人决定执行集成构建,以了解冲突或不一致的提交。集成构建是一个包含所有开发人员更改的构建。如果每个开发人员都在努力更新他们的本地工作副本,那么您可能不需要常规的集成构建,但实际上,您为什么不将其自动化呢

测试套件还将有助于发现行为的变化,这些变化会破坏某些东西,但不一定会导致集成构建失败

在新的集成构建上执行测试也是标准做法

除了检测破坏事物的冲突和更改外,每晚集成的构建意味着您将始终拥有一个最近的构建,该构建包含了迄今为止每个人的工作。这对于测试和演示来说是一个福音


对于破坏夜间构建的人来说,也有一些乐趣——这意味着他们在没有检查是否正常的情况下提交了内容,因此除了解决破坏构建的提交问题外,他们还应该感到一些痛苦。

首先,从已知环境中创建一个可重复的构建是很有用的。如果您需要对某个特定版本进行小的更改(例如,客户不愿意从版本1.5迁移,尽管您现在正在开发3.2,但您可以在分支上将补丁应用到1.5),那么能够轻松构建确实很有帮助

这也意味着,一旦您开始编写单元测试,您将从中获得更多的好处

如果您目前没有任何构建脚本/服务器,那么如何构建您发布的内容?就在一个随机的开发者盒子上


另请参见。

那么如何确保您的同事所做的更改不会破坏任何功能?您是否在每次签入后尝试并测试每个功能?对我来说,实施单元测试可以节省很多时间

您如何确保两个或多个程序员所做的更改不会干扰下一个在干净机器上进行签出的人无法构建软件?在计划发布之前,认识到这些问题的好时机很短

许多这些技术背后的原因是要尽早失败,这样你就可以准确地发现并改变那些刚刚使你宝贵的软件停止正常工作的东西


现在,你不需要连续测试的单元测试,但是它们肯定是你的构建过程的一个重大改进,你一定要考虑阅读并利用它们。p> 使用CruiseControl和CCTray之类的工具会给您带来信心,您知道当这个小图标为绿色时,您可以获得最新的代码,并且它很可能与您的本地副本一起工作

为了从中获得最佳效果,您需要养成良好的习惯,在提交之前始终获取最新信息,等等。它不会停止冲突,甚至不会停止已损坏的构建,但它会让您自信地推进开发,因为您知道软件有一个工作版本

使用自定义构建脚本,同样可以给您信心,因为您可以完成构建,然后运行单元测试、代码覆盖率和fxcop。这一切都提高了代码主体的质量


与往常一样,这需要花费时间和精力,但您很快就会在一致交付软件所需的质量与需要进行的测试和代码分析之间取得平衡。

拥有专用构建机的关键优势(将CI、单元测试甚至自动构建放在一边)是为了确保您拥有一个干净、可预测和可复制的构建环境

仅此一点就应该导致更稳定的产品发布。它可以帮助您在部署/发布解决方案和代码库之后更早地发现问题。一个常见的例子可能是在开发人员的机器上安装了GAC,但在部署的产品中缺少的组件

自动构建非常有用,因为它们删除了人工元素——也就是说,它们每次都重复相同的步骤(例如,它们不太容易忘记构建步骤)——这使您具有可预测性。如果使用相同的源运行相同的构建脚本,则应获得相同的输出。这对于适当的发布管理至关重要

在开发构建环境时,可以对其进行扩展,以向开发团队提供更多支持,尤其是当团队开始成长时。如果您(或您的团队)能够看到降低项目风险或努力的价值,那么其余的可以讨论-实施

持续集成(CI)基本上可以让您更早地知道是否与项目的源代码/解决方案存在任何冲突,即在团队的其他成员从源代码管理中刷新源代码时获得一个中断的代码库之前


这里的主要优势是更快地解决坏代码库——通常是在人们头脑中仍然清晰的时候(因为理论上,他们只是将更改提交给源代码管理存储库)。人们确实需要关注它。简单地说,我们使用它来确保如果有人向集成分支/发布分支提交代码,并且没有正确测试,我们会在10分钟内发现,而不是10天