CN109977019B - 一种基于增量采样的编译器优化序列测试方法 - Google Patents
一种基于增量采样的编译器优化序列测试方法 Download PDFInfo
- Publication number
- CN109977019B CN109977019B CN201910255386.3A CN201910255386A CN109977019B CN 109977019 B CN109977019 B CN 109977019B CN 201910255386 A CN201910255386 A CN 201910255386A CN 109977019 B CN109977019 B CN 109977019B
- Authority
- CN
- China
- Prior art keywords
- test
- compiler
- program
- target object
- sequence
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3692—Test management for test results analysis
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)
- Stored Programmes (AREA)
Abstract
本发明提供了一种基于增量采样的编译器优化序列测试方法,可用于测试C/C++语言的编译器,如开源编译器Gcc、Clang等;亦可根据特定编程语言的编译器特性,对本发明的相关步骤进行适配,从而测试该特定编程语言的编译器。本发明的有益效果:本发明能够有效地对编译器优化序列进行测试,帮助编译器开发者更好地找到编译器优化序列相关的故障,提高编译器的质量。
Description
技术领域
本发明属于软件测试领域,涉及一种用于测试编译器中优化序列相关故障的技术,具体为一种基于增量采样的编译器优化序列测试方法。
背景技术
编译器是整个软件开发过程中不可或缺的重要基础软件,一方面编译器作为开发者与计算机沟通的枢纽,承担着将开发者用高级编程语言编写的程序转换为计算机可识别的机器码的重要责任;另一方面,现代编译器也要负责对目标程序进行优化,以最大限度地发挥目标程序的性能。然而,随着编译技术的发展,现代编译器拥有了大量的代码优化技术。当用户使用编译器对其编写的程序进行编译时,面对上百种优化技术,为使程序获得最好的性能,就必须有针对性的选择实施何种优化,构成优化序列。但各种优化技术都有相应的优化目标,并且各种优化之间也可能存在相互影响,一种优化技术优化后的程序,可能使其他优化发挥更好的效果,也可能使其他优化失效,甚至出现故障。因此,确保各种优化以及优化序列是无故障的,对于软件开发而言就显得至关重要。
编译器优化序列测试是保障编译器自身软件质量的重要途径,它不仅能发现单个优化内部的故障,也能够有效地检测出优化之间相互影响而产生的故障。然而,由于现代编译器中优化技术众多,各种优化组成的优化序列的数目呈指数及增长,使得编译器优化序列难以被系统地全面测试。为了解决这一问题,本发明通过对测试程序及优化序列进行增量采样,扩大了测试空间,同时避免了冗余的测试,从而能系统、有效地对编译器优化序列进行测试。
发明内容
为解决上述问题,本发明提供了一种基于增量采样的编译器优化序列测试方法。本发明可用于测试C/C++语言的编译器,如开源编译器Gcc、Clang等;亦可根据特定编程语言的编译器特性,对本发明的相关步骤进行适配,从而测试该特定编程语言的编译器。
本发明的技术方案:
一种基于增量采样的编译器优化序列测试方法,主要步骤如下:
步骤1:测试程序采样:利用增量采样方法和程序随机生成器,得到待测程序集。
步骤2:编译器优化序列采样:利用增量采样方法和随机优化序列生成方式,得到待测优化序列集。
步骤3:运行需要测试的编译器:将待测程序集中的每一个测试程序与待测优化序列集中的每一条优化序列组合成一个测试输入,作为编译器的输入对编译器进行测试。
步骤4:收集测试输出:收集编译器运行产生的信息;对于待测程序集中的每一个测试程序,若其中一个测试程序与待测优化序列集中的一条优化序列组合成的测试输入,使需要测试的编译器不能正常运行,或在该优化序列的作用下,程序的输出不同于在其他优化序列作用下的输出,则认为该测试程序与优化序列使编译器产生故障;将使编译器产生故障的测试程序及优化序列保存,用于分析和约简故障信息。
步骤5:判断是否达到测试终止条件:测试终止条件包括测试时间和测试迭代次数,根据具体测试需求进行设定;若达到测试终止条件,则终止测试;否则,转到步骤1,继续执行测试。
步骤6:约简使编译器发生故障的测试程序及优化序列:使用程序约简工具和优化序列约简工具,对使编译器发生故障的测试程序及优化序列进行约简。
测试程序约简采用Creduce程序约简工具,或根据实际需要采用其他工具或自定义工具实现;优化序列约简采用排除法,或根据实际需要采用其他工具或自定义工具实现。
步骤7:将约简后的测试程序及优化序列写入测试报告,并提交给编译器开发者。
所述的增量采样方法步骤如下,如图2所示:
步骤a:随机生成产生一个目标对象,目标对象为测试程序或优化序列。对于测试程序的生成,采用Csmith程序随机生成器随机生成或根据实际需要测试的编译器,采用其他程序随机生成工具或采用自定义的程序随机生成工具实现;对于优化序列的生成,采用随机选取优化的方式组成优化序列或根据实际需要,采用自定义的随机优化序列生成方式。
步骤b:对比步骤a中生成的目标对象与按步骤a的方式已生成的目标对象集合中各目标对象的相似性,若最大的相似性不超过预先设定的目标对象相似度阈值,即两个目标对象相似度的最大值,则将该目标对象加入到已生成的目标对象集合中;否则,丢弃该目标对象;若采样的目标对象为测试程序,则使用向量空间模型(Vector Space Model,VSM)或代码向量模型(Code to Vector,code2vec)对测试程序进行表示,然后使用余弦相似性计算两个测试程序的相似性;若采样对象为优化序列,则使用文档向量模型(Document toVector,doc2vec)对优化序列进行表示,然后使用余弦相似性计算两条优化序列的相似性。
步骤c:判断步骤b中,丢弃目标对象的次数是否达到了设定的丢弃目标对象数阈值,即丢弃目标对象的次数的最大值;若丢弃目标对象的次数达到了设定的丢弃目标对象数阈值,则增加预先设定的目标对象相似度阈值,使采样在有限时间内完成;根据具体的采样需求,设置本步骤中目标对象相似度阈值需要增加的大小。
步骤d:判断是否达到采样终止条件,若没有到达采样终止条件,则跳转到步骤a,继续采样;否则,采样结束,输出采样结果。
本发明的有益效果:本发明能够有效地对编译器优化序列进行测试,帮助编译器开发者更好地找到编译器优化序列相关的故障,提高编译器的质量。
附图说明
图1是编译器优化序列测试主体流程图。
图2是增量采样流程图。
具体实施方式
以下结合附图和技术方案,进一步说明本发明的具体实施方式。
本发明的方法部署在一台测试服务器上,根据编译器测试步骤安装对应的软件,如编译器、脚本解释器等。
如图1所示,编译器优化序列是否含有故障按如下流程进行测试。在编译器测试环境,除了编译环境中指定的确定因素,其他因素,如待测程序和待测优化序列的采样数量、测试终止条件等均根据具体的测试需求进行设置。
步骤1:测试程序采样,利用增量采样方法和程序随机生成器,如Csmith,得到待测程序集。Csmith是犹他大学研究人员以BSD许可证发布的开源工具,能够随机地生成符合C99标准的C语言程序。在运行Csmith时,尽可能启用Csmith的特性,以使生成的程序具有较多的C语言特性。根据实际需要测试的编译器,亦可采用其他程序随机生成工具,或采用自定义的程序随机生成工具实现。
步骤2:编译器优化序列采样,利用增量采样方法和随机优化序列生成,得到待测优化序列集。优化序列采用随机的方式生成,因为任意顺序的优化组合,对于编译器而言都是符合规范的。根据实际需要,亦可使用自定义的工具随机生成编译器优化序列。
步骤3:运行需要测试的编译器。对于待测程序集中的每一个程序,将它与待测优化序列集中的每一条优化序列组合成一个测试输入,然后以此作为编译器的输入对编译器进行测试。
步骤4:收集测试输出。对于待测程序集中的每一个程序,若该程序与待测优化序列集中的某一条优化序列组合成的测试输入,使得需要测试的编译器不能正常运行,或在此优化序列的作用下,该程序的输出不同于在其他优化序列作用下的输出,则认为该程序与此优化序列可使编译器产生故障。将能使编译器产生故障的测试程序及优化序列保存,供后续步骤分析、约简故障信息。
步骤5:判断是否达到测试终止条件,如测试时间、测试迭代次数等。若达到了测试终止条件,则终止测试;否则,转到步骤1,继续执行测试。
步骤6:约简可使编译器发生故障的测试程序及优化序列。测试程序约简可采用Creduce程序约简工具实现,Creduce是犹他大学研究人员以BSD许可证发布的开源工具,能够自动根据相应目标对C或C++程序进行约简。运行Creduce时,需以一个测试脚本作为输入,该脚本以能触发编译器故障的测试程序及优化序列作为输入,以使Creduce在执行程序约简过程中,相应的故障仍然能得以重现。根据实际需要测试的编译器,亦可采用其他程序约简工具,或采用自定义的程序约简工具实现。
优化序列约简采用排除法实现。在优化序列中,若某个优化从优化序列中去除后,编译器的故障仍然存在,则说明该优化对于此编译器故障不是必须的,可以从优化序列中删除;此过程一直进行,直至优化序列中没有优化可以被删除为止。根据实际需要测试的编译器,亦可自行定义优化序列的约简方法。
经过约简,可得到较小的测试程序及优化序列,能更有效地帮助开发者定位编译器出现故障的原因,从而快速修复故障。
步骤7:将约简后的程序及优化序列写入测试报告,并提交给编译器开发者。
Claims (1)
1.一种基于增量采样的编译器优化序列测试方法,其特征在于,包括如下步骤:
步骤1:测试程序采样:利用增量采样方法和程序随机生成器,得到待测程序集;所述的增量采样方法步骤如下:
a:随机生成产生一个目标对象,目标对象为测试程序或优化序列;对于测试程序的生成,采用Csmith程序随机生成器随机生成实现;对于优化序列的生成,采用随机选取优化的方式组成优化序列;
b:对比步骤a中生成的目标对象与按步骤a的方式已生成的目标对象集合中各目标对象的相似性,若最大的相似性不超过预先设定的目标对象相似度阈值,即两个目标对象相似度的最大值,则将该目标对象加入到已生成的目标对象集合中;否则,丢弃该目标对象;若采样的目标对象为测试程序,则使用向量空间模型或代码向量模型对测试程序进行表示,然后使用余弦相似性计算两个测试程序的相似性;若采样对象为优化序列,则使用文档向量模型对优化序列进行表示,然后使用余弦相似性计算两条优化序列的相似性;
c:判断步骤b中,丢弃目标对象的次数是否达到了设定的丢弃目标对象数阈值,即丢弃目标对象的次数的最大值;若丢弃目标对象的次数达到了设定的丢弃目标对象数阈值,则增加预先设定的目标对象相似度阈值,使采样在有限时间内完成;
d:判断是否达到采样终止条件,若没有到达采样终止条件,则跳转到步骤a,继续采样;否则,采样结束,输出采样结果;
步骤2:编译器优化序列采样:利用增量采样方法和随机优化序列生成方式,得到待测优化序列集;
步骤3:运行需要测试的编译器:将待测程序集中的每一个测试程序与待测优化序列集中的每一条优化序列组合成一个测试输入,作为编译器的输入对编译器进行测试;
步骤4:收集测试输出:收集编译器运行产生的信息;对于待测程序集中的每一个测试程序,若其中一个测试程序与待测优化序列集中的一条优化序列组合成的测试输入,使需要测试的编译器不能正常运行,或在该优化序列的作用下,程序的输出不同于在其他优化序列作用下的输出,则认为该测试程序与优化序列使编译器产生故障;将使编译器产生故障的测试程序及优化序列保存,用于分析和约简故障信息;
步骤5:判断是否达到测试终止条件:测试终止条件包括测试时间和测试迭代次数;若达到测试终止条件,则终止测试;否则,转到步骤1,继续执行测试;
步骤6:约简使编译器发生故障的测试程序及优化序列:使用程序约简工具和优化序列约简工具,对使编译器发生故障的测试程序及优化序列进行约简;
测试程序约简采用Creduce程序约简工具;优化序列约简采用排除法;
步骤7:将约简后的测试程序及优化序列写入测试报告,并提交给编译器开发者。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910255386.3A CN109977019B (zh) | 2019-04-01 | 2019-04-01 | 一种基于增量采样的编译器优化序列测试方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910255386.3A CN109977019B (zh) | 2019-04-01 | 2019-04-01 | 一种基于增量采样的编译器优化序列测试方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109977019A CN109977019A (zh) | 2019-07-05 |
CN109977019B true CN109977019B (zh) | 2021-04-20 |
Family
ID=67082018
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910255386.3A Active CN109977019B (zh) | 2019-04-01 | 2019-04-01 | 一种基于增量采样的编译器优化序列测试方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109977019B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110704065B (zh) * | 2019-10-09 | 2021-04-20 | 大连理工大学 | 基于非法程序输入的编译器前端差分测试方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107885503A (zh) * | 2017-11-11 | 2018-04-06 | 湖南大学 | 一种基于程序特征分析的迭代编译优化方法 |
CN109100954A (zh) * | 2018-08-06 | 2018-12-28 | 大连理工大学 | 一种控制器硬件在环仿真平台建立方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9274931B2 (en) * | 2013-05-06 | 2016-03-01 | International Business Machines Corporation | Inserting implicit sequence points into computer program code to support debug operations |
-
2019
- 2019-04-01 CN CN201910255386.3A patent/CN109977019B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107885503A (zh) * | 2017-11-11 | 2018-04-06 | 湖南大学 | 一种基于程序特征分析的迭代编译优化方法 |
CN109100954A (zh) * | 2018-08-06 | 2018-12-28 | 大连理工大学 | 一种控制器硬件在环仿真平台建立方法 |
Non-Patent Citations (1)
Title |
---|
数据中心计算环境下基于语义模式的编译优化;邹燕燕;《中国优秀硕士学位论文全文数据库》;20141031;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN109977019A (zh) | 2019-07-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109739755B (zh) | 一种基于程序追踪和混合执行的模糊测试系统 | |
CN111859388B (zh) | 一种多层次混合的漏洞自动挖掘方法 | |
US8898647B2 (en) | Method and apparatus for test coverage analysis | |
US6622298B1 (en) | Method and apparatus for testing software having a user interface | |
US9081586B2 (en) | Systems and methods for customizing optimization/transformation/ processing strategies | |
US20180165182A1 (en) | Automated software program repair | |
US9274930B2 (en) | Debugging system using static analysis | |
CN101714098A (zh) | 通过修改跟踪操作减少跟踪开销 | |
JP6142705B2 (ja) | オブジェクト指向言語のための記号テストドライバの反復生成 | |
JP2019096292A (ja) | 自動化されたソフトウェアプログラム修復候補の選択 | |
CN107329889B (zh) | 一种c编译器自动化测试的方法 | |
CN111222141B (zh) | 一种汽车电控单元代码漏洞分析方法和系统 | |
CN108572892B (zh) | 一种基于PowerPC多核处理器的离线测试方法和装置 | |
CN109977019B (zh) | 一种基于增量采样的编译器优化序列测试方法 | |
CN113010427A (zh) | 一种基于等价取模测试的高级综合工具缺陷检测方法 | |
CN115656791B (zh) | 芯片可测性设计的测试方法及测试平台 | |
CN109101355B (zh) | 一种提取错误现场特征测试激励的处理器调试方法 | |
CN108132799B (zh) | 过程间静态程序分析信息提取方法、装置及设备 | |
Ulewicz et al. | System regression test prioritization in factory automation: Relating functional system tests to the tested code using field data | |
EP2820547B1 (en) | Debugging method and computer program product | |
KR100777103B1 (ko) | 테스트 드라이버 생성 장치 및 방법 | |
CN113051582B (zh) | 一种计算机软件技术开发调试系统 | |
CN114780374A (zh) | 一种基于细粒度优化选项配置差分的编译器缺陷定位方法 | |
KR101136122B1 (ko) | 디에스피 탑재 소프트웨어 단위시험을 위한 브레이크 포인트 분석 방법 | |
CN111539099A (zh) | 一种基于程序变异的Simulink模型验证方法 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |