自动化测试——敏捷测试的基石

作为被冠以敏捷名称的测试,敏捷测试同样以快为目标。在敏捷测试中,快有三个方面的含义:

  1. 团队能够通过测试快速获知系统当前所处的状态,了解距离可工作的软件还有多远;
  2. 能够在一个迭代周期中快速完成回归测试和对新功能的测试;
  3. 开发工程师能够从持续的测试中得到快速的关于提交代码反馈。

  简而言之,敏捷测试要求测试能够测试在短的时间间隔内持续发生且能够在短时间内完成。考虑到纯粹的依赖人工测试基本不可能达到短的时间间隔内持续发生和短时间内完成这两个目标,而自动化测试在执行效率方面具有天然的优势,在敏捷测试中使用自动化测试技术应该是自然而然的选择。

  考察敏捷开发中的一个迭代周期:

  1. 在迭代周期开始的时候,团队与客户一起定义本迭代周期内需要完成的功能;
  2. 团队建立验收测试验证标准;
  3. 开发工程师开始实现新功能,使用TDD为产品建立安全网,使用持续集成尽可能保证每一次代码提交不引入新的缺陷;
  4. 所有新功能被添加后,在RC上运行回归测试保证原有功能的正确性;针对新功能运行测试保证新功能的正确性;
  5. 执行验收测试验证系统是否达到可交付的标准。

  除1和2外,剩下的3个项目都与测试执行密切相关,如果依靠手工测试来进行这些项目,毫无疑问,测试会成为整个敏捷开发的瓶颈。而如果把这些项目中的测试建立在合适的自动化测试基础上的话,测试就可以和开发一起敏捷起来。从这个角度来说,把自动化测试描述成敏捷测试的基石毫不夸张。

  自动化测试并不是新鲜事物。从80年代起,对软件自动化测试的研究就从来没有停止过,而自动化测试工具也一直是测试工程师津津乐道的话题。IBM、HP、Borland等许多提供软件开发解决方案的公司都拥有完整的测试解决方案;在开源社区,自动化测试工具的种类也不下于100多种。这么说起来,是不是只要选择了合适的工具在测试中进行部署,就能快速的建立起敏捷测试需要的自动化测试基础了呢?根据美国某组织在2005年开展的一项非正式的调查,在所有参与被调查的200多个自动化测试项目中,完全成功的只有30多个,不到20%;完全失败的却达到100多个,占到了50%的比例。

  自动化测试项目为什么会失败?根据调查,不合适的自动化测试目标与从自动化测试中无法获得收益是项目失败的主要原因。希望把自动化测试定义为完全替代手工操作、期望仅仅在UI层建立自动化测试都不是合适的自动化测试目标;尤其是在UI层建立自动化测试这个目标一定会带来无法从自动化测试中获得收益的后果。

  UI自动化测试是自动化测试领域中较早被研究的,其主要出发点是使用工具和脚本驱动应用操作,依靠工具对UI层的元素属性进行验证。现有的大部分商业测试工具,如IBM Functional Tester、HP QTP等都属于这一类工具。从好的方面来说,UI自动化测试相对其他自动化测试更接近真实用户;但不得不说的是,UI自动化测试的高昂的投入往往是组织不能持续进行自动化测试原因。

  我参与第一个自动化测试项目的时间是在12年前。在那些惨痛的日子里,我会痛苦地看着我苦心建立的自动化测试脚本以高达50%的失败率运行,然后再花上2个星期更痛苦的调试和修复自动化测试脚本的时间。随着脚本数量的增加,我的痛苦如日俱增。最后,我不得不放弃了对这些昂贵的自动化测试脚本的维护,转向我情感上不情愿,理智上却不得不做的选择:重回手工测试。

  12年前的例子并不是我唯一经历的UI自动化测试的痛苦,实际上,在10多年的软件测试生涯中,这样的不愉快各种情况下一再重复。下表是前年我们的某个完全依赖于UI自动化测试项目中的自动化测试投入产出比较表。


自动化测试覆盖率


功能点数量


测试用例数量

(自动化/全部)


自动化测试执行

失败率(平均)


每个测试周期的

人员投入


0%


65


0/182


-


2人周


20%


83


41/210


10%


1.5人周


44%


110


131/302


22%


2人周


61%


120


213/350


43%


