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

简介:

最近一个爱尔兰的同事介绍了我们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 ,如需转载请自行联系原作者。
目录
相关文章
|
25天前
|
敏捷开发 测试技术 持续交付
探索自动化测试在敏捷开发中的应用与挑战
本文深入探讨了自动化测试在现代软件开发流程,特别是敏捷开发环境中的重要作用和面临的挑战。通过分析自动化测试的基本原理、实施策略以及在实际项目中的应用案例,揭示了其在提高软件质量和加速产品交付方面的巨大潜力。同时,文章也指出了自动化测试实施过程中可能遇到的技术难题、成本考量及团队协作问题,并提出了相应的解决策略,为软件开发团队提供了有价值的参考和指导。
|
5月前
|
运维 Devops 测试技术
单元测试问题之什么是测试金字塔
单元测试问题之什么是测试金字塔
|
6月前
|
敏捷开发 jenkins 测试技术
探索自动化测试在敏捷开发中的应用
随着软件开发方法的不断演进,敏捷开发逐渐成为主流。然而,在不断迭代的开发过程中,确保软件质量却成了一大挑战。本文探讨了自动化测试在敏捷开发环境中的重要性、应用场景以及最佳实践,以期为开发团队提供有效的参考。
45 2
|
2月前
|
敏捷开发 测试技术
开发模型(瀑布、螺旋、scrum) 和 测试模型(V、W)、增量和迭代、敏捷(思想)及敏捷开发 scrum
文章详细介绍了软件开发过程中的不同开发模型(瀑布、螺旋、Scrum)和测试模型(V模型、W模型),以及增量和迭代的概念,最后阐述了敏捷思想及其在敏捷开发(如Scrum)中的应用。
82 0
开发模型(瀑布、螺旋、scrum) 和 测试模型(V、W)、增量和迭代、敏捷(思想)及敏捷开发 scrum
|
4月前
|
敏捷开发 测试技术 持续交付
探索式测试在敏捷开发中的应用与挑战
【8月更文挑战第27天】随着软件开发模式的不断演进,敏捷开发已成为主流。在这一背景下,探索式测试(Exploratory Testing)作为一种灵活、高效的软件测试方法,其地位日益凸显。本文将探讨探索式测试的核心概念、实施策略及其在敏捷开发中的作用,同时指出实施过程中可能遇到的挑战和解决之道。通过具体案例分析,我们将深入理解探索式测试如何促进软件质量的提升,以及如何更好地融入敏捷开发流程。
|
4月前
|
敏捷开发 安全 jenkins
自动化测试在敏捷开发中的应用:加速迭代,保障质量
【8月更文挑战第2天】自动化测试在敏捷开发中扮演着至关重要的角色。通过提升测试效率、提高测试覆盖率、及时反馈与修复等优势,自动化测试为敏捷开发团队提供了强大的支持。然而,在实施自动化测试的过程中也面临着一些挑战。通过选择合适的测试框架和工具、制定测试计划和策略、持续优化和维护等策略以及遵循最佳实践并克服挑战,我们可以充分发挥自动化测试在敏捷开发中的潜力,为软件质量的提升和快速迭代保驾护航。
|
5月前
|
敏捷开发 测试技术 持续交付
自动化测试在敏捷开发中的关键作用
【7月更文挑战第15天】 随着软件开发模式的演进,敏捷开发已成为主流。在这一背景下,自动化测试不仅是提高软件质量的利器,更是实现快速迭代与持续交付的核心。本文将深入探讨自动化测试在敏捷开发中扮演的角色,分析其对提升开发效率、保障产品质量的重要性,并讨论实施自动化测试时面临的挑战与解决策略。
|
5月前
|
敏捷开发 测试技术 持续交付
探索自动化测试在敏捷开发中的关键作用
【7月更文挑战第14天】本文将深入探讨自动化测试在现代敏捷软件开发生命周期中扮演的核心角色,分析其如何优化开发流程、提升产品质量和加速市场交付。通过实例分析和策略讨论,揭示自动化测试不仅是提高效率的工具,更是确保软件可持续迭代与快速响应市场变化的基石。
|
5月前
|
敏捷开发 测试技术 持续交付
自动化测试在敏捷开发中的关键作用
【7月更文挑战第12天】在软件开发领域,敏捷开发模式以其快速迭代和持续交付的特性受到广泛推崇。然而,这种模式也对软件测试提出了更高的要求,尤其是自动化测试的重要性愈发凸显。本文将深入探讨自动化测试在敏捷开发中的作用,分析其如何提升开发效率、保障软件质量,并讨论实施自动化测试时面临的挑战及解决策略。通过案例分析,我们将展示自动化测试工具和实践的有效应用,为软件开发团队提供实用的指导和建议。
|
5月前
|
敏捷开发 测试技术 持续交付
自动化测试在敏捷开发中的实践
【7月更文挑战第5天】自动化测试在敏捷开发中扮演着至关重要的角色。通过制定合适的测试策略、选择合适的测试工具、编写和维护测试脚本以及集成到持续集成流程中,可以显著提高测试效率、加快反馈周期、提高测试覆盖率和降低测试成本。未来,随着技术的不断发展和敏捷开发的深入应用,自动化测试将在软件开发中发挥更加重要的作用。