CN104035772A - 基于静态分析的源码多版本函数调用关系差异性标识方法 - Google Patents

基于静态分析的源码多版本函数调用关系差异性标识方法 Download PDF

Info

Publication number
CN104035772A
CN104035772A CN201410252637.XA CN201410252637A CN104035772A CN 104035772 A CN104035772 A CN 104035772A CN 201410252637 A CN201410252637 A CN 201410252637A CN 104035772 A CN104035772 A CN 104035772A
Authority
CN
China
Prior art keywords
function
version
source code
call relation
difference
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.)
Granted
Application number
CN201410252637.XA
Other languages
English (en)
Other versions
CN104035772B (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.)
Institute of Software of CAS
Original Assignee
Institute of Software of CAS
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 Institute of Software of CAS filed Critical Institute of Software of CAS
Priority to CN201410252637.XA priority Critical patent/CN104035772B/zh
Publication of CN104035772A publication Critical patent/CN104035772A/zh
Application granted granted Critical
Publication of CN104035772B publication Critical patent/CN104035772B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明涉及一种基于静态分析的源码多版本函数调用关系差异性标识方法。首先通过源码静态分析技术获取源码中定义的函数列表和函数之间的静态调用关系等信息;然后将选取的两个版本源码进行Diff,结合静态分析获取的函数定义列表和调用关系标识出变化的差异部分,将变化的部分进行细致的状态分析,分别标识出函数定义和调用的修改状态、新增状态和删除状态并入库;最后结合用户的需求和数据库中保存的状态数据进行单个版本的调用关系展示和多版本函数调用关系差异视图的展示。本发明可以完成单个版本的内部调用关系分析和展示以及多个版本之间的调用关系差异性分析和展示,为开源软件的分析、开发、升级和维护提供了高效的辅助方法。

Description

