浅析软件测试用例的优先级

来源:网络发布时间:2010-04-30

  从未有足够的时间做所有我们需要做的事情,这是在软件项目,尤其在测试中的一个普通的话题。假使你在可用的有限时间内,你如何知道你的测试工作做的最好?你知道当应用程序发布时,总会有些遗漏的缺陷没有被发现。对于测试而言,目标是通过改进产品质量使风险减到最小,并且这可以部分的通过建造一套具体的测试用例来将应用程序按照它的速度完成等方法实现。
  测试用例的定义:
  1、为一个为特定目标而开发一组测试输入,执行条件和期望结果,例如测试某个程序路径或核实是否满足某个特定的需求。
  2、指定输入,预期结果和一组测试项的执行条件的文档 (IEEE Std 829-1983)。
  当然,你将发现在项目的生命周期里的每一个应用程序的版本上执行你全部的测试用例是很困难的。但是你将如何知道哪个测试用例必须在每一个版本中执行,什么应该被执行,同时如果你有时间的话,什么又可以被执行?
  给你的测试用例划分优先级别
  你的应用程序不需要十全十美,但它必须迎合你目标用户的需求和期望。为了了解你项目的期望,你需要确定什么是应用程序中最重要的,目标和风险又是什么。
  Sue Bartlett在“How to Find the Level of Quality Your Sponsor Wants”一文中详细的讨论了这个问题,她在文中注解到:“当我们在详细的计划,设计或编码之前沟通质量目标时,我们有一个更好的机会来避免在最后时刻的质量不匹配,那意味着迎合计划,弥补花费并且赢利将有一个更好的成功的机会。”
  为了测试计划的目的,在你项目版本的进度下,测试执行的组织和安排你的测试用例将帮助达到这些目标。作为这种组织的一部分,我们要考虑每一个测试用例的优先级别。根据优先级别分组你的测试用例将帮助你决定不同类型的版本需要什么样的测试用例,因此计算需要的时间。如果你只有有限的时间,你可以查看什么是最合适。
  Ross Collard在“Use Case Testing”一文中说:“测试用例的前10%到15%可以发现75%到90%的重要缺陷”。
  测试用例的优先级划分将帮助确定找出了这前10%到15%的测试用例。
  如何划分测试用例的优先级别
  你曾查看过多少次你的测试用例并且能够很容易的挑选出最重要的一个小的子集?这个答案可能是不经常。停止思考“所有的测试用例都是同等重要”这个问题是非常困难的。当设计测试用例时,分配优先级别是不容易,并且在项目期间里不一定是静止的。然而,我们可以通过构造一个划分优先级别流程的例子来开始处理划分测试用例优先级别的第一步。让我们假设你刚刚根据功能说明书,用例和其他一些关于你应用程序的目标行为和能力的信息源完成了建立测试用例。现在是时候来为每个测试用例分配一个优先级别了。
  测试用例的优先级别
  首先,你必须确定什么是你优先级别的类型和其暗示着什么。就我们的目的来说, 我们将用一个假设开始,那就是我们可能发现的缺陷的严重程度和那些相应测试用例的优先级别之间是平行的。
  1 –小版本确认测试(Build Verification Tests (BVTs):也叫做“冒烟测试”,一组你想先运行的以确定这个给出的小版本是否可以测试的测试用例。如果你不能访问每一个功能区域或执行其他测试用例依赖的基本操作,那么在执行这个优先的测试用例之前,试图做其他任何的测试都是没有意义的,因为他们大多数肯定要失败。
  2 – 高(Highs):最常执行以保证功能性是稳定的,目标的行为和能力可以正常的工作,和重要的错误和边界被测试的测试用例的集合。
  3 – 中(Mediums):这是使给出的功能区域或功能变得更详细,检查功能的多数方面包括边界,错误和配置测试的测试用例。
  4 – 低(Lows):这是通常最少被执行的测试用例。但这并不意味着这些测试都不重要,只是说他们在项目的生命期间里不是常常被运行,例如GUI,错误信息,可用性,压力和性能测试。
  我们将测试用例分成4类:BVTs,高,中和低。现在的问题是将测试用例分到不同的优先级别里。毕竟,优先级别将指出哪些测试用例被认为是需要更频繁的执行的,哪些又不是。
  怎样着手分配优先级别
  1)随意地分配:
  基于如果你没有足够的时间测试却又至少要保证所有的产品需求已经被确认可以在设想的良好状况下像它们被期望的那样工作的想法,前面这3 步将让你任意的分组测试用例,如果你也停下来思考每个测试用例的测试的内容,它们都将变的很重要。因此只需要:
  (a) 把你所有功能性验证(或基本路径(Happy Path))的测试标注为高优先级别
  (b) 把你所有错误和边界值或确认测试标注为中优先级别
  (c) 把你所有非功能性的测试(例如性能和可用性)标注为低优先级别
  2)提升和降级:
  并非所有的功能性测试都一样的重要,并且和边界和非功能性测试一样的重要。思考一下测试的重要性及相对于其他同等优先级别的测试,你想要检查这个功能的频率-考虑质量目标和你项目的需求。
  (a) 把功能性验证测试分为两组:重要和不是十分重要。
  (b) 将“不是十分重要”的能性验证测试降级为中优先级别
  (c) 把错误和边界测试分成两组:重要和不是十分重要
  (d) 将“重要”的错误和边界测试升级为高优先级别
  (e) 把非功能性测试分成两组:重要和不是十分重要
  (f) 把“重要”的非功能性测试升级为中优先级别
  (g) 针对每组高,中和低优先级别的测试用例,重复划分和升级/降级流程直到你达到一个点,可以在不同优先级别之间移动的测试用例的数量到最小。
  3)识别小版本验证测试用例(Build Verification Tests):
  现在,为了确保小版本是可以测试的并准备好给小组其他成员开始测试,哪些测试用例是必须在每个小版本中都检查呢?
  (a) 将好优先级别的测试用例分成两组:严重和重要的
  (b) 将“严重”的高优先级的测试用例升级为BVT优先级
  注意:不要先识别BVT测试用例!BVT只是高优先级别测试用例的精选,它们已经被确定为对系统和测试是非常重要的。
  在这个流程的最后,就是要检查优先级别的百分比分布情况是:BVT为10-15%,高为20-30%,,中为40-60%,低为10-15% 。
  在升级和降级测试用例时,需要考虑的方面是用户将要求这个功能或功能性的频率是怎样。同样的,对于用户日常的或月尾的活动而言,这种行为的严重性是如何。Robyn Brilliant在测试进度报告中提供了一个清单,你可以在考虑降级或升级测试用例的时候使用
  使用从一到五的一个刻度,从最严重到最少的严重程度,量化可靠性风险如下:
  (a) 这个功能的失败将影响用户
  (b) 这个功能的失败将给公司造成重大的影响
  (c) 这个功能的失败将引起一个潜在的延期给客户
  (d) 这个功能的失败对公司将有较小的影响
  (e) 这个功能的失败没有任何影响
  这个和其相似的刻度可以帮助你达到你测试用例优先级别划分的最后一步。
  总结
  这是一个简化的划分测试用例优先级别过程的例子。然而,在快速组织测试用例和安排测试进度和工作量,及制订项目计划时需要完成哪些测试用例等方面,它可以给你很多帮助。
  记住,你怎样给你的测试任务划分优先级和如何执行测试用例将取决于你在你的项目周期的位置。当你朝发布前进并通过调查和观察确定危险和缺陷出现的地方时,你可能会重新给你的测试用例划分优先级别。向上为每个阶段建立你的测试目标并保证他们在你的测试用例的优先级别上被反映,当它在解释并执行你的计划时,将使你的生活变得容易得多。
  最后,拥有划分了优先级别的测试用例也为你潜在的,待定的自动化项目给出了一个好的起点。比如,自动化BVT中的测试用例,度量收益,改进测试自动化,自动化高优先级的测试用例等方面。