程序故障已经成为软件产业快速、健康发展的主要障碍之一,程序故障的修复对软件的开发周期、质量和成本有极其重要的影响。完全采用手工方式进行故障分析和修复已经难以适应快速发展的软件产业。目前,国际上已经开始对故障自动定位和自动化修复进行理论研究。本项目通过揭示故障描述中影响故障原因分析和修复的关键因素,提出一种故障描述语言;为故障分析和修复建立适宜复杂程序、且可扩展的层次化程序表示理论模型;采用空间和时间层次搜索技术,研究故障原因分析方法,建立故障原因分析模型;探索采用变异技术自动生成高质量修复代码的方法;在故障描述语言以及基于变异的修复代码生成方面进行创新,形成一套基于变异的自动化程序修复新方法。项目成果对程序自动化调试、缩短软件开发周期、提高软件经济承受性等方面具有十分重要的科学意义。
Fault classification;Fault Localization;Mutation technology;automated fixing(or repair);
项目分析了C语言表达式的语法结构,将其划分为8类形式化表示,结合8类表达式抽象语法结构的特征,通过抽象语法树的各种变形形式,提出了一种基于表达式抽象语法树的故障分类方法,共描述了71类表达式故障类型,设计并实现了程序故障自动归类的辅助工具,提出的故障分类方法对C语言表达式故障特征进行详细刻画,可以提升识别和定位C语言表达式故障的能力,指导故障报告的撰写。提出If-While-If程序模型可以捕获C程序结构和语句执行特征,并定义了5种单故障类型和10种双故障类型,用以仿真真实的故障程序,基于该模型可以实现对故障定位度量方法的平均性能进行计算。在If-While-If基础上,通过大量的实验,项目又进一步发现了一种向量表模型驱动的形式化理论框架,可以评估一个故障排名度量方法是否是最优的,可以比较两种基于频谱故障定位方法的优劣;基于该理论框架,项目还提出了评估测试套件质量的方法,使得测试套件对故障定位效果的贡献达到最优。针对目前流行的组合测试,提出了基于组合测试的最小失败模式的故障定位技术,可以计算程序故障感染链或部分故障感染链。项目针对基于内存分析的Delta调试存在的问题,通过对已知测试套件中测试用例在程序某断点的内存情况和执行结果进行统计分析的方法,推断该断点进行内存替换后程序执行结果是否成功,输出故障程序的可疑变量集,项目开发的辅助支持工具可以实现以一个成功测试和一个失败测试用例作为输入,自动在断点处进行值替换、自动推断替换后内存值继续执行的结果,输出故障程序的可疑变量集。项目提出了基于变异技术的故障修复方法,对C程序赋值语句和条件语句的故障进行分类,设计了九种变异修复算子,并设计和实现了可扩展的程序自动化修复框架Tailor Fix,可以自动化有效修复包含赋值语句和条件表达式故障的C程序,同时修复算子可以无限制进行扩展,Tailor Fix为任意类型故障的自动化修复奠定了理论基础和实践基础。研究成果所用的实验案例(有100行至3万行代码的各种C语言程序)均来自美国研究用案例集SIR知识库和实际项目程序案例。取得的研究成果基本达到了预期,已经发表了研究论文6篇,部分研究成果还在陆续整理发表,在研究期间,进行了多次国际学术交流,辅助培养了3个硕士研究生,指导了4人次本科毕业优秀论文。