什么样的测试用例为“好的”用例?

如题所述

作为测试人员,设计测试用例是干活的第二步(第一步当然是了解测试对象嘿嘿),这一步做得好与否,对后续工作起着决定作用,那么如何评价一个测试用例的好坏,或者说,设计的成功与否呢,本文大概讨论一下,抛砖引玉吧,记录在这里,看看是不是可以作为一次团队讨论的话题。
  在此之前,我们需要明确测试工程师的工作原则:用最小的成本找出最多的问题。
  1、用例覆盖程度
  毫无疑问,这一点应该是最重要的,无需多说,覆盖率最大化是一套测试用例的最重要评价标准,如果漏测就杯具了。
  2、用例是否已经达到工作量最小化
  在满足用例覆盖程度最大化的前提下,应该尽量减小执行用例所需要的工作量。这些方面的方法有不少,如条件覆盖,分支覆盖,正交覆盖等方法。面对不同的测试对象,也有不同的方法来保证:对于网页背后的php逻辑,可以通过在网页上测试后,用一些工具比如xdebug来统计代码覆盖率;对于向外提供接口的server,采用的方式就是分析在外面暴露的接口设计用例,大致的通过接口参数来估计一下分支判断的情况。
  3、用例的分类以及描述是否足够清晰
  用例的分类,在这里是指相同类型的用例是否放在一起了。例如:接口类的用例,参数的取值范围是1-3,但是现在却传入4;数据类用例,状态机现在位于状态2,却要求状态跳转到无法到达的4;逻辑类用例,正常功能的产出等。将相同类型的用例放在一起,有助于理清思路,清楚了解用例设计是否完备。
  用例的描述,是指描述的清晰程度是否能够形成文档。例如上面参数取值范围的例子,用例这样写:“传入错误的值”或者“传入非1-3的值”,明显没有写成“传入值4”有效。这与写程序一样,总是写闭区间的范围而不是开区间。
  4、用例是否表明了测试目的
  写明用例的测试目的,对文档的易于理解性和工作交接的好处不言而喻,现代软件工程不可能只有一个人在做事情,项目于人员的变动也是难免的。在过程中留下足够的信息,可以在后续工作提高很多效率。
  5、测试用例的易于维护性
  如果被测对象有所升级,测试用例的说明或者脚本是不是容易维护呢?例如在有状态机的情况下,测试用例之间是相互依赖的(即需要一定的执行顺序),这样被依赖的用例修改后,后端不需要同步根据修改。而如果用例之间没有相互依赖关系(如用例是自己造的数据,不是依赖于前端的产出),可能一旦有变化,就需要修改这两个。当然,这两种情况不能绝对的说哪种好,是需要看实际使用时候的情况进行取舍的。不过,通过一些系统性的工具支持,也会出现一种做法绝对性的好于另外一种的情况,情况很多,做法也有很多,在这里就不多说了。
  说了这么多,其实这个第二步,还是严重依赖于第一步的,如果对测试对象的需求,实现等都不了解,设计用例也就无从谈起了。
以上五点就是评判一个测试用例是否是好的标准,如有帮助,望采纳谢谢
温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-04-19

这个问题之前测试业界的一位大神“茹炳晟”曾经专门谈过,在这里再给大家总结一下。

在讨论具体什么是“好的”测试用例之前,咱们必须明确定义什么是“好”,否则毫无意义。其实这是一个看似简单实则难以回答的问题,可能很难有非常标准的答案。

在测试的业界,曾经有很多关于“好的”测试用例的定义,比如“发现了软件缺陷的测试用例就是好的用例”,那我可能会反问你一句:比如一个用例之前发现了一个缺陷,但这个缺陷被关闭了,难道这个用例就不是好用例了?或者又有人说,“发现软件缺陷的可能性比较大的测试用例就是好用例”,那这个可能性究竟多大,该怎么来衡量?还有一种常见的说法是,“发现至今未发现的缺陷就是好用例”,那么如何评估是否还存在未被发现的缺陷?如果软件中根本就没有错误了呢?

如果咱们都按照这种思路来去寻找所谓的“好的”测试用例,那其实我们的思路就错了。这就有点类似于“傻子吃烧饼”,连续吃5个吃不饱,吃第6个吃饱了,他后悔了,早知道我就不吃前5个了,直接吃第6个就好了。其实,大家都明白,这6个烧饼是一个整体,少了哪一个,都没法达到最终这个效果,我们无法找到吃一个就能饱的“好”烧饼。

对于测试用例而言,其实也是同样的道理,“好的”测试用例一定是一个完备的集合,它能够覆盖所有业务逻辑中定义的约束和限制,确保重要的业务逻辑都能被测到,而跟是否发现缺陷是无关的。

如果我们把被测软件看做是一个池塘,缺陷就是这个池塘中的鱼,那建立测试用例集的过程就像是在编织一张捕鱼网,“好的”测试用例集就是一张能够覆盖整个池塘的大渔网,只要池塘里面有鱼,这个大渔网就一定能把鱼给捞上来。如果渔网本身是完整的且合格的,那么捞不到鱼,就证明池塘中没有鱼,而渔网的好坏与池塘中是否有鱼无关。


基本道理大家明白了,那“好的”测试用例必须具备哪些特征呢?

一个"好的"测试用例,必须具备以下三个特征:

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

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

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

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

那么如何才能真正设计出“好的”测试用例呢?

这就要求我们在具体的用例设计时,首先需要搞清楚每一个业务需求所对应的多个软件功能需求点,然后分析出每个软件功能需求点对应的多个测试需求点,最后再针对每个测试需求点设计用例。

这其中有几个关键点,

1. 从软件功能需求出发,全面地、无遗漏地识别出测试需求是至关重要的,这将直接关系到用例的覆盖率。比如,如果你没有识别出用户登陆功能的安全性测试需求,那么后续设计的用例就完全不会涉及安全性,最终造成重要的测试漏洞。

2. 对于识别出的每个测试需求点,需要综合运用等价类、边界值和错误推测法来全面地设计用例。

3. 只有深入理解被测软件的架构,才能设计出“有的放矢”的测试用例集,去发现系统边界及系统集成上的潜在缺陷。

4. 必须深入理解被测软件的设计与实现细节,深入理解软件内部的处理逻辑。

5. 需要引入需求覆盖率和代码覆盖率来衡量测试执行的完备性,并以此为依据来找出遗漏的测试点。

相信以上总结大家对于什么是好的测试用例,已经有了很清晰的认识,这里就不跟大家啰嗦了,如果还有这方面的疑问,欢迎私聊,研讨~

第2个回答  2019-10-10
简单的概括来说:
首先,“好的”测试用例应该是一个完备的集合,能够覆盖所有等价类以及各种边界值,而不是单纯以能否发现软件缺陷来作为衡量测试用例好坏的标准。
其次,测试用例的设计方法有很多种,但综合运用等价类划分、边界值分析和错误推测方法,基本就可以满足绝大多数软件测试用例设计的需求。
还有就是,在设计“好的”测试用例时,需要从软件功能需求出发,全面地、无遗漏地识别出测试需求是至关重要的。最后,如果想设计一个“好的”测试用例,也要求测试人员能够深入理解被测软件的架构设计,熟知软件内部的处理逻辑。具体内容可以从黑马程序员获取资料进行进一步了解。本回答被提问者采纳
相似回答