CN114780374A - 一种基于细粒度优化选项配置差分的编译器缺陷定位方法 - Google Patents

一种基于细粒度优化选项配置差分的编译器缺陷定位方法 Download PDF

Info

Publication number
CN114780374A
CN114780374A CN202111593390.4A CN202111593390A CN114780374A CN 114780374 A CN114780374 A CN 114780374A CN 202111593390 A CN202111593390 A CN 202111593390A CN 114780374 A CN114780374 A CN 114780374A
Authority
CN
China
Prior art keywords
optimization
compiler
defect
configuration
fine
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202111593390.4A
Other languages
English (en)
Inventor
杨已彪
杨静
卢红敏
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nanjing University
Original Assignee
Nanjing University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nanjing University filed Critical Nanjing University
Priority to CN202111593390.4A priority Critical patent/CN114780374A/zh
Publication of CN114780374A publication Critical patent/CN114780374A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3676Test management for coverage analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/366Software debugging using diagnostics

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明提供了一种基于细粒度优化选项配置差分的编译器缺陷定位方法,主要步骤:1)识别缺陷相关和无关的细粒度优化选项;2)关闭缺陷无关优化选项以得到使用优化尽可能少地触发缺陷的优化配置;3)组合关闭各缺陷相关优化以搜索接近的未触发缺陷的优化配置;4)获取不同优化配置编译器自身的覆盖信息;5)使用基于频谱缺陷定位方法计算各代码行是缺陷代码行的可疑值;6)将代码行级别的可疑值聚合到文件级别,根据各文件的可疑值进行缺陷定位。本发明解决了现有编译器缺陷定位方法效率低且准确性不足等问题,用细粒度优化选项配置差分的方式代替见证测试程序的生成,能有效定位编译器的缺陷。

Description

