BDD 为什么自动化测试是必要的?

imzack · 2018年07月31日 · 最后由 槽神 回复于 2018年08月02日 · 3406 次阅读

本文译自 Why Automation Testing is Necessary http://techtowntraining.com/resources/blog/why-automation-testing-necessary
原文链接 https://mp.weixin.qq.com/s/Sn0LMNT97HfknGq7ZsHs1w

介绍

自动化测试是将自动化工具和技术应用于软件测试,旨在减少测试工作,更快,更经济地验证软件质量。有助于以更少的工作量构建质量更好的软件。
许多公司多多少少都在做自动化测试,但手动测试仍然占主要的比例,因为有些团队不知道如何在开发过程中更好的利用自动化测试来替代手动测试。
手工测试通常是工程师仔细的执行预定义的测试用例,将执行结果与预期的行为进行手工比较并记录结果。每次源代码更改时都会重复这些手动测试,由于都是人为参与,这个过程中很容易出错。
在组织中引入自动化测试时,需要投入大量财力和时间。 然而,一般没有太多的财务回报,至少在小规模开始时没有。 因此许多公司选择开源测试自动化工具,特别是在开始引入自动化测试的阶段。
通常,软件公司害怕投资自动化测试,不是因为负担不起这个投入,而是因为他们担心的回报不会像预期的那样,或者根本不会产生积极的投资回报率。
下面介绍中,让我们来看看为什么自动化测试对您的组织是必要的,以及它可以带来的好处。

1. 降低成本(特别是问题出现时的成本)

如前所述,开始自动化测试的初始成本并不高,比如选用免费的开源工具。 但是,一旦您的组织全面展开自动化测试,您就会希望投资更好的工具、更好的服务器,雇用人力来维护基础设施等。这些成本绝对不是无关紧要的。
自动化测试不会自动生成。创建有价值的自动化测试需要花费时间和精力,而且不会在一夜之间发生。
如果您想证明引入自动化测试的合理性,不能只关注财务回报,而应考虑应用出现问题导致的隐性成本。例如一个问题在手动测试没有发现而出现在产品环境中,公司会花多少钱?你是否会失去客户?需要花多少时间、资源和资金来纠正这种情况?
如果每次对代码进行更改时,都重复执行一组非常强大的测试套件,可以降低问题出现在产品环境的风险。自动化测试有助于在软件开发生命周期的早期发现错误,从而降低交付故障软件的风险。
说到底,向市场提供高质量的产品重要性远大于任何其他类型的节省。

2. 节省时间

虽然初期建立自动化测试需要花费大量的时间和人力,但是一旦自动化测试建立了,您就可以重用这些测试。自动化测试的执行速度明显快于手动测试,不易出错,且节省人力。
在日常的代码修改过程中,您可以在每次提交时执行自动化测试,而不必通过设置环境或记住执行每个测试的步骤来持续执行手动步骤。一切都是自动完成的。
只要首次设置完成后,就可以重复运行你的自动化测试,从而将重复的手动测试时间从数周缩短至数小时。
同样一旦编写好,测试可以执行任意次。与手动测试仪不同,测试也可全天候,无人值守的执行。
在软件开发团队中,通常的做法是每天多次(通常是每次提交)运行基本单元测试,并且每天在下班后执行耗时的集成测试和 UI 测试。

3. CI 和 DevOps

自动化测试构成任何持续集成或 DevOps 设置的基础。从本质上讲,CI(持续集成)和 DevOps 都依赖于 “Fail fast, Fail early” 的理念。对代码库的每次提交都将自动进行测试,并将结果报告给开发人员。开发人员优先修复任何导致构建失败或导致主要测试失败的错误,确保主线代码始终按预期工作。

4. 准确性和可靠性

由于运行每个测试涉及多个先决条件,手动测试容易出错。另外每个测试可能需要不同的执行顺序。
毕竟手动测试人员是人类,人有不善于执行重复枯燥工作的特点,因此可以预料手动测试不会精确并有一定的几率出错。这会导致不准确的结果反馈到开发团队。
自动化测试每次都执行相同的步骤,不仅精确,而且结果可在最短的时间内提供给所有相关人员。
可靠性的另一个方面是在不同服务器上重新执行相同的测试。这使得能够快速验证测试是否在所有服务器上按预期运行,从而排除了服务器配置问题的可能性。

