测试用例设计的原则

测试用例设计的最基本要求:覆盖住所要测试的功能。这是在基本不过的要求了,但别看只是简单的一句话,要能够达到切实覆盖全面,需要对被测试产品功能的全面了解、明确测试范围(特别是要明确哪些是不需要测试的)、具备基本的测试技术(如:等价类划分等)等。那么满足了上述这条要求是不是设计出来的测试用例就是好的测试用例了呢?答案:在理论上是,但在实际工程中还远远不是。之所以理论和实际会有这样的差别,是因为在理论上不要考虑的东东,而在实际工程中是不得不考虑的-成本。这里的成本包括:测试计划成本、测试执行成本、自动化测试用例、测试自动化成本,测试分析成本,以及测试实现技术局限、测试环境的Bug、人为因素和不可预测的随机因素等引入的附加成本等。

由于成本因素的介入,决定了工程中设计好的测试用例原则不只有“覆盖住所要测试的功能”这一条,下面是我根据自己的工作经验总结出的其它四条原则,在这里抛砖引玉,希望大家拍砖和指正。这些原则特别是针对那些需要被自动化,并且是要被经常执行的测试用例。

1、单个用例覆盖最小化原则。

这条原则是所有这四条原则中的”老大“,也是在工程中最容易被忘记和忽略的,它或多或少的都影响到其它几条原则。下面举个例子来介绍,假如要测试一个功能A,它有三个子功能点A1,A2和A3,可以有下面两种方法来设计测试用例:

  ●方法1:用一个测试用例覆盖三个子功能-Test_A1_A2_A3,

  ●方法2:用三个单独的用例分别来覆盖三个子功能-Test_A1,Test_A2,Test_A3

方法1适用于规模较小的工程,但凡是稍微有点儿规模和质量要求的项目,方法2则是更好的选择,因为它具有如下的优点:

  ●测试用例的覆盖边界定义更清晰

  ●测试结果对产品问题的指向性更强

  ●测试用例间的耦合度最低,彼此之间的干扰也就越低

上述这些优点所能带来直接好处是,测试用例的调试、分析和维护成本最低。每个测试用例应该尽可能的简单,只验证你所要验证的内容,不要“搂草打兔子”捎带着把啥啥啥啥都带进来,这样只会增加测试执行阶段的负担和风险。DavidAstels在他的著作《TestDrivenDevelopment:APracticalGuide》曾这样描述,最好一个测试用例只有一个Assert语句。此外,覆盖功能点简单明确的测试用例,也便于组合生成新的测试,在VisualStudio中就引入了OrderedTest的概念。

2、测试用例替代产品文档功能原则。

通常我们会在开发的初始阶段(Scrum每个Sprint)用Word文档或者OneNote的形式记录产品的需求,功能描述、功能的细节等信息,以描述我们将要实现产品功能样貌,便于团队进行交流、细化并在团队内达成对产品功能在具体细节上的认同和共识。假设我们在这个是达成的共识并描述的是功能A,随着产品开发深入,团队会对产品的功能有更新的认识,产品功能也会被更具体细化,在一个迭代或者Sprint结束的时候最终实现的功能很可能是A+。如此往复,在不断倾听和吸收用户的反馈,多个迭代过后,原本被描述为A的功能很可能最终变为了Z。这是时候再去看看曾经的Word文档和OneNote页面,它们仍然记录的是A。之所以会这样,是因为很少有人会去以及能够去不断地去更新那些文档,以准确地反映出功能当前准确的状态。不是不想去做,而是实在很难!