一种基于细粒度优化选项配置差分的编译器缺陷定位方法
技术领域
本发明涉及软件缺陷定位领域,特别是编译器的缺陷定位,是一种基于细粒度优化选项配置差分的编译器缺陷定位方法。
背景技术
编译器是软件开发中核心基础设施,主要用于将用户编写的源代码翻译为计算机可执行的机器码。作为复杂的大型软件系统,编译器自身存在大量的缺陷。隐藏在编译器中的缺陷不可避免地对其编译生成的软件系统的正确性产生决定性的影响。编译器主要由前端组件、后端组件和优化组件所组成,其中优化组件是最容易潜藏缺陷的组件。编译器开发人员最重要的任务之一是定位和修复编译优化类的缺陷。由于编译器功能复杂、规模庞大,准确定位编译器中的缺陷文件非常困难,因此自动化地定位编译器的缺陷具有重要意义。此外,编译器支持大量的优化配置,自动化定位编译器中的优化类缺陷存在很大挑战。为此,近期研究者提出通过代码变异来生成见证测试程序以自动定位编译器的优化缺陷。然而,当前提出的编译器缺陷定位技术仍然存在一定的局限性。首先,由于不能保证变异的测试程序可以触发与给定的失败测试程序相同的缺陷,因此无法得到多个失败的测试用例以至于基于频谱的缺陷定位信息不够充分;其次,现有方法需要进行大量变异以得到通过测试的测试程序,时间开销很大。基于细粒度优化选项配置差分的编译器缺陷定位方法可以有效解决现有问题,能更加准确和高效进行编译器的缺陷定位。
发明内容
本发明在于提供一种基于细粒度优化选项配置差分的编译器缺陷定位方法,解决编译器缺陷定位技术中多个失败覆盖信息的缺失且测试用例生成过程低效的瓶颈问题。本发明能自动化地进行高效且有效的编译器的缺陷定位,进而保障了在编译器的基础上构建的软件系统的可靠性与正确性。
为了有效且高效地定位编译器优化组件的缺陷,本发明公开了一种基于细粒度优化选项配置差分的编译器缺陷定位方法,具体包括下列步骤:
步骤1,识别出由触发缺陷的粗粒度优化级别开启的缺陷相关和缺陷无关的细粒度优化选项;
步骤2,初始化优化配置;
步骤3,基于缺陷相关和缺陷无关的细粒度优化选项,利用组合搜索的方法找出开启尽可能少优化的失败优化配置以及与失败配置相似的成功优化配置;
步骤4,使用覆盖工具生成失败优化配置和成功优化配置下的编译器覆盖报告;
步骤5,利用基于频谱的缺陷定位技术计算编译器代码行的可疑值;
步骤6,聚合行级可疑值到编译器文件,根据编译器文件的可疑值对文件进行排序且排名靠前的编译器文件为缺陷文件的可能性最大。
步骤1中,在编译器中,粗粒度的优化级别会开启上百个细粒度的优化选项。逐个关闭触发缺陷的粗粒度优化级别下的细粒度优化选项,如果编译结果从失败变为成功,那么当前细粒度的优化选项就是缺陷相关的优化选项;如果编译结果仍为失败,则为缺陷无关的优化选项。
步骤2中,关闭全部的缺陷无关的细粒度优化选项,开启全部的缺陷相关的细粒度优化选项,由此配置一个初始的编译器优化序列。由此,初始优化序列使用较少的优化且以较高的概率触发缺陷。
步骤3中,缺陷相关和缺陷无关的优化选项构成了搜索空间,在步骤2得到的初始化编译优化配置的基础上,以组合搜索的方式关闭/开启搜索空间中的优化选项,构建使用优化最少的失败优化配置以及与之相似的成功优化配置。具体而言,每种优化配置都会产生两种类型的编译结果,即通过和失败。相应地,搜索过程可以概括为三种操作:1)如果在当前的优化配置下得到失败编译结果,用组合搜索的方式关闭那些已开启的选项,直到找到足够多的成功配置。在这个过程中发现一个或多个失败的配置时,新的配置会取代之前的失败配置,并继续执行这个步骤,直到达到终止条件。2)如果在当前的优化配置下编译结果是成功的且已经找到了失败的配置,执行与1)相同的操作。3)如果在当前的优化配置下编译结果是成功的且尚未找到失败的配置,用组合搜索法启用那些被禁用的选项,寻找下一个配置直到找到第一个失败的优化配置。
步骤4中,用步骤3得到的失败优化配置和成功优化配置分别编译测试程序,并利用覆盖工具对缺陷编译器插桩,以此得到缺陷编译器的若干失败测试覆盖和成功测试覆盖。
步骤5中,在得到缺陷编译器的若干覆盖信息后,基于频谱的缺陷定位技术可计算出编译器代码行的可疑值。
步骤6中,将编译器的代码行的可疑值聚合到文件级,由此,得到编译器文件的可疑排名,文件的排名越高则该文件为缺陷文件的概率越大。
本发明用编译器的优化配置的构建代替测试程序的变异生成来定位编译器的缺陷位置,解决了现有技术的多个失败覆盖信息缺失且消耗大量资源的问题。本发明的全部步骤都是自动化地进行,定位结果较现有技术有大幅提升,可以大大减轻编译器开发人员的缺陷定位负担。本发明的执行过程简明高效,能有效定位编译器缺陷位置,以便后续缺陷的修复。
有益效果:通过本方法可以有效定位出缺陷编译器的缺陷文件,同时避免了变异生成大量的测试程序用例,有效应对了多个失败测试覆盖缺失的挑战,能够有效且高效地定位缺陷编译器文件,为编译器的缺陷定位提供了一个新的解决方案。
附图说明
下面结合附图和具体实施方式对本发明做更进一步的具体说明,本发明的上述或其他方面的优点将会变的更加清楚。
图1是基于细粒度优化选项配置差分的编译器缺陷定位方法流程图。
图2是识别细粒度缺陷相关和缺陷无关优化选项的流程图。
图3是搜索编译器优化配置的流程图。
图4是定位编译器缺陷文件的流程图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚明晰,本章结合附图对发明做更进一步的详细描述。
图1为本发明一种基于细粒度优化选项配置差分的编译器缺陷定位方法的流程图。包括6个步骤,过程如下:
步骤1,识别出触发缺陷的优化级别下的缺陷相关和缺陷细粒度优化选项;
步骤2,初始化编译器的优化配置,关闭全部的缺陷无关选项且开启全部的缺陷相关选项。
步骤3,基于细粒度选项集合和初始编译器优化配置,搜索使用优化尽可能少的失败优化配置和与之相似的成功优化配置。
步骤4,根据搜索到的优化配置,用代码覆盖工具获取编译器对应的覆盖信息。
步骤5,利用基于频谱的缺陷定位技术计算编译器代码行的可疑值。
步骤6,聚合编译器代码行的可疑值到编译器文件,根据文件的可以排名结果定位编译器缺陷文件。
图2是步骤1识别细粒度缺陷相关和缺陷无关优化选项的流程图。给定一个触发缺陷的粗粒度优化级别,识别出对应的细粒度的优化选项的过程如下:
步骤2-1,收集触发缺陷的粗粒度优化级别开启的细粒度优化选项,逐个关闭这些细粒度的优化选项。例如,缺陷编译器GCC的#71439缺陷,“-03”为触发缺陷的粗粒度优化级别,它开启了136个细粒度的优化选项:-finline-functions-called-once、-fira-hoist-pressure、-ftree-loop-vectorize、-fpeel-loops等等。
步骤2-2,触发缺陷的优化级别和某个被关闭的细粒度的优化选项构成了优化序列配置,用构建的优化序列编译测试程序,如果编译结果从失败变为成功,则该选项为缺陷相关的优化选项;否则,为编译无关的优化选项。比如,“-03-fno-tree-loop-vectorize”编译配置使编译结果从失败转变为成功,则“-ftree-loop-vectorize”为细粒度缺陷相关优化选项;而“-03-fno-peel-loops”没有改变编译结果,则“-fpeel-loops”为细粒度缺陷无关优化选项。
图3是步骤3搜索编译器优化配置的流程图,即找出使用优化尽可能少的失败优化配置以及与失败配置相似的成功优化配置,其过程如下:
步骤3-1,在步骤2中,通过关闭所有缺陷无关优化选项、开启所有缺陷相关优化选项配置了初始优化序列。首先判断这个优化序列能否触发缺陷,若能触发缺陷,则进入步骤3-2;否则进入步骤3-3。
步骤3-2,当前优化配置能触发缺陷,将该配置加入失败优化配置集,进入步骤3-4。
步骤3-3,当前优化配置不能触发缺陷,组合开启已关闭的优化选项,如果新的优化配置能触发缺陷则进入步骤3-2;否则重复当前步骤3-3。
步骤3-4,组合关闭已开启的细粒度选项并判断新的优化选项配置能否触发缺陷。若能触发缺陷则重复当前步骤3-2;否则进入步骤3-5。
步骤3-5添加当前优化配置到成功优化配置集合,判断成功优化配置集合中的元素数量是否充足,若收集到足够数量的成功优化配置,如“已收集到30个成功优化配置”,则结束该过程,表明已经收集到充分的优化配置;否则重复步骤3-4。
图4是步骤6定位编译器缺陷文件的流程图,即聚合编译器代码行的可疑值到编译器文件并根据文件可疑值排名定位编译器缺陷,其过程如下:
步骤5-1,给定一个有缺陷的编译器的代码行可疑值,用平均聚合的方法计算出编译器各个文件的可疑值,根据文件的可疑值并按照逆序排序对文件进行排名,排名靠前的编译器文件为缺陷文件的可能性最高。
本发明提供了一种基于细粒度优化选项配置差分的编译器缺陷定位方法,具体实现该技术方案的方法和途径很多,以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。本实施例中未明确的各组成部分均可用现有技术加以实现。

