CN105159715B - 一种基于抽象语法树节点变更抽取的Python代码变更提示方法 - Google Patents

一种基于抽象语法树节点变更抽取的Python代码变更提示方法 Download PDF

Info

Publication number
CN105159715B
CN105159715B CN201510555635.2A CN201510555635A CN105159715B CN 105159715 B CN105159715 B CN 105159715B CN 201510555635 A CN201510555635 A CN 201510555635A CN 105159715 B CN105159715 B CN 105159715B
Authority
CN
China
Prior art keywords
change
node
define
type
python
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
CN201510555635.2A
Other languages
English (en)
Other versions
CN105159715A (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.)
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 CN201510555635.2A priority Critical patent/CN105159715B/zh
Publication of CN105159715A publication Critical patent/CN105159715A/zh
Application granted granted Critical
Publication of CN105159715B publication Critical patent/CN105159715B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明提供一种基于抽象语法树节点变更抽取的Python代码变更提示方法,包括下列步骤:1)获取同一软件不同版本程序的源代码;2)生成两个版本的源程序对应的抽象语法树;3)匹配抽象语法树获取变更节点,结合变更节点上下文信息标记节点变更类型;4)将变更元组聚集为事务,构造训练集;5)利用数据挖掘技术,挖掘变更元组中的关联关系;6)根据挖掘出的关联关系,提示开发人员程序中可能出现变更的位置和可能的变更类型。本发明解决了目前存在的缺乏针对Python语言的软件演化分析、无法提示可能的代码变更类型等问题,进而指导软件生命周期的管理,提高软件演化的可控性,从而能更好地控制软件产品的质量。

Description