基于静态分析的源码多版本函数调用关系差异性标识方法
技术领域
本发明涉及源代码静态分析技术,特别涉及函数调用关系图和多版本差异性标识方法,提出了一种实用的基于静态分析的源码多版本函数调用关系差异性标识方法。
背景技术
源码静态分析技术是指在不运行代码的方式下,通过词法分析、语法分析、控制流分析等技术对程序代码进行扫描,验证代码是否满足规范性、安全性、可靠性、可维护性等指标的一种代码分析技术。常用的静态分析技术包括词法分析、语法分析、抽象语法树分析、语义分析、控制流分析和数据流分析。静态函数调用关系是结合控制流分析和数据流分析产生的,本发明提出的新方法依靠静态分析获取源代码的静态函数调用关系。
静态函数调用关系图(以下简称函数调用关系图)展示了程序代码块之间不同层次的函数调用关系,包括顶层的模块间函数调用关系、文件间函数调用关系和底层的函数调用关系。图中的节点代表一个模块、文件或者函数,而边代表了调用关系。函数调用关系图展示了所有可能执行的路径,这些执行路径在实际的一次执行过程中不会都发生。在源代码的静态分析过程中,使用函数调用关系图能协助开发人员分析软件行为,对程序的运行框架有一个全局把握,大大提高开发人员工作效率。尤其在维护源码和分析开源代码的过程中是非常有用的。另外还可以用于更加深层次的源代码分析,如数据流分析等。
现有生成函数调用图的工具非常之多,但功能都大同小异。比较常用的像Doxygen,cflow等。Doxygen作为一个功能强大的文档生成工具,除了能根据注释生成文档,还成生成详细的函数调用图。而cflow小巧简单,主要用于生成c代码的流程图。这些常用的工具都只提供函数之间的调用关系,穷举了源代码所有的函数调用关系,信息量庞大且没有分类和归纳信息。本发明提出的新方法中对函数调用关系进行分层次展示,粒度从粗到细,调用关系清晰可见。
本发明涉及到另一背景是定制开源软件的升级问题。开源软件更新速度非常快,版本升级非常频繁。而版本升级往往涉及到重要BUG的修复和新功能的增加,对于用户定制版也有着相当重要的意义。软件的升级为已有的定制和补丁的同步升级带来了巨大的工作量。目前的这种同步升级基本依靠开发者的个人经验和手工分析。常用的代码版本比较工具Diff只能对两个版本进行简单比较,比较结果体现代码行之间的区别,是文本的差异性比较。因此,目前还没有一种方法(或软件)能够进行多版本之间代码逻辑块的函数调用关系分析比较,更没有多版本之间函数调用关系的差异性分析比较。
发明内容
本发明的目的在于提供一种基于静态分析的源码多版本函数调用关系差异性标识方法。通过这种方法图像化展示多版本差异,并分模块、文件和函数三种粒度进行显示,层层深入,最终指向有差异的函数。本发明能够将开发者从繁重的逐行阅读和比较代码的工作中解放出来,引导开发者精准定位核心问题,显著提高开发者工作效率。
本发明的基于静态分析的源码多版本函数调用关系差异性标识方法,包括三部分,如图1所示,第一部分是源代码静态分析,第二部分是源代码多版本比较,第三部分是源代码多版本差异性标识,具体描述如下:
1)静态分析:通过源码静态分析技术进行词法分析、语法分析和控制流分析,获取源码中定义的函数列表和函数之间的静态调用关系,并存储在数据库中;
2)版本比较:通过比较选取的不同版本源码获得其Diff文件,再结合函数定义列表和调用关系标识出变化的差异部分,并将变化的部分进行细致的状态分析,分别标识出函数定义和调用的修改状态、新增状态和删除状态,并存储在数据库中;
3)差异标识:结合用户的需求和数据库中保存的状态数据进行单个版本的调用关系展示和多版本函数调用关系差异视图的展示。
下面对本发明方法进行具体说明。
1)源代码静态分析
源代码静态分析阶段主要通过源码静态分析技术进行词法分析、语法分析和控制流分析等,完成函数定义和调用等信息的分析和获取。本方法从源代码的编译过程中获取函数定义和调用信息,并将这些信息进行整理合并能得出源代码的各层次的函数调用关系。这些信息是进行版本对比的基础。为了便于后期的查询与分析,将这些数据录入数据库中以下相关表格中:
目录文件列表:用来记录源码目录和文件路径。主要包括文件/目录名称,所属版本信息等。
函数定义列表:用来记录所有函数的定义相关信息。主要包括函数名称,函数所属的文件,函数的起止行号等。
静态函数调用列表:用来记录静态函数调用的相关信息。主要包括调用函数信息,被调用函数信息,以及这两个函数所属的文件等。
2)源代码多版本比较。
源代码多版本比较阶段主要完成多版本差异信息的分析与获取。版本差异信息包括在新版本中删除掉的函数列表,新增的函数列表和修改过的函数列表。
为了获取这些信息,需要借助第一步中的函数定义信息和Diff文件进行分析。Diff文件是常用的比较两个版本差异的文本表现形式,以变化的行为最小比较粒度,是纯文本的比较,能体现出修改的代码行,新增的代码行和删除的代码行。但是源代码的一个重要特征是以代码块,例如函数,作为逻辑单元,且函数之间存在调用关系。结合这些特征进行版本比较,得到信息更加有意义且具有更强的可读性。本发明通过对Diff文件分析,将Diff文件的文本差异信息转化为函数之间的差异信息,并将获取到的差异信息录入到数据库以下相关表格中:
版本差异信息列表:用来记录版本差异信息,以函数为最小粒度记录差异信息,一个有差异的函数对应一条数据记录,文件级别和模块级别的差异信息需要后期进一步统计。主要包括函数信息,函数所属文件,版本信息和函数是否分别存在两个版本中等。
注意:如果函数分别存在两个版本中,表示该函数升级后被修改;如果函数只存在于旧版本中,表示该函数升级后被删除;如果函数只存在于新版本中,表示该函数升级后被新增。
3)源代码多版本差异性标识
源代码多版本差异性标识阶段主要完成多版本的函数调用关系差异视图的生成与表示。通过分析第一步和第二步中生成的函数定义与调用信息,版本差异信息和用户的输入信息以svg图形表现出两个版本不同层次的函数调用关系的变化,包括模块(目录)级别的差异信息、文件级别的差异信息和函数级别的差异信息。在图中用圆型节点表示模块/文件或者函数;用带有权值的有向线条表示两个节点之间存在的调用关系,调用方向与箭头方式一致,权值代表调用次数。每次可以选择比较特定的一个或两个模块,一个或两个文件,一个或两个函数或者模块、文件、函数两两组合比较。函数调用关系差异视图具体表现形式有两种。
模块/文件级:
为了表示出更加丰富的信息,将节点和线条设置为不同的颜色。灰色节点代表新版本较旧版本内部有变化的内容,包括新增,删除和修改,且灰度越大代表变化函数占比越大。每个节点都有统计数据,显示出新增的函数个数(绿色),删除的函数个数(红色),修改的函数个数(黄色)和总的函数变化比例。红色和绿色有向边分别表示新版本较旧版本调用次数的减少和增加,而黄色有向边代表有增有减。线条上给出两个数据,第一个代表在旧版本中调用次数,第二个代表在新版本中调用次数。并有开关菜单来裁剪边和节点,显示和隐藏数据,分层展示等。
函数级:
为了表示出更加丰富的信息,将节点和线条设置为不同的颜色。绿色节点代表新版本较旧版本新增加的函数,红色节点代表已经删除的函数,黄色节点代表被修改的函数。绿色线条代表新版本较旧版本新增的调用,红色代表删除的调用。并有开关菜单来裁剪边和节点。
具体的步骤如下:
1)源代码静态分析,图2是静态分析控制流程图,包括:
1a)进入源码差异系统,查看已有源码版本。
1b)如果已经存在待比较的两个版本,进入1e),否则进入1c)。
1c)加入对应源码版本的源代码。
1d)进行源代码静态分析。
i.遍历源代码目录,获取代码中所有文件的相对路径信息。
ii.修改源代码的编译参数。
iii.编译源码,生成隐藏函数定义信息和函数调用信息的中间结果。
iv.从中间文件中分析出函数定义和行号等信息。
v.从中间文件中分析出函数调用信息。
1e)将1d)分析得到的文件路径信息,函数定义信息和调用关系入库,分别录入目录文件列表,函数定义列表和静态调用列表,进入1b)。
1f)选择两个原版版本,进行版本比较。
2)源代码多版本比较,图3是多版本差异性比较流程图,包括:
2a)选择两个待比较版本。
2b)如果已经存在源码相应的静态分析数据,进入2d),否则进入2c)。
2c)同1d)和1e)进行源码静态分析和数据入库,进入2b)。
2d)如果存在待比较版本的差异数据,进入2f),否则进入2e)。
2e)获取两版本函数差异信息并入库,进入2d)。图5是获取两版本源码差异信息流程图,具体说明如下:
i.提取两个版本Diff文件。
ii.检索两版本函数定义列表并逐一处理Diff信息块。
iii.根据Diff信息块提供的两个版本的变化的行号范围,获取两个版本中变化的函数列表。
iv.逐一处理函数列表中的函数。如果处理完毕,进入2f),否则进入v。
v.如果该函数在版本差异信息列表中已经有对应记录,进入iv,否则进入vi。
vi.如果函数在两版本中都有,则表示该函数升级后内容发生改变,进入vii,否则进入viii。
vii.在版本差异信息列表中为该函数新增一条记录,并且标记修改状态,设置ver1=1,ver2=1,进入iv。
viii.如果函数只存在前版本中,则表示该函数在后版本中被删除,进入ix,否则进入x。
ix.在版本差异信息列表中为该函数新增一条记录,并且标记删除状态,设置ver1=1,ver2=0,进入ic。
x.如果函数只存在后版本中,则表示该函数是后版本中新增的,进入xi,否则进入iv。
xi.在版本差异信息列表中为该函数新增一条记录,并且标记新增状态,设置ver1=0,ver2=1,进入iv。
2f)进行两个版本的差异标识和展示。
3)源代码多版本差异性标识,图4是差异性标识流程图,包括:
3a)统计两版本顶层模块间差异数据。通过循环统计子模块/子文件/函数的函数调用关系差异数据,累加去重得到顶层模块调用关系差异数据。
3b)生成两版本顶层模块调用关系差异视图,实现同iv)。
3c)如果选择了待比较的模块(目录)/文件/函数,进入3e),否则进入3d)。
3d)用户选择待比较范围caller或callee,进入3c)。
3e)生成两版本相应节点内部调用关系差异视图。图6是生成两版本调用关系差异图流程图,具体说明如下:
i.逐一检查caller和callee节点的值。
ii.如果为目录或者文件,进入iii。否则进入v。
iii.从数据库中计算得到该目录或文件差异信息,实现同3a)。
iv.生成模块/文件级函数调用关系差异视图。利用3a)中统计的数模块和调用关系差异数据,设置对应的节点和线条颜色等属性。并用graphviz等工具生成差异视图并展示。
v.如果为函数,进入vi。否则进入3d)。
vi.从数据库中获得该函数的调用列表差异信息。
vii.生成函数级调用关系差异视图,合并两个版本的函数和调用关系,并设置对
应的节点和线条颜色等属性。并用graphviz等工具生成差异视图并展示。
本发明结合源码静态分析和源码Diff技术,提出了一种实用的基于静态分析的源码多版本函数调用关系差异性标识方法。该方法结合多版本比较的Diff文件和静态分析得出的函数调用关系对多版本源代码进行函数调用关系的差异性标识和相关数据入库,并使用Graphviz等开源工具按照本发明的标识方法生成调用关系差异视图,该发明及图形化展示填补了源码多版本函数调用关系差异性展示的空白。本发明提出的新方法中对函数调用关系进行分层次展示,粒度从粗到细,调用关系清晰可见。利用本发明的标识方法,可以用图形的方式简单明了的展示两个版本源码不同层次的调用关系和函数定义差异,可以完成单个版本的内部调用关系分析和展示以及多个版本之间的调用关系差异性分析和展示。
本发明填补了多版本源码之间调用关系差异性分析和标识方法的空缺,克服了调用关系差异分析依靠开发者的个人经验和手工方式效率低下、分析门槛较高、分析结果不易存储等困难,充分利用静态分析和源码Diff技术,满足了学习者、开发者和研究者快速获取多版本源码之间调用关系差异性分析的需求,为开源软件的分析、开发、升级和维护提供了高效的辅助方法。
附图说明
图1是基于静态分析的源码多版本函数调用关系差异性标识流程图。
图2是静态分析控制流程图。
图3是多版本差异性比较流程图。
图4是差异性标识流程图。
图5是获取两版本源码差异信息流程图。
图6是生成两版本调用关系差异图流程图。
图7是模块级调用关系差异图。
图8是电源管理模块内部文件级调用关系差异图。
图9是函数power_down相关函数调用关系差异图。
具体实施方式
下面通过实例对本发明作进一步的说明,但不以任何方式限制本发明的范围。
设定如下使用场景:
用户对linux3.5.4进行了定制,修改了电源管理模块hibernate.c文件的部分源码。现需要升级到linux3.8.13,用户使用本发明的方法比较linux3.5.4和linux3.8.13版本的电源管理模块差异,并根据比较的结果来升级定制的代码。
1)用户登陆源码差异系统,发现系统中缺乏linux3.5.4和linux3.8.13版本数据。上传linux3.5.4和linux3.8.13源代码。系统对这两个版本的源码进行静态分析和版本比较,并在数据库生成相应数据,数据部分示例如下:
目录文件列表:
File_id File_name Version SearchKey
29414 /kernel/power/hibernate.c linux-3.5.4 427de47f
29423 /kernel/power/swap.c linux-3.5.4 7168d023
277062 /kernel/power/hibernate.c Linux-3.8.13 359b50c7
277072 /kernel/power/swap.c Linux-3.8.13 a5e7d66b
…… …… …… ……
函数定义列表:
func_id func_name file_id Sline Cnt
622605 hibernate 29414 604 138
204665 power_down 29414 580 79
3195432 hibernate 277062 781 138
2777492 power_down 277062 612 104
2777959 Swsusp_unmark 277072 452 58
…… …… …… …… ……
静态函数调用列表:
Call_id caller_id caller_file Callee_id Callee_file
23325 622605 29414 204665 29414
736711 3195432 277062 2777492 277062
736715 2777492 277062 2777959 277072
…… …… …… …… ……
版本差异信息列表:
表中描述了部分源码静态分析和版本对比数据,包括linux3.5.4和linux3.8.13中/kernel/power/hibernate.c和/kernel/power/swap.c文件的目录信息,文件中部分函数定义信息和调用信息以及版本差异信息。
2)用户选择linux3.5.4和linux3.8.13两个版本进行比较。系统进入顶层模块的调用关系差异视图,如图7所示。为了方便表示,图中示意了4个顶层模块的调用关系差异,包括kernel模块,ipc模块,lib模块和drivers模块。实际应用中此图的规模会更大。图中节点颜色(灰度的深浅)代表版本差异的程度,ipc模块没有差异,而kernel,lib和drivers模块差异程度依次增加,变化率分别为1%,2%和3%。Drivers模块对kernel和lib模块的调用关系有变化,kernel模块对lib和drivers模块,lib模块对kernel模块的调用关系有新增。从图中给出的信息可以看出内核源码模块变化的总体情况。图7中线条、文字的不同颜色(即附图显示的不同灰度,图中未显示颜色,具体实施时可设为不同颜色)为模块级差异视图表示,模块级视图线条和文字总有四种颜色,黑色、绿色、红色和黄色,黑色表示模块之间所包含的函数调用没有变化,绿色表示新版本较旧版本模块所包含的部分函数调用被单纯的删除了,红色表示新版本较旧版本模块所包含的部分函数调用被单纯的增加了,黄色则表示新版本较旧版本模块所包含的部分函数调用被修改了或者既有新增调用又有删除的调用。后文图8文件级差异视图表示与此相同,不再说明。
3)用户选择节点kernel模块中power子模块进入电源管理模块的调用关系差异视图,如图8所示。为了方便表示,图中示意了4个文件的调用关系差异,实际应用中此图的规模会更大。图中节点颜色(灰度的深浅)代表版本差异的程度,suspend.c文件没有差异,而main.c,hibernate.c和swap.c文件差异程度依次增加,变化率分别为0.1%,0.4%和1%。Hibernate.c对swap.c调用关系有新增,main.c对suspend.c调用关系有减少。从图中的信息可以看出hibernate.c和swap.c发生了改变,且其新增了一次调用关系。
4)用户选择节点hibernate.c文件内部的power_down函数进入调用关系差异视图,如图9所示。图中示意了power_down函数调用的所有函数。Power_down函数的调用关系发生了改变,删除了对kernel_halt函数的调用关系(kernel_halt函数用红色表示,图中未显示颜色),新增了对swsusp_unmark和suspend_devices_and_enter函数和对自己的调用关系(该两个函数用绿色表示,图中未显示颜色)。从图中的信息可以看出power_down新增了三个函数调用,删除了一个函数调用。图9中线条、文字的不同颜色(即附图显示的不同灰度,图中未显示颜色,具体实施时可设为不同颜色)为函数级差异视图表示,函数级视图线条和文字也总计有四种颜色,黑色、绿色、红色和黄色,黑色表示两函数之间的调用在新版本较旧版本没有变化,绿色表示两函数之间的调用在新版本较旧版本被单纯的删除了,绿色表示两函数之间的调用在新版本较旧版本被单纯的删除了,黄色则表示两函数之间的调用在新版本较旧版本被修改了,例如新版本较旧版本修改了函数调用参数等。
5)用户根据模块,文件和函数三个层次的函数调用关系差异视图快速定位电源管理模块的版本变化信息。并在升级定制版本时,根据这些信息修正定制代码,达到已有补丁同步更新和定制成果同步升级的目的。
以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保护范围应以权利要求所述为准。

