数据竞争检测工具的检测效果评估方法及装置与流程

文档序号:15492271发布日期:2018-09-21 20:51阅读:185来源:国知局

本发明实施例涉及软件分析领域,更具体地,涉及一种数据竞争检测工具的检测效果评估方法及装置。



背景技术:

随着计算机硬件并行计算能力的提升,越来越多的软件采用多线程的实现方式来提高计算效率。伴随计算效率的提升,并发缺陷也可能在不经意间被引入。并发缺陷可以分为以下三类:数据竞争缺陷、原子性违反缺陷和死锁缺陷。其中,数据竞争缺陷是指同一程序内的不同线程以非正确同步的方式在共享的内存位置上执行两个写操作或者一写一读的操作。数据竞争缺陷可能导致变量值不一致,进而导致程序崩溃,严重的可能造成财产损失。

相关技术中,存在多种数据竞争检测工具,由于各种数据竞争检测工具采用不同的数据竞争检测算法,导致各种数据竞争检测工具的检测效果并不相同。为了对检测效果进行评估,通常由用户针对数据竞争检测工具进行人工评估,具有很强的主观性。



技术实现要素:

为了解决上述问题,本发明实施例提供一种克服上述问题或者至少部分地解决上述问题的数据竞争检测工具的检测效果评估方法及装置。

根据本发明实施例的第一方面,提供一种数据竞争检测工具的检测效果评估方法,该方法包括:

运行待评估的数据竞争检测工具,分别对各测试程序进行检测,获得数据竞争检测工具输出的实际数据竞争信息;

将实际数据竞争信息与真实数据竞争信息进行比较,获得数据竞争检测工具的检测效果评估结果;真实数据竞争信息由测试程序中包含的真实数据竞争获得。

本发明实施例提供的方法,通过运行待评估的数据竞争检测工具,分别对各测试程序进行检测,获得数据竞争检测工具输出的实际数据竞争信息;将实际数据竞争信息与真实数据竞争信息进行比较,获得数据竞争检测工具的检测效果评估结果。由于采用数据竞争检测工具输出的实际数据竞争信息与作为标准的真实数据竞争信息进行比较,能够采用统一标准对不同数据竞争检测工具的检测效果进行评估,具有很强的客观性,能够帮助测试人员选择合适的数据竞争检测工具。

根据本发明实施例第二方面,提供了一种数据竞争检测工具的检测效果评估装置,该装置包括:

运行模块,用于运行待评估的数据竞争检测工具,分别对各测试程序进行检测,获得数据竞争检测工具输出的实际数据竞争信息;

比较模块,用于将实际数据竞争信息与真实数据竞争信息进行比较,获得数据竞争检测工具的检测效果评估结果;真实数据竞争信息由测试程序中包含的真实数据竞争获得。

根据本发明实施例的第三方面,提供了一种数据竞争检测工具的检测效果评估设备,包括:

至少一个处理器;以及

与处理器通信连接的至少一个存储器,其中:

存储器存储有可被处理器执行的程序指令,处理器调用程序指令能够执行第一方面的各种可能的实现方式中任一种可能的实现方式所提供的数据竞争检测工具的检测效果评估方法。

根据本发明实施例的第四方面,提供了一种非暂态计算机可读存储介质,非暂态计算机可读存储介质存储计算机指令,计算机指令使计算机执行第一方面的各种可能的实现方式中任一种可能的实现方式所提供的数据竞争检测工具的检测效果评估方法。

应当理解的是,以上的一般描述和后文的细节描述是示例性和解释性的,并不能限制本发明实施例。

附图说明

图1为本发明实施例的一种数据竞争检测工具的检测效果评估方法的流程示意图;

图2为本发明实施例的xml格式基线文件的结构示意图;

图3为本发明实施例的一种数据竞争检测工具的检测效果评估装置的结构示意图;

图4为本发明另一实施例的一种数据竞争检测工具的检测效果评估装置的结构示意图;