3.5人周

  UI自动化测试带来痛苦的主要根源在于UI本身的不稳定性。由于UI是应用与用户的直接交互界面,用户的大量需求都直接对应在UI本身的改变上,这就导致了UI本身的不稳定,建立在UI上的自动化测试也因此不稳定。当然,除了不稳定外,UI自动化测试带来的测试环境的需求也是导致UI自动化测试开销剧增的原因之一;另外,UI自动化测试本身并不能很好的帮助定位缺陷,对开发工程师而言,其在反馈上的价值远不如单元测试。

  除了UI自动化测试外,在敏捷测试中其他可用的自动化测试还包括单元测试与接口测试(或者叫服务测试)。下图是敏捷开发中被广泛认可的自动化测试产出金字塔,在相同投入的情况下,单元或是代码级测试能带来最大的收益,而UI层面的收益最小。

  自动化测试所涉及的技术非常多,例如在单元测试中经常需要使用到的Mock技术,基于针对不同语言而不同的解依赖技术等;在接口测试层面,更是需要根据接口本身的类型和特点确定具体的测试技术;在UI层,根据应用的不同(桌面应用,Web应用,嵌入式应用等),自动化测试技术也存在巨大的差异。

  关于各种自动化测试技术的讨论,本文在后续文章中会选择其中的一些进行重点介绍,本文则主要介绍Diff技术这种与传统的比较预期输出与实际输出略有不同的自动化测试技术。

  Diff技术,顾名思义,其主要关心的是不同。以搜索引擎产品的测试为例:以同一个关键字在搜索引擎上进行多次重复测试(查询),随着时间段的变化,搜索引擎的索引数据也在发生变化,即使对同一个关键字,也不太可能在每次测试时给出一个所谓的预期结果。

  怎样才能在这种情况下开展测试?一种可行的技术是就是Diff技术。下图展示了Diff方法的应用。

  简单来说,Diff方法的应用包括以下步骤:

  1. 设置两个待比较的版本实例(通常是相邻的两个版本,例如RC和上一个产品版本),两个版本具有相同的数据基础或后端环境;
  2. 使用发送模块同时向两个版本发送相同请求;
  3. 比较模块收集两个实例的输出并对其进行比较;
  4. 比较结果输出为Diff报告。

  Diff报告体现的是两个实例之间的不同,不同并非一定是由于缺陷导致,因此Diff报告需要通过人工审阅,判断报告中不一致的原因,决定后续步骤后续步骤通常包括创建一个缺陷,安排探索性测试,或是据此确定回归测试范围等。

  Diff测试技术可以在多个测试层面上被应用。例如,在UI层面上,可以通过图片Diff的方式(比较两个版本在相同输入情况下的UI截图)发现应用界面上的变化;对Web应用来说,也可以以文本Diff的方法比较两个实例输出的HTML文档,或是特定页面元素;在接口层面上,可以比较在两个实例上,相同的UI操作导致的前后端通讯的不同

  Diff技术甚至可以在测试过程中帮助确定测试范围。例如,对一个RC的全面的Diff发现,所有100个功能点中,有80个功能点的Diff结果与上一个版本没有任何差异,有20个功能点的Diff结果与上一个版本存在差异。基于这个结果,我们可以很容易的将存在差异的20个功能点作为RC测试的重点个人认为,与依靠代码分析确定测试范围相比,这种方式直观有效得多。

  当然,在实际项目中应用Diff技术也会遇到很多挑战,如何尽量消除Diff结果中的噪声是一个关键问题。以应用基于图片的Diff技术为例,如何消除图片比较结果中的噪声就是一个既需要技术手段(通过图片比较算法)也需要非技术手段(建立针对每个页面的mask)的话题。

时间: 2024-08-05 09:53:45

自动化测试——敏捷测试的基石的相关文章

究竟什么是敏捷测试

时至今日,还讨论这样一个老话题,是否感觉老调重弹?因为两年前(2010年底)时任谷歌中国测试经理的段念先生就写了一篇文章<什么是敏捷软件测试>, 就已经谈到这个话题,“敏捷软件测试更多的是一种理念,而非过程”.在2011年,我自己也写了一篇文章<敏捷测试的思考和新发展>,谈到“在BDD.ATDD和TDD最根本的.共同的思想基础上,构成一个全新的.更完善的敏捷测试框架”.而更早的时候(2010年10月),写了一篇<敏捷测试的方法和实践>,开始的那一小节就在讨论 “什么是敏

敏捷测试的方法和实践

文 / 朱少民 有一次,当开发人员完成当前Sprint 任务的代码之后,测试人员.开发人员和产品经理一起来浏览产品.从头到尾走一遍,产品经理发现了问题,认为需要对功能进行比较大的修改.这时开发人员估计需要两天时间才能完成代码,但测试人员反对这样做,我们本来只有5天测试时间,加上这次新做的功能比较多.开发代码质量不高,验收测试已经很紧张.如果再延迟两天,测试没法完成.产品经理说,你们不是在用敏捷测试方法,应该测得很快,三天应该能完成测试工作啊! 什么是敏捷测试呢?敏捷测试当然不能简单地理解为测得更