Claims (8)

1.一种基于静态分析的源码多版本函数调用关系差异性标识方法,包括以下步骤:
1)通过源码静态分析技术进行词法分析、语法分析和控制流分析,获取源码中定义的函数列表和函数之间的静态调用关系,并存储在数据库中;
2)通过比较选取的不同版本的源码获取其Diff文件,再结合函数定义列表和调用关系标识出变化的差异部分,并将变化的部分进行细致的状态分析,分别标识出函数定义和调用的修改状态、新增状态和删除状态,并存储在数据库中;
3)结合用户的需求和数据库中保存的状态数据进行单个版本的调用关系展示和/或多版本函数调用关系差异视图的展示。
2.如权利要求1所述的方法,其特征在于,步骤1)进行静态分析的具体步骤包括:
1a)进入源码差异系统,查看已有源码版本;
1b)如果已经存在待比较的两个版本,进入1e),否则进入1c);
1c)加入对应源码版本的源代码;
1d)进行源代码静态分析,编译源码,获取函数定义和函数调用信息,包括相应的文件路径和行号;
1e)将1d)分析得到的文件路径信息,函数定义信息和调用关系入库,分别录入目录文件列表,函数定义列表和静态调用列表;
1f)选择两个原版版本,进行版本比较。
3.如权利要求1所述的方法,其特征在于,步骤2)进行版本比较的具体步骤包括:
2a)选择两个待比较版本;
2b)如果已经存在源码相应的静态分析数据,进入2d),否则进入2c);
2c)同1d)和1e)进行源码静态分析和数据入库,进入2b);
2d)如果存在待比较版本的差异数据,进入2f),否则进入2e);
2e)获取两版本函数差异信息并入库,进入2d);首先提取两个版本diff文件,分别检索两版本函数定义列表并逐一处理diff信息块,然后根据diff信息块提供的两个版本的变化的行号范围,获取两个版本中变化的函数列表,然后逐一处理函数列表中的函数,根据修改状态、新增状态和删除状态三种变化状态进行差异标识并入库;
2f)进行两个版本的差异标识和展示。
4.如权利要求1所述的方法,其特征在于,步骤3)所述函数调用关系差异视图表现出两个版本不同层次的函数调用关系的变化,包括有模块级别的差异信息、文件级别的差异信息和函数级别的差异信息;在图中用圆型节点表示模块/文件或者函数,用带有权值的有向线条表示两个节点之间存在的调用关系,调用方向与箭头方式一致,权值代表调用次数。
5.如权利要求4所述的方法,其特征在于,步骤3)所述函数调用关系差异视图中,将节点和线条设置为不同的颜色,以表示出更加丰富的信息。
6.如权利要求5所述的方法,其特征在于,步骤3)所述函数调用关系差异视图中,对于模块/文件级的差异信息,灰色节点代表新版本较旧版本内部有变化的内容,包括新增,删除和修改,灰度越大代表变化函数占比越大;且每个节点都有统计数据,包括绿色表示的新增的函数个数,红色表示的删除的函数个数,黄色表示的修改的函数个数和总的函数变化比例;红色和绿色有向边分别表示新版本较旧版本调用次数的减少和增加,而黄色代表有增有减;线条上给出两个数据,第一个代表在旧版本中调用次数,第二个代表在新版本中调用次数,并有开关菜单来裁剪边和节点,显示和隐藏数据,以及分层展示。
7.如权利要求5所述的方法,其特征在于,步骤3)所述函数调用关系差异视图中,对于函数级的差异信息,绿色节点代表新版本较旧版本新增加的函数,红色节点代表已经删除的函数,黄色节点代表修改的函数;绿色线条代表新版本较旧版本新增的调用,红色线条代表删除的调用,并有开关菜单来裁剪边和节点。
8.如权利要求5所述的方法,其特征在于,步骤3)生成函数调用关系差异视图的具体步骤包括:
3a)统计两版本顶层模块间差异数据:通过循环统计子模块/子文件/函数的函数调用关系差异数据,累加去重得到顶层模块调用关系差异数据;
3b)生成两版本顶层模块调用关系差异视图:根据统计数据,合并两个版本的顶层模块调用关系,并设置对应的节点和线条颜色属性,生成顶层差异视图;
3c)如果选择了待比较的模块/文件/函数,进入3e),否则进入3d);
3d)用户选择待比较范围caller或callee,进入3c);
3e)生成两版本相应节点内部调用关系差异视图;如果用户选择的待比较对象为目录或者文件,则利用3a)中统计的数模块和调用关系差异数据,设置对应的节点和线条颜色属性,生成差异视图并展示;如果用户选择的比较范围为函数,则合并两个版本指定的函数和调用关系,并设置对应的节点和线条颜色属性,生成差异视图并展示。
CN201410252637.XA 2014-06-09 2014-06-09 基于静态分析的源码多版本函数调用关系差异性标识方法 Expired - Fee Related CN104035772B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410252637.XA CN104035772B (zh) 2014-06-09 2014-06-09 基于静态分析的源码多版本函数调用关系差异性标识方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410252637.XA CN104035772B (zh) 2014-06-09 2014-06-09 基于静态分析的源码多版本函数调用关系差异性标识方法