一种基于抽象语法树节点变更抽取的Python代码变更提示 方法
技术领域
本发明属于计算机技术领域,尤其是软件演化分析领域。本发明提供了一种面向Python语言的、基于程序抽象语法树节点变更抽取的代码变更提示方法,用于在Python软件演化过程中为程序变更提供辅助信息。
背景技术
软件在其生命周期中一直在发生演化,从错误修正到增加功能等,对软件演化进行分析可以揭示软件发展的基本规律,对软件生命周期的管理提供指导性意见,以达到提高软件质量、开发可靠性软件的目的。而软件演化分析中的一个关键问题,就是识别程序不同版本间的变更,挖掘演化信息中的关联代码和关联变更类型,为软件演化过程提供变更辅助信息。
目前,软件演化信息主要源于以文件或者项目为基本单元来记录软件变化历史的软件配置管理系统、错误报告系统等CASE工具,这些工具大多使用代码行的增加或删除来描述某一个变化,而与类或函数等特定的源代码实体无关。因此,当前对程序演化分析的研究主要集中在代码行数、模块数量、发行包大小、宏定义数量等方面。这些数据能够在宏观上揭示程序的演化过程,通过对它们的研究,已经得到了包括持续演化、复杂度增加、自我规范等八条基本原则。但由于这些版本信息系统并不存储结构化的变更信息,因而对软件演化的分析无法深入到函数实体或语句实体级别。例如,无法识别“if语句的else分支中插入了一个函数调用”这类变化,而这类变更信息对于软件演化分析而言恰恰十分重要。
软件演化信息包含了软件变更历史等信息,一直是学术界的研究热点。Gall等人使用版本发行信息来识别模块间的耦合关系,并通过分析这种耦合关系发现可能的软件可维护功能点,但这种方法以模块为单位,分析粒度较粗;为了发现细粒度代码结构间的耦合关系,Thomas Zimmermann等人对代码文件进行语法分析,将语法实体与代码行相关联,该方法能在一定程度上预测程序可能发生变更的位置,但其没有对变更进行分类,无法对可能的变更类型提出建议;而在程序变更类型分类方面,Beat Fluri等人提出了一种源代码变化分类方法,该方法主要针对Java语言,从类和方法两个角度对变更进行分类。Python虽然也是一种面向对象的程序设计语言,但其与Java仍有一定区别,如类本身也是对象等,故Beat Fluri等人针对Java提出的源代码变化分类学,不完全适用于Python。Python语言第一个公开发行版本发行于1991年,诞生时间较短,目前学术界针对Python语言的研究较少,但Python自诞生以来,已经成为最受欢迎的程序设计语言之一,故对Python程序变更信息进行分析,具有一定价值。
总的来说,传统的软件变更历史研究方法存在如下缺点:1、仅仅依赖CVS等版本控制系统提供的变更信息,变更只与代码行的增删相关,而与类或函数等代码实体无关;2、分析粒度较粗,鲜有方法能分析函数级别的变更,缺乏深入到源代码语句级的分析方法;3、没有对变更进行分类,仅能提示变更可能发生的位置,无法提示可能的变更类型;4、大多数方法的研究对象为Java/C++等,针对Python语言的研究成果较少。
发明内容
本发明提供了一种面向Python语言的、基于程序抽象语法树节点变更抽取的代码变更提示方法,该方法通过匹配源程序的抽象语法树表示,结合基本树编辑操作(插入、删除和更新),确定程序中每一处的变更类型,使用成熟的数据挖掘技术从变更信息中挖掘关联规则,根据关联规则预测程序中可能出现变更的位置和可能的变更类型,从而对程序变更提出建议。本发明旨在解决目前存在的缺乏针对Python语言的软件演化分析、无法提示可能的代码变更类型等问题,进而指导软件生命周期的管理,提高软件演化的可控性,从而能更好地控制软件产品的质量。
为达成上述目的,本发明提出一种基于抽象语法树节点变更抽取的Python代码变更提示方法。方法包括下列步骤:
1)获取同一软件不同版本程序的源代码;
2)生成两个版本的源程序代码对应的抽象语法树;
3)匹配抽象语法树获取变更节点,结合变更节点上下文信息标记节点变更类型;
4)将变更元组聚集为事务,构造训练集;
5)利用FP-growth算法,挖掘变更元组中的频繁项集,生成关联规则;
6)根据挖掘出的关联代码和关联变更类型,提示开发人员程序中可能出现变更的位置和可能的变更类型。
进一步,其中上述步骤1)的具体步骤如下:
步骤1)-1:起始状态;
步骤1)-2:根据文件名和版本号,从软件版本控制系统中获取同一软件的两个不同版本的源程序;
步骤1)-3:软件不同版本源程序采集完毕。
进一步,其中上述步骤2)的具体步骤如下:
步骤2)-1:起始状态;
步骤2)-2:对同一软件的两个不同版本的源程序进行词法分析和语法分析,利用Python标准库中的ast模块生成两个版本程序对应的抽象语法树;
步骤2)-3:根据Python标准库中定义的抽象语法,为抽象语法树中的每个节点设置label和value,并设置节点标识符。label表示节点的类型,如函数调用;value用于表示节点的内容,中间节点的value依赖于其label,如if控制语句的value为其条件表达式,叶子节点的value即语句的文本表示,如函数调用的具体内容等;节点标识符id用于唯一标识节点;
步骤2)-4:两个不同版本程序对应的抽象语法树生成完毕。
进一步,其中上述步骤3)的具体步骤如下:
步骤3)-1:起始状态;
步骤3)-2:后序遍历抽象语法树,对叶子节点及中间节点采用不同的算法进行匹配;
步骤3)-3:对于发生变更的节点,获取该节点自身及其父节点的label;
步骤3)-4:分析对变更节点执行的基本树编辑操作,标记节点的变更类型;
步骤3)-5:对于每一个发生变更的节点,用元组δ=(节点标识符,变更类型)记录其变更情况;
步骤3)-6:变更节点信息收集完毕。
进一步,其中上述步骤4)的具体步骤如下:
步骤4)-1:起始状态;
步骤4)-2:元组δ=(节点标识符,变更类型)记录了程序中的变更信息,将已获得的记录两个版本间变更信息的元组序列C={δ1,δ2,…,δn}聚集为一个事务Δ;
步骤4)-3:获取同一Python程序各个版本间的变更,得到事务集合T={Δ1,Δ2,…,Δn},保存在数据库中;
步骤4)-4:扫描数据库,一次变更产生的事务作为一条训练数据,构造训练集a;
步骤4)-5:重复上述步骤,获取多个Python程序的训练集{a1,a2,…,an},对于ai中的每条训练数据,抽取其中包含的变更类型信息,得到序列C′={变更类型1,变更类型2,…,变更类型n},将序列C′聚集为事务Δ′,利用事务集合T′={Δ′1,Δ′2,…,Δ′n}构造新的训练数据集b:
步骤4)-6:训练集构造完毕。
进一步,其中上述步骤5)的具体步骤如下:
步骤5)-1:起始状态;
步骤5)-2:利用训练集a构造FP树,挖掘生成训练集a的Python程序中,变更元组δ=(节点标识符,变更类型)间的关联关系;
步骤5)-3:利用训练数据集b构造FP树,挖掘变更类型间的关联关系,即哪两种变更类型通常一起发生;
步骤5)-4:变更信息间的关联关系挖掘完毕。
进一步,其中上述步骤6)的具体步骤如下:
步骤6)-1:起始状态;
步骤6)-2:对于变更历史信息包含在训练样本中的待测Python程序,当某个节点发生变更时,根据挖掘出的变更元组δ=(节点标识符,变更类型)间的关联关系,提示开发人员与此变更相关的关联变更节点和关联变更类型;
步骤6)-3:对于变更历史信息未包含在训练样本中的待测Python程序,当某个节点发生变更时,根据挖掘出的变更模式之间的关联关系,提示开发人员与此变更相关的关联变更类型;
步骤6)-4:代码变更提示完毕。
本发明基于抽象语法树匹配来抽取同一程序两个版本间的变更,使得变更识别粒度深入到基本语句级;在识别变更节点后,获取其上下文信息,并结合对变更节点执行的基本树编辑操作,标记节点的变更类型,实现代码关联变更类型提示;采用FP-growth算法挖掘变更元组集合中的频繁项集,生成关联规则,以此提示代码变更,提高了软件演化的可控性,有利于开发出高质量的软件产品。
附图说明
图1为本发明实施例的一种基于抽象语法树节点变更抽取的Python代码变更提示方法的总体架构图。
图2为本发明实施例的一种基于抽象语法树节点变更抽取的Python代码变更提示方法的流程图。
图3为一个条件控制结构可能的抽象语法树示意图。
具体实施方式
本发明方法首先通过CVS等软件版本控制系统,收集了同一Python软件两个不同版本程序的源代码;接着对两个版本源程序进行词法分析和语法分析,生成对应的抽象语法树;然后匹配两棵抽象语法树,寻找发生变更的节点并获取其上下文信息,结合对变更节点执行的基本树编辑操作,标记节点的变更类型,并利用元组δ=(节点标识符,变更类型)记录节点的变更情况;最后,将一次提交产生的变更元组序列聚集为事务,构造训练集a、b,采用FP-growth算法,挖掘变更元组中的频繁项集,生成相应的关联规则,以此识别程序中的关联代码块和关联的变更类型,从而在程序演化过程中辅助开发人员实施变更。
为了更好地说明本发明的技术内容,特结合所附图式作如下说明。
本发明的总体架构图如图1所示,流程图如图2所示。本发明提出的一种基于抽象语法树节点变更抽取的Python代码变更提示方法,包括下列6个步骤:
步骤1:获取同一软件不同版本程序的源代码。CVS等软件版本控制系统中保存了一个程序所有版本的提交,根据文件名和版本号从软件版本控制系统中获取同一Python软件不同版本程序的源代码。
步骤2:生成两个版本程序的源代码对应的抽象语法树。对步骤1中获取的两个不同版本的源程序代码进行词法分析和语法分析,利用Python标准库中的ast模块生成抽象语法树。在抽象语法树中,每个源代码实体对应一棵子语法树或一个叶子节点。为了更好地对节点变更进行分类,我们根据Python标准库中定义的抽象语法,为抽象语法树中的每个节点设置label和value,同时设置节点标识符。对于每个实体节点x,l(x)为节点的label,表示节点的类型,如函数调用;v(x)为节点的value,表示节点的内容,中间节点的value依赖于其label,如if控制语句的value为其条件表达式,叶子节点的value即语句的文本表示,如函数调用的具体内容等;节点标识符id用于唯一标识节点;图3为一个条件控制结构可能的抽象语法树。
步骤3:匹配抽象语法树获取变更节点,结合变更节点上下文信息标记节点变更类型;源代码在步骤2中被转化为抽象语法树,因此源代码的变更操作对应了对抽象语法树节点执行的基本树编辑操作,包括插入、删除和更新。后序遍历步骤2中生成的两棵抽象语法树,依次匹配各个对应节点,寻找其中发生变更的节点,获取变更节点自身及其父节点的label,结合对变更节点执行的基本树编辑操作,标记节点的变更类型;对于每一个发生变更的节点,用元组δ=(节点标识符,变更类型)记录其变更情况;
匹配两棵抽象语法树时,由于叶子节点和中间节点代表不同的代码结构,故采用不同的匹配算法。对于两个叶子节点,当且仅当label相同且value的相似度大于阈值f时,才认为两个节点匹配;否则匹配失败,记录对该节点执行的基本树编辑操作类型。叶子节点匹配算法如下:
其中,x、y为两个叶子节点;l(x)、l(y)为节点的label;v(x)、v(y)为节点的value;sim2g(v(x),v(y))为节点value的相似性度量,通过对比Levenshtein Distance等字符串相似性度量方法,本发明采用2-Grams作为字符串的相似性度量,该方法对字符顺序的改变有较高的鲁棒性;f为设定的阈值,建议大小为f=0.6,也可由用户根据经验自行确定。
中间节点可以看作子树的根节点,对中间节点进行匹配时,计算以该中间节点为根的子树中匹配成功的叶子节点所占的比例及中间节点value的相似度。中间节点匹配算法如下:
其中,|x|表示以节点x为根节点的子树(以下简称子树x)中包含的叶子节点数;common(x,y)={(p,q)∈ M|p是子树x的叶子节点,q是子树y的叶子节点,M是匹配成功的叶子节点集合};t为子树匹配的阈值,其大小随着子树规模动态调整,建议为:n>4时,t=0.6,n≤4时,t=0.4,用户也可根据经验自行确定(n为子树包含的叶子节点数);其余符号表示含义与matchleaf(x,y)相同。
匹配抽象语法树获取变更节点后,分析对变更节点执行的基本树编辑操作,结合变更节点的上下文信息,标记节点的变更类型。例如,抽象语法树中一个label为class_name的节点发生了“更新”操作,说明该变更操作更新了某个类的名称,对应的变更类型为CLASS_RENAMING;一个label为alternative_part的节点发生了“删除”操作,说明程序中删除了某个if语句的else分支,对应的变更类型为ALTERNATIVE_PART_DELETE。
对于某些类型为STATEMENT_INSERT或STATEMENT_DELETE等的变更,可以通过向上获取变更节点父节点的label来标记代码的变更类型。例如,某次变更删除了if控制结构的else语句块中的某条return语句,变更节点的label为return_statement,父节点label为alternative_part,所以可识别细粒度的代码变更类型为RETRUN_STATEMENT_DELETE_IN_ALTERNATIVE_PART。
步骤4:将变更元组聚集为事务,生成训练集。元组δ=(节点标识符,变更类型)记录了程序中的变更信息,将记录两个版本间变更情况的元组序列C={δ1,δ2,…,δn}聚集为一个事务Δ,保存在数据库中。每次版本更新可视为程序的一次变更提交,将一次变更产生的事务作为一条训练数据。获取同一Python程序多个版本间的变更,得到事务集合T={Δ1,Δ2,…,Δn},构造训练集a。重复上述步骤,获取多个Python程序的训练集{a1,a2,…,an},抽取其中每条训练数据包含的变更类型信息,得到记录一次变更提交的变更类型信息的序列C′={变更类型1,变更类型2,…,变更类型n},作为一条新的训练数据,即将任意程序一次提交产生的变更事务作为一条训练数据,构造新的训练数据集b。
步骤5:利用数据挖掘技术,挖掘变更元组中的关联关系。扫描训练集a和b,采用FP-growth算法挖掘变更元组中的频繁项集,根据频繁项集生成关联规则。关联规则是形如B的蕴含式,其中I={I1,I2,…,Im}是项的集合, 并且
对于训练集a,构造FP树,挖掘生成训练集a的特定Python程序中,变更元组间的关联关系,例如(节点标识符a,变更类型1)(节点标识符b,变更类型2);对于训练集b,构造FP树,挖掘变更类型间的关联关系,即哪两种变更类型通常一起发生,例如变更类型1变更类型2。
发现频繁项集常用的算法有Apriori算法和FP-growth算法,Apriori算法需要产生大量的候选项集,并需要重复扫描整个数据库来检查该候选集合,开销太大。FP-growth算法既可以挖掘全部频繁项集又无须这种代价昂贵的候选产生过程,性能显著优于Apriori算法,故本发明采用FP-growth算法挖掘元组集合中的频繁项集。找出频繁项集后,直接由它们产生满足最小支持度和最小置信度的强关联规则。
对于置信度confidence(AB)可以用如下公式计算:
条件概率P(A|B)用项集的支持度计数表示,其中,support_count(A∪B)是包含项集A∪B的事务数,而support_count(A)是包含项集A的事务数。根据该式,关联规则可以产生如下:
●对于每个频繁项集l,产生l的所有非空子集;
●对于l的每个非空子集,如果confidence(s(l-s))≥min_conf,则输出规则s
(l-s)。其中,min_conf是最小置信度阈值。
步骤6:根据挖掘出的关联代码和关联变更类型,提示开发人员程序中可能出现变更的位置和可能的变更类型。对于变更历史信息包含在训练样本中的待测Python程序,根据挖掘出的变更元组间的关联关系,当程序发生新的变更时,提示与此变更相关联的可能的变更位置及可能的变更类型;对于变更历史信息未包含在训练样本中的待测Python程序,根据挖掘出的变更类型之间的关联关系,当程序发生新的变更时,提示与此变更相关联的可能的变更类型。
例如,a)将一个Python程序的多次提交产生的事务集合作为训练集,通过FP-growth算法挖掘出如下关联规则:(节点标识符a,变更类型1)(节点标识符b,变更类型2)。则对于该程序(即变更历史信息包含在训练样本中的待测Python程序)的下一次修改,当程序员对节点a进行了类型1修改时,提示其对关联节点b进行类型2的修改;b)将任意Python程序的任意次提交产生的事务集合作为训练集,通过FP-growth算法挖掘出如下关联规则:变更类型1变更类型2。对于一个全新的未知Python程序(即变更历史信息未包含在训练样本中的待测Python程序),当程序员进行了类型1修改后,提示其进行类型2修改。
综上所述,本发明提供了一种面向Python语言的、基于抽象语法树节点变更抽取的代码变更提示方法,解决了目前存在的缺乏针对Python语言的软件演化分析、无法提示代码变更类型等问题,提高了软件演化的可控性,从而能更好地控制软件产品的质量。