敏捷测试模式之Scrum及其实践

一.    敏捷开发模式简介 敏捷是近年来软件研发领域很火的一个词,采用敏捷开发模式的研发团队是越来越多了,尤其是敏捷模式中的Scrum更是佼佼者大行其道,这表明敏捷模式确有其好处,能给企业带来效率的提升和成本的降低. 让我们看看大名鼎鼎的敏捷宣言,如下图所示: 大家对这段敏捷宣言都有自己的理解,我理解的其核心观点就是敏捷:能够快速,灵活的对变化做出响应,能够去掉繁文缛节,做到身轻如燕,专注于目标并在短期内产出成果物. 其实敏捷开发模式的提出和壮大也是被现实所迫.近年来软件需求变化越来越迅速,如

《敏捷测试的最佳实践》学习笔记

第一部分:敏捷的实质 敏捷开发有益于个人发展 就测试而言,测试人员就是好比一辆跑车里的唯一的驾驶员,项目就好比这辆跑车,测试人员需要及时修正行驶方向的偏差,确保这辆车在正确的道路上稳步前行.如果,测试人员没有具备足够的责任心和领导力,只是人云亦云,恐怕这种测试要与不要没什么分别,敏捷项目的质量也更让人担忧,而敏捷也就失去了原有的意义.因此,作为唯一的测试人员,他(她)将拥有对测试的所有权,计划.设计并且执行所有的测试工作.而也因为拥有了更多的主人翁精神,积极的工作热情,测试人员勇敢的面对工作中的

Testing - 敏捷测试

敏捷测试(Agile Testing) SM= Scrum Master PO= Product Owner PB= Product Backlog SB= Sprint Backlog  Scrum Team = Development Team + Scrum Master + Product Owner Development Team = team that develops the product backlog items (cross-functional team) PBI =

转:你不可不知的敏捷测试-定义,原则,方法和生命周期

随着软件开发过程复杂性的不断增加,客户希望得到新软件的期望周期也越来越短,所以软件测试方法需要不断的发展快速适应新的开发模式,敏捷测试的呼声越来越高,以下是CC先生对敏捷测试的一些思考. 敏捷测试的定义 在CC先生初次遇到敏捷的时候,认为敏捷只是有关于流程和工具,学习了一系列有关于敏捷的流程和自动化测试的工具,随着对敏捷理解的深入,越发能体会到敏捷不仅仅是关于流程和工具,它是关于人和文化的! 受到这种认识的启发,CC先生开始深入了解敏捷的历史 - 事实证明,人和文化一直是敏捷的核心.敏捷测试也是

从一个实例详解敏捷测试的最佳实践

简介: 敏捷软件开发是目前十分流行,并在业界逐步推广的软件开发模式.不同与传统的软件开发模式,敏捷开发模式有着自己鲜明的价值和方法.其中,敏捷测试部分也同以往的软件测试流程有所不同.这对测试人员提出了新的要求,带来了新的挑战.本文将结合一个软件项目实例,基于项目开发的不同阶段,详细介绍每个阶段的主要测试活动.文中将分析每个主要测试活动的前提条件和目标任务,并根据实例推荐最佳的解决方案. 第一部分:敏捷软件开发简介 敏捷软件开发(Agile Software Development)初起于九十年代

我在华为做敏捷测试的那些流程

一.开发和测试的通性困扰? 面对复杂性(客户):不断地修改计划.不断地增加预算.低劣的产品质量…… 面对复杂性(项目组成员):经常加班到深夜.提交的产品不合格…… 二.敏捷开发中的敏捷测试目的: 敏捷宣言 个体和交互比过程和工具更有价值:能工作的软件比全面的文档更有价值:顾客的协作比合同谈判更有价值:及时响应变更比遵循计划更有价值. 其核心是:以人为本,发挥人的主观能动性. 三.传统测试和华为敏捷测试区分: 3.1.传统的测试 1.守门员:质量保证者,阻止那些不可靠的.无效的.充满BUG的版本发

我的敏捷测试

很久以前就听说过敏捷测试,现任公司据说以前旧搞过敏捷开发,但后来不知道什么原因没有继续走下去了.而如今,测试部已经独立于研发的部门,目前是根据产品的规划和开发的提交计划来安排和开展测试工作.另外,现在的测试团队多多少少存在一些问题,因此想借此机会引入敏捷测试,改进和提高测试团队的测试效率和团队战斗力. 初步方案如下: 1.现在测试团队有10+人,根据项目的特性分成2个敏捷小组.每个小组设置小组长,然后由teamleader管理小组长,小组长管理组员. 2.使用QC管理工具的需求模板部分定制成测试