Publications (2)

Publication Number Publication Date
CN104035772A true CN104035772A (zh) 2014-09-10
CN104035772B CN104035772B (zh) 2017-11-14

Family

ID=51466547

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410252637.XA Expired - Fee Related CN104035772B (zh) 2014-06-09 2014-06-09 基于静态分析的源码多版本函数调用关系差异性标识方法

Country Status (1)

Country Link
CN (1) CN104035772B (zh)

Cited By (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104850311A (zh) * 2015-05-26 2015-08-19 中山大学 一种移动应用版本更新的图形化说明生成方法及系统
CN105138335A (zh) * 2015-08-28 2015-12-09 牟永敏 一种基于控制流图的函数调用路径提取方法及装置
CN105867930A (zh) * 2016-04-05 2016-08-17 华为技术有限公司 一种函数调用关系的显示方法、装置及终端
CN106020950A (zh) * 2016-05-12 2016-10-12 中国科学院软件研究所 基于复杂网络分析的函数调用图关键节点识别和标识方法
CN106096635A (zh) * 2016-06-06 2016-11-09 重庆大学 基于阈值操作的代价敏感神经网络的警告分类方法
CN106406918A (zh) * 2016-11-25 2017-02-15 华胜信泰信息产业发展有限公司 源代码自动合并方法和源代码自动合并装置
CN106469167A (zh) * 2015-08-18 2017-03-01 北大方正集团有限公司 文件状态的显示方法和文件状态的显示系统
CN106951228A (zh) * 2017-02-21 2017-07-14 腾讯科技(深圳)有限公司 版本迭代中差异的处理方法和装置
CN107797820A (zh) * 2017-11-13 2018-03-13 北京百度网讯科技有限公司 用于生成补丁的方法和装置
CN107832059A (zh) * 2017-11-21 2018-03-23 广州视源电子科技股份有限公司 一种基于Makefile的代码静态分析方法和装置
CN108268275A (zh) * 2017-06-12 2018-07-10 平安普惠企业管理有限公司 软件版本控制方法及软件版本控制设备
CN108845843A (zh) * 2018-05-25 2018-11-20 腾讯科技(深圳)有限公司 一种函数处理方法、装置以及相关设备
CN109241737A (zh) * 2018-07-03 2019-01-18 中国科学院信息工程研究所 一种面向多种补丁模式的差异分支识别方法及系统
CN109634636A (zh) * 2018-12-17 2019-04-16 百度在线网络技术(北京)有限公司 应用处理方法、装置、设备和介质
CN109918078A (zh) * 2019-01-23 2019-06-21 深圳壹账通智能科技有限公司 代码依赖管理方法、装置、计算机设备和存储介质
CN109977675A (zh) * 2017-12-28 2019-07-05 华为技术有限公司 一种开源软件识别方法及装置
CN110045981A (zh) * 2018-01-14 2019-07-23 北京关键科技股份有限公司 一种基于源码比对分析技术建立需求追踪关系的方法
CN110399156A (zh) * 2019-07-26 2019-11-01 华东师范大学 面向航天软件的在轨升级方法
CN110532015A (zh) * 2019-07-26 2019-12-03 华东师范大学 面向航天软件的在轨升级系统
CN110532019A (zh) * 2019-06-27 2019-12-03 北京大学 一种软件代码片段历史追溯的方法
CN111078559A (zh) * 2019-12-18 2020-04-28 广州品唯软件有限公司 java代码中函数调用的提取方法、装置、介质及计算机设备
CN111124872A (zh) * 2018-10-31 2020-05-08 上海哔哩哔哩科技有限公司 基于差异代码分析的分支检测方法、装置及存储介质
CN111736869A (zh) * 2020-06-19 2020-10-02 浙江大搜车软件技术有限公司 服务端接口的版本更新方法和服务端接口的调用方法
CN111813412A (zh) * 2020-06-28 2020-10-23 中国科学院计算机网络信息中心 构建评测二进制代码比对工具的测试数据集的方法及系统
CN111897989A (zh) * 2020-07-29 2020-11-06 北京字节跳动网络技术有限公司 图像处理的方法及装置、终端和存储介质
CN112099838A (zh) * 2019-06-17 2020-12-18 腾讯科技(深圳)有限公司 确定版本差异的方法、装置及存储介质
CN112181406A (zh) * 2019-06-14 2021-01-05 北京搜狗科技发展有限公司 一种渲染引擎的共享方法和装置
WO2021109717A1 (zh) * 2019-12-05 2021-06-10 上海御渡半导体科技有限公司 一种Pattern静态编译链接的方法
CN113110874A (zh) * 2021-04-14 2021-07-13 北京沃东天骏信息技术有限公司 用于生成代码结构图的方法和装置
CN116756052A (zh) * 2023-08-18 2023-09-15 建信金融科技有限责任公司 一种数据处理方法和装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101286119A (zh) * 2008-05-27 2008-10-15 华耀环宇科技(北京)有限公司 一种通过分析代码变化确定功能点变化的方法
CN102253992A (zh) * 2011-07-06 2011-11-23 广东威创视讯科技股份有限公司 一种基于面向对象的文件差异比较方法及其系统
WO2013088461A1 (ja) * 2011-12-12 2013-06-20 株式会社 日立製作所 ソフトウェア解析プログラム、および、ソフトウェア解析システム

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101286119A (zh) * 2008-05-27 2008-10-15 华耀环宇科技(北京)有限公司 一种通过分析代码变化确定功能点变化的方法
CN102253992A (zh) * 2011-07-06 2011-11-23 广东威创视讯科技股份有限公司 一种基于面向对象的文件差异比较方法及其系统
WO2013088461A1 (ja) * 2011-12-12 2013-06-20 株式会社 日立製作所 ソフトウェア解析プログラム、および、ソフトウェア解析システム

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
谭浩强等: "《程序设计与开发技术》", 31 December 1991 *

Cited By (47)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104850311B (zh) * 2015-05-26 2018-05-01 中山大学 一种移动应用版本更新的图形化说明生成方法及系统
CN104850311A (zh) * 2015-05-26 2015-08-19 中山大学 一种移动应用版本更新的图形化说明生成方法及系统
CN106469167B (zh) * 2015-08-18 2019-06-28 北大方正集团有限公司 文件状态的显示方法和文件状态的显示系统
CN106469167A (zh) * 2015-08-18 2017-03-01 北大方正集团有限公司 文件状态的显示方法和文件状态的显示系统
CN105138335B (zh) * 2015-08-28 2018-01-23 牟永敏 一种基于控制流图的函数调用路径提取方法及装置
CN105138335A (zh) * 2015-08-28 2015-12-09 牟永敏 一种基于控制流图的函数调用路径提取方法及装置
CN105867930A (zh) * 2016-04-05 2016-08-17 华为技术有限公司 一种函数调用关系的显示方法、装置及终端
CN105867930B (zh) * 2016-04-05 2019-03-19 华为技术有限公司 一种函数调用关系的显示方法、装置及终端
CN106020950A (zh) * 2016-05-12 2016-10-12 中国科学院软件研究所 基于复杂网络分析的函数调用图关键节点识别和标识方法
CN106020950B (zh) * 2016-05-12 2019-08-16 中国科学院软件研究所 基于复杂网络分析的函数调用图关键节点识别和标识方法
CN106096635B (zh) * 2016-06-06 2019-11-15 重庆大学 基于阈值操作的代价敏感神经网络的警告分类方法
CN106096635A (zh) * 2016-06-06 2016-11-09 重庆大学 基于阈值操作的代价敏感神经网络的警告分类方法
CN106406918B (zh) * 2016-11-25 2020-02-28 华胜信泰信息产业发展有限公司 源代码自动合并方法和源代码自动合并装置
CN106406918A (zh) * 2016-11-25 2017-02-15 华胜信泰信息产业发展有限公司 源代码自动合并方法和源代码自动合并装置
CN106951228A (zh) * 2017-02-21 2017-07-14 腾讯科技(深圳)有限公司 版本迭代中差异的处理方法和装置
CN106951228B (zh) * 2017-02-21 2023-07-18 腾讯科技(深圳)有限公司 版本迭代中差异的处理方法和装置
CN108268275A (zh) * 2017-06-12 2018-07-10 平安普惠企业管理有限公司 软件版本控制方法及软件版本控制设备
CN107797820B (zh) * 2017-11-13 2021-03-23 北京百度网讯科技有限公司 用于生成补丁的方法和装置
US11169792B2 (en) 2017-11-13 2021-11-09 Beijing Baidu Netcom Science And Technology Co., Ltd. Method and apparatus for generating patch
CN107797820A (zh) * 2017-11-13 2018-03-13 北京百度网讯科技有限公司 用于生成补丁的方法和装置
CN107832059A (zh) * 2017-11-21 2018-03-23 广州视源电子科技股份有限公司 一种基于Makefile的代码静态分析方法和装置
CN109977675A (zh) * 2017-12-28 2019-07-05 华为技术有限公司 一种开源软件识别方法及装置
CN109977675B (zh) * 2017-12-28 2022-08-16 超聚变数字技术有限公司 一种开源软件识别方法及装置
CN110045981A (zh) * 2018-01-14 2019-07-23 北京关键科技股份有限公司 一种基于源码比对分析技术建立需求追踪关系的方法
CN108845843A (zh) * 2018-05-25 2018-11-20 腾讯科技(深圳)有限公司 一种函数处理方法、装置以及相关设备
CN108845843B (zh) * 2018-05-25 2022-04-29 腾讯科技(深圳)有限公司 一种函数处理方法、装置以及相关设备
CN109241737A (zh) * 2018-07-03 2019-01-18 中国科学院信息工程研究所 一种面向多种补丁模式的差异分支识别方法及系统
CN111124872A (zh) * 2018-10-31 2020-05-08 上海哔哩哔哩科技有限公司 基于差异代码分析的分支检测方法、装置及存储介质
CN109634636B (zh) * 2018-12-17 2022-05-17 百度在线网络技术(北京)有限公司 应用处理方法、装置、设备和介质
CN109634636A (zh) * 2018-12-17 2019-04-16 百度在线网络技术(北京)有限公司 应用处理方法、装置、设备和介质
CN109918078A (zh) * 2019-01-23 2019-06-21 深圳壹账通智能科技有限公司 代码依赖管理方法、装置、计算机设备和存储介质
CN112181406A (zh) * 2019-06-14 2021-01-05 北京搜狗科技发展有限公司 一种渲染引擎的共享方法和装置
CN112099838B (zh) * 2019-06-17 2023-08-15 腾讯科技(深圳)有限公司 确定版本差异的方法、装置及存储介质
CN112099838A (zh) * 2019-06-17 2020-12-18 腾讯科技(深圳)有限公司 确定版本差异的方法、装置及存储介质
CN110532019A (zh) * 2019-06-27 2019-12-03 北京大学 一种软件代码片段历史追溯的方法
CN110399156A (zh) * 2019-07-26 2019-11-01 华东师范大学 面向航天软件的在轨升级方法
CN110532015A (zh) * 2019-07-26 2019-12-03 华东师范大学 面向航天软件的在轨升级系统
WO2021109717A1 (zh) * 2019-12-05 2021-06-10 上海御渡半导体科技有限公司 一种Pattern静态编译链接的方法
CN111078559A (zh) * 2019-12-18 2020-04-28 广州品唯软件有限公司 java代码中函数调用的提取方法、装置、介质及计算机设备
CN111078559B (zh) * 2019-12-18 2023-10-13 广州品唯软件有限公司 java代码中函数调用的提取方法、装置、介质及计算机设备
CN111736869A (zh) * 2020-06-19 2020-10-02 浙江大搜车软件技术有限公司 服务端接口的版本更新方法和服务端接口的调用方法
CN111813412A (zh) * 2020-06-28 2020-10-23 中国科学院计算机网络信息中心 构建评测二进制代码比对工具的测试数据集的方法及系统
CN111897989A (zh) * 2020-07-29 2020-11-06 北京字节跳动网络技术有限公司 图像处理的方法及装置、终端和存储介质
CN113110874A (zh) * 2021-04-14 2021-07-13 北京沃东天骏信息技术有限公司 用于生成代码结构图的方法和装置
CN113110874B (zh) * 2021-04-14 2024-05-17 北京沃东天骏信息技术有限公司 用于生成代码结构图的方法和装置
CN116756052A (zh) * 2023-08-18 2023-09-15 建信金融科技有限责任公司 一种数据处理方法和装置
CN116756052B (zh) * 2023-08-18 2023-11-14 建信金融科技有限责任公司 一种数据处理方法和装置

Also Published As

Publication number Publication date
CN104035772B (zh) 2017-11-14

Similar Documents

Publication Publication Date Title
CN104035772A (zh) 基于静态分析的源码多版本函数调用关系差异性标识方法
US11620117B2 (en) Systems and methods for code clustering analysis and transformation
AU2020203136B2 (en) System and method for the generation of an adaptive user interface in a website building system
US11726760B2 (en) Systems and methods for entry point-based code analysis and transformation
US11436006B2 (en) Systems and methods for code analysis heat map interfaces
CN114035773B (zh) 一种基于配置的低代码开发表单方法、系统及装置
CN105511873B (zh) 用户界面控件展示方法及装置
EP3998534A1 (en) Improved construction of database schema models for database systems and rest api's
CN113076096B (zh) 一种桌面应用程序开发方法、装置、设备及存储介质
CN107807954B (zh) 可视化建模多维分析系统及其方法
CN112015412A (zh) 基于表单引擎生成业务模型的装置及方法
CN110941629B (zh) 元数据处理方法、装置、设备及计算机可读存储介质
CN113535165A (zh) 界面生成方法、装置、电子设备及计算机可读存储介质
CN115293124A (zh) 软件工程化文档自动生成方法及装置
CN115510361A (zh) 一种基于可视化配置的数据图表页面生成方法及相关设备
CN113918140A (zh) 一种基于拖拽方式生成前后端代码的系统构建方法
CN117453713A (zh) 多类型数据库的sql语句生成方法、设备和存储介质
US20200310787A1 (en) Code management system and code management method
US8630981B1 (en) Techniques for differencing binary installation packages
CN108399188B (zh) 一种基于类型元数据的强业务对象的通用建立和处理方法
CN110795067A (zh) 一种需求原型可复用方法
CN101976381A (zh) 用于管理应用资产的方法和系统
US20070124686A1 (en) Locating graphical elements for an object
CN110569034A (zh) 界面开发的方法及装置

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
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20171114

CF01 Termination of patent right due to non-payment of annual fee