3

如何在 Java 应用程序上进行白盒测试?这是否意味着我必须逐课测试?

根据我的研究,我知道:

白盒测试是一种软件测试方法,其中被测试项目的内部结构/设计/实现对测试人员来说是已知的。测试人员通过代码选择输入来练习路径并确定适当的输出。编程知识和实施知识是必不可少的。白盒测试是在用户界面之外进行测试,并深入到系统的本质。

白盒测试应该是什么样的?

4

2 回答 2

10

简介: 现代白盒测试使用复杂的自动化工具来帮助开发人员设计好的测试并以有意义的方式测量代码覆盖率。广泛使用的(如果是基本的)示例包括CoberturaEMMAEclEmma 和 JaCoCo

如何在 Java 应用程序上进行白盒测试?

传统上,黑盒测试意味着另一个团队(不是开发人员)负责测试软件,并且他们在这样做时不会查看源代码。

即使转向单元测试,设计测试的常用方法是使用或多或少的黑盒输入域特征,即只测试边界条件和一些任意“正常”输入值。

然而,很明显,这种方法可能无法行使该功能的某些分支。一个优秀的开发人员会打开代码并说“嘿,我需要添加一个输入来运行那个分支。”

现代白盒测试通过自动化流程将这个想法更进一步,产生这样的输出以显示方法的哪些部分尚未被 JUnit(来自 NetBeans 插件TikiOne)执行:

NetBeans 插件 TikiOne 使用 JaCoCo 库来显示我的测试未能覆盖的分支。

白盒测试应该是什么样的?

摘要中提到的代码覆盖工具试图自动化确保您运行每一行或每一分支代码的过程。当集成到像Jenkins这样的持续集成环境中时,您的团队不仅可以持续关注您的测试是否通过,还可以关注您是否达到了覆盖目标(来自 NetBeans 插件TikiOne):

NetBeans 插件 TikiOne 总结了我对几个类的测试覆盖率低劣。

在软件工程研究中,白盒测试比计算行数要复杂得多。已经开发了各种各样的工具和数学技术来帮助您确保为测试提供的输入正确地涵盖了代码的所有可能行为。

例如,使用复杂布尔谓词的飞机自动驾驶系统的警告系统可能会使用植根于形式逻辑的白盒测试标准,以确保我们涵盖通过控制器的所有逻辑可能路径。

分析线和分支覆盖率是最常见的标准,是使用软件图形表示的一种特殊情况,例如控制流图数据流图。一个好的工具将读取您的代码以生成图形,然后您可以从各种图形覆盖标准中进行选择,以自动推荐一组通过方法控制逻辑(分支)的路径,您需要执行这些路径以实现您的测试目标。

线和分支是最简单和最常用的(控制)图覆盖标准(对应于覆盖节点和边)——在某些工具中可以使用更彻底(且难以满足)的指标,如边对和主要路径。这些问题不仅询问“我是否至少在每个分支上进行了每个选择一次”,而是“我是否通过我能够到达那里的所有方式通过了每个分支。”

程序员仍然需要找到一组输入来练习这些路径,并设计足够小和足够简单的代码,以使所需的测试数量不会以更全面的标准获得良好的覆盖率不会呈指数级增长。但是现在你有了正式的、定量的方法来 A) 告诉你需要测试什么,并且 B) 告诉你你的项目测试得有多好。

这是否意味着我必须逐课测试?

白盒测试是一种设计测试的方法。它可以应用于所有测试级别,包括单元测试、集成测试和系统测试。


有关测试覆盖率标准的更多信息,请参阅

  • 贝泽,鲍里斯。软件测试技术。梦想科技出版社,2003 年。

或查看最新的

  • 阿曼、保罗和杰夫·奥夫特。软件测试简介。剑桥大学出版社,2008 年。
于 2014-02-14T02:35:04.337 回答
3

逐类测试通常称为单元测试。有几种流行的工具可以帮助您。从 JUnit 或 TestNG 开始。为提供某些功能的每个类或类(模块)组实施测试。

然后你可以上去,即为更大的模块和整个应用程序编写测试。此类测试通常称为集成测试。

于 2013-02-22T19:58:46.563 回答