JTest
Jtest实现了自动化的解决方案,排除了Java开发人员技术应用上的障碍,使得开发人员能够顺利地采用这些技术。
Jtest的测试生成系统专利技术,开发人员提供了一种省时有效的白盒测试方法。Jtest通过自动生成和执行能够全面测试类代码的测试用例,使白盒测试完全自动化。Jtest使用一个符号化的虚拟机执行类,并搜寻未捕获的运行时异常。对于检测到的每个未捕获的运行时异常,Jtest报告一个错误,并提供导致错误的栈轨迹和调用序列。Jtest的先进技术保证它能够自动测试类的所有代码分支,从而彻底检查被测类的结构。
换句话说,Jtest自动生成高质量的测试用例集合,发现尽可能多的结构性错误,而且:
不需要用户写一点测试脚本语言或测试用例。
不需要用户写测试驱动程序。
不修改源代码。
不要求完整的应用。
Jtest报告下列未捕获的运行时异常:
行为错误的方法:这些方法对于某些特定输入不会产生异常。必须修改这些代码。
非预期参数:这一问题出现在当某方法遇到非预期的输入(不知任何处理)而产生一个异常。这些问题的修正可以通过检查输入并产生一个IllegalArgumentException (IAE)(假如该输入是非法的)。改正这类问题可以使代码更清晰更易维护。
行为正确的方法:这时,方法的正确输出是产生一个异常。在这种情形下,建议开发人员修改代码,将这类异常的产生置于方法的throw子句中。这会得到更清晰的代码并易于维护。
为开发人员使用的方法:在这种情况下,这些方法"不被假设"成处理Jtest生成的输入,开发人员是这些方法的唯一使用者,并且不传递这些输入参数。最好的办法是修改这些代码,让它产生一个IAE。这将带来额外的好处,使代码更易阅读。
总之,通过执行自动白盒测试,并提示上述类型的问题,Jtest能够为开发人员节省大量的时间并防止了错误。由于能够自动执行白盒测试的各个步骤,Jtest对开发人员来说是非常实用的,为了保证质量可以经常执行这一综合性测试。更进一步,使用测试生成系统技术产生的测试输入,Jtest使得白盒测试比手工测试更精确更有效。
白盒(构造)测试验证对一个类的非预期输入不会导致程序的崩溃。为执行白盒测试,您需要设计和执行根据类的内部结构编写的测试输入,检查是否存在会导致类运行失败的任何可能的对类的使用,以及是否存在某些编程缺陷可能会导致代码更容易出错。白盒测试能否成功的关键取决于测试输入的能力,是否能够尽可能全面地覆盖类的方法,并找出引起未捕捉到的运行时异常的输入。
尽可能早的防止和检测构造问题对Java软件开发来说更为关键。在大多数语言(如C和C++)中,一个非法程序操作常常导致程序的突然中断。Java相对来说提供了一种非常简单的机制来捕获运行时出现的异常并让程序继续运行,这种机制的设计可以简化对系统和其它服务调用的处理。另一方面,一个非法操作引起运行时异常确实指出了程序中的一个错误。捕捉它们并让程序继续运行通常比C++中的突然中断更有问题。带有问题的程序将继续运行是乎好象没有问题出现过,但极有可能进入一种矛盾状态,并产生不准确的结果或破坏它所存取的资源。
虽然白盒测试是保证类和应用质量的一个关键步骤,但手工执行的难度通常会使开发人员望而却步或草草了事。有效地执行白盒测试需要我们能够确定要完全检查被测类那些测试用例是必需的,这对于手工测试来说是太难了。目前的研究表明,典型的公司只测试了其开发的30%的代码,而其余的70%从来没有被测过。一个原因是编写能够测试很少执行的路径或极端的条件的测试用例很困难。例如,一个典型的1万行代码大约有1亿条可能的路径;手工编写能够执行所有路径的测试输入是不可行的或者说几乎是不可能的。