Claims (1)

1.一种基于抽象语法树节点变更抽取的Python代码变更提示方法,其特征在于,从软件版本控制系统中获取同一Python软件两个不同版本的源程序代码,生成两个版本源程序对应的抽象语法树,匹配抽象语法树,寻找发生变更的节点并获取其上下文信息,结合对变更节点执行的插入、删除和更新三种基本树编辑操作,标记节点变更类型,并利用变更信息构造训练集,通过数据挖掘技术挖掘变更信息间的关联规则,根据节点的关联关系及变更类型间的关联关系为程序变更提供辅助信息;该方法包括下列步骤:
1)获取同一软件不同版本程序的源代码;CVS版本控制系统中保存了一个程序所有版本的提交,根据文件名和版本号,从软件版本控制系统中获取同一软件不同版本程序的源代码;
定义1:文件名和版本号是软件版本控制系统中用于区分不同软件或同一软件不同版本的标识;
2)生成软件两个版本源程序对应的抽象语法树;对步骤1)中已经收集好的同一软件不同版本程序的源代码进行词法分析和语法分析,利用Python标准库中的ast模块生成两个版本程序对应的抽象语法树,并对每个节点设置label和value,标识节点类型和内容,同时设置节点标识符;
定义1:抽象语法树是源代码抽象语法结构的树状表现形式,每个节点代表源代码中的一种结构;
定义2:Python标准库随Python语言一起发行,包含了诸多能提供系统级功能访问的内建模块;
定义3:ast模块是Python标准库中的一个模块,帮助解析Python抽象语法;
定义4:label表示抽象语法树中节点的类型,类型信息来自Python抽象语法;
定义5:value表示节点的内容,中间节点的value依赖于其label,叶子节点的value即语句的文本表示;
定义6:节点标识符用于唯一标识节点,每个节点不同;
3)匹配抽象语法树获取变更节点,结合变更节点上下文信息标记变更类型;后序遍历步骤2)中生成的两个版本源程序的抽象语法树,依次匹配各个对应节点,寻找其中发生变更的节点,获取变更节点上下文信息,并结合对变更节点执行的基本树编辑操作,标记节点的变更类型,对于每一个发生变更的节点,用元组δ=(节点标识符,变更类型)记录其变更情况;
定义1:匹配叶子节点时,当且仅当两个叶子节点的label相同且value的字符串相似度大于阈值f时,两个节点匹配成功,否则匹配失败,记录对该节点执行的基本树编辑操作类型;本发明采用2-Grams字符串相似性度量方法计算value的相似性,设定的阈值f为0.6;
定义2:中间节点可以看作子树的根节点,匹配中间节点时,计算以该中间节点为根的子树中,匹配成功的叶子节点数占叶子节点总数的比例σ及中间节点value的相似度siminner,当σ大于阈值t且siminner大于阈值f时,中间节点匹配成功,否则匹配失败,记录对该节点执行的基本树编辑操作类型;阈值f的大小设定为0.6,阈值t的大小随着子树规模动态调整:n>4时,t=0.6,n≤4时,t=0.4,其中n为子树包含的叶子节点数;
定义3:源代码被转化为抽象语法树,因此其变更操作对应了基本的树编辑操作;
定义4:基本树编辑操作是指对树形结构进行的基本操作,包括插入、删除和更新;
定义5:变更节点上下文信息包括变更节点自身的label及其父节点的label;
定义6:标记节点变更类型时,根据获取的变更节点上下文信息,并结合对变更节点执行的基本树编辑操作,得出对节点变更的描述;变更节点的label或者变更节点父节点的label用于标记代码的变更类型;
4)将变更元组聚集为事务,生成训练集;元组δ=(节点标识符,变更类型)记录了程序中的变更信息,将记录两个版本间变更情况的元组序列聚集为一个事务Δ,保存在数据库中,构造训练集a和b;
定义1:元组序列C={δ1,δ2,...,δn}记录了程序的两个版本pi和pi+1间的变更,将元组序列C聚集为事务,有 其中,运算符表示变更操作,n表示两个版本间变更的次数,i表示版本序列;
定义2:利用事务集合T={Δ1,Δ2,...,Δn},构造训练集a,Δi是其中的一条训练数据,其中n为事务个数,1≤i≤n;
定义3:获取多个Python程序的训练集{a1,a2,...,an},对于ai中的一条训练数据,抽取其中包含的变更类型信息,得到序列C′={变更类型1,变更类型2,...,变更类型m},将序列C′聚集为事务Δ′,利用事务集合T′={Δ1′,Δ2′,...,Δn′}构造新的训练数据集b,其中n为训练数据条数,m为一条训练数据的变更个数;
5)利用数据挖掘技术,挖掘变更元组集合中的频繁项集,由此生成关联规则;扫描训练集a和b,采用FP-growth算法挖掘变更元组集合中的频繁项集,根据频繁项集生成变更元组间的关联规则及变更类型间的关联规则,从而从程序变更的历史信息中得出关联代码和关联变更类型;
定义1:FP-growth算法是数据挖掘领域一种著名的用于挖掘频繁项集的模式增长方法,由长度为1的频繁模式开始构造条件模式基,然后构造它的条件FP树,递归地在该树上进行挖掘,从而发现频繁项集;
定义2:关联规则是形如的蕴含式,对于程序中所有项个数m,项的集合I={I1,I2,...,Im},并且
定义3:根据挖掘出的频繁项集,产生满足最小支持度和最小置信度的强关联规则;
对于置信度可以用如下公式计算:
条件概率P(A|B)用项集的支持度计数表示,其中,support_count(A∪B)是包含项集A∪B的事务数,而support_count(A)是包含项集A的事务数。根据该式,关联规则可以产生如下:
●对于每个频繁项集l,产生l的所有非空子集;
●对于l的每个非空子集s,如果则输出规则其中,l-s包含了l中除s外的所有项集,min_conf是最小置信度阈值。
定义4:我们认为常常同时发生变更的节点是关联的;
定义5:我们认为常常同时发生的变更类型是关联的;
6)根据挖掘出的关联代码和关联变更类型,提示开发人员程序中可能出现变更的位置和可能的变更类型;对于变更历史信息包含在训练样本中的待测Python程序,根据挖掘出的变更元组间的关联关系,当程序发生新的变更时,提示与此变更相关联的可能的变更位置及变更类型;对于变更历史信息未包含在训练样本中的待测Python程序,根据挖掘出的变更类型之间的关联关系,当程序发生新的变更时,提示与此变更相关联的可能的变更类型。
CN201510555635.2A 2015-09-01 2015-09-01 一种基于抽象语法树节点变更抽取的Python代码变更提示方法 Active CN105159715B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510555635.2A CN105159715B (zh) 2015-09-01 2015-09-01 一种基于抽象语法树节点变更抽取的Python代码变更提示方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510555635.2A CN105159715B (zh) 2015-09-01 2015-09-01 一种基于抽象语法树节点变更抽取的Python代码变更提示方法