图5为本发明实施例的一种数据竞争检测工具的检测效果评估装置的运行流程示意图;

图6为本发明实施例的一种数据竞争检测工具的检测效果评估设备的结构示意图。

具体实施方式

下面结合附图和实施例,对本发明实施例的具体实施方式作进一步详细描述。以下实施例用于说明本发明实施例,但不用来限制本发明实施例的范围。

数据竞争检测工具用于对程序运行过程中的数据竞争缺陷进行检测。不同的数据竞争检测工具基于不同的数据竞争检测算法。相关技术中,数据竞争检测算法包括基于happen-before的数据竞争检测算法,该算法以检测的精确率高而出名,但是由于有限的可见程序轨迹,导致它的漏报率较高。基于lockset的数据竞争检测算法以低开销的方式计算不同线程在同一共享内存位置拥有锁的集合,通过不一致的锁集合报告数据竞争缺陷,这种检测算法原理简单但是误报率较高。轨迹预测的数据竞争检测算法根据程序的实际运行轨迹,基于顺序一致系统的最大因果模型理论,预测可行的其他程序运行轨迹,借助约束求解器报告数据竞争缺陷。基于上述数据竞争检测工具,由于没有统一的对各类数据竞争检测工具的检测效果进行评估的方法,使得不同检测工具的评估存在主观性。为了对不同数据竞争检测工具的检测效果进行统一评估,本发明实施例提供一种数据竞争检测工具的检测效果评估方法。参见图1,包括:

101、运行待评估的数据竞争检测工具,分别对各测试程序进行检测,获得数据竞争检测工具输出的实际数据竞争信息。

分别对测试程序进行检测,具体可以同时对一个或多个测试程序进行检测,本发明实施例对此不作限定。实际数据竞争信息用于表示数据竞争检测工具实际检测到的测试程序中含有的数据竞争,具体可通过数据竞争发生的位置信息表示,例如数据竞争的行号信息,数据竞争发生的变量名及数据竞争发生的包名和类名等。数据竞争检测工具输出数据竞争信息可以通过错误流或标准流的形式输出,错误流或标准流两类输出的实际数据竞争信息可统一记录在一个日志文件中,本发明实施例对此不作限定。

102、将实际数据竞争信息与真实数据竞争信息进行比较,获得数据竞争检测工具的检测效果评估结果;真实数据竞争信息由测试程序中包含的真实数据竞争获得。

真实数据竞争信息用于表示测试程序中真实存在的数据竞争,表示的数据竞争方式与实际数据竞争信息相同,在此不再赘述。换言之,真实数据竞争信息表示数据竞争检测工具应当检测到的数据竞争情况。因此,可以将真实数据竞争信息作为标准,通过将实际数据竞争信息与作为标准的真实数据竞争信息进行比较,能够评估检测效果。真实数据竞争信息可预先由人工标记测试程序中的真实数据竞争得到。检测效果评估结果可以为csv格式的检测效果评估报告,本发明实施例对此不作限定。

本发明实施例提供的方法,通过运行待评估的数据竞争检测工具,分别对各测试程序进行检测,获得数据竞争检测工具输出的实际数据竞争信息;将实际数据竞争信息与真实数据竞争信息进行比较,获得数据竞争检测工具的检测效果评估结果。由于采用数据竞争检测工具输出的实际数据竞争信息与作为标准的真实数据竞争信息进行比较,能够采用统一标准对不同数据竞争检测工具的检测效果进行评估,具有很强的客观性,能够帮助测试人员选择合适的数据竞争检测工具。

