敏捷开发中的测试金字塔(转)

简介:

最近一个爱尔兰的同事介绍了我们agile模式下的automation的工作机制,提到了测试金字塔的概念。值得推敲。

其中主要的思想就是,针对automation工作我们更多的focus点应该是Unit test,对于所有的UI Automation工作所在的级别比较高,但是我们更应该的注意的是所有的UI Cover的点其实都应该在Unit Test中Cover到的,如何UI 测试中出现了任何问题其实都可以追究到Unit Testing没有Cover到。体现了Unit Testing的重要性。

Unit Test应该做的比UI Automation和Service Automation做的更多。

如下是他的讲解:(http://martinfowler.com/bliki/TestPyramid.html)其实很值得一提。有种醍醐灌顶的感觉。。。

The test pyramid is a concept developed by Mike Cohn, described in his book Succeeding with Agile. Its essential point is that you should have many more low-level unit tests than high level end-to-end tests running through a GUI.

For much of my career test automation meant tests that drove an application through its user-interface. Such tools would often provide the facility to record an interaction with the application and then allow you to play back that interaction, checking that the application returned the same results. Such an approach works well initially. It's easy to record tests, and the tests can be recorded by people with no knowledge of programming.

But this kind of approach quickly runs into trouble, becoming an ice-cream cone. Testing through the UI like this is slow, increasing build times. Often it requires installed licences for the test automation software, which means it can only be done on particular machines. Usually these cannot easily be run in a "headless" mode, monitored by scripts to put in a proper deployment pipeline.

Most importantly such tests are very brittle. An enhancement to the system can easily end up breaking lots of such tests, which then have to be re-recorded. You can reduce this problem by abandoning record-playback tools, but that makes the tests harder to write. [1] Even with good practices on writing them, end-to-end tests are more prone tonon-determinism problems, which can undermine trust in them. In short, tests that run end-to-end through the UI are: brittle, expensive to write, and time consuming to run. So the pyramid argues that you should do much more automated testing through unit tests than you should through traditional GUI based testing.

The pyramid also argues for an intermediate layer of tests that act through a service layer of an application, what I refer to asSubcutaneousTests. These can provide many of the advantages of end-to-end tests but avoid many of the complexities of dealing with UI frameworks. In web applications this would correspond to testing through an API layer while the top UI part of the pyramid would correspond to tests using something like Selenium or Sahi..

The test pyramid comes up a lot in Agile testing circles and while its core message is sound, there is much more to say about building a well-balanced test portfolio. In particular a common problem is that teams conflate the concepts of end-to-end tests, UI tests, and customer facing tests. These are all orthogonal characteristics. For example a rich javascript UI should have most of its UI behavior tested with javascript unit tests using something like Jasmine. A complex set of business rules could have tests captured in a customer-facing form, but run just on the relevant module much as unit tests are.

In particular I always argue that high-level tests are there as a second line of test defense. If you get a failure in a high level test, not just do you have a bug in your functional code, you also have a missing unit test. Thus whenever you fix a failing end-to-end test, you should be adding unit tests too.



本文转自hcy's workbench博客园博客,原文链接:http://www.cnblogs.com/alterhu/p/3323653.html ,如需转载请自行联系原作者。
目录
相关文章
|
2天前
|
敏捷开发 机器学习/深度学习 人工智能
探索自动化测试在敏捷开发中的关键作用
【4月更文挑战第30天】 随着软件开发实践的不断进化,敏捷方法论已成为推动快速迭代和响应市场变化的重要工具。在此过程中,自动化测试作为确保软件质量和提升开发效率的关键环节,其重要性愈发凸显。本文将深入探讨自动化测试在敏捷开发环境中的作用,分析其如何助力持续集成和持续交付(CI/CD),并讨论实现高效自动化测试的策略与挑战。通过实际案例分析,揭示自动化测试对缩短反馈周期、降低人力成本以及维护软件稳定性的贡献。
|
2天前
|
敏捷开发 测试技术 持续交付
探索自动化测试在敏捷开发中的应用移动应用的未来:跨平台开发与操作系统的融合
【4月更文挑战第30天】随着软件开发周期的不断缩短,传统的软件测试方法逐渐显得力不从心。本文将深入探讨自动化测试在敏捷开发环境中的关键作用,分析其如何提高测试效率、减少人力资源成本,并确保软件产品的质量与稳定性。通过案例分析,我们还将讨论实施自动化测试的最佳实践和面临的挑战,为追求高效敏捷开发的组织提供参考。
|
2天前
|
敏捷开发 开发框架 测试技术
探索自动化测试在敏捷开发中的关键作用
【4月更文挑战第30天】 在快速迭代的软件开发过程中,自动化测试已成为确保产品质量和加快交付速度的核心实践。本文将深入探讨自动化测试在敏捷开发环境中的重要性,分析其如何帮助团队实现持续集成和持续部署,并保持高效率的同时降低错误率。我们将通过实际案例来揭示自动化测试策略的最佳实践,并提出一系列优化建议,以促进测试流程的改进和效率提升。
|
2天前
|
敏捷开发 测试技术 持续交付
探索自动化测试在敏捷开发中的关键作用
【4月更文挑战第30天】 随着软件开发实践的不断演进,敏捷开发已成为推动快速迭代和交付的主流模式。本文深入探讨了自动化测试在敏捷环境中的重要性,分析了如何通过自动化测试提高软件质量、缩短反馈周期,并促进持续集成的实践。我们将从自动化测试的基本概念入手,讨论其与敏捷方法论的契合点,并通过案例分析展示自动化测试如何有效支持敏捷团队应对快速变化的需求和技术挑战。
|
2天前
|
敏捷开发 机器学习/深度学习 Java
Java中的异常处理机制深入理解与实践:持续集成在软件测试中的应用探索自动化测试在敏捷开发中的关键作用
【4月更文挑战第29天】在Java编程中,异常处理是一个重要的概念。它允许开发者在程序执行过程中遇到错误或异常情况时,能够捕获并处理这些异常,从而保证程序的稳定运行。本文将详细介绍Java中的异常处理机制,包括异常的分类、异常的处理方式以及自定义异常等内容。 【4月更文挑战第29天】 随着敏捷开发和DevOps文化的兴起,持续集成(CI)已成为现代软件开发周期中不可或缺的一环。本文将探讨持续集成在软件测试领域内的关键作用、实施策略以及面临的挑战。通过对自动化构建、测试用例管理、及时反馈等核心要素的详细分析,揭示持续集成如何提高软件质量和加速交付过程。 【4月更文挑战第29天】 在当今快速发
|
2天前
|
敏捷开发 运维 jenkins
探索自动化测试在敏捷开发中的应用与挑战
【4月更文挑战第25天】 在当今软件开发的快速迭代周期中,敏捷方法论已成为推动项目高效进行的关键。本文聚焦于自动化测试技术在敏捷开发环境下的应用实践,分析了其在提升软件交付速度和质量方面发挥的核心作用。通过深入探讨自动化测试框架的选择、测试用例设计、持续集成的实施等关键技术点,揭示了在多变的需求面前如何维持测试覆盖率和准确性。同时,本文也识别了实施过程中可能遇到的挑战,如资源分配、工具选型以及团队协作等,并提出了相应的解决策略。
|
2天前
|
敏捷开发 监控 数据挖掘
探索自动化测试在敏捷开发中的应用
【4月更文挑战第13天】 随着软件开发流程的不断优化与迭代,敏捷开发模式已经成为业界主流。在此背景下,传统的软件测试方法面临着新的挑战和变革压力。本文将深入探讨自动化测试工具和策略在敏捷开发环境中的应用,分析其对提高软件质量、缩短开发周期和降低人力成本的影响。通过案例分析,阐述如何有效集成自动化测试至敏捷开发的生命周期中,并提出一系列实施建议,以助力团队实现持续集成和持续交付的目标。
|
2天前
|
敏捷开发 测试技术 持续交付
探索自动化测试在敏捷开发中的关键作用
在快速迭代的软件开发流程中,自动化测试已成为确保产品质量和加快交付速度的核心要素。本文将深入分析自动化测试如何与敏捷开发相互促进,探讨其在持续集成和持续部署(CI/CD)环境中的实际应用,以及如何通过有效的测试策略提升软件项目的成功率。我们将讨论自动化测试的最佳实践,包括测试用例设计、测试框架选择、维护问题,以及如何衡量自动化投资的回报。
|
2天前
|
敏捷开发 机器学习/深度学习 人工智能
探索自动化测试在敏捷开发中的关键作用
【2月更文挑战第28天】 随着敏捷软件开发模式的普及,快速迭代和持续交付成为企业追求的目标。本文将探讨自动化测试作为敏捷实践中不可或缺的一环,如何通过提高测试效率、保证产品质量以及促进团队协作来支撑敏捷开发的快速节奏。我们将分析自动化测试策略的设计原则,展示其在真实项目中的应用效果,并讨论面临的挑战与未来发展趋势。
|
2天前
|
敏捷开发 测试技术 持续交付
探索自动化测试在敏捷开发中的角色与挑战
【2月更文挑战第16天】 在快速迭代的软件开发领域,敏捷方法论已成为众多团队的首选。随之而来的是对自动化测试需求的显著增长。本文旨在探讨自动化测试在敏捷开发环境中扮演的关键角色,以及实施过程中可能遇到的挑战。通过分析敏捷框架下自动化测试的优势和面临的实际问题,我们提出一系列策略来优化测试流程,并确保软件产品质量与发布速度的平衡。
13 0

热门文章

最新文章