论文部分内容阅读
编译优化是现代编译器不可缺少的重要功能。编译优化技术在过去几十年里取得了显著进展,对提升程序运行速度、节省存储空间、节省能耗等起到了不可替代的作用。然而,编译优化的可靠性却不尽人意。编译优化技术种类多、处理复杂而且可复用性弱,容易出错,即便是成熟的编译器,也不断有与编译优化相关的bug被发现出来。编译器的可靠性对软件产品的可靠性和安全性有直接影响,随着编译优化在现代编译器中的比重不断增加,编译优化的可靠性也日益受到人们的关注。
软件测试是保障编译优化可靠性的基本技术手段之一,然而,编译优化测试涉及测试程序编写、测试执行等过程,人工完成相当费时费力,因此有必要研究编译优化自动测试方法,以提高编译优化测试的效率。基于这一实际需求,Intel、MEI(Matsushita Electric Industrial)、DaimlerChrysler AG等业界产商近年来也相继与有关研究机构开展合作,研究编译优化自动测试方法。
目前已有的编译器自动测试方法中大多数都是以程序设计语言的语法和语义为主要依据,适用于测试语法检查、语义检查、代码生成等基本编译功能,对于编译优化的测试则缺乏针对性,测试效率较低,而已有的若干种面向编译优化的自动测试方法也存在着对编译优化刻画不够准确、自动化程度不高等缺陷。
本文提出一种基于形式描述的编译优化自动测试方法(TEMCOFS),其实现过程分为四个阶段,即:(1)建立编译优化形式描述;(2)分析编译优化描述的正确性;(3)基于编译优化形式描述自动生成测试程序;(4)自动执行测试。在TEMCOFS方法框架下,本文分别研究了编译优化形式化描述方法、编译优化描述正确性分析方法和基于形式描述的两种自动测试方法,实现了三类典型优化—表达式优化、数据流优化、循环优化的自动测试,主要工作包括:
(1)在编译优化形式描述方面,除了应用前人研究成果—TRANS语言描述了表达式优化和数据流优化之外,还对TRANS语言进行了扩展,建立了循环优化的形式描述机制;
(2)在编译优化正确性分析方面,首先证明了揭示程序数据依赖关系对程序变换正确性影响的依赖基础定理,为循环优化正确性分析提供了基础,然后探讨了编译优化正确性分析的一般方法;
(3)在测试自动执行方面,提出了编译优化自动变形测试执行方法,该方法将变形测试思想引入编译优化测试中,利用测试程序等价性质实现测试结果的自动判定,能够避免传统方法中测试结果判定所存在的问题;
(4)在测试程序自动生成方面,分别对应两种测试自动执行方法—比照法和变形法提出了基于编译优化形式描述的测试程序自动生成方法,能够根据表达式优化、数据流优化、循环优化的形式描述自动生成测试程序集。
在GCC编译器上的实验表明,基于本文方法自动生成的测试程序集可使GCC的编译优化模块较快达到较高的测试覆盖率。与其他编译器自动测试方法相比,本文方法对编译优化测试的针对性较好,自动化程度也较高。总而言之,本文方法对于提高编译优化测试效率、保障优化编译器的质量具有较好的实用和参考价值。