为了实现数据竞争检测工具的评估,需要一个精确的、含有各种类型数据竞争实例的数据集。常用的数据集有ibmcontestbenchmarksuite、javagrandebenchmarksuite等,但是这些数据集是用于性能计算评测,含有较少的包含数据竞争的程序,且不包含大型开源程序。为了保证数据竞争工具检测效果评估的可信性,需要收集数据竞争检测专用的数据集。因此,基于上述实施例的内容,作为一种可选实施例,在将实际数据竞争信息与真实数据竞争信息进行比较之前,提供一种获得数据集的方法,包括:对测试程序进行数据竞争检测,基于检测到的测试程序中包含的真实数据竞争获得对应的真实数据竞争信息,并删除测试程序中不包含真实数据竞争的测试程序;对测试程序及真实数据竞争信息进行统一化组织,获得数据集;数据集包括采用设定存储格式存储的测试程序以及用于存储真实数据竞争信息的基线文件。

具体地,由于数据竞争检测工具是用于检测数据竞争的,其检测效果的评估必然是通过对程序中包含的数据竞争进行检测所获得的。因此,测试程序不同于普通程序,其为满足并发特性的程序,即测试程序在运行过程中必然含有数据竞争。为了获得测试程序,首先可收集候选的测试程序。

测试程序可以为学术界的研究程序和工业界的大型开源程序。例如,学术界研究程序包括calfuzzer测试框架中提供的89个并发程序,rv-predict学术工具中提供的12个并发程序,dacapo测试集2009年发布的14个应用程序,verifit研究组发布的16个并发程序,jacontebe中包含的47个并发缺陷程序。工业界大型开源程序包括tomcat、log4j、zookeeper和ftpserver等共11个程序。学术界的研究程序和工业界的大型开源程序总共有193个程序作为候选的测试程序。

收集到候选程序后,为了删除不含有数据竞争的测试程序,需要对测试程序进行数据竞争检测。为了检测结果的准确性以及真实数据竞争信息的完整性,可以分别采用多个基于不同数据竞争检测算法的数据竞争检测器,例如,calfuzzer、rv-predict和date。在对每个测试程序的数据竞争检测中,通过人工的检查,会得到测试程序的真实数据竞争信息。基于真实数据竞争信息,能够获得数据竞争的数量信息、数据竞争的位置信息以及产生数据竞争的调用栈信息等。基于真实数据竞争信息可删除不含有数据竞争的候选程序。最后,48个候选的测试程序被保留为测试程序,其中,42个来自于学术界研究程序,6个来自于工业界大型开源程序。每个测试程序的信息如下表1所示:

表1测试程序信息

为了方便地对测试程序及真实数据竞争信息进行调用,因此创建数据集。具体可参照图2示出的组织结构图将测试程序及真实数据竞争信息统一组织起来,形成数据集。每个按照设定存储格式存储的测试程序包含多个目录文件,每个目录文件用于存储测试程序的不同部分。例如,bin、src和jar目录文件可分别用于存储java测试程序的字节码、源代码和jar文件,lib目录文件用于存储测试程序编译或运行阶段的依赖文件,bug目录文件用于存储测试程序对应的数据竞争详细信息。除目录文件外,测试程序还可包括测试说明文件,该文件用于存储程序的输入参数、编译和运行命令。除了测试程序外,还可包括基线文件,其中存储的真实数据竞争信息由各测试文件的竞争详细信息汇总得到,汇总后能够方便地与待评估的数据竞争检测工具输出的实际数据竞争信息进行比较。基线文件的格式可以采用xml格式,xml格式的基线文件可采用如下结构组织:

其中,totaltime是指没有数据竞争检测工具时测试程序的运行时间,<line1>41</line1>、<line2>47</line2>是指一对数据竞争的两个行号信息,<variable>x</variable>是指发生的数据竞争的变量名,<packageclass>testrace.testrace1</packageclass>是指发生的数据竞争的包名和类名。

创建数据集后,可以对数据集进行管理,包括对测试程序的增加、删除、修改和查找。可以对每个测试程序中真实数据竞争进行增加、删除、修改和查找处理。由于该基线文件是作为与数据竞争检测工具检测的实际数据竞争信息进行比较的基线,这样可以确保方便地对数据集进行动态地更新,如删除假的数据竞争,增加真实数据竞争等。

