你真的懂测试吗?从设计好一个“好的”测试用例谈起

2018-08-20   出处:软件测试资源站  作/译者:茹炳晟  

茹炳晟,有着16年的测试经验,他沉淀出来的内容,着实让人有种茅塞顿开的感觉。从最简单的“用户登陆”、设计好的测试用例到后面繁琐的“如何在大型项目中设计GUI自动化测试策略”、“如何设计测试执行环境架构”等等,他都能深入浅出地向你娓娓道来。


真正厉害的大神,不是自己牛逼,而是能把其他人说懂并觉得自己也能做好。


分享下他专栏其中的一篇文章:“如何设计出一个好的测试用例?”,会重新冲刷你对“好的”测试用例的定义。


不要以为“发现了软件缺陷的测试用例就是好的用例”;

也不要以为“发现软件缺陷可能性大的测试用例就是好用例”;

更不要以为““发现至今未被发现的软件缺陷的测试用例就是好用例”。




                                                               这是根据文章内容做的Xmind

                                                         Xmind也是整理探索式测试思路很好的工具



什么才算是“好的”测试用例?


在正式开始讨论之前,我先跟你聊聊,什么才是“好的”测试用例,这个“好”又应该体现在哪些方面。这是一个看似简单实则难以回答的问题,即使深入思考后,也很难有非常标准的答案。


通常,你的第一反应很可能会是“发现了软件缺陷的测试用例就是好的用例”,我可能会反问你“如果说测试用例发现了缺陷就是好用例,那么在该缺陷被修复后,同样的用例难道就不是好用例了吗?”。


你可能还会说“发现软件缺陷可能性大的测试用例就是好用例”,这话看起来还是蛮有道理的,但是我同样会反问你“你打算用什么方法来量化测试用例发现缺陷的可能性?”。


类似地,你可能还会说“发现至今未被发现的软件缺陷的测试用例就是好用例”,那么我想问你的是:如何评估是否还存在未被发现的缺陷?如果软件中根本就没有错误了呢?


其实,是你定义“好的”测试用例的思路错了,这就有点像“傻子吃烧饼”,连吃五个不饱,吃完第六个终于饱了,于是他说:早知道吃了第六个就会饱,何必吃前面五个呢。细想,他吃的六个烧饼其实是一个整体,一起吃下去才会饱,而你无法找到吃一个就能饱的“好”烧饼。


对于测试用例其实也是同样的道理,“好的”测试用例一定是一个完备的集合,它能够覆盖所有等价类以及各种边界值,而跟能否发现缺陷无关。


我举一个“池塘捕鱼”的例子,可以帮你更好地理解什么是“好的”测试用例。


如果把被测试软件看作一个池塘,软件缺陷是池塘中的鱼,建立测试用例集的过程就像是在编织一张捕渔网。“好的”测试用例集就是一张能够覆盖整个池塘的大渔网,只要池塘里有鱼,这个大渔网就一定能把鱼给捞上来。


如果渔网本身是完整的且合格的,那么捞不到鱼,就证明池塘中没有鱼,而渔网的好坏与池塘中是否有鱼无关。



“好的”测试用例必须具备哪些特征?


一个“好的”测试用例,必须具备以下三个特征。

  1. 整体完备性:“好的”测试用例一定是一个完备的整体,是有效测试用例组成的集合,能够完全覆盖测试需求。

  1. 等价类划分的准确性:指的是对于每个等价类都能保证只要其中一个输入测试通过,其他输入也一定测试通过。

  1. 等价类集合的完备性:需要保证所有可能的边界值和边界条件都已经正确识别。

做到了以上三点,就可以肯定测试是充分且完备的,即做到了完整的测试需求覆盖。



三种最常用的测试用例设计方法


明白了“好的”测试用例的内涵和外延后,我再回过头来给你讲讲,为了能够设计出“好的”测试用例,你通常都要使用哪些设计方法。


从理论层面来讲,设计用例的方法有很多,如果你去翻阅测试图书或网络教程,会发现一堆让人眼花缭乱的测试方法,比如等价类划分法、边界值分析法、错误推测方法、因果图方法、判定表驱动分析法、正交实验设计方法、功能图分析方法、场景设计方法、形式化方法、扩展有限状态机方法等等,但是从软件企业实际的工程实践来讲,真正具有实用价值并且常用的只有前三种方法。


