软件测试金字塔

在敏捷方法中,持续集成是其基石,持续集成的核心是自动化测试。下面这篇关于测试金字塔的文章,来自大师Martin Fowler。

测试金字塔的概念来自Mike Cohn,在他的书Succeeding With Agile中有详细描述:测试金字塔最底层是单元测试,然后是业务逻辑测试,最后是端到端的测试(GUI或CLI)。

在我的职业生涯中,很多次听到过自动化测试,自动化测试意味着端到端的通过界面完成的测试。完成这种自动化测试的工具一般是录制然后回放,初始使用很容易,不需要任何编码技能。

不过你使用一段时间后就会遇到很多麻烦,GUI的自动化测试运行速度都很慢导致版本发布速度下降,同时完成自动化测试的软件,一般都是商业软件需要license因此只能在特定的机器上部署,且不容易通过脚本集成。

GUI测试用例还很脆弱,如对系统的一些修正可能导致很多用例的失败,这时候你需要重新录制。你可以放弃录制的方法来解决这个问题,通过写GUI测试代码,但是这样效率非常低。就算你已经很精通了GUI测试代码的编写,端到端的GUI测试用例也很容易出现不可预期结果的问题-一些用例成功一些用例失败,因此,基于GUI的自动化测试是脆弱、耗时(包括用例维护和执行)的。所以测试金字塔要表达的是:底层应当有更多的单元测试和接口测试和逻辑测试,GUI测试用例能覆盖到主业务流程即可。

我们注意到测试金字塔中间这一层:服务。业务服务的测试,我称其为皮下测试,因为这一层就在用户界面GUI下面。服务测试可以完成很多端到端的功能测试而不需要像GUI自动化测试那样需要使用复杂的框架。如一个Web应用,你可能使用自己写的脚本测试端到端的逻辑,而GUI自动化你可能会使用Selenium这个工具。

测试金字塔发源与敏捷测试实践,使用测试金字塔原则很容易将你项目中的测试用例达到平衡的状态。在很多项目中都混淆了“端到端测试”,“UI测试”,“面向用户的测试”的概念,其实他们都是测试的不同角度。例如你有一个javascript开发的应用,那UI部分就需要用javascript的单元测试工具Jasmine完成大部分的UI功能测试;复杂的业务逻辑需要使用面向用户的表单(form)来测试,而不仅仅是底层的单元测试。

因此我通常将上层的测试称为“测试的第二防线”,如果你的一个上层测试用例执行失败,表现出来不仅仅是这个功能有问题,还说明你遗漏了这个地方的单元测试,因此你在修复功能之后,还需要补充相关的单元测试用例。

posted on 2012-12-19 12:31 顺其自然EVO 阅读(377) 评论(0)  编辑  收藏 所属分类: 测试学习专栏

软件测试金字塔,软件测试金字塔相关推荐

  1. 软件测试系列---软件测试基础

    软件测试系列--软件测试基础 1.什么是软件测试? **软件测试是一个过程,包含了若干活动,运行软件进行测试只是活动之一**进行软件测试可以人工方式也可以借助于工具**进行软件测试可以运行软件也可以不 ...

  2. 高斯金字塔 拉普拉斯金字塔_金字塔学入门指南

    高斯金字塔 拉普拉斯金字塔 The topic for today is on data validation and settings management using Python type hi ...

  3. php练习——打印半金字塔、金字塔、空心金字塔、菱形、空心菱形

    半金字塔 金字塔 空心金字塔 菱形     空心菱形 转载于:https://www.cnblogs.com/seaBiscuit0922/p/5604828.html

  4. 【全栈软件测试】软件测试学习路线介绍

    一.前言 1.为何要写软件测试,软件测试很简单. 实际上,软件测试入门简单,但要学透学好,是有很多知识的,入门简单入土难.当你看完学习路线,就知道写的是全栈软件测试,涵盖的内容:全栈软件测试,从零基础 ...

  5. 什么是软件测试?软件测试的目的和流程是什么?——入门软件测试

    一.软件测试的基本概念 什么是软件? 软件:控制计算机硬件工作的工具.(操作系统也属于软件) 什么是软件测试? 软件测试就是使用技术手段验证软件产品特性是否满足用户的需求. 二.软件测试的目的 减少软 ...

  6. 叮当软件测试简历,软件测试作业..doc

    软件测试作业. 软件测试作业 第1题 设有一个档案管理系统,要求用户输入以年月表示的日期.假设日期限定在1990年1月~2049年12月,并规定日期由6位数字字符组成,前4位表示年,后2位表示月.现用 ...

  7. 怎样快速学习软件测试?软件测试学习方法

    很多人在了解到目前国内软件测试行业的高薪以及市场前景之后,都纷纷加入到软件测试的行列中.那对于新入行的新手来说怎样快速学习软件测试呢?学习软件测试有哪些比较有效的学习方法呢? 相对互联网其他岗位而言, ...

  8. opencv学习(二十六)之图像金字塔(高斯金字塔、拉普拉斯金字塔)

    在进行数字图像处理时,我们可能会需要将某种尺寸的图像转换为其他尺寸的图像,这样会存在放大图像核缩小图像两种可能.opencv提供了一个真正意义上的图像所方函数resize(),但在本篇中主要学习以下使 ...

  9. OpenCV中的图像金字塔(高斯金字塔、拉普拉斯金字塔)

    最近在看关于数字图像的知识点,目前在图像金字塔部分,实在是懒得用手作笔记了,就以其中比较出名的"高斯金字塔"和"拉普拉斯金字塔"为例,基于OpenCV的源代码作 ...

最新文章

  1. 转Java 理论与实践: 正确使用 Volatile 变量
  2. Zabbix学习之路(一)之Zabbix安装
  3. My SQL 学习笔记二
  4. OpenCV示例学习(七):离散傅里变换(DFT)算子:getOptimalDFTSize(),copyMakeBorder(),magnitude(),log(),normalize()
  5. 利用Python批量重命名一系列文件名杂乱的文件
  6. 实现冒泡排序和选择排序
  7. Dubbo架构设计详解(转载)
  8. vlan未能连接服务器,PC单机局域网连接VLAN的方法
  9. 网络安全工程师毕业答辩杂记
  10. Java案例:功夫熊猫
  11. 4_unittest测试框架_管理测试用例生成测试报告
  12. 虚拟机和主机快捷键切换
  13. 网络安全学习--002--windows基础知识
  14. sap中re凭证是什么意思_SAP财务模块内有哪些凭证类型
  15. 单端阻抗为什么是50欧姆-探究
  16. Markdown文档数学公式的使用
  17. CodeTON Round 1 (Div. 1 + Div. 2, Rated, Prizes)
  18. JS中 new FormData() - FormData对象的作用及用法
  19. 【关于PyCharm报错IntelliJ Error launching pycharm】
  20. Typora markdown公式换行等号对齐_Markdown快速入门教程

热门文章

  1. 记录一次ncl从前端到后端出图过程:调用linux-shell执行ncl命令从nc文件出图
  2. matlab实习,matlab实习报告
  3. transformer股票步骤
  4. Linux 终端生存指南
  5. 如何实现实时音视频聊天功能
  6. macbookpro接口叫什么_Macbook Pro有什么接口
  7. 杯子倒水问题 -python
  8. 苏黎世联邦理工学院计算机硕士申请条件,苏黎世联邦理工学院硕士申请
  9. 如何从零开始学习3D视觉?
  10. (六)CDA 数据分析师Level1考试新版大纲解析(自己整理)PART 6业务数据分析