Java白盒测试

kno*_*ody 3 java testing white-box

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

从我的研究中我知道:

白盒测试是一种软件测试方法,其中测试项目的内部结构/设计/实现是测试者已知的.测试人员选择输入来通过代码行使路径并确定适当的输出.编程知识和实施知识至关重要.白盒测试正在测试超出用户界面和系统的细节.

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

Sig*_*maX 8

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

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

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

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

然而,显然,这种方法可能无法运用该功能的某些分支.一个优秀的开发人员将打开代码并说"嘿,我需要添加一个输入来运行该分支."

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

NetBeans插件TikiOne使用JaCoCo库来显示我的测试无法覆盖的分支.

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

摘要中提到的代码覆盖工具尝试自动执行确保您运行代码的每一行或每个分支的过程.当集成到像Jenkins这样的持续集成环境中时,它允许您的团队不仅关注您的测试是否正在通过,而且是否满足您的覆盖目标(来自NetBeans插件TikiOne):

NetBeans插件TikiOne总结了几个类的测试覆盖质量差.

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

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

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

线和分支是最简单和最常用的(控制)图形覆盖标准(对应于覆盖节点和边缘) - 在一些工具中可以使用更加彻底(并且难以满足)的度量,例如边对和主路径.这些问题不只是"我是否至少在每个分支机构的每一个选择上都有一次",而是"我是否通过我能够到达那里的每一个方式经历了每个分支."

程序员仍然需要找到一组输入来实现这些路径,并设计足够小且足够简单的代码,以便通过更全面的标准获得良好覆盖所需的测试数量不会呈指数级爆炸.但是现在你有正式的,量化的方法来A)告诉你测试的需求,B)告诉你你对项目的测试情况.

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

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


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

  • Beizer,鲍里斯.软件测试技术.Dreamtech Press,2003.

或者看到更新的

  • Ammann,Paul和Jeff Offutt.软件测试简介.剑桥大学出版社,2008年.