一种基于差分测试的高级综合工具优化选项缺陷检测方法

文档序号:29796117发布日期:2022-04-23 18:52阅读:99来源:国知局
一种基于差分测试的高级综合工具优化选项缺陷检测方法

1.本发明属于软件测试技术领域,尤其涉及一种基于差分测试的高级综合工具优化选项缺陷检测方法。


背景技术:

2.随着我国通信、航天、医疗、军工等领域的快速发展,fpga(field programmable gate array)技术作为重要支撑技术,也得到了充分的发展。fpga器件凭借其灵活性、并行性以及可集成性,日益成为国家科技发展关键核心器件。因此,高效、可靠地完成fpga产品的设计开发工作至关重要。
3.高级综合(highlevelsynthesis)技术作为fpga设计开发过程中的起点技术,其可以将设计人员编写的高级语言设计代码(如c/c++代码)转为硬件描述语言代码(如verilog代码、vhdl代码等)。高级综合工具对高级综合过程起到了重要的支撑作用。高级综合工具的一大优势在于其为设计人员提高了一系列设计代码优化选项,设计人员可以通过使用不同优化选项的组合,实现不同时延、吞吐量的fpga产品。设计人员只需要将优化选项代码插入到设计代码中,高级综合工具则会自动根据优化选项进行代码优化,并生成代码优化后对应的硬件描述语言代码。高级综合工具能否正确地完成对于设计代码的优化工作,严重制约着fpga设计的准确性、可靠性以及设计开发效率。现有的一些发明专利,如一种基于等价取模测试的高级综合工具缺陷检测方法(专利申请号:202110301741.3)、一种基于多样性导向变异的高级综合工具缺陷检测方法(专利申请号:202110670451.6)主要通过产生多样性较大的测试用例来检测高级综合工具能否正确完成综合工作,而未涉及使用高级综合工具优化选项,即无法有效检测高级综合工具优化选项缺陷。综合上述现有相关发明专利情况,可发现鲜有针对于高级综合工具优化选项缺陷进行检测的发明专利。因此,对于高级综合工具优化选项缺陷进行检测是十分必要且有意义的。
4.高级综合工具优化选项可指定到具体函数、循环,导致不同设计代码可用的优化选项空间不同,而且高级综合工具优化选项组合的搜索空间也是十分巨大的。在这种情况下,采用手动测试方法对高级综合工具优化选项缺陷进行检测显然是不现实的;而在没有有效策略的情况下,自动化随机测试产生的测试用例往往会存在大量冗余,造成缺陷检测效率低下。因此,为了提高对高级综合工具优化选项缺陷的检测效率,本发明方法通过基于代码特征向量余弦相似度的测试代码筛选和基于组合覆盖测试的优化选项选择两种策略,提高了测试用例多样性,避免了冗余的测试,进而实现了对高级综合工具优化选项缺陷的自动化高效检测。


技术实现要素:

