如何有效减少测试用例数目

测试过程中,测试人员经常需要将测试对象的各种输入参数进行组合之后进行测试。有时候,将各种输入参数进行组合,得到的测试用例数目将是非常庞大的。由于测试时间和成本的限制,无法对测试对象输入值的所有组合进行测试。下面是某个网站测试的要求:

  ------------案例描述:开始-------------

  某网站需要支持

  ● 不同的浏览器:IE5.0、IE5.5、IE6.0、Netscape6.0、Netscape6.1、Netscape7.0、Mozilla1.1和Opera7;

  ● 不同的插件:RealPlayer、MediaPlayer或者没有任何插件None;

  ● 不同的客户端操作系统:Windows95、Windows98、WindowsME、、WindowsNT、Windows2000和WindowsXP;

  ● 不同的Web服务器软件:IIS、Apache和WebLogic;

  ● 不同的服务器端操作系统:WindowsNT、Windows2000和Linux

  这种情况下,需要针对不同的组合进行测试:

  ● 8种浏览器

  ● 3种插件

  ● 6种客户端操作系统

  ● 3种Web服务器软件

  ● 3种服务器端操作系统

  如果考虑所有参数不同取值的组合,那么需要设计和执行的测试用例的数目是1296(8 x 3 x 6 x 3 x 3 = 1296)。

  ------------案例描述:结束-------------

  在软件测试过程中,这种类型的组合是非常普遍的。每种情形都可能有庞大的组合需要进行测试,假如不对它们进行测试,可能会存在较大的风险;而如果对所有组合进行测试,测试时间和资源又不允许。测试人员在面对这种情况的时候,可以采用以下几种常用的策略:

  ● 尝试测试所有输入的组合,延期项目,导致的后果可能是失去产品的市场。

  ● 选择一些容易设计和执行的测试用例,而忽略其是否能够提供产品质量的信息。

  ● 罗列所有的组合,并随机选择其中的子集进行测试。

  ● 采取特殊的测试技术,选择能发现大部分缺陷的子集进行测试。

   如果采用最后一个策略,那么使用结对测试技术是一个很好的选择。采用结对测试的技术,测试并不针对输入值的所有组合进行测试,而只是针对所有输入值的两 两组合。结对测试技术可以显著地减少测试用例的数目,同时保证较高的测试质量。下面是应用结对测试技术减少测试用例数目的例子:

  ● 假如软件系统有四个不同的输入参数,每个参数有3个不同的输入值,得到的完全组合数目是34即81。假如采用结对测试的技术,只需要9个测试用例即可覆盖所有参数的两两组合。

  ● 假如软件系统有13个不同的输入参数,每个参数有3个不同的输入值,得到的完全组合数目是313即1594323。假如采用结对测试的技术,只需要15个测试用例即可覆盖所有参数的两两组合。

  ● 假如软件系统有20个不同的输入参数,每个参数有10个不同的输入值,得到的完全组合数目是1020。假如采用结对测试的技术,只需要180个测试用例即可覆盖所有参数的两两组合。

  结对测试技术能够发现所有的单模式失效(Single-mode Fault)和双模式失效(Double-mode Fault)。但是,结对测试并不一定适合于发现测试对象中的多模式失效(Multimode Fault)。

  ● 单模式失效:失效是由单个参数引起的,只要针对所有独立参数进行测试,就能够发现该失效。

  ● 双模式缺陷:失效是由两个参数共同引起的,必须针对所有参数的两两组合进行测试,才能够确保发现此类缺陷。

  ● 多模式缺陷:失效是由三个或三个以上参数共同引起的,采用结对测试技术也可能发现多模式缺陷,但是不能保证测试的充分性。

  下面的几个数据可以说明结对测试技术的有效性:

  ● 根据AT&T在对其基于局域网的邮件系统进行的测试中,应用结对测试技术得到的1000条测试用例比其原有的1500条测试用例多发现了20%的缺陷,而测试工作量却减少了50%。

  ● National Institute of Standards and Technology在一项对医疗设备测试所进行的15年追踪中发现,有98%的软件缺陷可以通过结对测试技术发现。

  ● 根据对Mozilla网页浏览器的缺陷分析显示,76%的缺陷可以通过结对测试技术发现。

  具体的结对测试,可以通过不同的测试技术来得到,包括正交矩阵(Orthogonal Arrays)的方法、James Bach提供的Allpairs方法,也可以通过分类树方法。表1得到的测试用例是通过Allpairs方法实现的,详细的内容以及其他测试技术的实现方 法,可以参考《软件测试设计》原著。

