论文部分内容阅读
作为一种重要的支持技术,并发程序演化技术能够持续地改进并发代码的品质,提高软件开发与维护的效率。重构是软件演化的一种重要手段,它在不改变软件外在行为的情况下,修改程序的内在结构,从而改善代码的可读性、可维护性、可扩展性等。面向并发的代码重构研究大体上可以分为两个方面:顺序代码的并行化重构以及并发代码的自身优化重构。目前这两个方面的工作仍有很多不足之处。在并行化重构方面,现有研究在处理包含容器使用的循环时,常常受制于容器自身使用造成的数据依赖,而不能识别许多并行化契机。针对这种问题,本文对Java程序提出了基于顺序无关容器标注的动态循环级可并行性识别方法,该方法首先对程序中顺序无关的容器类型属性域和变量进行手工标注,而后插桩并运行程序以获取依赖信息,收集顺序无关容器对象,最后过滤掉顺序无关容器造成的依赖,即可发现更多并行化重构契机,进而实施更多针对性的重构。在并发代码自身优化重构方面,虽然已有很多重构技术,但是对于属性域原子化、保护区分解、锁分解等一些已知的针对同步的重构模式,还缺少自动挖掘值得重构代码片段的手段,也缺少安全自动的代码转换方法。为此,本文针对Java代码提出了锁分解、保护区分解以及属性域原子化三个重构模式的自动化重构方法。该方法根据类属性域在不同保护区内的使用情况来推断它们之间的同步需求,然后根据同步需求分析结果来进行重构转换,整个过程除最终确认外无需用户手工干预,比现有工作更加自动化。最后,我们在Eclipse LTK框架平台下基于Soot字节码分析平台以及Eclipse JDT设计并实现了Java并发程序重构工具CODEREBUILDER。该工具在顺序代码到并发代码的重构方面可以为用户提供循环分析报告,推荐具有并行价值的循环。而在Java并发代码自身优化方面,工具可以进行锁分解、保护区分解以及属性域原子化自动化重构。最终的实验结果证明了工具的有效性。