由于部分原因,此软件暂不开源
作品首先开发了一款Eclipse插件用于Java代码的结构与流程重构,实现了代码格式与命名的规范化以及等价语句转换等功能;之后,提出并实现了一款Java多线程程序的并发漏洞检测软件,实现了数据竞争的高效、精准定位。具体功能如下:
- 使用JDT的CodeFormatter类进行代码格式重构,实现了换行、空白、大括号的自动补全。
- 使用JDT的RenameSupport类进行命名重构,实现了包、类、接口、枚举、方法、常量、成员变量、参数、局部变量名的自动重构。能够正确处理继承、外部依赖等关系,并能动态监测重构中遇到的错误。
- 使用ANTLR进行等价语句转换,实现了for到while、if-else到switch-case、switch-case到if-else以及嵌套if语句到单条if语句的转换。能够正确处理语句的嵌套关系。
- Java多线程程序数据竞争检测: 首先使用SOOT分析并修改程序的字节码,在与并发相关的语句处插入回调函数,从而捕捉多线程程序运行时的相关动作。基于多线程程序的单次运行轨迹可挖掘程序的Petir网模型。该模型虽然由分析单一运行轨迹而得,但其隐含了多条潜在的运行轨迹。其次借助Petir网的展开与分支进程技术,对程序中潜在的数据竞争进行检测。为提高检测效率,使用EsParza提出的最小完备前缀算法对传统的McMillan展开做了优化。最后,为确保数据竞争检测的准确性,使用CalFuzzer调度线程的运行对数据竞争进行重演。
作品前三部分的特色在于部署方便,可在普及度较高的Eclipse下直接运行,并且可实现一些大型工程的重构。作品第四部分的特色在于对已有的数据竞争检测算法做了改进,2003年ACM PLDI上提出的HyBrid与2018年CCF B类会议PPoPP上提出的VerifiedFT都只能针对程序的单次运行轨迹进行检测,而作品由程序的一次运行轨迹出发还原出了多线程程序的并发流程结构,在这个结构的基础上分析出了更多潜在的数据竞争。并且使用CalFuzzer调度线程的运行对数据竞争进行重演,使我们的检测具有更高的真实性。作品首次将Petri网及其展开技术应用于Java多线程程序的动态数据竞争检测,具有一定的理论创新和实际的应用价值。
基础组件的开发环境为Win10+JDK 1.8+Antlr 4.4+Eclipse 2019-03。 使用前保证Java环境为JDK 1.7或JDK 1.8,Eclipse版本为2018版及以上即可。
安装步骤较为简单。将插件工程export成jar包,然后把jar包放在\eclipse\plugins目录下,然后删除\eclipse\configuration\org.eclipse.update\platform.xml,最后重启eclipse就可以了。
安装完成后,启动eclipse,工具栏中会出现插件的图标: 点击图标,插件会自动读取在Eclipse中打开的Java工程,解析每个工程的语法树,并按照“工程名+备份”的命名格式将个工程自动备份到其原目录下。这几项工作完成后,插件会弹窗提示备份完成。 之后会显示作品主界面,通过点击主窗口上面的选项卡来选择相应的重构功能,我们提供了代码格式化、重命名重构、等价语句转换等功能: