黑盒vs白盒testing

你认为哪种types的testing应该是重点(对于testing人员/ QA),为什么?

维基百科的一组定义:

黑匣子testing

  • 从testing对象的外部视angular导出testing用例。 这些testing可以是function性或非function性的,尽pipe通常是function性的。 testingdevise者select有效和无效的input并确定正确的输出。 没有testing对象内部结构的知识。

白盒testing

  • 使用系统的内部视angular来devise基于内部结构的testing用例。 它需要编程技巧来确定通过软件的所有path。 testing人员selecttesting用例input来执行代码中的path并确定适当的输出。 在电子硬件testing中,可以对电路中的每个节点进行探测和测量; 一个例子就是在线testing(ICT)。

编辑:只是为了澄清一点,我意识到,两者都是重要的,但通常他们之间的开发和质量保证是分开的。

内部知识对于testing人员/质量保证部门是否重要? 我听说过这样一个观点:用这些知识进行testing可以更好地testing问题,但是我也听到了这样一个观点,即这些知识可以分散function需求,促进“testing到代码”而不是预期的解决scheme。

  • 黑盒testing应该是testing人员/ QA的重点。
  • 白盒testing应该是开发者的重点(即unit testing)。
  • 回答这个问题的其他人似乎把这个问题解释为更重要的问题, 即白盒testing或黑盒testing 。 我也相信它们都是重要的,但是你可能想看看这篇IEEE声明白盒testing更重要的文章。

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

黑盒testing等于集成testing。 testing人员确保系统按照function级别的要求工作。

两种testing方法在我看来同样重要

彻底的unit testing将在开发阶段抓住缺陷,而不是在软件被集成到系统之后。 系统级黑盒testing将确保所有软件模块在集成在一起时都能正确运行。 在开发阶段的unit testing不能捕捉到这些缺陷,因为模块通常是彼此独立开发的。

黑盒子

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

2使用的技术是:

·等效分区

·边界值分析

·错误猜测

竞赛条件

·因果图

·语法testing

·状态转换testing

·graphicsmatrix

testing者可以是非技术性的

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

白色的盒子

使用的技术是:

·基础pathtesting

·stream程图符号

·控制结构testing

  1. 状态testing

  2. 数据streamtesting

·循环testing

  1. 简单的循环

  2. 嵌套循环

  3. 连锁循环

  4. 非结构化的循环

    testing人员应该是技术性的

    有助于确定逻辑和编码问题。

“Both”已经在上面陈述了,而且是明显的答案……但IMO,白盒testing远远超出了开发者unit testing的范围(尽pipe我认为这可能取决于你在白色和黑色之间划线的位置)。 例如,代码覆盖分析是一种常见的白盒方法 – 即运行一些场景或testing,并检查结果寻找testing漏洞。 即使unit testing具有100%的cc,在常见用户场景下测量cc也可能揭示可能需要更多testing的代码。

另一个白盒testing帮助的地方是检查数据types,常量和其他信息以查找边界,特殊值等。例如,如果应用程序具有接受数字input的input,则仅bb方法可能要求testing人员“猜测”什么值对于testing是有好处的,而一个wb方法可能会揭示1-256之间的所有值都被单向处理,而更大的值被另一个方式处理…并且也许42号码有另一个代码path。

所以,要回答最初的问题 – 对于良好的testing来说,bb和wb都是必不可less的。

以我的经验,大多数开发人员自然而然地转向了白盒testing。 既然我们需要确保底层的algorithm是“正确的”,我们就倾向于更多地关注内部。 但是,正如已经指出的那样,白盒和黑盒testing是重要的。

因此,我倾向于让testing人员更关注黑盒testing,以掩盖大多数开发人员并没有真正做到的事情,而且往往不是很擅长。

这并不是说testing人员应该关注系统如何工作,只是希望他们更关注问题领域以及实际用户如何与系统进行交互,而不是将函数SomeMethod(int x)如果x等于5,会正确地抛出一个exception。

这是一个开放的门,但最终都是同等重要的。

更糟糕的是?

  1. 软件,它需要做什么,但内部有问题?

  2. 软件,如果你看看来源,应该工作,但没有?

我的回答:两者都不是完全可以接受的,但是软件不能被certificate是100%无bug的。 所以你将不得不做一些权衡。 scheme二对客户来说更直接,所以你会尽快解决问题。 从长远来看,选项一将是有问题的。