Publications (2)

Publication Number Publication Date
CN105159715A CN105159715A (zh) 2015-12-16
CN105159715B true CN105159715B (zh) 2018-07-20

Family

ID=54800579

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510555635.2A Active CN105159715B (zh) 2015-09-01 2015-09-01 一种基于抽象语法树节点变更抽取的Python代码变更提示方法

Country Status (1)

Country Link
CN (1) CN105159715B (zh)

Families Citing this family (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107291521B (zh) * 2016-03-31 2020-12-04 阿里巴巴集团控股有限公司 编译计算机语言的方法和装置
CN105975392A (zh) * 2016-04-29 2016-09-28 国家计算机网络与信息安全管理中心 一种基于抽象语法树的重复代码检测方法及装置
CN107967208B (zh) * 2016-10-20 2020-01-17 南京大学 一种基于深度神经网络的Python资源敏感缺陷代码检测方法
CN106648636B (zh) * 2016-12-08 2020-01-03 北京航空航天大学 一种基于图挖掘的软件函数变更预测系统及方法
CN108694049B (zh) * 2017-02-23 2021-08-17 阿里巴巴集团控股有限公司 一种更新软件的方法和设备
US10747784B2 (en) * 2017-04-07 2020-08-18 Visa International Service Association Identifying reason codes from gradient boosting machines
CN108932192B (zh) * 2017-05-22 2020-01-14 南京大学 一种基于抽象语法树的Python程序类型缺陷检测方法
CN107179933A (zh) * 2017-06-08 2017-09-19 成都未来之门科技有限公司 动态语言变量识别方法、装置、翻译方法及软件移植方法
CN110275709B (zh) * 2018-03-15 2023-07-25 斑马智行网络(香港)有限公司 针对动态语言的处理及优化方法、装置、设备及存储介质
CN108388425B (zh) * 2018-03-20 2021-02-19 北京大学 一种基于lstm自动补全代码的方法
CN111258876B (zh) * 2018-11-30 2023-08-01 中国移动通信集团浙江有限公司 一种微服务架构下的精确回归测试方法及装置
CN109783353A (zh) * 2018-12-14 2019-05-21 平安普惠企业管理有限公司 一种程序分析方法及终端设备
CN109857648B (zh) * 2019-01-14 2021-12-28 复旦大学 一种api误用的变更模式挖掘方法
CN109947462A (zh) * 2019-03-15 2019-06-28 武汉大学 一种面向软件代码变更集成的决策支持方法及装置
CN110187885B (zh) * 2019-06-10 2023-03-31 合肥本源量子计算科技有限责任公司 一种量子程序编译的中间代码生成方法及装置
CN110532019B (zh) * 2019-06-27 2021-03-12 北京大学 一种软件代码片段历史追溯的方法
CN110457065B (zh) * 2019-08-14 2023-11-07 中国工商银行股份有限公司 用于获得可兼容多版本系统的应用的方法及装置
CN110780897B (zh) * 2019-08-26 2022-05-10 华为云计算技术有限公司 一种代码变更方法以及装置
CN110750240A (zh) * 2019-08-28 2020-02-04 南京航空航天大学 一种基于序列到序列模型的代码片段推荐方法
CN111736840A (zh) * 2019-09-19 2020-10-02 北京沃东天骏信息技术有限公司 小程序应用的编译方法、运行方法、存储介质及电子设备
CN110737466B (zh) * 2019-10-16 2021-04-02 南京航空航天大学 基于静态程序分析的源代码编码序列表示方法
CN113535228B (zh) * 2020-04-14 2024-04-09 深圳富桂精密工业有限公司 监控数据链路的方法、装置及计算机可读存储介质
CN111666206B (zh) * 2020-04-30 2023-12-22 北京百度网讯科技有限公司 变更代码的影响范围的获取方法、装置、设备及存储介质
CN111913874B (zh) * 2020-06-22 2021-12-28 西安交通大学 一种基于语法结构变更分析的软件缺陷溯源方法
CN111737964B (zh) * 2020-06-23 2024-03-19 深圳前海微众银行股份有限公司 表格动态处理方法、设备及介质
CN112148609A (zh) * 2020-09-28 2020-12-29 南京大学 一种对于在线编程考试中所提交的代码的度量方法
CN112596738B (zh) * 2020-12-28 2023-07-11 北京字跳网络技术有限公司 待测试前端页面的确定方法、装置、存储介质及电子设备
CN112989731B (zh) * 2021-03-22 2023-10-13 湖南大学 一种基于抽象语法树的集成电路建模获取方法及系统
CN113448605B (zh) * 2021-06-29 2024-02-09 北京高途云集教育科技有限公司 一种软件更新方法、装置、电子设备及存储介质
CN113778515B (zh) * 2021-11-09 2022-03-04 北京世纪好未来教育科技有限公司 确定程序包变更信息的方法和装置
CN114201236A (zh) * 2021-12-14 2022-03-18 平安壹钱包电子商务有限公司 基于ast的组件配置的方法、装置、设备及介质
CN116049835B (zh) * 2023-03-08 2023-06-23 中汽智联技术有限公司 汽车固件的安全漏洞检测方法、设备和存储介质
CN116756052B (zh) * 2023-08-18 2023-11-14 建信金融科技有限责任公司 一种数据处理方法和装置
CN117289929B (zh) * 2023-11-24 2024-03-19 浙江口碑网络技术有限公司 一种插件框架、插件及数据处理方法、装置及电子设备

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7281011B1 (en) * 2002-07-31 2007-10-09 At&T Bls Intellectual Property, Inc. Computer-readable medium and data structure for defining and communicating a standard operating environment
CN102880547A (zh) * 2012-09-05 2013-01-16 无锡江南计算技术研究所 一种软件单元与部件与相结合的源代码变更影响分析与测试方法
CN103235729A (zh) * 2013-04-18 2013-08-07 南京大学 一种基于代码变更的软件模型同步方法
CN103678110A (zh) * 2012-09-26 2014-03-26 国际商业机器公司 提供修改相关信息的方法和装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7281011B1 (en) * 2002-07-31 2007-10-09 At&T Bls Intellectual Property, Inc. Computer-readable medium and data structure for defining and communicating a standard operating environment
CN102880547A (zh) * 2012-09-05 2013-01-16 无锡江南计算技术研究所 一种软件单元与部件与相结合的源代码变更影响分析与测试方法
CN103678110A (zh) * 2012-09-26 2014-03-26 国际商业机器公司 提供修改相关信息的方法和装置
CN103235729A (zh) * 2013-04-18 2013-08-07 南京大学 一种基于代码变更的软件模型同步方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
一种改进的基于抽象语法树的软件演化分析技术研究;姜璐;《中国优秀硕士学位论文全文数据库 信息科技辑》;20131015(第10期);全文 *

Also Published As

Publication number Publication date
CN105159715A (zh) 2015-12-16

Similar Documents

Publication Publication Date Title
CN105159715B (zh) 一种基于抽象语法树节点变更抽取的Python代码变更提示方法
CN102713834B (zh) 管理记录格式信息
CN108446540A (zh) 基于源代码多标签图神经网络的程序代码抄袭类型检测方法与系统
CN104699611B (zh) 一种基于开源软件缺陷代码修改模式的缺陷信息提取方法
US20060242180A1 (en) Extracting data from semi-structured text documents
CN106537332A (zh) 软件分析系统和方法
Kovbasistyi et al. Method for detection of non-relevant and wrong information based on content analysis of web resources
Nguyen et al. Clone-aware configuration management
CN109492106B (zh) 一种文本代码相结合的缺陷原因自动分类方法
CN110532019A (zh) 一种软件代码片段历史追溯的方法
WO2019139817A1 (en) Knowledge base construction
Döhmen et al. Multi-hypothesis CSV parsing
Pit-Claudel et al. Outlier detection in heterogeneous datasets using automatic tuple expansion
CN109344355A (zh) 针对网页变化的自动回归检测与块匹配自适应方法和装置
CN110781297B (zh) 基于层次判别树的多标签科研论文的分类方法
US7496571B2 (en) Method for performing information-preserving DTD schema embeddings
CN104750484A (zh) 一种基于最大熵模型的代码摘要生成方法
Geng et al. Autobib: Automatic extraction of bibliographic information on the web
CN102541913B (zh) 面向Web的VSM分类器训练、OSSP页面识别及OSS资源提取方法
Sanprasit et al. A semantic approach to automated design and construction of star schemas.
Nguyen et al. Using topic model to suggest fine-grained source code changes
Zhang et al. Approach to Predict Software Vulnerability Based on Multiple-Level N-gram Feature Extraction and Heterogeneous Ensemble Learning
Conklin Project entity matching across FLOSS repositories
CN109299381A (zh) 一种基于语义概念的软件缺陷检索和分析系统及方法
Wang et al. Recover and Optimize Software Architecture Based on Source Code and Directory Hierarchies (S).

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant