黑匣子与白盒测试

时间:2008-12-31 02:37:23

标签: testing qa black-box white-box

您认为哪种类型的测试应该是重点(对于测试人员/ QA),为什么?

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

黑匣子测试

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

白盒测试

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

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

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

17 个答案:

答案 0 :(得分:51)

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

答案 1 :(得分:11)

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

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

在我看来,这两种测试方法都非常重要。

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

答案 2 :(得分:7)

黑匣子

1  重点关注系统的功能  重点关注系统的结构(程序)

2  使用的技术是:

·等价分区

·边界值分析

·猜测错误

·竞争条件

·因果图表

·语法测试

·州过渡测试

·图表矩阵

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

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

白盒

使用的技术是:

·基础路径测试

·流程图表示法

·控制结构测试

  1. 条件测试

  2. 数据流测试

  3. ·循环测试

    1. 简单循环

    2. 嵌套循环

    3. 连接循环

    4. 非结构化循环

      测试人员应该是技术性的

      帮助识别逻辑和编码问题。

答案 3 :(得分:5)

QA应专注于黑盒测试。质量保证的主要目标是测试系统的功能(功能是否满足要求?),而不是测试功能。

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

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

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

答案 4 :(得分:4)

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

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

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

答案 5 :(得分:3)

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

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

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

答案 6 :(得分:2)

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

更糟糕的是什么?

  1. 软件可以做它需要做的事情,但内部有问题吗?

  2. 如果您查看来源应该可以使用的软件,但不是吗?

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

答案 7 :(得分:2)

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

答案 8 :(得分:2)

  • 通常,测试人员无法进行白盒测试。因此,测试人员唯一可行的答案是强调黑盒方法。

  • 然而,使用面向方面编程和按合同设计的方法,当测试目标作为契约(从程序的静态视图中看到)编程到目标代码中时,和/或当测试时态逻辑被编程到代码中作为交叉切割(测试逻辑的动态视图),白盒测试不仅可能成为测试人员的首选,而且也是测试人员的首选测试。鉴于这一点,它需要一个专业知识要求,测试人员不仅需要优秀的测试人员,还需要优秀的程序员或更多优秀的程序员。

答案 9 :(得分:2)

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

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

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

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

答案 10 :(得分:1)

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

答案 11 :(得分:1)

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

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

答案 12 :(得分:1)

这是我的5美分:

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

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

在过去的20年的开发中,仅仅因为单元测试与代码紧密相关,并且我需要同时维护应用程序代码和测试代码,我就厌倦了将工作加倍进行。

我认为制作去耦代码(在进行代码测试时)也是一种很好的做法。

另外5美分:我几乎从不使用模拟框架,因为当我发现它必须模拟某些东西时,我更喜欢将代码解耦-是的,在很多情况下,这是很有可能的(尤其是如果您不使用旧版代码, ):-)

答案 13 :(得分:0)

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

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

答案 14 :(得分:0)

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

,而

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

答案 15 :(得分:0)

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

  1. 我同意:"黑盒测试应该是重点 测试/ QA"
  2. 我同意白盒测试应该是重点 开发人员,但我不同意White Box测试只是单位 测试
  3. 我同意here定义,该定义指出White Box测试方法适用于以下软件测试级别:

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

答案 16 :(得分:0)

  • 黑匣子测试,您看不到被测系统的内部运行情况。
  • 白盒测试可以全面了解被测系统。 Here是展示此情况的几张图片。

测试人员需要专注于测试金字塔。您将需要了解单元测试,集成测试和端到端测试。所有这些都可以通过黑盒和白盒测试来执行。从小处着手,逐步学习各种类型以及何时使用每种类型。请记住,您无法始终测试所有内容。