黑盒testing:黑盒testing只是观察,不需要内部知识或软件产品的结构。 只是把有效和无效的数据input,并期待正确的结果。 这里testing人员发现缺陷,但无法find在所有testing级别完成的缺陷。黑盒testing的位置。

黑盒testing技术是:1.等效分区2.边界值分析3.决策表4.状态转换图4.用例图

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

白盒testing技术:1.声明覆盖率2.决策覆盖率3.分支覆盖率4.path覆盖率。

  • testing人员通常不能进行白盒testing。 因此testing人员唯一可行的答案是强调黑盒方法。

  • 然而,在面向方面的编程和按合同devise的方法中,当testing目标作为契约(从程序的静态视图看)被编程到目标代码中,和/或当testing时序逻辑被编程到作为交叉切割的代码(testing逻辑的dynamic视图),白盒testing不仅成为可能,而且也是testing人员的首选。 考虑到这一点,这将需要一个需要专业知识的testing,testing人员不仅要成为好的testing人员,而且还要成为优秀的程序员,而不仅仅是优秀的程序员。

QA应该关注黑盒testing 。 QA的主要目标是testing系统的function(function是否满足要求?),而不是如何实现。

无论如何,QA应该很难做白盒testing,因为大多数QA人不是技术人员,所以他们通常通过UI(如用户)来testingfunction。

更进一步,我认为开发者也应该专注于黑盒testing 。 我不同意unit testing和白盒testing之间的这种广泛关联,但它可能只是一个词汇/量表的问题。 在unit testing的规模上,被测系统是一个具有合同(通过签名)的类/方法,重要的一点是testing它做了什么,而不是如何testing。 此外,白盒testing意味着你知道该方法如何填补它的合同,这似乎与TDD对我来说是不相容的。

恕我直言,如果你的SUT是如此复杂,你需要做白盒testing,通常是重构的时间。

什么构成“内部知识”? 是否知道使用这样的algorithm来解决问题是合格的还是testing人员必须看到每一行代码是“内部的”?

我认为在任何testing案例中,应该有预期的结果给出的规范使用,而不是由testing人员如何解释规范决定,因为这可能会导致问题,每个人认为他们是正确的,并指责对方的问题。

  • *黑盒testing:在系统级testing是否检查系统的function,以确保系统执行它所devise的所有function,主要是发现在用户点发现的缺陷。 最好雇用一个专业的testing人员把你的系统黑掉,“开发人员通常会testing一下,他写的代码很好,符合客户的function要求,所以他可能会错过很多东西(我不喜欢不是要冒犯任何人)
  • Whitebox是在SDLC中完成的第一个testing。这是为了发现运行时错误和编译错误等错误。它可以由testing人员或开发人员自己完成,但是我认为写代码的人testing它总是更好他比另一个人更了解他们。*

*黑盒testing:如果源代码不可用,那么testing数据是基于软件的function,而不考虑它是如何实现的。 – 强大的文本黑盒testing的例子是:边界值testing和等价划分。

*白盒testing:如果被测系统的源代码可用,则testing数据基于该源代码的结构。 白盒testing的例子是:pathtesting和数据streamtesting。

简单…黑盒testing也被称为集成testing或烟幕testing。 这主要应用于依赖于事件驱动架构的分布式环境中。 您基于另一个服务testing服务以查看所有可能的scheme。 在这里,您不能完全预测所有可能的输出,因为SOA /企业应用程序的每个组件都是自主运行的。 这可以被称为高级testing

白盒testing是指unit testing。 所有的预期情景和产出都可以有效地预测。 即input和预期的输出。这可以被称为低级testing

我只是部分同意这个问题的最高评价答案。 你认为哪种types的testing应该是重点(对于testing人员/ QA),为什么?

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

我同意这里的定义,白盒testing方法适用于以下级别的软件testing:

  • unit testing:用于testing单元内的path
  • 集成testing:用于testing单元之间的path
  • 系统testing:用于testing子系统之间的path

黑盒testing是一种软件testing方法,其中被testing物品的内部结构/devise/实施不被testing人员所知。 白盒testing是一种软件testing方法,其中被testing物品的内部结构/devise/实施对testing人员是已知的。