图1 使用Allpairs得到的测试数据

  假如测试数据列表中的某个参数的取值以~开头,那么说明该参数取值已经有两两组合了。以~开头的参数取值,可以用该 参数的任何其他取值来代替,而不会影响其两两组合的覆盖率。因此,可以将以~开头的参数取值,用更关键的或者经常使用的参数值来代替。同时,使用 Allpairs得到的测试数据中,还罗列了所有的两两组合,并且统计了每个两两组合出现的次数,以及每个测试用例所包含的两两组合数。

  从上面的结果可以看到:通过采用合适的测试技术,测试用例数目原来需要1296个,而目前只需要48个进行覆盖,测 试用例数目减少了96%。前面已经提到了,结对测试可以发现所有的单失效模式和双失效模式的缺陷,而实践过程中,大部分的失效是单失效模式和双失效模式, 多失效模式占的比例很少。因此,通过采用合适的结对测试,可以大大降低测试用例数目,减少测试工作量,同时可以实现较好的测试覆盖率,保证测试质量。

本文出自seven的测试人生公众号最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-10-03 19:26:39

如何有效减少测试用例数目的相关文章

如何有效减少政府公款吃喝

北京 2012-04-23(中国商业电讯)--近日,国内知名企业Gensee展视互动分析指出,我国现在每年的公款吃喝数目十分巨大,公款吃喝在不少基层政府单位中存在,一些政府官员也曾在公开场合表明"接待开支确实不小".不少政府单位每年开会的数量较多,会后往往都会大吃大喝一顿,这是公款吃喝支出的重要来源. Gensee指出,如何减少公款吃喝应当从源头上控制.各级政府每年都会举行各种工作座谈会.现场会.研讨会和学习交流会等,现在基本都是采取现场会议的模式,如果利用网络互动直播技术将各种会议搬

快速一键部署测试环境,降低环境配置风险

环境部署是软件测试很重要的一个环节,但也是比较耗时间的环节,很多企业经常是项目立项后,开始邮件申请服务器资源,再三催促审批通过后,进行手工部署搭建环境,然后解决各种依赖和修改各种配置文件.如何有效减少环境部署流程,提升环境搭建效率,并且保证环境配置质量安全呢?针对这些需求,新型一站式研发效能平台,云效的环境管理系统提供了解决方案. 首先,解决测试服务器资源管理的问题. 云效平台统一对测试服务器资源(包含:测试服务器.帐号)进行时间片管理(按时间进行申请占用的方式).企业在后台申请机器信息,点击I

测试十年-我难以逾越的困惑和痛苦和思考

很久没写文章了,之前的测试三年,测试六年都写了blog来记录自己的测试生涯和思考,这次测试10年肯定不会错过了,当然了,YY比较多,干货也不多,反正纪念下,或许我很难写测试15年的文章了.大家有任何问题,欢迎讨论,欢迎吐槽.   --- 10年测试的困惑和痛苦 转眼间参加工作10年了,也就是意味着干软件测试10年了,经历过3家公司,都有一些感悟,也难以相信我能在淘宝坚持了这么久,7年了,人家都说七年一痒,我的确是有一点痒了,但是没那么大,不管怎么样,还是会做一些改变吧,7月份初我会离开淘宝BU,

以测试为核心的软件开发过程

