《 自动化测试最佳实践:来自全球的经典自动化测试案例解析》一一1.3 建立自动化策略

本文涉及的产品
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介: 本节书摘来自华章出版社《 自动化测试最佳实践:来自全球的经典自动化测试案例解析 》一 书中的第1章,第1. 43节,作者:(英)Dorothy Graham Mark Fewster 著 ,更多章节内容可以访问云栖社区“华章计算机”公众号查看

1.3 建立自动化策略
我们需要在不破坏现有功能的前提下发布产品的新功能特性。而且,需要尽快知道一个新的代码变动是否会引起回归测试的失败。手动回归测试在每两周的迭代后期才能给予我们反馈,以至于没有时间进行充分的回归测试。
我们中一些人曾经在其他敏捷团队中进行过测试驱动开发(Test-Driven Development, TDD)。我们发现TDD能帮助创建出设计良好的、健壮的代码。
我们现有的回归测试是手动操作的,整个团队通过使用团队Wiki上所记录的脚本进行手动测试。在每两周的迭代周期中,这就花费了整个团队的20%的时间。这些测试仅仅为程序最核心的部分提供了最小程度的覆盖。产品中报告的缺陷表明,回归测试的失败仍有可能发生。在每次迭代周期中,我们至少要花20%的时间修复这些产品缺陷,从而限制了我们能开发的新功能的数量。
自动化的回归测试会带来更高、更准确的覆盖率,这需要投入大量的时间、金钱和精力,我们可能需要硬件和软件来建立构建过程、持续运行测试所需要的环境,我们也需要使测试实现自动化的架构和驱动。然而,我们可以计算出这一自动化将会节省我们40%的时间,利用这些时间可以进行更多有价值的活动,比如进行新的开发,所以,其收益远大于成本。
继续进行手动回归测试必将会失败,我们需要一个明确的决策来进行自动化。因为我们都在进行手动回归测试,每个人都感受到了没有自动化测试的痛苦。所以,我们有了解决这一问题的动力。首先,我们需要一个可测试的架构……
1.3.1 一个可测试的架构
TDD这条路是要走的,但是当前的代码在业务逻辑、数据库访问和UI等处相结合时,情况比较复杂,自动化单元测试也就变得很难了。往往很难隔离任何一个组件单独进行测试。
这样看来,似乎找到一种把软件进行分层的新架构是非常明智的。我们开发出了这一新架构的所有新功能。
【小窍门】
不要尝试解决老问题,进行新的开发来开展更好的实践。
如果进行自动化测试的成本比其收益高,那么进行自动化测试就没什么意义。我们研究图1-1所示的自动化测试金字塔(这一金字塔是由我们当时的经理Mike Cohn提出的)。单元级别的测试一般ROI最高。程序员可以很快写出它们并运行,而且测试可以根据需要进行更新。因此可以将单元级别的测试作为自动化回归测试的坚实基础。
我们的业务逻辑相当复杂,而且新架构将这一逻辑从数据库和用户接口层中分离出来,这样就可以通过设置内存中数据并在其上运行产品代码来进行测试。这是金字塔的中间层———比底层运行的测试要少但是依然很重要。
我们还需要测试UI,但是通过UI进行的自动化测试本身就非常脆弱、维护费用高且运行缓慢。因为最终想使UI测试所占的比例尽量最小,所以它就处在金字塔的最顶端。尽管如此,与其他团队一样,我们从图形用户界面(GUI)冒烟测试(smoke test)开始,来获取一些代码防护。所以,从这个角度,我们的金字塔是上下颠倒的,但是没关系———最终我们会将它翻转过来。(我们最终花了4年时间才获得为之努力的三角形形状!)

image

