黑盒子或白盒测试应该成为测试人员的重点吗?

问题描述 投票:53回答:16

你会说哪种类型的测试应该是重点(对于测试者/ QA),为什么?

维基百科的一组快速定义:

黑盒测试

  • 从测试对象的外部透视图中获取测试用例。这些测试可以是功能性的或非功能性的,但通常是功能性的。测试设计者选择有效和无效的输入并确定正确的输出。不了解测试对象的内部结构。

白盒测试

  • 使用系统的内部透视图来设计基于内部结构的测试用例。它需要编程技能来识别软件中的所有路径。测试人员选择测试用例输入来遍历代码并确定适当的输出。在电气硬件测试中,可以探测和测量电路中的每个节点;一个例子是在线测试(ICT)。

为了澄清一点,我意识到两者都很重要,但通常它们在开发和QA之间是分开的。

内部知识对测试人员/ QA很重要吗?我听说过用这些知识进行测试的论据使他们能够更好地测试问题,但我也听到过这样的论点,即这些知识会分散功能需求,促进“测试代码”而不是预期的解决方案。

testing qa black-box white-box
16个回答
51
投票
  • 黑盒测试应该是测试人员/ QA的重点。
  • 白盒测试应该是开发人员的重点(即单元测试)。
  • 回答这个问题的其他人似乎已经将这个问题解释为哪个更重要,白盒测试或黑盒测试。我也相信它们都很重要,但你可能想看看这个IEEE article声称白盒测试更重要。

2
投票

黑盒测试是一种软件测试方法,其中测试项目的内部结构/设计/实现不为测试人员所知。白盒测试是一种软件测试方法,其中测试项目的内部结构/设计/实现是测试者已知的。


1
投票

什么构成,“内部知识?”知道使用这样的算法来解决问题是否合格,或者测试人员是否必须看到每行代码都是“内部的”?

我认为在任何测试案例中,应该使用规范给出的预期结果,而不是由测试人员如何决定解释规范,因为这可能导致每个人认为他们是正确的问题并且将问题归咎于另一个。


1
投票
  • *黑盒测试:是否在系统级别进行测试以检查系统的功能,以确保系统执行其设计的所有功能,主要是为了发现用户点发现的缺陷。最好雇用一名专业测试人员对你的系统进行黑盒子化,因为开发人员通常会认为他编写的代码很好并符合客户的功能要求,所以他可能错过很多东西(我不喜欢)不是冒犯任何人的意思)
  • Whitebox是在SDLC中完成的第一个测试。这是发现错误,如运行时错误和编译错误。它可以由测试人员或开发人员自己完成,但我认为编写代码的人测试它总是更好他比别人更了解他们。*

1
投票

这是我的5美分:

作为一名开发人员,我主要为方法(在一个类中)编写测试作为白盒测试,这很简单,因为我不希望我的测试因为我改变代码的内部工作而中断。

我只希望我的测试在我的方法行为发生变化时中断(例如,返回与之前不同的结果)。

在过去20年的开发过程中,我简单地厌倦了完成双重工作,因为我的单元测试与代码密切相关,我需要维护应用程序代码和测试代码。

我认为制作解耦代码(也就是代码测试时)是一种非常好的做法。

另外5美分:我几乎从不使用模拟框架,因为当我发现它必须模拟某些内容时我宁愿将代码解耦 - 而且在很多情况下这是非常可能的(特别是如果你不使用遗留代码): - )


0
投票

*黑盒测试:如果源代码不可用,则测试数据基于软件的功能,而不考虑其实现方式。 -trong text黑盒测试的例子有:边界值测试和等价划分。

*白盒测试:如果被测系统的源代码可用,则测试数据基于此源代码的结构。 - 白盒测试的示例包括:路径测试和数据流测试。


0
投票

简单...黑盒测试也称为集成测试或烟幕测试。这主要应用于依赖于事件驱动架构的分布式环境中。您可以根据其他服务测试服务以查看所有可能的方案。在这里,您无法完全预测所有可能的输出,因为SOA / Enterprise应用程序的每个组件都旨在自动运行。这可以称为高级测试

白盒测试是指单元测试。可以有效预测所有预期的情景和输出。即输入和预期输出。这可以称为低级测试


0
投票

我只是部分同意这个问题的最高评价答案。你会说哪种类型的测试应该是重点(对于测试者/ QA),为什么?

  1. 我同意:“黑盒测试应该是测试人员/ QA的重点。”
  2. 我同意白盒测试应该是开发人员的重点,但我不同意白盒测试只是单元测试。

我同意here的定义,该定义指出White Box测试方法适用于以下级别的软件测试:

  • 单元测试:用于测试单元内的路径
  • 集成测试:用于测试单元之间的路径
  • 系统测试:用于测试子系统之间的路径

11
投票

白盒测试等于软件单元测试。开发人员或开发级别测试人员(例如另一个开发人员)确保他编写的代码在将其集成到系统之前根据详细级别要求正常工作。

黑盒测试等于集成测试。测试仪确保系统根据功能级别的要求工作。