摘要:软件项目规模越来越大,开发团队人员越来越多,人员增加带来管理成本上升,于是引入ISO9000.CMM,但最后发现它们实施难度相当大.于是我们介绍一套行之有效的测试控制方法,它能够有效对软件项目开发进行控制. 关键词:软件测试:软件开发:软件项目管理 1.引言 TC(测试控制方法)是指以测试为核心控制软件项目开发过程的方法,它包括完整的规范TC 系统及其相关管理理论TC 理论.主要完成软件开发中开发流程的管控.软件测试.开发绩效评价.持续改进管控质量等功能. ● 我们先来看一看软件项目开发中

降低测试难度及成本 加速物联网普及

物联网(IoT)应用范畴广泛,涵盖无线通信.车用市场.智能家居.穿戴式设备及医疗等领域,而应对不同需求,用于物联网的各种通讯及网络技术也就不断推陈出新,或说是新旧并存,这就导致测试复杂度的增加,甚至是测试成本的提高. 针对这些问题,测量仪器业者多以开放式架构下的升级更新来支持各种技术测试需求,着重于测试功能的整合以及与法规的同步,并致力于将仪器专业知识转变成易于操作且价格合理的方案,协助客户加速测试速度,进而缩短上市时间. 物联网的成长速度相当惊人,Gartner预估物联网设备数量在2020年将

Android和iOS 测试五个最好的开源自动化工具_Android

       自动化测试在产品测试上有着非常重要的作用.实现测试自动化有多种积极的方式,包括最大限度地减少测试执行时间:在关键的发布阶段,用更少的时间确保更大的覆盖范围:在产品开发阶段,可靠又重复性地运行以确保没有引进回归问题.最大限度地减少重复性回归测试循环时的人为错误和疏忽的风险. 在市场上有很多可用的工具,开源的或要付费的.虽然付费和开源工具各有利弊,但是后者在自动化测试社区得到了广泛的应用.根据项目需求来选择合适的自动化工具是非常棘手的. 下面介绍5个最佳的iOS和Android开源自动

利用FindBugs减少代码中的bug数学习

FindBugs 作用 开发人员在开发了一部分代码后,可以使用FindBugs进行代码缺陷的检查.提高代码的质量,同时也可以减少测试人员给你报的bug数. 静态分析工具承诺无需开发人员费劲就能找出代码中已有的缺陷.当然,如果有多年的编写经验,就会知道这些承诺并不是一定能兑现. 代码缺陷分类 根据缺陷的性质,大致可以分为下列几类 ·Bad practice  不好的做法·Correctness   可能有不正确·Dodgy code     糟糕的代码·Experimental  实验·Inter

企业Web应用中的敏捷测试和瀑布测试

简介 同是企业WEB应用程序项目,一个用敏捷,一个用瀑布流程,它们的测试策略会有何不同?在二者中,测试的关注点都在于告诉业务客户这个应用程序做了哪些事情,同样也要消除应用程序作为产品交付以后的失败风险.它们的主要区别不是测试本身,而是何时执行测试.由谁执行测试.测试的每个阶段都可以在系统就绪后随时开始,无须等待前一个测试阶段完成. 从未涉足敏捷项目,或是刚启动某个敏捷项目并在寻找指导建议的读者都可以看看这篇文章,它正是为你们而写.文中的信息虽并非笔者新创,但也是收集整理的结果,希望这些信息能帮助

测试是一件浪费时间的事吗?

让我们详细地说明 作为开发人员,我们都知道我们应该测试我们的代码.我们应该写单元测试,但这也通常是我们发现没时间时跳过的第一步. 作为团队的领导者或者管理者我们都知道测试是必要的,但是当截止日期临近的时候,我们倾向于减少测试,而把更多的重点放到编码上. 这样看测试领域似乎很紧张.我们都知道测试对我们是有利的,但是一旦项目面临压力时我们就不再测试了. 我们为什么测试? Edsger W Dijkstra 说过:测试可以用来找到显式的缺陷(bug),但是无法显示潜伏的软件缺陷(bug). 这意味着测