5. 性能测试

性能负载测试可确保您的应用程序可以处理预期和意外的用户负载。
如果您当前只在项目中使用手动测试方法,则负载测试可能会推迟到开发周期结束。按照敏捷方法和持续集成理念,应及早地进行性能测试,但现实是很大一部分项目团队执行做这个测试的时间太晚,最终导致产品发布推迟。
自动化性能测试能够同时运行数千个测试,模拟数百万用户,所有这些用户手动测试几乎都是不可能的。

6. 增加对软件的信心

敏捷方法建议使用 sprint,即短周期的迭代。每个 sprint 通常 2-3 周。这需要一种新的方式来组织测试工作并要求更高的效率。
每个 sprint 都专注于开发一组小功能,但必须在其结束的时候提供较完整的新功能特性,还包括之前 sprint 的所有功能特性。如果没有适当的测试,在不破坏之前正常工作的功能特性的情况下提供全功能系统的风险很高。在每个 sprint 中反复手动测试所有功能会效率低下。
这也是自动化测试最大的好处。自动化测试并能够在每个 sprint 中快速重复测试,可以确保所有事情都按预期工作。

7. 衡量质量指标

可用于自动化测试的扩展和工具提供了测量许多代码质量指标的功能,例如代码覆盖率(即实际测试的代码百分比),技术债,代码语义检查等。
通常,当测试作为持续集成或 DevOps 工作流程的一部分执行时,可同时获取这些方面的测量数据。
之所以能够测量这些指标,是因为自动化测试代码本身与产品代码共存,通过在自动构建阶段解析源代码,能提供在几分钟内测量巨大代码库质量的机会。这在手动测试中根本不可能。

结论

如果您的产品质量是您的首要目标,我强烈建议您使用自动化测试作为日常开发实践的一部分。它将确保您的应用程序得到正确测试,并为研发、管理人员和客户提供信心。
自动化测试需要前期投入,并且需要花时间进行开发。这些投入会得到长期的回报:可以减少工作量,消除手动测试的错误,提高准确性,最终节省成本和时间。

总的来说,自动化测试是一种比手动测试更快获得故障反馈的方法,符合 “快速失败,早期失败” 的原则。它有助于实现手动测试无法提供的质量。在自动化测试中,行为驱动的自动化测试现已广泛为研发团队所接受,基于行为驱动 (BDD) 的测试脚本具有上手快、易维护、方便所有 stakeholders 沟通等特点。

共收到 12 条回复 时间 点赞

关于BDD方面的还没有专业的一款软件支持

请问 robot framework、cucumber、fitness 是啥?

@Lihuazhang 这算广告不?

BDD 只要是单元测试框架都支持吧

槽神 回复

谢谢指正,已更改,我想说是一款专业的代码编辑工具。

有幸 回复

这个不算广告,从外文翻译来的。 Why Automation Testing is Necessary http://techtowntraining.com/resources/blog/why-automation-testing-necessary

乾行 回复

不是的, BDD 主要是从外部系统行为来检测软件功能的正确性。 单元测试框架主要是从内部检测函数正确性。

目前在使用 BDD,使用的是 cucumber,个人感觉 idea 对 bdd 的支持还是可以的

陈恒捷 屏蔽了此话题:正文中请不要露出二维码推广 08月01日 09:05
imzack 回复

现在才不算广告

imzack 回复

单元测试框架 是运行 case 的框架并提供必要的 utility。具体执行什么 case 还由编写 case 的人决定的。

程明远 回复

可以尝试一下 CukeTest(http://cuktest.com ),Cucumber 和 BDD 的可视化开发工具。

槽神 回复

槽神居然有错别字 fitnesse 话说这个e确实经常看到有人漏😁

AngryTester 回复

搜狗的锅😏

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册