在我看来,这两种测试方法同样重要。

完整的单元测试将在开发阶段捕获缺陷,而不是在软件集成到系统中之后。系统级黑盒测试将确保所有软件模块在集成在一起时表现正常。开发阶段的单元测试不会发现这些缺陷,因为模块通常是相互独立开发的。


7
投票

黑盒子

1重点介绍系统的功能重点介绍系统的结构(程序)

2使用的技术是:

·等价划分

·边界值分析

·猜错

·比赛条件

·因果图

·语法测试

·州过渡测试

·图表矩阵

测试人员可以是非技术性的

有助于识别功能规范中的模糊性和矛盾性

白盒子

使用的技术是:

·基础路径测试

·流程图表示法

·控制结构测试

  1. 条件测试
  2. 数据流测试

·循环测试

  1. 简单的循环
  2. 嵌套循环
  3. 连锁循环
  4. 非结构化循环 测试员应该是技术性的 帮助识别逻辑和编码问题。

5
投票

QA应该专注于黑盒测试。质量保证的主要目标是测试系统的功能(功能是否符合要求?),而不是它是如何做到的。

无论如何,QA应该很难进行白盒测试,因为大多数QA人员都不是技术人员,因此他们通常通过UI测试功能(如用户)。

更进一步,我认为开发人员也应该专注于黑盒测试。我不同意单元测试和白盒测试之间广泛的关联,但它可能只是一个词汇/规模的问题。在单元测试的规模上,被测系统是一个具有契约(通过其签名)的类/方法,重要的是测试它的作用,而不是如何。此外,白盒测试意味着你知道该方法将如何填补其合同,这似乎与TDD不兼容。

恕我直言,如果您的SUT非常复杂,需要进行白盒测试,那么通常是重构的时候。


4
投票

“两者”已在上面说明,并且是明显的答案......但IMO,白盒测试远远超出了开发人员单元测试(尽管我认为它可能取决于你在白色和黑色之间画线的位置)。例如,代码覆盖率分析是一种常见的白盒方法 - 即运行某些场景或测试,并检查结果,寻找测试中的漏洞。即使单元测试具有100%cc,在常见用户场景上测量cc也可以揭示可能需要更多测试的代码。

白盒测试帮助的另一个地方是检查数据类型,常量和其他信息以查找边界,特殊值等。例如,如果应用程序具有采用数字输入的输入,则仅bb方法可能需要测试人员“猜测”什么值对于测试是有利的,而wb方法可以揭示1-256之间的所有值都是单向处理的,而较大的值则是另一种方式处理......也许数字42还有另一个代码路径。

因此,回答最初的问题 - bb和wb对于良好测试至关重要。


3
投票

根据我的经验,大多数开发人员自然会转向白盒测试。由于我们需要确保底层算法是“正确的”,我们倾向于更多地关注内部。但是,正如已经指出的那样,白盒和黑盒测试都很重要。

因此,我更倾向于让测试人员更多地关注Black Box测试,以弥补大多数开发人员并没有真正做到这一点的事实,并且经常不太擅长。

这并不是说测试人员应该对系统如何工作保持沉默,只是我更喜欢他们更多地关注问题域以及实际用户如何与系统交互,而不是函数SomeMethod(int x)如果x等于5,将正确抛出异常。


2
投票

这有点开放,但最终两者同样重要。

更糟糕的是?

  1. 做它需要做的软件,但内部有问题吗?
  2. 如果你看一下这些来源应该有用的软件,但不是吗?

我的回答:两者都不是完全可以接受的,但软件不能被证明是100%无错误。所以你将不得不做出一些权衡。选项二更直接地告知客户,因此您很快就会遇到问题。从长远来看,第一选择将是有问题的。


2
投票

黑盒测试:黑盒测试只是观察不需要内部知识或软件产品的结构。只需输入有效和无效的数据输入并期望得到正确的结果。这里测试人员发现了缺陷但无法找到缺陷的位置。在所有测试级别完成黑盒测试。

黑盒测试技术包括:1。等价划分2.边界值分析3.决策表4.状态转换图4.用例图

白盒测试:白盒测试它需要内部逻辑和软件产品结构的知识。这里我们将检查循环,条件和分支。在这里,我们不仅发现了缺陷,还发现了缺陷的位置。

白盒测试技术:1。报表覆盖范围2.决策覆盖范围3.分支覆盖范围4.路径覆盖范围。


2
投票
  • 通常,测试人员无法进行白盒测试。因此,测试人员唯一可行的答案是强调黑盒方法。
  • 然而,使用面向方面的编程和按合同设计的方法,当测试目标被编程到目标代码中作为契约(从程序的静态视图看),和/或当测试时序逻辑被编程到作为交叉切割的代码(测试逻辑的动态视图),白盒测试不仅可能成为测试人员的首选,而且也是测试者的首选测试。鉴于这一点,它需要一个专业知识要求,测试人员不仅需要优秀的测试人员,还需要优秀的程序员或更多优秀的程序员。
© www.soinside.com 2019 - 2024. All rights reserved.