本发明实施例提供的方法,通过对测试程序进行数据竞争检测,基于检测到的测试程序中包含的真实数据竞争获得对应的真实数据竞争信息,并删除测试程序中不包含真实数据竞争的测试程序;对测试程序及真实数据竞争信息进行统一化组织,获得数据集;数据集包括采用设定存储格式存储的测试程序以及用于存储真实数据竞争信息的基线文件。由于利用数据集将测试程序及真实数据竞争信息统一组织起来,能够方便数据竞争检测工具检测效果评估过程中调用和比较,提高检测效果评估的效率。

由于收集的测试程序具有不同的来源,或者测试程序存在无数据竞争的情形。因此,基于上述实施例的内容,作为一种可选实施例,在对获取的多个候选程序分别进行数据竞争检测前,还提供一种筛选测试程序的方法,包括:收集测试程序,删除测试程序中重复的测试程序以及不能正常运行的测试程序。通过在进行数据竞争检测前删除重复测试程序及不能正常运行的测试程序,避免创建的数据集中存在过多无用测试程序,提高数据竞争检测工具检测效果的评估效率。

由于不同的测试程序具有不同的输入参数需求,不同的数据竞争检测工具有不同的检测命令,在对每个测试程序进行检测时都应当准备对应的测试脚本。基于上述实施例的内容,作为一种可选实施例,提供一种运行数据竞争检测工具的方法,包括:根据数据竞争检测工具的检测命令及测试程序的输入参数要求,获取与测试程序对应的测试脚本;分别运行与各测试程序对应的测试脚本,对各测试程序进行检测。

具体地,测试脚本可以为测试命令组成的一个文本文件。测试命令可以具有这样的格式:[测试程序名称]加上测试命令,每个测试命令单独占据文本文件的一行。可以将针对所有测试程序的测试命令放在一个文本文件中,本发明实施例对此不作限定。然后,根据宿主机器操作系统的类型,将测试脚本中的测试命令包装为相应操作系统下可运行的脚本文件。例如,在linux操作系统下将得到可运行的shell脚本,在windows操作系统下将得到可运行的bash脚本。

为了获得数据竞争检测工具运行过程中的数据竞争信息,基于上述实施例的内容,作为一种可选实施例,提出一种获得数据竞争信息的方法,包括:采用正则表达式提取数据竞争检测工具输出的日志文件中的实际数据竞争信息,正则表达式由数据竞争检测工具输出日志文件的方式确定;或者,对数据竞争检测工具输出的日志文件进行格式化处理后,采用基线文件存储真实数据竞争信息的方式输出实际数据竞争信息。

具体地,数据竞争检测工具在检测过程中可以通过错误流和标准流输出信息,输出的信息可以被记录在日志文件中。为了提取出实际数据竞争信息,第一种提取方式是根据数据竞争检测工具输出日志文件的方式,使用正则表达式语法从中提取实际数据竞争信息。例如,针对date数据竞争检测工具,可使用的正则表示式为:

(.*?racepair:\\s+?)(.+?)(\\.java)(:\\s*?)(\\d+?)(\\s+?\\s+?)(.+?)(\\.java)(:\\s*?)(\\d+)(\\s*?)(.*);

其中,两个d+?用于提取数据竞争的行号,两个.+?用于提取数据竞争所在的类。第二种方式是格式化待评估的数据竞争检测工具输出的日志文件,再以基线文件的形式输出实际数据竞争信息。例如,基线文件为xml格式时,以上述xml文件的格式输出数据竞争信息,该输出的xml文件中的line1、line2、packageclass、name和totaltime为必须填写的字段,其他字段可设置为空。

