CN108182144B - 一种基于序列模式挖掘的并发程序剖析方法 - Google Patents

一种基于序列模式挖掘的并发程序剖析方法 Download PDF

Info

Publication number
CN108182144B
CN108182144B CN201711344458.9A CN201711344458A CN108182144B CN 108182144 B CN108182144 B CN 108182144B CN 201711344458 A CN201711344458 A CN 201711344458A CN 108182144 B CN108182144 B CN 108182144B
Authority
CN
China
Prior art keywords
execution
thread
sequence
dependency relationship
concurrent program
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
Application number
CN201711344458.9A
Other languages
English (en)
Other versions
CN108182144A (zh
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.)
Southeast University
Original Assignee
Southeast 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 Southeast University filed Critical Southeast University
Priority to CN201711344458.9A priority Critical patent/CN108182144B/zh
Publication of CN108182144A publication Critical patent/CN108182144A/zh
Application granted granted Critical
Publication of CN108182144B publication Critical patent/CN108182144B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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/362Software debugging
    • G06F11/3628Software debugging of optimised code
    • 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/3684Test management for test design, e.g. generating new test cases
    • 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/3688Test management for test execution, e.g. scheduling of test suites

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

本发明公开了一种基于序列模式挖掘的并发程序剖析方法,通过对并发程序的源代码进行分析,获取其中的线程信息以及线程之前的依赖关系,以插桩的方式来捕获程序运行过程中所执行的依赖关系序列,最后通过基于序列模式挖掘的方法获知所执行的并发程序中父子线程交互的剖析结果。

Description