当然,对于那些与人的生命安全直接或间接相关的软件,比如飞行控制、轨道交通的列车控制、医疗检测相关的软件或者系统,由于需要达到几近变态的测试覆盖率要求,会采用更多的测试设计方法。但对大多数的软件测试而言,综合使用等价类划分、边界值分析和错误推测这三大类方法就足够了


接下来,我会结合实际的例子,给你解释一下这三类方法的核心概念以及在使用时需要注意的问题。


1. 等价类划分方法

从上一篇文章中你已经知道了,等价类中任意一个输入数据对于揭露程序中潜在错误都具有同等效果。后续我们只要从每个等价类中任意选取一个值进行测试,就可以用少量具有代表性的测试输入取得较好的测试覆盖结果


现在,我给你看一个具体的例子:学生信息系统中有一个“考试成绩”的输入项,成绩的取值范围是0~100之间的整数,考试成绩及格的分数线是60。


为了测试这个输入项,显然不可能用0~100的每一个数去测试。通过需求描述可以知道,输入0~59之间的任意整数,以及输入60~100之间的任意整数,去验证和揭露输入框的潜在缺陷可以看做是等价的。


那么这就可以在0~59和60~100之间各随机抽取一个整数来进行验证。这样的设计就构成了所谓的“有效等价类”。


你不要觉得进行到这里,已经完成了等价类划分的工作,因为等价类划分方法的另一个关键点是要找出所有“无效等价类”。显然,如果输入的成绩是负数,或者是大于100的数等都构成了“无效等价类”。


在考虑了无效等价类后,最终设计的测试用例为:

  • 有效等价类1:0~59之间的任意整数;

  • 有效等价类2:59~100之间的任意整数;

  • 无效等价类1:小于0的负数;

  • 无效等价类2:大于100的整数;

  • 无效等价类3:0~100之间的任何浮点数;

  • 无效等价类4:其他任意非数字字符。


之后的内容,茹炳晟深入讲解了“2.边界值分析方法”、“3.错误推测方法”,“如何才能设计出好的测试用例?”及“用例设计的其他经验”,真的值得一读。但由于篇幅的限制,我就不分享太多了,大家可以扫描下方的二维码进入专栏,可试读《软件测试52讲》的前三篇文章。即使不购买,前三篇文章也值得你去看一看。

为什么要推荐这个专栏?


1. 认可《极客时间》这款产品,上面的专栏,普遍质量很高,干货满满 。

2. 这是测试行业的第一个专栏,而且是好朋友「茹炳晟」大牛来讲,必须推荐 。

3. 这个专题,吻合软件测试从业者综合能力提升,必须 推荐 。

4. 初心不改,一路前行(“把自己的一些测试实践推广出去”本来打算找「茹炳晟」好好介绍这个专栏的,他就给我这句话,感动)

5. 好的内容,值得推荐给需要的人 。而且这个专栏的每篇文章留言互动量都是极高的。



“软件测试资源站”的粉丝专属福利!


1. 即日起至8月18日24点:《软件测试52讲》限时团购优惠价79元/人(原价99元),扫描下图二维码或点击阅读原文

2. 订阅专栏后,每邀请一位好友订阅专栏,立享24元返现,上不封顶, 极客时间App/服务号立即提现。 



79元,52篇好文,点击“阅读原文”,支持原创,支持极客时间上测试人最应该看的专栏。


赶紧了,这福利只有2天了

【声明】:上文为本站编辑转载,文章版权归原作者所有。文章内容为作者个人观点,本站只提供转载参考,目的在于传递更多专业信息,普惠测试相关从业者,开源分享,推动行业交流和进步。如涉及作品内容、版权和其它问题,请原作者及时与本站联系,我们将第一时间进行处理。本站拥有对此声明的最终解释权!
0 



欢迎给测试窝投稿或参与内容翻译工作,请邮件至editors@testwo.com。也欢迎大家通过新浪微博(@测试窝)或微信公众号(测试窝)关注我们,并与我们的编辑和其他窝友交流。
222°|2228 人阅读|0 条评论

登录 后发表评论
最新文章