论文部分内容阅读
编译器是软件开发的基础支撑性工具,它的正确性直接影响到应用软件的可靠性,保证其质量的有效手段之一是软件测试。优化是编译过程中的重要阶段,它主要通过对程序进行等价性变换来提高目标程序的执行性能,或缩减目标程序的代码规模、降低程序的运行功耗等。编译优化测试是针对编译器优化功能和效果的测试,检查经过优化变换后的代码是否保持了原程序的功能语义、是否达到了性能改进的目标。
编译测试的主要流程和通常的软件测试一样,包括了测试用例生成、测试用例执行以及测试结果判定等活动。编译器测试中的测试用例是高级语言源程序,手工生成工作量大,难以保证充分的覆盖度,为提高效率,需要有自动化的测试用例生成方法。自动化的测试用例生成方法需要对优化进行形式化描述作为支撑。
典型的优化变换包括四个部分:源程序、目标程序、变换动作以及变换实施的使能条件,其中使能条件是源程序具有的某种程序性质。变换描述语言TRANS采用条件重写规则描述优化变换,其中使能条件用时序逻辑公式表示。
循环优化是一种重要的优化,其变换的实施通常涉及到循环结构、归纳变量、循环依赖的识别。本文针对循环优化的特点,对TRANS语言做了宏扩展,详细讲述了循环、循环嵌套、归纳变量、循环依赖等循环结构和基础特征的时序逻辑特性,给出相应的TRAINs语言宏定义;并以循环逆转、循环交换、循环合并三个典型的优化为例阐述了扩展宏定义的使用方法。扩展的宏定义能简化复杂的循环优化变换描述结果,为针对优化的测试用例自动化生成以及形式化验证研究奠定了基础。
本文提出了一种基于时序逻辑的编译优化测试用例生成方法。该方法通过变换中涉及的关键语句和它们之间的关系构造测试用例的模板,在模板之上通过随机策略插入程序语句从而完成测试用例的生成。它的核心是关键结点控制图生成算法,关键结点控制图是测试用例模板的表现形式,算法包括三个阶段:初始化、时序逻辑公式规整化和图的生成。该方法为多种编译优化的测试提供了统一的用例生成方法,生成的测试用例具较强针对性。