【小窍门】
解决问题的最直接途径未必是最佳途径。
我们现在明白了我们需要做什么,所以我们开始着手实施那个能给我们带来**最大实惠的任务。
1.3.2 建立构建过程**
我们只有4位程序员,但是他们会经常检查源代码控制系统中的变化。我们需要确保他们没有不小心修改别人的内容或者破坏现有的任何功能。同时,我(测试人员)有时候不得不等待好几天,部署在测试环境中的代码才能完成一次构建。一个自动化的构建过程(build process)将保证在每次检入后的几分钟内,最新代码的可部署版本就是可用的。
管理层向我们强调了质量是我们的第一目标,他们乐意宽限一些时间来让我们搭建一个好的基础结构。
【真知灼见】
好的管理者会准许团队花时间去开发自动化的基础结构。
我们停下正在做的事情,使用CruiseControl和一个新的Linux服务器建立了一个持续集成(Continuous Integration, CI)过程。因为我们还没有可以运行的任何测试实例,所以只是简单编译代码和构建可部署的二进制文件。我可以看到每次构建的检入文件并能够选择想部署到产品中的二进制文件。这很有用,但是还不够。
1.3.3 获取测试的基准:GUI冒烟测试
程序员正在学习如何使单元测试自动化并编写测试先行(test-first)的代码,但是要真正实施测试驱动开发需要花好几个月的时间。针对遗留代码,使用GUI冒烟测试可能是一个快速获得自动化测试覆盖的途径。但是使用什么工具最好呢?
我们有购买一个付费工具的预算资金,但是团队里的程序员是Java程序员,他们万不得已是不愿意使用另一种脚本语言来进行测试的。捕获/回放并不适合我们,因为我们需要可维护的、稳定的测试脚本。我们选中了 Cannoo WebTest——一个可以让我们修改XML文件中的测试用例,并使用Ant运行它们的开源框架。而且它很容易与我们的构建过程集成。
【真知灼见】
昂贵的商业工具不一定是最好的选择。
我让业务专家把需要用冒烟测试来保护的系统核心区域按优先等级进行划分。每个冲刺时间段里,都安排了时间让我用WebTest工具自动运行测试脚本。我们首先追求的是“快赢”,针对系统中每个用户角色的基本功能实现自动测试。
首先, CI构建过程只运行了少量单元测试和一些覆盖系统高得分点的GUI冒烟测试。随着在这两个级别引入更多测试,我们将GUI测试移到单独的构建过程中并只在晚上运行,这样,我们可以更快得到的反馈信息。
与此同时,我们将单元测试和每个新用户故事(user story)的GUI冒烟测试都放在迭代中完成。新的功能将会在自动化的单元测试和GUI测试中被覆盖。一旦程序员能够熟练使用TDD,我们就将进入金字塔的中间层。
1.3.4 在单元级别驱动开发
我们的程序员中只有一人曾经实施过TDD,但每个人都支持这种理念。我们根据别人的介绍,找到了我们能找到的最好的顾问来帮助我们学习如何实施TDD,很多时候我们都是自带午餐以便挤出时间来进行TDD试验。但是很遗憾的是:它很难学!我们团队需要时间来掌握它。
我们的管理层知道这个道理:目标是写出优美的代码,优美到可以拿回家给妈妈,当做冰箱贴。我们的公司——一个刚刚成立3年的商业公司,因为网络应用问题和无能力及时发布新功能而面临倒闭。我们的商业合作伙伴也准备放弃我们了,但自从我们实施敏捷开发(Scrum)以后,他们看到了我们为提高稳定性和响应能力所做的努力。我们的执行者致力于具有长远收益的投资。
【经验教训】
一个迫在眉睫的灾难可能是巨大进步的推动力。
我们知道这些单元级别的测试具有最好ROI。我们也理解TDD事实上是代码设计,而不是测试。考虑“代码是用来做什么的”可以帮助程序员写出正确的代码,而快速实施测试,才能及时地提供重要的反馈信息。
单元级别测试的最大好处就是能够提供最快速的反馈。在研究一些好的实践之后,我们决定将代码构建过程的时间控制在10分钟内。这需要单元测试的随机重构。早些时候,单元测试需要访问数据库,之后,程序员掌握了如何构造、模拟它,以及消除它的影响,使测试快速运行又能提供正确的测试覆盖。

