当前位置: 首页 > 知识库问答 >
问题:

递归函数的白盒和黑盒测试

傅奕
2023-03-14

我从迭代函数的角度学习了白盒和黑盒测试。现在我需要对几个递归函数(在F#中)进行白盒和黑盒测试。采用以下gcd递归算法:

gcd (m, n)
    if  (m % n) = 0 then
         n
    else 
        gcd n ( m % n)

对于白盒测试:我该如何准确地覆盖算法的不同分支?天真地说,有两个分支,但当函数被多次调用时,可能的分支将明显增加。我应该使用导致不同数量递归调用的参数进行测试,还是应该确切地确定使用哪些值进行测试?

黑盒:我得到了黑盒测试的一般概念。我们应该看看我们可能想要调用函数的可能值,而不知道它的内部工作。在这种情况下,我只是不确定哪些是我们可能想要调用它的值。一种方法可以是从两个值m和n开始,对于这两个值gcd=1,然后对值m和gcd=2做同样的事情,直到一些gcd=n,对于一些任意的数字n。这就是一个人应该做的吗?

共有1个答案

岳刚洁
2023-03-14

首先,对于如何对递归函数进行白盒和黑盒测试,我不认为有一个单一的定义,但下面是我的解释。

白盒测试。我们想根据函数的内部工作来测试它。对于递归函数,我认为这意味着我们想测试它发出的递归调用是否是我们所期望的。一种方法是记录所有递归调用。一个简单的gcd实现添加了一个参数来保存日志,并返回结果:

let rec gcd log m n = 
  let log = (m, n)::log
  if (m % n) = 0 then List.rev log, n
  else gcd log n (m % n)

现在,对于两个参数,比如54和22,您可以手工计算,决定递归调用的参数应该是什么,并为此编写一个测试:

let log, res = gcd [] 54 22
log |> shouldEqual [ (54, 22); (22, 10); (10, 2) ]

黑盒测试。在这里,我们假设我们不知道这个函数是如何工作的,所以我们不能测试它的内部。我们所能做的就是使用许多输入来测试它。考虑角落大小写或棘手的输入可能是个好主意,因为这些输入可能会导致问题。给出一个简单的实现:

let rec gcd m n = 
  if (m % n) = 0 then n
  else gcd n (m % n)

我可能会为以下内容编写测试:

// A random case where one of the numbers is the result
gcd 100 50 |> shouldEqual 50
gcd 50 100 |> shouldEqual 50

// A random case where the only divisor is 1
gcd 13 123 |> shouldEqual 1
gcd 123 13 |> shouldEqual 1

// The following are problematic and I'm not sure what the right behaviour is
gcd 0 0    // This probably should not be allowed    
gcd 10 -5  // This returns -5, but I'm not sure that's what we want

随机测试。您还可以使用随机测试(这是黑盒测试的一种形式)自动生成多个测试用例。我至少能想到两个随机测试:

>

选择一个随机数a和两个素数p1,p2 。然后将素数分成两组,产生a*p1*p3*p5a*p2*p4*p6。编写一个测试,检查两个数字的GCD是否为a

 类似资料:
  • 所以我已经知道白盒测试和黑盒测试之间的区别,但我正在寻找一个相当简单的例子,说明白盒测试表示“一切正常”,黑盒测试表示“这里有问题”——反之亦然 这些例子会出现在相当流行的软件产品中。例如——微软视窗、Word或方程求解器(如下所示) 类似的程度:(黑盒测试失败,白盒通过) 示例:求解二次方程; 输入数据:系数A、B和C的数值; 输出数据:根X1和根X2的数值 黑盒测试 黑盒测试(环境、用户):否

  • 本文向大家介绍白盒测试和黑盒测试区别?相关面试题,主要包含被问及白盒测试和黑盒测试区别?时的应答技巧和注意事项,需要的朋友参考一下 白盒测试:是通过程序的源代码进行测试而不使用用户界面。 黑盒测试:是通过使用整个软件或某种软件功能来严格地测试 ①测试特点不同 黑盒测试:测试功能 白盒测试:测试程序接口与结构 ②测试依据不同 黑盒测试:需求规格说明书 白盒测试:软件程序 ③侧重点不同 黑盒测试:关注

  • 黑盒测试,白盒测试与灰盒测试的比较和区别如下所示: 编号 黑盒测试 白盒测试 灰盒测试 1 不需要了解内部工作结构(代码)。测试用例只需要GUI(图形用户界面)。 测试需要了解内部工作结构(软件编码)。 部分了解内部工作结构。 2 黑盒测试也称为功能测试,数据驱动测试和封闭盒测试。 白盒测试也称为结构测试,透明盒测试,基于代码的测试和透明测试。 灰盒测试也称为半透明测试,因为测试人员对编码知识有限

  • 你好,我是新来的SW测试。 WBT-Developer这样做,确保每一行都被执行,并检查所有条件语句。 BBT——在黑盒中,我可以做与WBT相同的事情,我可以输入各种参数并检查输出,确保通过生成测试用例覆盖所有条件语句,还可以覆盖循环执行。 白盒测试和黑盒测试的真正区别是什么?对我来说,这看起来像是,做一个广泛的投入,角落案例覆盖BBT,这将是一个WBT。

  • 本文向大家介绍黑盒测试与白盒测试之间的差异。,包括了黑盒测试与白盒测试之间的差异。的使用技巧和注意事项,需要的朋友参考一下 众所周知,测试是任何应用程序或软件交付过程中最重要的阶段,因为测试不仅可以验证应用程序的质量,还可以为开发人员提供改进其产品的机会。 每个应用程序都以某种高级语言或低级语言进行开发,这意味着已经为其开发编写了一些代码,因此,根据测试人员对应用程序的了解,可以对测试进行分类,即

  • 如果我们必须在动态黑盒测试和静态白盒测试之间做出选择,我们应该选择哪一个?动态黑盒测试是在不了解底层代码的情况下进行的测试,而静态白盒测试是在不执行代码的情况下进行的代码审查。