那么就没有什么东西能够准确描述产品的功能细节了吗?答案是:当然有,那就是产品代码和测试用例。产品代码实现了产品动能,它当然肯定准确描述了产品的动能,但是由于各种编程技术,如:面向对象、抽象技术、设计模式、资源文件等等,使得产品代码本身很难简单地就能读懂,往往是在知道产品功能的前提下去读代码,而不是反过来看代码来了解功能。那么就只有测试用例了,测试也应该忠实反映了产品功能的,否则的话测试用例就会执行失败。所以,我们对测试用例的理解应该再上升到另一个高度,它应该是能够扮演产品描述文档的功能。这就要求我们编写的测试用例足够详细、测试用例的组织要调理和主次,这些单靠Word、Excel或者OneNote这样通用的工具是远远无法完成的,需要更多专用的测试用例管理工具来辅助,例如VisualStudio2010引入MicrosoftTestManager。

此外,对于自动化测试用例(无论是API或者UI级别的)而言,代码在编写上应该有别产品代码编写风格,可读性和描述性应该是重点考虑的内容。在测试代码中,当然可以引入面向对象、设计模式等优秀的设计思想,但是一定要适度使用,往往面向过程的编码方式更利于组织、阅读和描述。

3、单次投入成本和多次投入成本原则。

与其说这是一条评判测试用例的原则,不如说它是一条思考问题的思维角度和原则。成本永远是任何项目进行决策时所要考虑的首要因素,项目中的测试也是如此,对成本的考虑也应该客观和全面的体现在测试的设计、执行和维护的整个阶段中。当你在测试中遇到一些左右为难的问题需要决策时,尝试着从成本角度去分析一下,也许会对你的决策有所帮助。

测试中的成本按其时间跨度可以分为:单次投入成本和多次投入成本。例如:编写测试用例可以看作是单次投入成本,因为编写测试用例一般是在测试的计划阶段进行(Scrum每个Sprint的开始阶段)的,虽然后期会有小的改动,但绝大多数是在一开始的设计阶段就基本上成型了;自动化测试用例也是如此,它也属于是一次性投入;测试用例(包括:手工和自动化测试用例)的执行则是多次投入成本,因为每出一个新版本Build时都要执行所有的测试用例(或者进行BVT测试仅执行高优先级的测试用例)、分析测试结果、调试失败测试用例、确定测试用例的失败原因(产品缺陷、测试用例缺陷、测试框架缺陷还是随机问题导致了测试用例的失败),以验证该版本整体质量是否达到了指定的标准。

之所有要引入单次和多次成本的思考,是希望能够通过区分测试中不同活动对测试成本的影响,从而进行帮助我们合理布局在不同阶段的投入和做出正确的决策,以保证在有限可负担测试成本的前提下,最大限度地有效开展测试工作。例如,当我们意识到了,测试用例的设计和自动化属于是一次性投入,而测试用例的执行则是反复多次的投入时,就应该积极思考如何能够提高需要反复投入的测试执行的效率,在一次投入和需要多次活动需要平衡时,优先考虑多次投入活动的效率,其实这里是有很多工作可以做。