一种基于序列模式挖掘的并发程序剖析方法
技术领域
本发明属于动态程序分析的技术领域,涉及一种基于序列模式挖掘的并发程序剖析方法。
背景技术
程序剖析技术是针对软件执行中发生的控制流信息和数据流信息,统计每种信息的执行频率,以辅助分析程序行为,决定优化方向,已经广泛应用于编译优化、程序理解等领域。
目前主要的剖析方法有:
1996年T.Ball和J.Larus提出的Efficient Path Profiling方法。该方法首次提出通过在目标软件中插桩探针语句的方式来实现路径的唯一编码,能够以低廉的耗费处理一个软件中所有的非循环路径,但是不能处理循环路径,其中的路径编码和插桩方式为后续的路径剖析研究奠定了基础;
2007年K.Vaswani等人提出的Preferential Path Profiling方法。该方法能够针对用户所指定的目标软件中一部分非循环路径(称为“兴趣路径集合”)进行剖析,不区分或处理兴趣路径集合之外的任何路径,该方法耗费较Efficient Path Profiling更低,依然不能处理循环路径;
2012年B.Li和L.Wang等人提出的Profiling ofAll Paths方法。这一方法能够处理带有循环的软件路径,获得精确的剖析结果,耗费高于前两种方法。
现有的剖析技术均不适用于并发程序。并发程序的执行过程包含多个线程的创建、睡眠、唤醒和终止等交互序列,比普通单线程程序的执行过程更加复杂,多个线程的纠缠执行为理解并发程序执行过程带来了困难。针对线程交互序列进行剖析,可以获知并发程序执行过程中主流的线程执行操作,有助于揭示并发程序线程操作的逻辑链条,帮助软件相关人员理解并发程序的行为。
序列模式挖掘技术可以用于从程序执行轨迹中抽取线程交互序列信息,形成剖析结果。目前主要的序列模式挖掘算法,如Apriori、GSP(generalized sequentialpattern)、FreeSpan等,均属于通用的挖掘算法。针对并发程序剖析这一具体应用场景,需要在应用挖掘算法时进行相应的调整,以达成剖析的目标。
发明内容
技术问题:本发明提供一种能够分析并发程序交互关系,记录执行轨迹,并通过挖掘轨迹中的序列模式获取信息,完成剖析的基于序列模式挖掘的并发程序剖析方法。
技术方案:本发明的一种基于序列模式挖掘的并发程序剖析方法,包括如下步骤:
步骤1)通过并发程序源码的静态分析方法,获得并发程序中存在的所有线程信息集合Sthread={Tx},所有线程位置集合Slocation={Ly},以及线程之间各种类型的依赖关系集合Sdependence={<Type,La,Lb>},所述所有线程信息集合Sthread={Tx}包括Ta,Tb两个线程,La是Ta的一个代码位置,Lb是Tb的一个代码位置,Type是从La指向Lb的依赖关系类型;
步骤2)按照所述步骤1中所得信息进行代码插桩,并通过执行插桩后的并发程序来获取依赖轨迹,具体方法为:
a)分别在Ta的代码位置La和Tb的代码位置Lb插入监控执行的桩代码,在插桩后的程序执行中记录其执行轨迹{Trace(n)=<Ly>n},其中n为轨迹中各个元素的序号;
b)如果执行轨迹中La与Lb的执行次序与依赖关系<Type,La,Lb>相符合,则认为线程依赖关系<Type,La,Lb>存在于当前执行之中,并将其加入依赖轨迹{DepTrace(n)=<Type,Li,Lj>n}之中;若不符合则相应的线程依赖关系没有在执行轨迹中出现,不做处理;其中Li和Lj为每个依赖关系中包含的两个代码位置;
步骤3)从所述依赖轨迹{DepTrace(n)=<Type,Li,Lj>n}挖掘长度为e、编号为m的线程依赖关系的执行序列模式
Figure BDA0001507781050000021
并计算
Figure BDA0001507781050000022
的支持度,具体方法为:
a)计算依赖轨迹中每个执行序列模式
Figure BDA0001507781050000023
的支持度
Figure BDA0001507781050000024
首先得到e为1时的支持度集合
Figure BDA0001507781050000025
Figure BDA0001507781050000026
为长度为1、编号为m的线程依赖关系的执行序列模式,
Figure BDA0001507781050000027
Figure BDA0001507781050000028
的支持度;
b)按照给定的阈值SUP进行剪枝,筛选出支持度不小于阈值的元素,得到元素集合如下所示:
Figure BDA0001507781050000029
c)将筛选出的元素进行连接,获得更长的序列,并按照如下公式计算新序列的支持度:
Figure BDA00015077810500000210
其中,
Figure BDA0001507781050000031
表示长度为2、编号为m的执行序列模式,该执行序列模式由DepTrace(n1)、DepTrace(n2)顺序组成,n1和n2分别是步骤b)中所得集合中任意两个线程依赖关系的编号,
Figure BDA0001507781050000032
Figure BDA0001507781050000033
的支持度;
d)重复上述剪枝、计算支持度、以及连接的过程,直至没有新的连接能够满足阈值条件为止,获得线程依赖关系的执行序列模式如下:
Figure BDA0001507781050000034
其中,ne为执行序列模式
Figure BDA0001507781050000035
中最后一个线程依赖关系的编号;
步骤4)将所述步骤3)挖掘到的线程依赖关系的执行序列模式加入剖析结果Profile,得到执行频率满足阈值要求的所有执行序列模式,所述剖析结果Profile是一个集合,其中的元素为
Figure BDA0001507781050000036
以及
Figure BDA0001507781050000037
的频率组成的二元组。
进一步的,本发明方法中,所述步骤2)中的依赖轨迹是由线程依赖关系所组成的序列。
进一步的,本发明方法中,所述步骤4)中剖析结果Profile中仅包含支持度不小于阈值的执行序列模式,即:
Figure BDA0001507781050000038
进一步的,本发明方法中,所述步骤4)中剖析结果Profile中执行序列模式
Figure BDA0001507781050000039
的频率为
Figure BDA00015077810500000310
的支持度占所有长度等于m且包含于Profile中的执行序列模式的总支持度的比例,即剖析结果Profile为:
Figure BDA00015077810500000311
进一步的,本发明方法中,所述步骤3)中依赖轨迹中执行序列模式
Figure BDA00015077810500000312
的支持度
Figure BDA00015077810500000313
是一个非负整数,表示
Figure BDA00015077810500000314
在执行轨迹中出现的总次数。
本发明方法通过分析并发程序源码获得其中的线程信息和线程之间的依赖关系;基于这一结果进行代码插桩,以在执行过程中记录相关的执行轨迹;最后从执行轨迹和线程树中挖掘线程依赖关系的执行序列模式,获取并发程序的剖析结果。
有益效果:本发明方法提出通过挖掘序列模式来获取并发程序的剖析结果,以用于并发程序的分析和理解之中。本发明与现有技术相比,主要有以下一些优点:
(1)能够针对并发程序进行剖析。现有的技术只能针对单线程程序进行路径剖析,不能直接应用于并发程序中。这是由于多个线程的并发执行会导致各个线程的路径乱序交错,使得各个线程中插入的桩代码计算混乱,不能得出正确的剖析结果。
(2)能够针对多线程间的依赖关系进行识别和监控。并发程序中线程交互是最重要的执行侧面之一,现有的技术尚不能对此进行剖析。本发明中通过静态分析技术识别线程之间存在的依赖关系及位置,并将其转化为对应的桩代码,能够在伴随并发程序的执行过程收集相应的依赖关系信息。
(3)利用序列模式挖掘方法,提高了剖析结果的丰富和精确的程度。执行轨迹包含并发程序执行过程中的线程交互情况,可以较为准确地体现程序的线程含义和线程间的依赖程度;通过序列模式挖掘可以从轨迹中抽取精确的线程依赖关系链,基于此项信息的剖析结果包含多个线程的完整交互过程,能够更充分地展示并发程序的动态逻辑。
附图说明
图1是本发明中包含的关键技术。
图2是本发明中从执行轨迹中获取依赖轨迹的示例。
图3是本发明中实施例中并发程序结构示意图。
图4为本发明实施过程的总体流程图。
具体实施方式
下面结合附图对发明的技术方案进行详细说明:
本发明利用并发程序执行过程中较为普遍的执行轨迹信息,结合并发程序内部的线程依赖关系来获取执行过程中的依赖轨迹;并从获得的依赖轨迹中利用序列模式挖掘技术得出线程依赖关系链,获得最终的剖析结果,指示并发程序动态执行中线程依赖关系的发生情况和逻辑关系。
图1给出了我们所采用的方法的主要流程和关键步骤,其中涉及的信息包括:
1.静态分析:通过对目标并发程序的代码进行静态分析,获知其中包含的线程和线程依赖关系,是本方法分析的起点;
2.插桩和运行:为了获取目标并发程序执行过程中的依赖关系情况,需要在目标程序的代码中插桩探针语句,以伴随着程序的执行过程对执行轨迹进行记录;
3.轨迹转换:执行轨迹是目标并发程序中各个实体的执行过程记录,需要从实体执行过程中提取相关的依赖关系发生过程,揭示线程依赖在执行中的逻辑;
4.挖掘:对于所获得的依赖轨迹应用序列模式挖掘技术,以执行中出现的线程依赖序列模式为目标,迭代渐进地提取长度更大的依赖序列模式;
5.统计:对于符合阈值要求的挖掘结果,将其转化为剖析结果,包括依赖序列模式及其出现的频率。
体系结构
下面给出几个主要部分的具体说明。
1.静态分析组件
本组件的功能为从对并发程序的代码进行静态分析,获得并发程序中存在的所有线程信息集合和线程之间依赖关系集合:
●线程信息集合Sthread={Tx},Tx在执行过程中可能会创建一个或多个线程实例;
●代码位置集合Slocation={Ly},其中包含每个线程中所有可能与线程间依赖直接相关的代码位置;
●依赖关系集合Sdependence={<Type,La,Lb>},其中Ta,Tb是两个线程,La是Ta的一个代码位置,Lb是Tb的一个代码位置,Type是从Sa指向Sb的依赖关系类型。
在执行过程中,Sthread和Sdependence中的元素都可能对应不止一个实例,在并发程序的执行过程中出现一次、多次或不出现。
2.插桩和运行组件
本组件的主要功能是基于线程依赖关系对目标并发程序进行插桩,生成符合语法规则的被插桩代码,具有与原目标程序相同的功能,并能够记录多个线程的执行轨迹;被插桩代码需要测试用例作为输入来运行,相应的执行轨迹和最终的剖析结果都与目标测试用例相对应。
插桩和运行的具体描述为:在Ta的相关代码位置La和Tb的相关代码位置Lb插入监控执行的桩代码,以在插桩后的程序执行中记录其执行轨迹{Trace(n)=<Ly>n},其中n为执行轨迹中各个元素的序号;
3.轨迹转换组件
本组件的主要功能是将包含线程节点实体的执行轨迹转换为包含线程依赖关系的依赖轨迹。主要思想是:如果执行轨迹中La与Lb的执行次序与依赖关系<Type,La,Lb>相符合,则认为线程依赖关系<Type,La,Lb>存在于当前执行之中,并将其加入依赖轨迹{DepTrace(n)=<Type,Li,Lj>n}之中;若不符合则相应的线程依赖关系没有在执行轨迹中出现,不做处理;其中Li和Lj为每个依赖关系中包含的两个代码位置。
具体算法为:
输入:执行轨迹{Trace(n)=<Ly>n};依赖关系集合Sdependence={<Type,La,Lb>}
输出:依赖轨迹{DepTrace(n)=<Type,Li,Lj>n}
步骤:
Figure BDA0001507781050000061
图2是实施轨迹转换过程的一个示例:
第一步:执行轨迹形为S1......Sn,其上符合的线程依赖关系有a,b,c等;
第二步:从左至右扫描执行轨迹,发现c是首个完整的依赖关系,将其加入依赖轨迹;
第三步:删去与c相关的执行轨迹节点S2和Si(删除后b与执行轨迹不再吻合);
第四步:从左至右扫描执行轨迹,发现a是首个完整的依赖关系,将其加入依赖轨迹,并删去与a相关的执行轨迹节点S1和Sj
执行轨迹不再符合更多的依赖关系,算法终止。输出的依赖轨迹为{c,a}。
4.挖掘组件
本组件的主要功能是从依赖轨迹中挖掘依赖序列模式,由短至长地逐步提取含义更丰富的依赖序列模式,具体方法为:
a)计算依赖轨迹中每个执行序列模式
Figure BDA0001507781050000062
的支持度
Figure BDA0001507781050000063
Figure BDA0001507781050000064
是一个非负整数,表示元素
Figure BDA0001507781050000065
在执行轨迹中出现的总次数。首先得到e为1时的支持度集合
Figure BDA0001507781050000066
Figure BDA0001507781050000067
为长度为1、编号为m的线程依赖关系的执行序列模式,
Figure BDA0001507781050000068
Figure BDA0001507781050000069
的支持度;
b)按照给定的阈值SUP进行剪枝,筛选出支持度不小于阈值的元素
Figure BDA0001507781050000071
c)将筛选出的元素进行连接,获得更长的序列,并按照如下公式计算新序列的支持度:
Figure BDA0001507781050000072
其中,
Figure BDA0001507781050000073
表示长度为2、编号为m的执行序列模式,该执行序列模式由DepTrace(n1)、DepTrace(n2)顺序组成,n1和n2分别是步骤b)中所得集合中任意两个线程依赖关系的编号,
Figure BDA0001507781050000074
Figure BDA0001507781050000075
的支持度;
d)重复上述剪枝、计算支持度、以及连接的过程,直至没有新的连接能够满足阈值条件为止,获得线程依赖关系的执行序列模式如下:
Figure BDA0001507781050000076
其中,ne为执行序列模式
Figure BDA0001507781050000077
中最后一个线程依赖关系的编号。
5.统计组件
本组件的功能是对于挖掘获取的依赖序列模式统计其相应的执行频率,完成剖析结果。具体方法是:挖掘组件得到的线程依赖关系的执行序列模式加入剖析结果Profile,得到执行频率满足阈值要求的所有执行序列模式,所述剖析结果Profile是一个集合,其中的元素为
Figure BDA0001507781050000078
以及
Figure BDA0001507781050000079
的频率组成的二元组;其中
Figure BDA00015077810500000710
的频率是
Figure BDA00015077810500000711
的支持度占等长连接总支持度的比例。统计公式为:
Figure BDA00015077810500000712
本方法从并发程序的源代码出发,以线程依赖序列模式为剖析目标,结合测试用例得到相应的剖析结果。具体的步骤如下(参见图1所示):
步骤1)通过并发程序源码的静态分析方法,获得并发程序中存在的所有线程信息集合Sthread={Ti}和线程之间各种类型的依赖关系集合Sdependence={<Type,La,Lb>},其中Ta,Tb是两个线程,La是Ta的一个代码位置,Lb是Tb的一个代码位置,Type是从Sa指向Sb的依赖关系类型;
步骤2)按照步骤1中所得信息进行代码插桩,并通过执行来获取依赖轨迹,具体方法为:
a)在Ta的相关代码位置La和Tb的相关代码位置Lb插入监控执行的桩代码,以在插桩后的程序执行中记录其执行轨迹{Trace(n)=<Lx>n};
b)如果Trace中La与Lb的执行次序与依赖关系<Type,La,Lb>相符合,则认为线程依赖关系<Type,La,Lb>存在于当前执行之中;
c)插桩后的并发程序执行完毕时,执行过程中所发生过的每个线程依赖关系按照顺序记录在依赖轨迹{DepTrace(n)=<Type,Li,Lj>n}之中,其中n表示序号;
步骤3)从依赖轨迹{DepTrace(n)=<Type,Li,Lj>n}和Sdependence中挖掘线程依赖关系的执行序列模式,获取并发程序的剖析结果,具体方法为:
a)计算执行轨迹中每个元素的支持度,得到
Figure BDA0001507781050000087
其中
Figure BDA0001507781050000086
是一个非负整数,表示元素DepTrace(n)在执行轨迹中出现的总次数;
b)按照给定的阈值SUP进行剪枝,筛选出支持度不小于阈值的元素
Figure BDA0001507781050000081
c)将筛选出的元素进行连接,以获得更长的序列,并重新计算支持度
Figure BDA0001507781050000082
d)重复上述剪枝、计算支持度、以及连接的过程,直至没有新的连接能够满足阈值条件为止,获得结果
Figure BDA0001507781050000083
步骤4)将所有符合阈值的元素及其连接加入剖析结果,相应的支持度占等长连接总支持度的比例即为对应的频率:
Figure BDA0001507781050000084
这样,我们获取了执行过程中所包含的线程依赖序列模式,及其相应的定量化频率。剖析结果与输入的测试用例相对应,测试用例内容越丰富,则剖析结果与并发程序的行为符合程度越高。
总之,本方法的总体实施过程为:从并发程序的源代码出发,通过静态分析获取线程和线程依赖相关信息,以插桩及运行的方式收集该并发程序的执行轨迹,并执行轨迹转化为依赖轨迹,挖掘其中的依赖序列模式,得到最终的剖析结果。
实施例:
为了方便描述,我们假定有如下简化的应用实例:
目标程序中有4个线程A、B、C和D。通过该程序源码进行静态分析发现,线程A启动线程B和C,线程C启动线程D;4个线程之间存在如下的5项依赖关系(如图3所示,图中的编号不代表线程内部的执行顺序)。
根据我们前面提到的步骤,依次实施:
步骤1:通过静态分析获知线程信息集合Sthread={A,B,C,D},代码位置集合Slocation={a1,a2,a3,b1,b2,b3,c1,c2,d1,d2}和依赖关系集合Sdependence={s1,s2,s3,s4,s5},其中
s1=<start,a1,b1>
s2=<start,a2,c1>
s3=<start,c2,d1>
s4=<notify,b2,a3>
s5=<interrupt,d2,b3>
步骤2:在线程A,B,C,D的依赖相关位置a1,a2,a3,b1,b2,b3,c1,c2,d1,d2等10处进行插桩,以使得这些相关位置执行时记录相应的执行轨迹信息。假设有如下5次执行轨迹:
Trace1=a1a2b1b2c1c2d1d2a3b3a2
Trace2=a1b1a2b2c1a3
Trace3=a1a2c1c2d1d2
Trace4=a1a2b1b2a3c1c2d1d2b3
Trace5=a1a2b1b2c1c2d1d2b3
从这些执行轨迹中获取依赖轨迹,如针对Trace1,从左到右依次分析首先完成的依赖:
●第一项完整的依赖关系执行次序为s1:a1,b1,将记入Trace1的依赖轨迹DepTrace1,然后从Trace1中删去a1,b1,得到Trace1=a2b2c1c2d1d2a3b3a2
●重复上述动作,得到DepTrace1=s1s2,Trace1=b2c2d1d2a3b3a2
●再次得到DepTrace1=s1s2s3,Trace1=b2d2a3b3a2
●再次得到DepTrace1=s1s2s3s4,Trace1=d2b3a2
●再次得到DepTrace1=s1s2s3s4s5,Trace1=a2
●至此不能再获取更多的依赖关系,Trace1完整的依赖轨迹DepTrace1=s1s2s3s4s5
同样可以获得其他四次执行的依赖轨迹:
DepTrace2=s1s2s4
DepTrace3=s2s3
DepTrace4=s1s4s2s3s5
DepTrace5=s1s2s3s5
步骤3:从依赖轨迹和Sdependence中挖掘线程依赖关系的执行序列模式。由于总的执行为5次,我们选择阈值SUP=3。然后进行支持度的计算和连接:
a)计算依赖轨迹中每个元素的支持度,得到
i.
Figure BDA0001507781050000101
ii.
Figure BDA0001507781050000102
iii.
Figure BDA0001507781050000103
iv.
Figure BDA0001507781050000104
v.
Figure BDA0001507781050000105
所有的元素支持度都不小于3,通过筛选;
b)进行连接计算新的支持度(支持度为0的已省略):
i.
Figure BDA0001507781050000106
ii.
Figure BDA0001507781050000107
iii.
Figure BDA0001507781050000108
iv.
Figure BDA0001507781050000109
v.
Figure BDA00015077810500001010
vi.
Figure BDA00015077810500001011
vii.
Figure BDA00015077810500001012
viii.
Figure BDA00015077810500001013
筛选后得到
Figure BDA00015077810500001014
c)进行连接计算新的支持度:
i.
Figure BDA00015077810500001015
ii.
Figure BDA00015077810500001016
没有符合筛选要求的元素,至此结束。
步骤4:将所有符合阈值的元素及其连接加入剖析结果,计算出最终的结果。
Figure BDA00015077810500001017
该结果指示,程序中最常见的执行规律为线程A启动线程C之后,紧接着线程C启动线程D。
以上仅是本发明的优选实施方式,应当指出:对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和等同替换,这些对本发明权利要求进行改进和等同替换后的技术方案,均落入本发明的保护范围。