5.本发明的目的在于提供一种基于差分测试的高级综合工具优化选项缺陷检测方法。本发明通过对随机生成的测试用例代码进行基于代码特征向量余弦相似度的筛选,得到优化空间差异性较大的测试用例代码,对每个通过筛选的测试用例代码进行基于组合覆
盖测试的优化选项选择,得到一系列优化选项组合,将得到优化选项插入到测试用例代码中,即可对高级综合工具优化选项缺陷进行检测;本发明解决了高级综合工具优化选项缺陷检测过程中,测试用例产生以及优化选项选择等问题,提高了测试用例多样性,扩大了测试空间,避免了冗余的测试,从而提高高级综合工具优化选项缺陷检测效率。
6.本发明的技术方案:
7.一种基于差分测试的高级综合工具优化选项缺陷检测方法,具体步骤如下:
8.步骤1:检测是否达到测试时间限制。若未达到,则使用代码随机生成器生成测试用例代码p_tmp;若已达到,则停止测试。
9.其中,测试时间限制可由测试人员根据需求进行设置。对于测试用例代码的生成,可使用csmith代码随机生成器随机生成,或根据实际需求,使用其他代码随机生成工具或自定义的代码随机生成工具实现。
10.步骤2:使用基于代码特征向量余弦相似度的筛选方法对p_tmp进行测试代码筛选,得到用于后续测试的代码p。
11.步骤3:使用编译器编译运行测试用例代码p,并记录相应的输出结果gcc_output。
12.步骤4:对测试用例代码p进行处理,主要将p中main函数更名为result函数,将main函数输出值作为result函数返回值。
13.步骤5:使用基于组合覆盖测试的优化选项选择方法根据测试用例代码p进行优化选项选择,得到可用于测试的一系列优化选项组合的集合o。
14.步骤6:检测是否集合o中所有优化选项组合均被用于测试过,若否,则继续执行测试步骤;否则,跳转至步骤1继续执行。
15.步骤7:从集合o中选取未被使用过的优化选项组合oi,将oi所涉及的优化选项以pragma的形式插入到测试代码p中;
16.步骤8:使用待测试的高级综合工具对测试用例p进行综合,获取硬件描述语言代码hp。
17.步骤9:使用数字电路仿真器对硬件描述语言代码hp进行仿真模拟,获取hp的输出结果hls_output。
18.其中,对于硬件描述语言代码hp的仿真模拟,可使用待测试高级综合工具自身集成的仿真器,或可根据实际需求,使用其他数字电路仿真模拟器对硬件描述语言代码hp进行仿真模拟。
19.步骤10:比较gcc_output与hls_output是否一致。若二者结果一致,则跳转至步骤6,继续执行;若不一致,则进行测试用例约简,生成并存储缺陷报告,并跳转至步骤6,继续执行。
20.对于测试用例约简,可使用c-reduce代码约简工具,或根据实际情况采用其他工具或自定义工具。
21.步骤2中,所述的基于代码特征向量余弦相似度的筛选方法执行步骤如下:
22.步骤a:将新生成的测试用例代码p_tmp和已用于测试的代码集合中的所有代码分别转换成抽象语法树(abstract syntax tree,ast);
23.其中,将代码转化成ast,可使用pycparser工具,或根据实际需要采用其他工具或自定义工具。pycparser是c语言的解析器,支持完整的c99标准,用纯python编写。
24.步骤b:采用深度优先遍历算法遍历新生成的测试用例代码p_tmp和已用于测试的代码集合中的ast,提取所有代码的各维数组个数、函数个数、各函数中for循环个数、各函数中同层for循环个数、各函数中函数调用个数、各函数表达式个数、各函数中最大嵌套深度以及涉及到各类运算符个数等特征,分别构造各代码的特征向量。
25.步骤c:计算新生成的测试用例代码p_tmp的代码特征向量与已用于测试代码的代码特征向量之间的最小距离mindist,mindist使用公式(1)进行计算。
[0026][0027]
其中,v
p_tmp
和分别表示新生成的测试用例代码p_tmp的代码特征向量和已用于测试代码tci的代码特征向量,函数为取最大值函数,cosine_similarity()函数为两向量余弦相似度计算函数。余弦相似度计算可使用sklearn库中的cosine_similarity方法来计算,或根据实际情况采用其他工具或自定义工具。
[0028]
步骤d:检测mindist是否大于阈值threshold;若是,则将mindist作为新的threshold,存储新的threshold,并将p_tmp作为测试用例代码p输出。否则,跳转至步骤e继续执行。其中,测试人员可根据实际情况设置threshold。
[0029]
步骤e:检测是否达到设定生成代码次数限制;若未达到,则跳转至步骤f继续执行;若已达到,则输出已有候选测试用例代码p_candidate;其中,生成代码次数可由测试人员根据需求进行设置。
[0030]
步骤f:检测是否已有候选测试用例代码p_candidate与对应的mindist_candidate。若没有,则将p_tmp作为新的p_candidate,将mindist作为新的mindist_candidate。否则比较mindist与mindist_candidate大小。若mindist》mindist_candidate,则将p_tmp作为新的p_candidate,将mindist作为新的mindist_candidate,跳转至步骤g继续执行;否则,直接跳转至步骤g继续执行;
[0031]
步骤g:使用代码随机生成器生成测试用例代码p_tmp,产生代码次数加一,跳转至步骤a继续执行;
[0032]
步骤5中,所述的基于组合覆盖测试的优化选项选择方法执行步骤如下:
[0033]
步骤a:将测试用例代码p解析成ast;
[0034]
步骤b:采用深度优先遍历算法遍历代码的ast,根据代码可用优化选项类别,枚举出代码可用的每大类优化选项,忽略选项参数设置。
[0035]
步骤c:使用组合覆盖测试工具,根据枚举出代码可用的每类优化选项情况,生成对于测试用例代码p可用优化选项类别组合集合o_tmp。
[0036]
其中,对于优化选项组合生成,可使用组合覆盖测试工具pict,或根据实际情况采用其他工具或自定义工具。
[0037]
步骤d:根据测试用例代码p可用的可用优化选项类别组合集合o_tmp中每一组优选选项情况,解析代码p的ast,随机选择可用参数,补全优化选项参数,并将补全后一组的优化选项组合存储于优化选项组合集合o中。当o_tmp中所有选项参数均被补全后,输出优化选项组合集合o。
[0038]
本发明的有益效果:本发明方法能够通过产生有效且多样性较大的测试用例代码和优化选项组合,对高级综合工具进行自动化测试,能够高效检测高级综合工具中存在的
优化选项缺陷,并且能够自动化生成缺陷报告,以供开发人员快速修复缺陷。
附图说明
[0039]
图1是本发明的一种基于差分测试的高级综合工具优化选项缺陷检测方法工作流程示意图。
[0040]
图2是本发明中的基于代码特征向量余弦相似度的测试代码筛选方法的工作流程图。
[0041]
图3是本发明中的基于组合覆盖测试的优化选选个选择方法的工作流程图。
[0042]
具体实施示例
[0043]
以下结合附图、技术方案,并以检测高级综合工具vivadohls优化选项缺陷为例对本发明方法进行详细说明。
[0044]
在本实施例中,本发明方法部署在一台linux服务器上,服务器具体配置如表1所示。根据需求安装gcc编译器、pycparser工具、pict工具以及待测试的高级综合工具xilinx vivado hlsv2019.2,并对xilinx vivado hls v2019.2进行测试。
[0045]
表1.linux服务器配置信息表
[0046][0047]
如图1所示,本发明的一种基于差分测试的高级综合工具优化选项缺陷检测方法按如下流程进行。首先使用代码随机生成器产生测试用例代码。接着,对所生成测试用例代码进行基于代码特征向量余弦相似度的代码筛选操作。接着,使用编译器编译运行通过筛选的代码,获取高级语言输出结果。接着,对通过筛选的代码进行修改和基于组合覆盖测试的优化选项选择操作,得到可用于测试的优化选项组合集合。接着,从优化选项组合集合中选取一个优化选项组合,以pragma的形式将组合中的优化选项插入到测试代码中。接着,使用待测试的高级综合工具对测试用例代码进行综合,获取硬件描述语言代码。然后,使用电路仿真模拟器仿真硬件描述语言代码,得到硬件描述语言代码输出结果。最后,通过比较高级语言编译器输出结果与硬件描述语言代码输出结果的一致性来判断待测试高级综合工具优化选项是否存在缺陷。若两者结果不一致,则表明测试代码中所使用到的高级综合工具优化选项存在缺陷,则对触发缺陷的测试用例进行约简,并自动化生成缺陷报告。
[0048]
本实施例具体步骤如下:
[0049]
步骤1:检测是否达到测试时间限制。若未达到,则使用代码随机生成器生成测试用例代码p_tmp;若已达到,则停止测试。
[0050]
具体为:检测是否达到测试时间限制;若未达到,则使用csmith代码随机生成器随机生成测试代码p_tmp,命名为“testcode_xxx_tmp.c”,并存放于/home/hls/testcode/tc_xxx路径下。若已达到时间限制,则停止测试。对于测试代码生成,测试人员可根据实际情况,使用其他程序随机生成工具实现。本发明方法中测试时间限制亦可由测试人员根据需求进行设置。其中,csmith是犹他大学研究人员以bsd许可证发布的开源工具,能够随机地生成符合c99标准的c语言程序。另外,命名中的“xxx”使用当前生成的测试用例的序号填
充,例如,生成的第1个测试用例被命名为“testcode_1_tmp.c”。
[0051]
步骤2:使用基于代码特征向量余弦相似度的测试代码筛选方法(具体如图2所示)对步骤1产生的代码p_tmp进行代码筛选。
[0052]
具体为:在/home/hls/testcode/tc_xxx目录下,对新生成的测试用例代码testcode_xxx_tmp.c使用基于代码特征向量余弦相似度的测试代码筛选方法,最终得到用于后续测试的代码p,命名位“testcode_xxx.c”,存储在/home/hls/testcode/tc_xxx目录下;其中,文件命名中的“xxx”使用当前生成的测试用例的序号填充。
[0053]
步骤3:使用编译器编译运行测试程序p,记录相应的输出结果gcc_output。
[0054]
具体为:在/home/hls/testcode/tc_xxx目录下,使用gcc编译器编译运行测试用例代码testcode_xxx.c,并将输出结果gcc_output存储于文件golden_output.txt中;其中,对于所使用的c语言编译器,测试人员根据实际需求,选择其他的c语言编译器。文件命名中的“xxx”使用当前生成的种子测试用例的序号填充。
[0055]
步骤4:对测试用例代码p进行处理,将p中main函数更名为result函数,将main函数输出值作为result函数返回值。
[0056]
步骤5:使用基于组合覆盖测试的优化选项选择方法(如图3所示)根据测试用例代码p进行优化选项选择,得到可用于测试的优化选项组合集合o。
[0057]
具体为:将存储于/home/hls/testcode/tc_xxx路径下的testcode_xxx.c文件作为基于组合覆盖测试的优化选项选择方法的输入,该方法根据代码枚举出每类别可用优化选项保存于文件options.txt中,使用组合覆盖测试工具pict,根据options.txt生成对于测试用例代码testcode_xxx.c可用的可用优化选项类别组合集合o_tmp,并自动补全o_tmp中每组中优化选项的参数,最终产生用于测试的优化选项组合集合o,存储于/home/hls/testcode/tc_xxx路径下的comresult.txt文件中。
[0058]
其中,对于优化选项类别组合生成,可使用组合覆盖测试工具pict,或根据实际需要采用其他工具或自定义工具。pict(pairwise independent combinatorial testing)工具原是微软公司内部使用的一款自动生成成对组合测试用例的命令行工具。在文件路径中,“xxx”使用当前生成的测试用例的序号填充。
[0059]
步骤6:检测是否优化选项组合集合o中所有优化选项组合均被用于测试过?若否,则继续执行测试步骤;否则,跳转至步骤1继续执行。
[0060]
步骤7:从o中选取未被使用过的一个优化选项组合oi,将oi所涉及的优化选项以pragma的形式插入到测试代码p中;
[0061]
具体为:按行读取存储在/home/hls/testcode/tc_xxx/目录下的comresult.txt文件,将读取到的每组优化选项以pragma的形式插入到测试代码testcode_xxx.c中,并另存为testcode_xxx_options_yyy.c文件,并将testcode_xxx_options_yyy.c拷贝至/home/hls/testcode/tc_xxx/options_yyy/路径下。其中,“xxx”使用当前生成的测试用例的序号填充,“yyy”使用优化选项组合所在行号填充。
[0062]
步骤8:使用待测试的高级综合工具对测试用例p进行综合,获取硬件描述语言代码hp。
[0063]
具体为:首先,tcl脚本生成程序将通用的testbench文件拷贝至/home/hls/testcode/tc_xxx/options_yyy/路径下。然后,tcl脚本生成程序根据测试用例testcode_
xxx_options_yyy.c以及testbench文件位置生成tcl脚本,并通过tcl文件为vivado hls指定新工程名称、测试用例testcode_xxx_options_yyy.c、testbench文件,设置顶层函数、解决方案名称等,并将上述的tcl文件命名为“testcode_xxx_yyy_run_hls.tcl”,并存储于/home/hls/testcode/tc_xxx/options_yyy/路径下。最后,在/home/hls/testcode/tc_xxx/options_yyy/路径下,tcl脚本执行程序通过linux终端调用vivado hls执行tcl脚本进行高级综合,获取到硬件描述语言代码hp。上述的testbench文件使用c代码编写,主要完成对于测试用例中的result函数的调用以及结果对比,具体实现细节可由测试人员根据实际情况决定。对于tcl脚本生成程序和tcl脚本执行程序,本发明方法中使用python实现,测试人员亦可根据实际情况,选择不同的编程语言进行实现。上述命名中的“xxx”使用当前生成的测试用例的序号填充,“yyy”使用优化选项组合所在行号填充。
[0064]
步骤9:使用数字电路仿真器对硬件描述语言代码hp进行仿真模拟,获取hp的输出结果hls_output。
[0065]
对于硬件描述语言代码hp的仿真模拟,可使用待测试高级综合工具自身集成的仿真器,或可根据实际需求,使用其他数字电路仿真模拟器对代码hp进行仿真模拟。
[0066]
步骤10:检测gcc_output与hls_output是否一致。若结果一致,则跳转至步骤6继续执行;若不一致,则进行测试用例约简,生成并存储缺陷报告,并跳转至步骤6继续执行。
[0067]
对于测试用例约简,可使用c-reduce代码约简工具,或根据实际需要采用其他工具或自定义工具。其中,c-reduce是犹他大学研究人员以bsd许可证发布的开源工具,能够自动根据相应目标对c/c++代码进行约简。
[0068]
当上述过程达到测试时间限制时,则停止测试工作。
[0069]
本发明方法通过自动化运行上述过程,完成了对于高级综合工具优化选项缺陷的自动检测工作。基于代码特征向量余弦相似度的测试代码筛选操作可得到优化空间差异性较大的测试用例代码,大大增加了测试用例代码的多样性。基于组合覆盖测试的优化选择操作使用组合覆盖测试工具产生优化选项组合,既保证了优化选项组合空间测试覆盖率,也降低了用于测试的优化选择组合的数量,减少测试时间。综合来看,本发明方法可以有效提高高级综合工具优化选项缺陷检测的效率。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1