例如:第一条原则-单个用例覆盖最小化原则-就是一个很好的例子,测试A功能的3个功能点A1,A2和A3,从表面上看用Test_A1_A2_A3这一个用例在设计和自动化实现时最简单的,但它在反复执行阶段会带来很多的问题:

  ●首先,这样的用例的失败分析相对复杂,你需要确认到底是哪一个功能点造成了测试失败;

  ●其次,自动化用例的调试更为复杂,如果是A3功能点的问题,你仍需要不断地走过A1和A2,然后才能到达A3,这增加了调试时间和复杂度;

  ●第三,步骤多的手工测试用例增加了手工执行的不确定性,步骤多的自动化用例增加了其自动执行的失败可能性,特别是那些基于UI自动化技术的用例;

  ●第四,(Lastbutnotleast)将不相关功能点耦合到一起,降低了今早发现产品回归缺陷的可能性,具体来说,如果Test_A1_A2_A3是按照A1->A2->A3的顺序来执行的,当A1存在问题时整个测试用例就失败了,而A2和A3并未被测试执行到。如果此时A1由于某些原因需要很长时间才能修复,则Test_A1_A2_A3始终被看作是因为A1的问题而失败的,而A2和A3则始终是没有被覆盖到,这里存在潜在的危险和漏洞。当你在产品就要发布前修复了A1,并理所当然地认为Test_A1_A2_A3测试应该通过时,A2和A3的问题就会在这时爆发出来,你不得不继续加班修复A2和A3的问题。不是危言耸听,当A2/A3的代码与A1的修复相关时,当你有很多如此设计的测试用例时,问题可能会更糟……,真的!:(

综上所述,Test_A1_A2_A3这样的设计,减少地仅是一次性设计和自动化的投入,增加地却是需要多次投入的测试执行的负担和风险,所以需要决策时(事实上这种决策是经常发生的,尤其是在设计测试用例时)选择Test_A1_A2_A3还是Test_A1、Test_A2和Test_A3时,请务必要考虑投入的代价。

4、使测试结果分析和调试最简单化原则。

这条原则是实际上是上一条-单次投入成本和多次投入成本原则-针对自动化测试用例的扩展和延续。在编写自动化测试代码时,要重点考虑如何使得测试结果分析和测试调试更为简单,包括:用例日志、调试辅助信息输出等。因为测试用例的执行属于多次投入,测试人员要经常地去分析测试结果、调试测试用例,在这部分活动上的投入是相当可观的。有时候,测试框架提功能的一些辅助API等就可以帮助很好实现这个原则。例如:CodedUITest就提供了类似的API,详见-VS2010测试功能学习(18)–CodedUITest三个必知的函数,来辅助基于CodedUI框架实现的自动化测试用例有更好的调试体验。

测试理论为测试工作指明了大的前进方向,在实际工程中还需要我们不断地“活化”这些理论,使理论和实践更好的契合在一起。在我看来,软件工程项目不论成败和好坏,对我们每个参与者都是无比宝贵的。作为有心人,从中我们体会到很多书本上不曾提到过的东西,只要不断地去观察、体会和总结,你会有更多自己的认识、理解和发现。有很多人写书称赞,代码之美、测试之美,其实工程项目也是很美,只是看你能不能更客观地去看待它

原文地址:https://www.cnblogs.com/yinrw/p/9449506.html

时间: 2024-08-03 14:44:12

测试用例设计的原则的相关文章

自动化测试用例设计三原则

今天总结一下在做自动化测试中测试用例设计的一些建议,总结为三原则: 1. 保持Case之间的独立性 case独立性就是能够独立运行,当我们有随机的跑其中某个Case或乱序的跑这些Cases时,测试的结果都应该是准确的. 比如在执行过程中用例的运行环境取决于其他测试用例的执行状态,那么,其中的测试用例不能复用时,与之相关的测试用例的可复用性也不复存在. 有时候我们碰到在本地没问题,但是在server上跑有问题,大概率就是这个原因导致的. 2. 提高Case执行效率 测试人员能在最短的时间内执行测试

测试用例设计白皮书--边界值分析方法

一.方法简介1.定义:边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法.通常边界值分析法是作为对等价类划分法的补充,这种情况下,其测试用例来自等价类的边界. 2.与等价划分的区别  1)边界值分析不是从某等价类中随便挑一个作为代表,而是使这个等价类的每个边界都要作为测试条件.  2)边界值分析不仅考虑输入条件,还要考虑输出空间产生的测试情况. 3.边界值分析方法的考虑:  长期的测试工作经验告诉我们,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部.因此针对

转:黑盒测试用例设计方法

1. 概述 黑盒测试用例设计方法包括等价类划分法.边界值分析法.错误推测法.因果图法.判定表驱动法.正交试验设计法.功能图法等. 2. 等价类划分法 2.1.              概念 等价类划分法是把程序的输入域划分成若干部分(子集),然后从每个部分中选取少数代表性数据作为测试用例.每一类的代表性数据在测试中的作用等价于这一类中的其他值. 2.2.              等价类划分法的应用 等价类是指某个输入域的子集合.在该子集合中,各个输入数据对于揭露程序中的错误都是等效的,并合理

软件测试实战 - 测试用例设计方法