Claims (5)

1.一种基于序列模式挖掘的并发程序剖析方法,其特征在于,该方法包括如下步骤:
步骤1)通过并发程序源码的静态分析方法,获得并发程序中存在的所有线程信息集合Sthread={Tx},所有线程位置集合Slocation={Ly},以及线程之间各种类型的依赖关系集合Sdependence={<Type,La,Lb>},所述所有线程信息集合Sthread={Tx}包括Ta,Tb两个线程,La是Ta的一个代码位置,Lb是Tb的一个代码位置,Type是从La指向Lb的依赖关系类型;
步骤2)按照所述步骤1中所得信息进行代码插桩,并通过执行插桩后的并发程序来获取依赖轨迹,具体方法为:
a)分别在Ta的代码位置La和Tb的代码位置Lb插入监控执行的桩代码,在插桩后的程序执行中记录其执行轨迹{Trace(n)=<Ly>n},其中n为执行轨迹中各个元素的序号;
b)如果执行轨迹中La与Lb的执行次序与依赖关系<Type,La,Lb>相符合,则认为线程依赖关系<Type,La,Lb>存在于当前执行之中,并将其加入依赖轨迹{DepTrace(n)=<Type,Li,Lj>n}之中;若不符合则相应的线程依赖关系没有在执行轨迹中出现,不做处理;其中Li和Lj为每个依赖关系中包含的两个代码位置;
步骤3)从所述依赖轨迹{DepTrace(n)=<Type,Li,Lj>n}挖掘长度为e、编号为m的线程依赖关系的执行序列模式
Figure FDA0001507781040000011
并计算
Figure FDA0001507781040000012
的支持度,具体方法为:
a)计算依赖轨迹中每个执行序列模式
Figure FDA0001507781040000013
的支持度
Figure FDA0001507781040000014
首先得到e为1时的支持度集合
Figure FDA0001507781040000015
Figure FDA0001507781040000016
为长度为1、编号为m的线程依赖关系的执行序列模式,
Figure FDA0001507781040000017
Figure FDA0001507781040000018
的支持度;
b)按照给定的阈值SUP进行剪枝,筛选出支持度不小于阈值的元素,得到元素集合如下所示:
Figure FDA0001507781040000019
c)将筛选出的元素进行连接,获得更长的序列,并按照如下公式计算新序列的支持度:
Figure FDA00015077810400000110
其中,
Figure FDA00015077810400000111
表示长度为2、编号为m的执行序列模式,该执行序列模式由DepTrace(n1)、DepTrace(n2)顺序组成,n1和n2分别是步骤b)中所得集合中任意两个线程依赖关系的编号,
Figure FDA00015077810400000112
Figure FDA00015077810400000113
的支持度;
d)重复上述剪枝、计算支持度、以及连接的过程,直至没有新的连接能够满足阈值条件为止,获得线程依赖关系的执行序列模式如下:
Figure FDA0001507781040000021
其中,ne为执行序列模式
Figure FDA0001507781040000022
中最后一个线程依赖关系的编号;
步骤4)将所述步骤3)挖掘到的线程依赖关系的执行序列模式加入剖析结果Profile,得到执行频率满足阈值要求的所有执行序列模式,所述剖析结果Profile是一个集合,其中的元素为
Figure FDA0001507781040000023
以及
Figure FDA0001507781040000024
的频率组成的二元组。
2.根据权利要求1所述的基于序列模式挖掘的并发程序剖析方法,其特征在于:所述步骤2)中的依赖轨迹是由线程依赖关系所组成的序列。
3.根据权利要求1所述的基于序列模式挖掘的并发程序剖析方法,其特征在于:所述步骤4)中剖析结果Profile中仅包含支持度不小于阈值的执行序列模式,即:
Figure FDA0001507781040000025
4.根据权利要求1、2或3所述的基于序列模式挖掘的并发程序剖析方法,其特征在于:所述步骤4)中剖析结果Profile中执行序列模式
Figure FDA0001507781040000026
的频率为
Figure FDA0001507781040000027
的支持度占所有长度等于m且包含于Profile中的执行序列模式的总支持度的比例,即剖析结果Profile为:
Figure FDA0001507781040000028
5.根据权利要求1、2或3所述的基于序列模式挖掘的并发程序剖析方法,其特征在于:所述步骤3)中依赖轨迹中执行序列模式
Figure FDA0001507781040000029
的支持度
Figure FDA00015077810400000210
是一个非负整数,表示
Figure FDA00015077810400000211
在执行轨迹中出现的总次数。
CN201711344458.9A 2017-12-14 2017-12-14 一种基于序列模式挖掘的并发程序剖析方法 Active CN108182144B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201711344458.9A CN108182144B (zh) 2017-12-14 2017-12-14 一种基于序列模式挖掘的并发程序剖析方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201711344458.9A CN108182144B (zh) 2017-12-14 2017-12-14 一种基于序列模式挖掘的并发程序剖析方法