相关文章
|
4天前
|
敏捷开发 jenkins Devops
探索软件测试的新篇章:自动化与持续集成的融合之道
【9月更文挑战第31天】 在软件开发的海洋中,测试是确保航船稳健前行的灯塔。本文将引领读者驶入软件测试的新纪元,探索自动化测试和持续集成如何携手共创高效、可靠的开发流程。我们将从基础概念出发,逐步深入到实际操作层面,揭示这一现代软件开发模式的核心价值和实现路径。你将看到,通过代码示例和实践案例,如何将理论转化为提升软件质量的具体行动。
|
8天前
|
监控 测试技术 持续交付
软件测试中的性能瓶颈分析与优化策略
性能瓶颈,如同潜伏于软件深处的隐形障碍,悄然阻碍着系统的流畅运行。本文旨在揭示这些瓶颈的形成机理,剖析其背后的复杂成因,并汇聚一系列针对性的优化策略,为软件开发者提供一套系统性的解决方案。
|
9天前
|
存储 Cloud Native 关系型数据库
Ganos实时热力聚合查询能力解析与最佳实践
Ganos是由阿里云数据库产品事业部与飞天实验室共同研发的新一代云原生位置智能引擎,集成于PolarDB-PG、Lindorm、AnalyticDB-PG和RDS-PG等核心产品中。Ganos拥有十大核心引擎,涵盖几何、栅格、轨迹等多种数据处理能力,实现了多模多态数据的一体化存储、查询与分析。本文重点介绍了Ganos的热力瓦片(HMT)技术,通过实时热力聚合查询与动态输出热力瓦片,无需预处理即可实现大规模数据秒级聚合与渲染,适用于交通、城市管理、共享出行等多个领域。HMT相比传统网格聚合技术具有高效、易用的优势,并已在多个真实场景中验证其卓越性能。
22 0
|
8天前
|
测试技术 UED Python
探索软件测试的边界:自动化与手动测试的协同
【8月更文挑战第59天】在追求效率和质量的软件生产中,自动化测试与手动测试的辩论从未停止。本文将通过实际案例,揭示二者如何相辅相成,共同构建更健壮的软件测试体系。我们将深入探讨自动化测试的优势、手动测试不可替代的角色以及它们如何在实际项目中协同工作,旨在为读者提供一种平衡的视角来看待软件测试的实践。
101 65
|
3天前
|
设计模式 敏捷开发 jenkins
软件测试中的自动化测试实践指南
本文旨在探讨软件测试中自动化测试的实施方法及其重要性,通过具体案例分析自动化测试的步骤、工具选择及最佳实践。我们将从自动化测试的基本概念入手,逐步解析其在实际项目中的应用,并提供一些常见问题的解决方案。
|
3天前
|
测试技术 开发者
深入理解软件测试:从基础到高级策略
【9月更文挑战第32天】在软件开发的世界中,测试是确保产品质量的关键步骤。本文将引导你了解软件测试的核心概念、方法和高级策略。我们将从测试的基础开始,逐步深入到自动化和性能测试等高级主题。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和技巧。让我们一起探索如何通过有效的测试策略来提高软件的质量和可靠性吧!
|
5天前
|
安全 网络安全 开发工具
深入探索Git:全面解析Git的用法与最佳实践
深入探索Git:全面解析Git的用法与最佳实践
17 2
|
12天前
|
测试技术 持续交付
提升软件测试效率的三大策略
在软件开发过程中,测试是一个至关重要的环节。本文将探讨如何通过优化测试流程、引入自动化测试和强化测试团队的技能培训,来显著提高软件测试的效率。我们将一步步解析每个策略的具体实施方法和预期效果,帮助你在保证质量的同时,缩短产品上市时间。
|
12天前
|
自然语言处理 IDE Java
软件测试中的自动化策略
【9月更文挑战第23天】在软件生命周期中,测试是保证产品质量的关键步骤。随着技术的发展,自动化测试成为提升效率、减少错误和确保一致性的重要手段。本文将探讨自动化测试的重要性,并介绍一些实用的自动化测试工具和框架,帮助读者理解如何实施自动化测试策略,从而优化测试流程,提高软件开发的质量和速度。
|
9天前
|
运维 测试技术 持续交付
提升软件测试效率的五大策略
在软件开发过程中,测试是一个至关重要的环节。本文将探讨如何通过优化测试流程、引入自动化工具、加强团队协作等方法,提高软件测试的效率和质量。通过实际案例分析,我们将展示这些策略如何在不同类型的项目中得到成功应用,帮助团队更快地发布高质量产品。

推荐镜像

更多
下一篇
无影云桌面