Jacks:Java兼容性测试,开放源码之路

发表于:2008-11-19 15:49

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Maya Stodte    来源:网络转载

  什么是 Jacks?

  Jacks 测试套件检查 Java 编译器是否符合 JLS(Java 语言规范)。它由大量小测试案例组成,每个测试都侧重于 JLS 中特定的部分。Eric Blake 为 Jacks 项目作出了很大贡献,他从面向细节领域描述了这种类型测试的好处。“通过生成带有指定编译行为的小测试案例,然后将每个案例的执行自动化,编译器作者或调试者可以快速找出 Java 源码到字节码转换中存在的问题。”

  开发 Jacks 背后的概念是要简化对多编译器或多编译器配置所运行的测试(例如,对上两个发行版的 Jikes 和 Javac 的 JDK 1.3 发行版所进行的一组测试)。如果手工进行,您必须重复地设置环境变量,然后根据所期望的结果来检查测试结果。而通过使用 Jacks,只需要更改到存放测试的目录, 调用 Jacks 框架,然后表明应该使用哪个编译器配置。

  Sun 没有履行对 Java 开发者所做的承诺激发了 Jikes 小组对 Jacks 项目的设置和运行。Sun 再三声明它会把 Java、JCK(Java Compatibility Kit)和相关 Java 技术交到一个标准主体的手中。但因为这还没有实现,从事 Java 项目的开发者就不能使用 JCK 来对日常的开发进行回归测试。当面对由于不合理的许可证限制而导致的代码人为不足时,他们倾向于用新的更完善的系统来替换旧系统。这就是发生在 Jacks 上的故事。(尽管 Jacks 由 developerWorks 主持,它受 GPL 而非 IBM Public License 约束。)

  使用 Jacks

  Jacks 是以 Tcl 编写的,因此需要确保拥有 Tcl 8.3。(需要版本 8.3 来确保具有 tcltest 扩展和 Unicode 支持,这两者都是 Jacks 所必需的)。可以下载用于 Windows 的安装程序和用于 Red Hat x86 的 RPM,也可以更方便地从源代码中构建。如果您不知道到什么地方下载,请参阅本文稍后的 参考资料 部分;如果使用的是 Red Hat 7,很可能已安装了 Tcl 8.3。

  安装了 Tcl 后,需要从 CVS 取出 Jacks。然后通过将编译器路径名包括在要测试的编译器的 Jacks _setup 配置文件中来配置 Jacks。对于每个希望支持的配置都需要一个 _setup 文件。例如,Jacks 带有 javac_setup 文件。需要编辑该文件来为 javac 设置路径。Eric Blake 说,“最困难的部分是断定如何测试 Jikes,因为我在环境中已设置了 JIKESPATH。但我想出了要在 jikes_setup 配置文件中更改什么内容,一切都很顺利。”

  从 CVS 模块中取出 Jacks 源代码

setenv CVSROOT :pserver:anoncvs@oss.software.ibm.com:/usr/cvs/jikes

cvs login

paswsd anoncvs

cvs checkout jacks

  可以对数量不限的编译器或编译器配置使用 Jacks。要除去某一编译器的配置,只需要删除其 _setup 文件。

  从 CVS 中取出源代码后,就需要在路径中包括顶层 Jacks 目录,这样才能运行 Jacks shell 脚本。为谨慎起见,最初运行 shell 脚本时应该不带任何自变量,以确保每项都经过正确配置。

% jacks

  如果一切正常,将看到 Jacks 脚本所接受的命令行选项的清单。如果收到错误,请检查在路径中是否能找到可执行文件 tclsh8.3。Windows 用户需要直接运行 tclsh83,并将 jacks.tcl 自变量在一般标志之前传递给它。还应该考虑安装 Cygwin UNIX 兼容性层,这样,象 Unix 用户一样,您就可以使用提供的 shell 脚本来运行 Jacks 了。下面的指令假设您使用的是 shell 脚本。

  对于测试示例,需要使用 Jikes 编译器来运行给定子目录中的所有测试,命令如下:

% cd tests/jls/packages/package-declarations/unnamed-packages

% jacks jikes

  开发新的回归测试

  开发新的 Jacks 测试案例非常简便。照 Eric Blakes 的话说,“基本上,您设计一个简单的源文件来测试问题,将它放在特定的 Jacks 格式中,然后运行 Jacks。如果编译器结果与所期望的结果不一样,它打印出错误。”这里是 Jacks 主页上教程中有关添加新测试案例的一例:

// File SynchronizedInterface.java

public synchronized interface SynchronizedInterface {}

  使用 Jikes 编译时,生成以下错误:

% jikes SynchronizedInterface.java

Found 1 semantic error compiling "SynchronizedInterface.java":

3. public synchronized interface SynchronizedInterface {}

<---------->

*** Error: synchronized is not a valid interface modifier.

  

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号