Claims (7)

1.一种基于细粒度优化选项配置差分的编译器缺陷定位方法,其特征在于利用多个失败优化配置和成功优化配置获得缺陷编译器的覆盖报告以定位编译器的缺陷文件,该方法将测试用例的生成问题转化为优化配置的搜索问题,从而解决了目前编译器缺陷定位技术的耗时长且缺少多个失败覆盖信息的问题。该方法能自动化地有效定位编译器的缺陷文件,有助于提高开发人员调试编译器缺陷的工作效率。本方法主要包括下列步骤:
1)识别细粒度优化选项:
在编译器中,粗粒度的优化级别会开启上百个细粒度的优化选项。逐个关闭触发缺陷的粗粒度优化级别下的细粒度优化选项,如果编译结果由失败变为成功,那么当前细粒度的优化选项就是缺陷相关的优化选项;如果编译结果仍为失败,则为缺陷无关的优化选项。
2)初始化优化选项配置:
接着,关闭全部的缺陷无关的细粒度优化选项,开启全部的缺陷相关的细粒度优化选项,由此配置一个初始的编译器优化序列。由此,初始优化序列使用较少的优化且以较高的概率触发缺陷。
3)搜索优化配置:
缺陷相关和缺陷无关的优化选项构成了搜索空间,在步骤2得到的初始化编译优化配置的基础上,以组合搜索的方式关闭/开启搜索空间中的优化选项,构建使用优化最少的失败优化配置以及与之相似的成功优化配置。具体而言,每种优化配置都会产生两种类型的编译结果,即通过和失败。相应地,搜索过程可以概括为三种操作:1)如果在当前的优化配置下得到失败编译结果,用组合搜索的方式关闭那些已开启的选项,直到找到足够多的成功配置。在这个过程中发现一个或多个失败的配置时,新的配置会取代之前的失败配置,并继续执行这个步骤,直到达到终止条件;2)如果在当前的优化配置下编译结果是成功的且已经找到了失败的配置,执行与1)相同的操作;3)如果在当前的优化配置下编译结果是成功的且尚未找到失败的配置,用组合搜索法启用那些被禁用的选项,寻找下一个配置直到找到第一个失败的优化配置。
4)生成覆盖报告:
用步骤3得到的失败优化配置和成功优化配置分别编译测试程序,并利用覆盖工具对缺陷编译器插桩,以此得到缺陷编译器的若干失败测试覆盖和成功测试覆盖。
5)计算代码可疑值:
在得到缺陷编译器的若干覆盖信息后,基于频谱的缺陷定位技术可计算出编译器代码行的可疑值。
6)缺陷定位:
将编译器的代码行的可疑值聚合到文件级,由此,得到编译器文件的可疑排名,文件的排名越高则该文件为缺陷文件的概率越大。
2.根据权利要求1中所述的基于细粒度优化选项配置差分的编译器缺陷定位方法,其特征在于,在步骤1)中,本方法利用细粒度的优化选项并提出了缺陷相关优化选项和缺陷无关优化选项的概念,从而使编译器的缺陷定位更准确更高效。
3.根据权利要求1所述的基于细粒度优化选项配置差分的编译器缺陷定位方法,其特征在于,在步骤2)中,本方法通过关闭缺陷无关选项开启缺陷相关选项来初始化优化序列,这有利于加速优化配置的搜索过程。
4.根据权利要求1所述的基于细粒度优化选项配置差分的编译器缺陷定位方法,其特征在于,在步骤3)中,在初始优化配置的基础上,本方法利用组合搜索的方法关闭/开启细粒度的优化选项来配置优化序列,该过程耗时短且能收集到多个失败优化配置和充足的成功优化配置。
5.根据权利要求1所述的基于细粒度优化选项配置差分的编译器缺陷定位方法,其特征在于,在步骤4)中,本方法用代码覆盖工具对编译器进行插桩从而获得编译器的代码行的覆盖报告,利用现有成熟工具获得覆盖信息提高了覆盖信息的可靠性。
6.根据权利要求1所述的基于细粒度优化选项配置差分的编译器缺陷定位方法,其特征在于,在步骤5)中,本方法利用基于频谱的缺陷定位方法计算编译器代码行的可疑值,可以高效地得到编译器每行代码的可疑值以进行编译器的缺陷定位。
7.根据权利要求1所述的基于细粒度优化选项配置差分的编译器缺陷定位方法,其特征在于,在步骤6)中,本方法用平均聚合的方法将编译器行级可疑值聚合到文件级,提高了编译器缺陷定位的准确性。
CN202111593390.4A 2021-12-23 2021-12-23 一种基于细粒度优化选项配置差分的编译器缺陷定位方法 Pending CN114780374A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111593390.4A CN114780374A (zh) 2021-12-23 2021-12-23 一种基于细粒度优化选项配置差分的编译器缺陷定位方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111593390.4A CN114780374A (zh) 2021-12-23 2021-12-23 一种基于细粒度优化选项配置差分的编译器缺陷定位方法