一.测试分析 测试需求来源 开发需求DR:协议标准需求PR:用户需求UR:案例库需求LR:竞争需求CR:继承需求SR: 2. 测试项分析步骤 a. 为分析的测试项编号:b. 注明来源:开发文档/法律条款/案例库编号c. 整合测试项:删除合并重复测试项:大的测试项分解为测试子项:d. 分析测试项之间的关系: 3. 测试分析方法 a. 质量模型分析法:功能测试项.效率测试项.可靠性.易用性.可维护性.可移植性:b. 用户场景分析法:游客.普通用户.VIP用户.管理员用户等,不同角色权限不同,测试点也

测试用例设计(个人学习用20170312-0319)

测试用例设计 (个人学习用20170312-0319) 测试用例设计方法 11种 1.等价类 2.边界值 3.判定表 4.正交试验法 5.流程分析法 6.状态迁移图法 7.输入域覆盖法 8.输出域覆盖法 9.因果图 10.异常分析法 11.错误猜测法 等价类,边界值(一般组成等价类边界值表) 等价类:它将程序所有可能的输入数据(有效的和无效的)划分成若干个等价类.然后从每个部分中选取具有代表性的数据当做测试用例进行合理的分类,测试用例由有效等价类和无效等价类的代表组成,从而保证测试用例具有完整性

更好的测试用例设计

? Nicolaas Kotze是一个有着离奇扭曲幽默感(这种幽默感讽刺地与墨菲定律及对详细解释质量是如何被感知的人类行为的理解很好结合了起来)的自信的现实主义悲观者.他在英国伦敦时开始接触游戏行业的测试,并头冠不少AAA级称号. 他的测试职业生涯正式开始于回到南非测试(使用用来自荷兰客户公共服务交付领域的谷歌地图的)GIS软件系统,再后来他转移到繁忙的零售信贷和金融服务业.他选择测试为职业道路是因为它使人们能够将创造性思维融入常规程序或规定中,且仍有"打破"东西的令人振奋的快感.测试

1.3测试用例设计方法

测试用例设计方法(黑盒) 1.等价类,划分为有效等价类和无效等价类 1.1.按数据范围划分 有效:0.01-200 无效:小于0.01大于200 1.2.按数据类型划分 有效:数字 无效:非数字字符,中文等 1.3.设计原则 对于有效等价类,应尽可能多的覆盖尚未被覆盖的有效等价类,知道有所都被覆盖为止. 对于无效等价类,每个无效等价类就是一条测试用例 例如: 2.边界值(为了补充等价类的用例) 比如微信红包范围是0.01-200 那么测试用例有: 0 0.009 0.01 0.02 199 20

软件测试用例设计 0620

入职基础培训课程系列 软件测试概述 软件测试用例设计 软件测试缺陷管理 软件系统测试 培训目标:1 明确测试用例在软件中的重要性 2 掌握测试用例设计的基本思路 3 了解并熟悉测试用例的要素和编写方法 课程内容: 1基本定义 要素和作用概念 2测试用例设计过程 3测试用例设计思路实例分析 用户登录:性能测试 安全性测试 文档测试 功能测试 界面测试 兼容性测试 什么是用例:用例是输入输出对,输出描述的是对输入数据的预期结果 用例是一组操作序列与数据的集合,这个集合通常具有业务或操作上的意义,一般

黑盒测试用例设计技术--边界值分析法

本文通过案例的形式,详细讲解黑盒测试用例设计技术中的边界值分析法. 无数的测试实践表明,大量的故障往往发生在输入定义域或输出值域的边界上,而不是在其内部.因此,针对各种边界情况设计测试用例,通常会取得很好的测试效果.边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法,通常作为对等价类划分法的补充,其测试用例来自等价类的边界.边界值分析使用与等价类划分法相同的划分,只是边界值分析假定错误更多地存在于划分的边界上,因此在等价类的边界上以及两侧的情况设计测试用例. 如果你对等价类划分法还不