由于相关技术中通常采用人工分析的方式对数据竞争检测工具进行检测效果评估,容易得到真假混合的数据竞争。并且,基于这些数据竞争计算出精确率,漏报率和误报率,而计算过程中需要理解各种多线程使用知识,分析线程上下文切换的场景和熟悉被检测程序的组织结构等,因此,通常需要消耗大量的人力物力。基于上述实施例的内容,作为一种可选实施例,提出一种将实际数据竞争信息与真实数据竞争信息进行比较的方法,包括:将实际数据竞争信息中包括的每个实际数据竞争分别与真实数据竞争信息中包括的每个真实数据竞争进行比较;对于每个实际数据竞争,若存在与实际数据竞争相同的真实数据竞争,则确认实际数据竞争为正确数据竞争;若不存在与实际数据竞争相同的真实数据竞争,则确认实际数据竞争为误报数据竞争;对于每个真实数据竞争,若不存在与真实数据竞争相同的实际数据竞争,则确认真实数据竞争为漏报数据竞争;根据正确数据竞争的数量、误报数据竞争的数量及漏报数据竞争的数量计算得到的精确率、误报率和漏报率作为检测效果评估结果。

其中,精确率、漏报率和误报率可采用如下公式计算:

式中,tp表示正确数据竞争的数量,fn表示漏报数据竞争的数量,fp表示误报数据竞争的数量。

基于上述实施例的内容,作为一种可选实施例,实际数据竞争信息还包括检测时长,检测时长为运行数据竞争检测工具对测试程序进行检测时测试程序的运行时长;真实数据竞争信息还包括原始时长,原始时长为未运行数据竞争检测工具时,测试程序的运行时长;相应地,检测效果评估结果还包括时间开销,时间开销由检测时长及原始时长计算得到。

其中,时间开销具体可通过如下公式计算:

式中,detectiontime表示检测时长,originaltime表示原始时长。原始时长可记录在xml格式的基线文件的totaltime中,检测时长可记录在数据竞争检测工具输出的实际数据竞争信息中。

因此,检测效果评估结果可包含待评估的数据竞争检测工具在不同测试程序上的精确率、漏报率、误报率和时间开销信息,同时还可包括被检测出的、没有检测出的和额外检测出的数据竞争信息。

基于上述实施例的内容,本发明实施例提供了一种数据竞争检测工具的检测效果评估装置,该数据竞争检测工具的检测效果评估装置用于执行上述方法实施例中的数据竞争检测工具的检测效果评估方法。参见图3,该装置包括:

运行模块301,用于运行待评估的数据竞争检测工具,分别对各测试程序进行检测,获得数据竞争检测工具输出的实际数据竞争信息。

以下参见图4及图5对该装置进行说明。运行模块301分别对测试程序进行检测,具体可以同时对一个或多个测试程序进行检测,本发明实施例对此不作限定。实际数据竞争信息用于表示数据竞争检测工具实际检测到的测试程序中含有的数据竞争,具体可通过数据竞争发生的位置信息表示,例如数据竞争的行号信息,数据竞争发生的变量名及数据竞争发生的包名和类名等。数据竞争检测工具输出数据竞争信息可以通过错误流或标准流的形式输出,错误流或标准流两类输出的实际数据竞争信息可由运行模块301统一记录在一个日志文件中,本发明实施例对此不作限定。

比较模块302,用于将实际数据竞争信息与真实数据竞争信息进行比较,获得数据竞争检测工具的检测效果评估结果;真实数据竞争信息由测试程序中包含的真实数据竞争获得。

真实数据竞争信息用于表示测试程序中真实存在的数据竞争,表示的数据竞争方式与实际数据竞争信息相同,在此不再赘述。换言之,真实数据竞争信息表示数据竞争检测工具应当检测到的数据竞争情况。因此,可以将真实数据竞争信息作为标准,通过比较模块302将实际数据竞争信息与作为标准的真实数据竞争信息进行比较,能够评估检测效果。真实数据竞争信息可预先由人工标记测试程序中真实的数据竞争得到。检测效果评估结果可以为csv格式的检测效果评估报告,本发明实施例对此不作限定。