Publications (1)

Publication Number Publication Date
CN114780374A true CN114780374A (zh) 2022-07-22

Family

ID=82423730

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111593390.4A Pending CN114780374A (zh) 2021-12-23 2021-12-23 一种基于细粒度优化选项配置差分的编译器缺陷定位方法

Country Status (1)

Country Link
CN (1) CN114780374A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115422092A (zh) * 2022-11-03 2022-12-02 杭州金衡和信息科技有限公司 一种基于多方法融合的软件bug定位方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115422092A (zh) * 2022-11-03 2022-12-02 杭州金衡和信息科技有限公司 一种基于多方法融合的软件bug定位方法
CN115422092B (zh) * 2022-11-03 2023-02-07 杭州金衡和信息科技有限公司 一种基于多方法融合的软件bug定位方法

Similar Documents

Publication Publication Date Title
CN109739755B (zh) 一种基于程序追踪和混合执行的模糊测试系统
de Souza et al. Spectrum-based software fault localization: A survey of techniques, advances, and challenges
CN103678110B (zh) 提供修改相关信息的方法和装置
CN105022691B (zh) 一种基于uml图的高度自动化软件测试方法
EP2960799A1 (en) Defect localization in software integration tests
CN111274126A (zh) 测试用例筛选方法、装置及介质
CN110515826B (zh) 一种基于次数频谱与神经网络算法的软件缺陷定位方法
Chi et al. Multi-level random walk for software test suite reduction
CN114780374A (zh) 一种基于细粒度优化选项配置差分的编译器缺陷定位方法
CN105260312A (zh) 一种多核实时系统应用数据竞争错误的调试方法
US8381185B2 (en) Apparatus, system, and method for dynamic module flow analysis
Silva et al. Flacoco: Fault localization for java based on industry-grade coverage
CN115470138A (zh) 一种基于不同调试级别交叉验证的调试器缺陷检测方法
Yang et al. Automatic self-validation for code coverage profilers
CN113010427A (zh) 一种基于等价取模测试的高级综合工具缺陷检测方法
CN102455897B (zh) 基于实例的迭代编译方法及编译装置
CN109101355B (zh) 一种提取错误现场特征测试激励的处理器调试方法
CN109165155B (zh) 一种基于聚类分析的软件缺陷修复模板提取方法
CN113836023B (zh) 一种基于体系结构交叉检查的编译器安全性测试方法
CN110309059A (zh) Ui界面测试方法、系统、计算机设备和存储介质
CN109977019B (zh) 一种基于增量采样的编译器优化序列测试方法
Lundsten EALRTS: A predictive regression test selection tool
Xu et al. Using genetic algorithms to repair JUnit test cases
CN113849814A (zh) 一种可配置系统漏洞复现系统以及复现方法
CN111078193A (zh) 一种面向数据分析系统的软件开发方法及系统

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination