作为一个软件测试爱好者,在面对软件存在问题的行为的过程中,我进一步了解了缺陷这一概念。最初,我将每一个瑕疵都报告为一个bug。但经过多年经验,在测试人员解说了神秘的bug后,我开始逐渐了解了缺陷。
这区分缺陷和bug是件艰难的事情,但在这两者之间划清界限可以帮助我提高我工作的准确度。下面让我们来讨论什么是软件缺陷,以及三种不同类型的缺陷。
什么是软件缺陷?
一个缺陷是由的对于软件要求所产生偏差引起的故障。这并不一定意味着在代码中有bug。它可以是软件需求规范(SRS)文档中所指定的,但没有被认可,开发或由程序设计者实现的任何功能。其结果是,导致了该软件的异常行为。
从用户的角度来看,软件缺陷的典型实例如下:
用户期望——该软件将允许我使用借记卡进行网上支付
缺陷——选择借记卡进行支付的选项丢失
用户期望——该软件将帮助我避免拼写错误
缺陷——用于检测拼写错误的功能缺失
“软件测试中的三种不常见缺陷。”
以此进一步讨论,让我们探讨软件测试过程中观察到的三种不常见缺陷。这些缺陷使得软件不能按照其规范执行。有如下三类:
#1.潜在缺陷:
这是一个法律行业的流行术语。潜在缺陷是指在一条款中,卖方意识到一个隐藏的弱点,漏洞或缺陷,但买家无法在进行初步检查之前确定问题。但是,在被暴露在不常见的情况下后,买方就会认识到缺陷。
类似地,在软件测试中,潜在缺陷是一个在生产过程中伴随着的系统缺陷,并通过了预生产测试和推广使用。这个缺陷在后续缺少相应场景的时候被确定。
例如:
一个XYZ应用程序是设计用来打印雇员的工资单。在下拉菜单上有两款打印机:激光的和点阵的。但是,应用程序总是倾向于选择激光打印机。其结果是,每当打印命令被执行,打印输出将从激光打印机出来。
某一天,当应用程序无法找到激光打印机时,它试图找到针式打印机(DMP)。该应用程序尝试使用DMP打印,但一再给出错误信息。这揭示了一个潜在的缺陷,该应用程序的软件测试从来没有测试过DMP。并且由于只使用激光打印机导致从未经历过这个场景,这个缺陷保持被掩盖。这意味着,在测试中,上述情景是从来没有经历过的。
如何在测试过程中识别潜在缺陷?
只有穷举测试可以让缺陷都暴露在系统中,但这是不可能真正实现的。但是,您可以运行一组触发事件,将有助于识别缺陷。你所能做的就是尝试和测试软件的旧功能,而不是新的功能。
#2.掩蔽缺陷:
掩蔽缺陷指的是在软件执行过程中没有导致问题的缺陷。主要是因为另一个缺陷导致的问题使得那部分缺陷没有被执行到。
例如:
在第一个实例中由于应用程序未对DMP进行测试,检测到了两个问题。
- DMP打印机搜索
- DMP打印
由于应用程序未能搜索到DMP,而是运行到使用激光打印机中去,导致从未检测出DMP的打印错误。其结果是,DMP打印部分仍然被掩蔽,这就是所谓的掩蔽缺陷。
#3.缺陷级联:
在软件测试,缺陷级联指的是一个缺陷引发许多其他缺陷。有时,在软件开发周期中,没有注意到的一个不明确缺陷的存在会影响其他阶段。其结果是,多个缺陷突然出现在后期的阶段。
例如:
应用程序被部署来计算员工的月薪。负责计算薪酬的模块中有一个不明确的缺陷。这样一来,它错误地计算了工资。然后向数据库发送了不正确的薪水数字,进一步反映在资产负债表,税款计算和年薪计算之中。
一个缺陷级联:
如果缺陷级联继续影响应用程序的其它功能,确认受影响的功能将变得具有难度。你可以通过不同的测试用例来解决这个问题,但它是困难而且耗时的。作为测试者,你可以选择执行不同的测试用例的子集,而不用理会测试用例之间的的相互依存关系。
结论
潜在,掩蔽缺陷和缺陷级联具备成为了故障的主导原因。虽然软件测试过程的目的是为了消除故障,但这些不常见的影响仍然被掩盖了。所以,必须了解不同类型的缺陷,并执行能够识别缺陷的测试用例。
{测试窝原创译文,译者:大头}
译者简介:大头,在读日本九州大学修士,计算机专业,主研究方向为文本挖掘,及自然语言处理。