Publications (2)

Publication Number Publication Date
CN108182144A CN108182144A (zh) 2018-06-19
CN108182144B true CN108182144B (zh) 2020-12-11

Family

ID=62546074

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201711344458.9A Active CN108182144B (zh) 2017-12-14 2017-12-14 一种基于序列模式挖掘的并发程序剖析方法

Country Status (1)

Country Link
CN (1) CN108182144B (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101710378A (zh) * 2009-10-10 2010-05-19 北京理工大学 一种基于序列模式挖掘的软件安全漏洞检测方法
US8495086B2 (en) * 2010-10-21 2013-07-23 International Business Machines Corporation Verifying licenses of musical recordings with multiple soundtracks
CN104899137A (zh) * 2015-05-22 2015-09-09 华中师范大学 一种并发程序的缺陷模式发现方法
CN106257425A (zh) * 2016-07-20 2016-12-28 东南大学 一种基于并发控制流图的Java并发程序路径剖析方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101710378A (zh) * 2009-10-10 2010-05-19 北京理工大学 一种基于序列模式挖掘的软件安全漏洞检测方法
US8495086B2 (en) * 2010-10-21 2013-07-23 International Business Machines Corporation Verifying licenses of musical recordings with multiple soundtracks
CN104899137A (zh) * 2015-05-22 2015-09-09 华中师范大学 一种并发程序的缺陷模式发现方法
CN106257425A (zh) * 2016-07-20 2016-12-28 东南大学 一种基于并发控制流图的Java并发程序路径剖析方法

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
CLPS-MFL: Using Concept Lattice of Program Spectrum for Effective Multi-fault Localization;Bixin Li;《2013 13th International Conference on Quality Software》;20130923;第204-207页 *
Programming parallel apriori algorithms for mining association rules;Chia-Chu Chiang;《2010 International Conference on System Science and Engineering》;20100819;第593-598页 *
全路径剖析方法;王璐璐 等;《软件学报》;20120615;第1413-1428页 *
基于函数调用序列模式挖掘的程序缺陷检测;崔展齐 等;《计算机科学》;20171115;第226-231页 *

Also Published As

Publication number Publication date
CN108182144A (zh) 2018-06-19

Similar Documents

Publication Publication Date Title
Zhong et al. An empirical study on API usages
CN109739755B (zh) 一种基于程序追踪和混合执行的模糊测试系统
CN104077144B (zh) 基于多线程程序约束构建的数据竞争检测与证据生成方法
CN102253889B (zh) 一种回归测试中基于分布的测试用例优先级划分方法
Duan et al. Versatile prediction and fast estimation of architectural vulnerability factor from processor performance metrics
CN104077226B (zh) 基于程序约束构建的多线程程序输出唯一性检测与证据生成方法
CN103559122A (zh) 基于程序行为切片的测试案例约减方法
CN111782460A (zh) 大规模日志数据的异常检测方法、装置和存储介质
Joshi et al. Runtime verification of LTL on lossy traces
CN103116540A (zh) 基于全局超级块支配图的动态符号执行方法及其装置
CN105868116A (zh) 基于语义变异算子的测试用例生成和优化方法
CN110399182B (zh) 一种cuda线程放置优化方法
Polo et al. Integrating techniques and tools for testing automation
Walkinshaw et al. Inferring computational state machine models from program executions
CN104021072A (zh) 用于评估失效的软件程序的机器和方法
CN110347610B (zh) 一种嵌入式代码调试系统及方法
CN104750608A (zh) 一种程序中基于动态符号执行的自动错误定位方法
CN116627818A (zh) 一种基于程序路径相似度的测试用例复用方法
CN108228232B (zh) 一种针对程序中循环问题的自动修复方法
CN107391124B (zh) 一种基于黄金分割搜索及软件执行轨迹的条件切片方法
CN108182144B (zh) 一种基于序列模式挖掘的并发程序剖析方法
CN109002723B (zh) 一种分段式符号执行方法
Sagdeo et al. Precis: Inferring invariants using program path guided clustering
CN111222801A (zh) 一种基于过程模型修正的业务流程效率提升方法
Modi et al. Exploring program phases for statistical bug localization

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