软件测试软件缺陷例子,这3种软件缺陷,测试人员万万不能小看它

原标题:这3种软件缺陷,测试人员万万不能小看它

17556809f9ca3b16045e70f6fac6254a.png

作为一个测试人员,在执行测试时,你可能会遇到各种各样的软件问题。虽然每个Bug都需要报告,但是事先需要识别它究竟是错误还是缺陷。

要区分软件错误和缺陷是非常困难的,因为它要求测试人员能够精确地理解软件的功能。然而,简单来说,软件缺陷是一种需求偏离而导致的软件故障,它并不一定意味着代码中的错误。它可以是在软件需求规范(SRS)文档中指定的任何函数,但不被程序员识别、开发或实现。因此,才会导致软件的行为异常。

从用户的角度来看,典型的软件缺陷场景如下:

场景1:该软件将允许用户使用借记卡进行在线支付。

缺陷:选择借记卡用于支付的选项不见了。

场景2:软件将帮助我避免拼写错误。

缺陷:检测拼写错误的功能缺失。

根据以上讨论,这里有3种不同寻常的缺陷,这些缺陷阻碍了软件的规范执行。具体如下:

1. 工作潜在缺陷

潜在缺陷是软件隐藏的缺陷,在一套运算结束前它不都不能被用户所识别(尽管开发者或所有者知道它)。这个缺陷只有当软件在没有常规场景的情况下执行一项特定的任务,或者暴露在不同寻常的情况下,这个缺陷通常会伴随软件在生产过程中出现,同时也会被传递到生产前的测试中。

这里有一个潜在缺陷的例子

打印一份员工薪水单的申请表,提供两种不同的打印选项在下拉菜单中打印:

-激光打印机

-点阵打印机

然而,默认的应用程序总是选择激光打印机。因此,无论何时启动打印命令,打印的东西都从激光打印机中取出。当应用程序无法选中激光打印机时,它将试图找到点矩阵打印机(DMP)。应用程序将尝试使用DMP打印,但会反复出现错误消息。

由于该应用程序的潜在缺陷从未测试过DMP,并且在使用激光打印机时从未有过这种情况,所以这个缺陷仍然隐藏。这意味着,在测试时,前面提到的场景从未出现过。

2. 隐蔽缺陷

隐蔽缺陷是软件中已经存在的缺陷,但是,它尚未导致应用程序执行的失败,主要是因为它被另一个缺陷覆盖或掩盖了。隐蔽缺陷通常很难识别,执行特定的操作之前,它们通常不会被检测到。

这里有一个隐蔽缺陷的例子

由于应用程序没有对DMP进行测试(根据第一个实例),另外两个问题也被屏蔽。

-DMP打印机的搜索

-DMP打印

由于没有检测到DMP打印错误,应用程序总是无法选择激光打印机。结果,DMP打印仍然被隐藏。

3. 缺陷级联

在软件测试中,缺陷级联意味着在应用程序中触发其他缺陷。当一个缺陷在测试中未被识别或被忽视时,它会调用其他缺陷。结果,多个缺陷出现在后面的阶段。换句话说,它是一个主缺陷,它引入了许多与应用程序生命周期更进一步阶段相关的缺陷。

这里有一个缺陷级联的例子

已经部署了一个应用程序来计算员工的月薪。负责计算工资的模块有一个未知的缺陷。结果它错误地计算了工资。这促使数据库发送不正确的工资数据,这些数据进一步反映在资产负债表、税收计算和年度工资的计算中。

如果缺陷级联继续影响应用程序中的其他功能,那么识别受影响的函数就会变得具有挑战性。你可能会用不同的测试用例来解决这个问题,但这是相当困难且耗时的。作为测试人员,你可以选择不同测试用例的子集,并在测试用例之间不考虑相互依赖的情况下执行它们。

最后

作为一个测试人员,很难知道它是软件工作中的一个错误,还是软件中功能的偏差。因此,必须了解不同类型的缺陷,并编写能够识别这些缺陷的测试用例。虽然潜在的、隐蔽的和缺陷级联是客户中断的主要原因,但对于这些,你完全可以通过使用标准化的流程和软件测试工具来克服这些问题,Testin就是其中之一。

如果你不想被上述缺陷“玩弄”的话,就快用Testin来测试你的应用程序吧。

责任编辑:

可以使用辗转相除法和最小公倍数的性质来解决这个问题。具体步骤如下: 1. 定义一个函数 gcd(a, b),用于求两个数 a 和 b 的最大公约数。可以使用辗转相除法来实现。 2. 定义一个函数 lcm(a, b),用于求两个数 a 和 b 的最小公倍数。根据最小公倍数的定义,它等于 a 和 b 的乘积除以它们的最大公约数,即 lcm(a, b) = a * b / gcd(a, b)。 3. 对于输入的 n,从 1 到 n 依次计算它们的最小公倍数,每次计算都将结果保存下来。具体来说,可以使用一个变量 ans 来记录当前的最小公倍数,初始值为 1,然后对于每个 i(1 <= i <= n),更新 ans 为 lcm(ans, i)。 4. 最后返回 ans,即为 1~n 的最小公倍数。 下面是 Python 代码实现: ```python def gcd(a, b): """求两个数的最大公约数""" while b: a, b = b, a % b return a def lcm(a, b): """求两个数的最小公倍数""" return a * b // gcd(a, b) def smallest_lcm(n): """求1~n的最小公倍数""" ans = 1 for i in range(1, n+1): ans = lcm(ans, i) return ans # 测试 print(smallest_lcm(10)) # 输出 2520 print(smallest_lcm(20)) # 输出 232792560 print(smallest_lcm(100)) # 输出 69720375229712477164533808935312303556800 ``` 注意,当 n 很大时,最小公倍数可能会超出 Python 的整数范围,导致计算结果不正确。这时可以使用 Python 中的 Decimal 类型来避免这个问题。例如,将最小公倍数的计算结果存储在一个 Decimal 对象中,每次更新时也需要使用 Decimal 类型的 lcm 函数来计算。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值