尽可能早的防止和检测构造问题对Java软件开发来说更为关键。在大多数语言(如C和C++)中,一个非法程序操作常常导致程序的突然中断。Java相对来说提供了一种非常简单的机制来捕获运行时出现的异常并让程序继续运行,这种机制的设计可以简化对系统和其它服务调用的处理。另一方面,一个非法操作引起运行时异常确实指出了程序中的一个错误。捕捉它们并让程序继续运行通常比C++中的突然中断更有问题。带有问题的程序将继续运行是乎好象没有问题出现过,但极有可能进入一种矛盾状态,并产生不准确的结果或破坏它所存取的资源。
虽然白盒测试是保证类和应用质量的一个关键步骤,但手工执行的难度通常会使开发人员望而却步或草草了事。有效地执行白盒测试需要我们能够确定要完全检查被测类那些测试用例是必需的,这对于手工测试来说是太难了。目前的研究表明,典型的公司只测试了其开发的30%的代码,而其余的70%从来没有被测过。一个原因是编写能够测试很少执行的路径或极端的条件的测试用例很困难。例如,一个典型的1万行代码大约有1亿条可能的路径;手工编写能够执行所有路径的测试输入是不可行的或者说几乎是不可能的。
Jtest使用独特的技术完全自动化白盒测试过程。Jtest分析每个被测类的内部结构,自动设计和执行能够完全测试类的结构的测试用例,然后确定每个测试输入是否会产生一个未捕获的运行时异常。对于检测到的每个异常报告一个错误信息并提供一个导致错误的栈轨迹和调用序列。
Jtest分析该类,然后生成大量的根据非预期输入设计的测试用例,并执行。Jtest自动生成的测试用例发现了下列没有捕获的运行时异常。
Jtest能够对任何Java类或部件进行白盒测试,包括那些引用外部资源(如外部文件、数据库、EJB和CORBA)的类。如果您正在测试一些引用外部资源的类,Jtest将自动生成必要的桩函数,或者您可以选择直接调用实际的外部方法或您自己的桩函数。对使用CORBA的类,Jtest提供ORB和其它引用对象的桩函数。对使用EJB的类,Jtest调用Bean初始化程序并提供一个模拟的容器,然后执行白盒测试,保证这些类能够恰当地执行。
您可以根据自己的需要剪裁Jtest的错误报告。如果您对代码中一些正当的异常情况使用了特定的@exception注释标记,Jtest将屏蔽它们。如果您使用了特定的@pre注释标记为有效的方法输入说明允许的范围,Jtest将屏蔽掉落在该范围之外的输入所发现的错误。您还可以使用快捷菜单或禁用配置面板屏蔽异常情况。
使用Jtest进行黑盒测试比使用任何其它工具更简单(也更有效)。Jtest的专利技术通过分析类的字节码自动生成一组核心输入;这些输入经过精心设计能够达到尽可能高的代码覆盖。由于自动生成的输入的设计目标是覆盖类的方法,而非验证其定义,因此用户可能需要增加自己的测试用例。(这一点是可以理解的,自动技术是针对语法的,机器并不能理解人的真正意图。)
用户定义的输入可以直接添加到树形表示的测试用例中,其中节点代表方法的每个参数或者能够存贮在全局或局部存储库中的常量和方法;在这里,输入可以方便地加入到任何方法的参数中。当测试进行时,Jtest自动执行所有的输入并以简单的树形表示显示相应的输出。在以后的功能测试或回归测试测试中出现错误时,Jtest会自动通告用户。
文章来源于领测软件测试网 https://www.ltesting.net/