论文摘要:在编译器质量保证中,编译器测试与调试是其中最广泛使用的技术手段。编译器测试通过运行测试用例进行缺陷检测,编译器调试对缺陷进行诊断及修复。为了保证编译器的质量,本文进一步探索编译器测试与调试相关技术。本文的主要研究工作及创新点如下:
- 进行了基于测试数据分析的编译器测试技术效果探究。该实证研究探究了三种主流编译器测试技术在两个通用编译器上的测试效果。该实证研究揭示三种编译器测试技术在不同的场景下各具优势、彼此互补,并且测试代码效果、测试预言强度,以及效率对编译器测试效果具有显著影响。
- 提出了基于历史数据学习的编译器测试加速技术。该技术通过对大量历史数据进行分析,提取出测试代码中与编译器缺陷相关的特征(包括代码的语言特征、操作特 征,以及结构特征),分别利用支持向量机算法(SMO)、高斯过程,以及梯度增强回归算法构造出三个预测模型。
- 提出了基于历史缺陷分析的编译器重复缺陷检测技术。该技术通过挖掘历史上测试代码触发缺陷的原因,提取出代码特征(包括词法特征、语法特征,以及本文首次提出的数据流特征)和缺陷报告中的文本特征,然后根据这些特征计算触发缺陷的测试代码之间的距离,从而检测重复缺陷。
- 提出了基于测试数据生成的编译器缺陷辅助定位技术。该技术将缺陷辅助定位问题转化为有效的证人测试代码生成问题。在GCC和LLVM编译器的现实缺陷上进行实验,该技术能够将66.67%的缺陷的缺陷所在文件定位在所有可疑文件的前10位。
关键词:编译器质量,编译器测试,编译器调试,数据驱动
作者介绍:陈俊洁,北京大学计算机软件与理论专业博士,他的博士生导师是谢冰。研究方向为软件测试。