本发明实施例提供的装置,通过运行模块运行待评估的数据竞争检测工具,分别对各测试程序进行检测,获得数据竞争检测工具输出的实际数据竞争信息;比较模块将实际数据竞争信息与真实数据竞争信息进行比较,获得数据竞争检测工具的检测效果评估结果;真实数据竞争信息由测试程序中包含的真实数据竞争获得。由于采用数据竞争检测工具输出的实际数据竞争信息与作为标准的真实数据竞争信息进行比较,能够采用统一标准对不同数据竞争检测工具的检测效果进行评估,具有很强的客观性,能够帮助测试人员选择合适的数据竞争检测工具。

参见图4,作为一种可选实施例,装置还包括管理模块,用于对测试程序进行数据竞争检测,基于检测到的测试程序中包含的真实数据竞争获得对应的真实数据竞争信息,并删除测试程序中不包含真实数据竞争的测试程序;对测试程序及真实数据竞争信息进行统一化组织,获得数据集;数据集包括采用设定存储格式存储的测试程序以及用于存储真实数据竞争信息的基线文件。

作为一种可选实施例,管理模块还用于收集测试程序,删除测试程序中重复的测试程序以及不能正常运行的测试程序。

作为一种可选实施例,运行模块具体用于根据数据竞争检测工具的检测命令及测试程序的输入参数要求,获取与测试程序对应的测试脚本;分别运行与各测试程序对应的测试脚本,对各测试程序进行检测。

作为一种可选实施例,运行模块具体用于,采用正则表达式提取数据竞争检测工具输出的日志文件中的实际数据竞争信息,正则表达式由数据竞争检测工具输出日志文件的方式确定;或者,对数据竞争检测工具输出的日志文件进行格式化处理后,采用基线文件存储真实数据竞争信息的方式输出实际数据竞争信息。

作为一种可选实施例,比较模块具体用于,将实际数据竞争信息中包括的每个实际数据竞争分别与真实数据竞争信息中包括的每个真实数据竞争进行比较;对于每个实际数据竞争,若存在与实际数据竞争相同的真实数据竞争,则确认实际数据竞争为正确数据竞争;若不存在与实际数据竞争相同的真实数据竞争,则确认实际数据竞争为误报数据竞争;对于每个真实数据竞争,若不存在与真实数据竞争相同的实际数据竞争,则确认真实数据竞争为漏报数据竞争;根据正确数据竞争的数量、误报数据竞争的数量及漏报数据竞争的数量计算得到精确率、误报率和漏报率作为检测效果评估结果。

作为一种可选实施例,实际数据竞争信息还包括检测时长,检测时长为运行数据竞争检测工具对测试程序进行检测时测试程序的运行时长;真实数据竞争信息还包括原始时长,原始时长为未运行数据竞争检测工具时,测试程序的运行时长;相应地,检测效果评估结果还包括时间开销,时间开销由检测时长及原始时长计算得到。

本发明实施例提供了一种数据竞争检测工具的检测效果评估设备,如图6所示,该设备包括:处理器(processor)601、存储器(memory)602和总线603;

其中,处理器601及存储器602分别通过总线603完成相互间的通信;处理器601用于调用存储器602中的程序指令,以执行上述实施例所提供的数据竞争检测工具的检测效果评估方法,例如包括:运行待评估的数据竞争检测工具,分别对各测试程序进行检测,获得数据竞争检测工具输出的实际数据竞争信息;将实际数据竞争信息与真实数据竞争信息进行比较,获得数据竞争检测工具的检测效果评估结果;真实数据竞争信息由测试程序中包含的真实数据竞争获得。

本发明实施例还提供一种非暂态计算机可读存储介质,该非暂态计算机可读存储介质存储计算机指令,该计算机指令使计算机执行对应实施例所提供的数据竞争检测工具的检测效果评估方法,例如包括:运行待评估的数据竞争检测工具,分别对各测试程序进行检测,获得数据竞争检测工具输出的实际数据竞争信息;将实际数据竞争信息与真实数据竞争信息进行比较,获得数据竞争检测工具的检测效果评估结果;真实数据竞争信息由测试程序中包含的真实数据竞争获得。

本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。

以上所描述的数据竞争检测工具的检测效果评估设备等实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分方法。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1