一种程序分析方法及终端设备与流程

文档序号:17720836发布日期:2019-05-22 02:08阅读:153来源:国知局
一种程序分析方法及终端设备与流程

本发明属于计算机应用技术领域,尤其涉及一种程序分析方法、终端设备及计算机可读存储介质。



背景技术:

计算机软件是现代信息社会的重要组成部分,保证了信息安全和软件产业的健康发展。计算机软件质量的提升可以改善人们的生活和工作,对国家经济和信息产业发展有显著推动作用。随着软件数量规模和复杂程度的提高,软件错误出现的频率也迅速上升,会给人类造成巨大经济损失。软件测试是为了发现程序中存在的错误、对这些错误进行改动、修复错误而执行程序的过程,是软件设计过程中的重要一步。在软件开发与维护过程中,软件测试是一项成本高、耗时多的工作,约占软件开发与维护过程总成本的一半以上。软件测试能保证软件的质量稳定和后期维护的可行性,因而又是一个不可缺少的过程。

现有技术中在软件测试之后对软件程序进行改动之后,很可能会涉及到某个页面或多个页面受到影响,而目前单纯靠开发人员分析程序改动的影响范围,并不十分可靠,且严重影响程序开发的效率。



技术实现要素:

有鉴于此,本发明实施例提供了一种程序分析方法、终端设备及计算机可读存储介质,以解决现有技术中单纯靠开发人员分析程序改动的影响范围不可靠的问题。

本发明实施例的第一方面提供了一种程序分析方法,包括:

获取修改之后的变动程序文件和修改之前的源程序文件;

将所述变动程序文件与所述源程序文件进行对比,确定变更的修改对象;所述修改对象包括函数、变量或者数值中的至少一种;

获取所述源程序文件中的每个所述程序对象之间的调用关系,并根据所述调用关系和每个所述程序对象构建对象关系网;所述程序对象包括函数、变量或者数值中的至少一种;所述对象关系网用于表示每个所述程序对象之间的关联关系;

根据所述源程序文件中每个程序对象之间预设的关联关系,从所述变动程序中识别出与本次修改的所述修改对象关联的目标对象;所述目标对象包括函数、变量、页面或者按钮中的至少一种。

本发明实施例的第二方面提供了一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:

获取修改之后的变动程序文件和修改之前的源程序文件;

将所述变动程序文件与所述源程序文件进行对比,确定变更的修改对象;所述修改对象包括函数、变量或者数值中的至少一种;

获取所述源程序文件中的每个所述程序对象之间的调用关系,并根据所述调用关系和每个所述程序对象构建对象关系网;所述程序对象包括函数、变量或者数值中的至少一种;所述对象关系网用于表示每个所述程序对象之间的关联关系;

根据所述源程序文件中每个程序对象之间预设的关联关系,从所述变动程序中识别出与本次修改的所述修改对象关联的目标对象;所述目标对象包括函数、变量、页面或者按钮中的至少一种。

本发明实施例的第三方面提供了一种计算机可读存储介质,所述计算机存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行上述第一方面的方法。

本发明实施例与现有技术相比存在的有益效果是:

本发明实施例通过获取修改之后的变动程序文件和修改之前的源程序文件,将所述变动程序文件与所述源程序文件进行对比,确定变更的修改对象;所述修改对象包括函数、变量或者数值中的至少一种;根据所述源程序文件中每个程序对象之间预设的关联关系,从所述变动程序中识别出与本次修改的所述修改对象关联的目标对象。通过在源程序文件中的程序对象之间设定关联关系,再根据该关联关系和修改对象的信息,确定与修改对象关联的目标对象,以便开发人员可以针对目标对象进行进一步的测试或者维护,提高了程序测试和开发过程的准确率和效率。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1是本发明实施例一提供的程序分析方法的流程图;

图2是本发明实施例二提供的程序分析方法的流程图;

图3是本发明实施例三提供的终端设备的示意图;

图4是本发明实施例四提供的终端设备的示意图。

具体实施方式

以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本发明实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本发明。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本发明的描述。

为了说明本发明所述的技术方案,下面通过具体实施例来进行说明。

参见图1,图1是本发明实施例一提供的程序分析方法的流程图。本实施例中程序分析方法的执行主体为终端。终端包括但不限于智能手机、平板电脑、可穿戴设备等移动终端,还可以是台式电脑等。如图所示的程序分析方法可以包括以下步骤:

s101:获取修改之后的变动程序文件和修改之前的源程序文件。

软件测试是为了发现程序中存在的错误并修复错误而执行程序的过程,是软件设计过程中的重要一步。在软件开发与维护过程中,软件测试是一项成本高、耗时多的工作,约占软件开发与维护过程总成本的一半以上。软件测试能保证软件的质量稳定和后期维护的可行性,因而又是一个不可缺少的过程。软件测试是软件工程中一直不能被有效解决的难题,其中错误定位是为了检测出软件中所存在的错误语句,并大大提高软件测试的效率。错误定位方法的研究是近年来国内外软件领域研究的热点问题,其过程的任何改进都可能会极大程度降低软件的开发成本,这也是软件错误定位的意义所在。

由于计算机性能的大幅提高,计算机软件规模和复杂程度也大幅提高,现有的软件错误定位方法在效率和精度方面已经不能很好的满足现在的软件开发。数据挖掘融合了机器学习、模式识别、人工智能和统计学等许多领域的知识,综合了多学科分支的优势,具有多维数据的处理能力。数据挖掘理论和方法能够将程序执行信息作为数据挖掘处理的对象来进行软件错误定位的进一步研究,以此来弥补传统方法在效率和精度方面的不足。

在进行软件程序测试之后,测试人员可能会测试出一个或者多个出错的地方,在这种情况下,会由对应的开发人员进行修改。在开发人员改完之后,将修改后的程序提交至测试系统中,服务器通过获取开发人员上传的变动程序,便可对其进行相应的处理。在实际的测试和程序修改流程中,每次在修改之后都有对应的程序版本,用于进行发版和程序更新。因此,在本方案中的某次修改之后,通过获取修改之后的变动程序和修改之前的源程序文件,可以明确已经进行修改的对象和未修改的对象。

在实际应用中,可以将每个版本的程序文件进行整理和归档,并将版本编号或者文件生成时间作为程序文件的文件名,以提高程序文件查找、编辑和管理的效率。进一步的,还可以将每个程序文件的版本通过数据库的方式进行管理,通过数据查询的方式搜索对应的程序文件,并进行相应编辑或者修改。

s102:将所述变动程序文件与所述源程序文件进行对比,确定变更的修改对象;所述修改对象包括函数、变量或者数值中的至少一种。

在海量数据中寻找感兴趣的模式或规律是数据挖掘的目的,而通过匹配错误目标特征属性来定位出包含错误的程序元素是错误定位的目的,因而数据挖掘和软件错误定位在原理上有相似的地方。利用数据挖掘技术处理程序动态执行信息的方法被研究人员用来解决软件错误定位的问题。现有大部分研究忽略了程序执行轨迹信息与程序执行结果之间的关联关系,在错误定位的过程中若考虑程序执行轨迹信息与执行结果失败之间的关联,那么可以改善包含多个错误的程序中的错误定位效果。除此之外,现有大部分研究还忽略了程序执行轨迹信息中的特征元素,程序出错的特性会在这些特征元素上被更好的反映出来。由于对这类信息进行处理的理论和模型的缺乏,程序执行轨迹信息往往包含冗余的信息。在错误定位的过程中,若结合提取的特征元素来识别错误特征信息进而缩减程序执行轨迹信息,则在很大程度提高了错误相关信息的利用率,以此对数据进行进一步优化减少无关信息的干扰,有利于提高软件错误定位的效率。综上,在本实施例中,通过将获取到的变动程序文件和源程序文件进行对比,确定已经发生了修改的修改对象。

具体的,在将变动程序文件和源程序文件进行对比的过程中,可以通过分类的方式进行对比,示例性地,通过确定变动程序文件和源程序文件中的函数、变量或者数值等信息,将函数与函数之间进行对比,将变量与变量之间进行对比、数值与数值之间进行对比,以确定不同的对象类型的变动情况。还可以通过将文档编辑工具中的修改变动功能,直接确定相同位置的地方的对象是否相同。通过这些方式确定变动程序文件在源程序文件的基础上的变动情况。

需要说明的是,本实施例中的修改对象包括程序文件中的函数、变量或者数值中的至少一种,除此之外还可以是:类或成员等其他程序中可以包括的任何元素,此处不做限定。在本方案中,对函数的修改可以是函数的调用、函数中参数的变化,对变量的修改可以是变量名称的修改、变量值的修改或者对该变量的引用修改,对数值的修改可以是该数值的大小的修改,此处只是对修改对象的一些修改示例,具体的修改方式不做限定。

s103:获取所述源程序文件中的每个所述程序对象之间的调用关系,并根据所述调用关系和每个所述程序对象构建对象关系网;所述程序对象包括函数、变量或者数值中的至少一种;所述对象关系网用于表示每个所述程序对象之间的关联关系。

在实际的编程和调制工作中,计算机程序都是通过其中的函数调用实现预定的程序功能,在本实施例中,可以将每个计算机程序中的函数视为每个程序对象,每个程序对象之间存在相互调用的关系,通过分析源程序文件,根据源程序文件中所有的程序对象之间的关系,确定每个程序对象与其他程序对象之间的调用关系,并在确定之后,将整个源程序文件中所有的程序对象的关系进行统一,便可以构建出对象关系网。其中,该对象关系网中的程序节点可以是函数、变量或者数值,通过该对象关系网可以反映源程序文件中的所有程序节点之间的调用关系。

s104:根据所述源程序文件中每个程序对象之间预设的关联关系,从所述变动程序中识别出与本次修改的所述修改对象关联的目标对象;所述目标对象包括函数、变量、页面或者按钮中的至少一种。

在本实施例中,程序文件中包括了各种类型的程序对象,例如,函数、变量、类、数值等,此处不做限定。程序对象用于表示每个程序文件中的代码元素,改变一个程序对象的信息可以能改变整个程序文件的运行结果、节点显示结果,甚至是让程序在运行过程中出现问题,而不能达到预期的效果。

在本方案中,预设有程序文件中每个程序对象之间的关联关系,其中,该关联关系可以包括:程序之间的调用关系或者计算关系等,此处不做限定。并且,在本方案中,具有关联关系的程序对象可以是不同类型的程序对象,不一定必须是同一类型的对象。通过每个程序对象之间的计算或者运行关系确定程序对象之间的关联关系,根据源程序文件中每个程序对象之间预设的关联关系,从变动程序中识别出与本次修改的修改对象关联的目标对象。

需要说明的是,在本实施例中,程序对象用于表示程序文件中的所有的对象,修改对象用于表示发生了变更的程序对象;目标对象用于表示与修改对象具有关联关系的程序对象,这些对象所包括的数据的类型相同,例如函数、变量、页面或者按钮中的至少一种。

上述方案,通过获取修改之后的变动程序文件和修改之前的源程序文件,将所述变动程序文件与所述源程序文件进行对比,确定变更的修改对象;所述修改对象包括函数、变量或者数值中的至少一种;根据所述源程序文件中每个程序对象之间预设的关联关系,从所述变动程序中识别出与本次修改的所述修改对象关联的目标对象。通过在源程序文件中的程序对象之间设定关联关系,再根据该关联关系和修改对象的信息,确定与修改对象关联的目标对象,以便开发人员可以针对目标对象进行进一步的测试或者维护,提高了程序测试和开发过程的准确率和效率。

参见图2,图2是本发明实施例二提供的程序分析方法的流程图。本实施例中程序分析方法的执行主体为终端。终端包括但不限于智能手机、平板电脑、可穿戴设备等移动终端,还可以是台式电脑等。如图所示的程序分析方法可以包括以下步骤:

s201:获取修改之后的变动程序文件和修改之前的源程序文件。

在本实施例中s201与图1对应的实施例中s101的实现方式完全相同,具体可参考图1对应的实施例中的s101的相关描述,在此不再赘述。

s202:将所述变动程序文件与所述源程序文件进行对比,确定变更的修改对象;所述修改对象包括函数、变量或者数值中的至少一种。

在本实施例中s202与图1对应的实施例中s102的实现方式完全相同,具体可参考图1对应的实施例中的s102的相关描述,在此不再赘述。

s203:确定所述源程序文件中的至少两个程序对象节点及其所述至少两个程序对象节点之间的有向调用关系。

源程序文件中的每个程序对象之间都存在各种关系,其中以调用关系出现的概率最大。调用是将程序的执行交给其他的代码段,通常是一个子例程,同时保存必要的信息,从而使被调用段执行完毕后返回到调用点继续执行。示例性地,若a程序需要很长一段代码,则可以建立另外一个文件b存放这段代码,当a需要时候直接调用b。

具体的,计算机编译或运行时,使用某个函数来完成相关命令。对无参函数调用时则无实际参数表。实际参数表中的参数可以是常数、变量或其它构造类型数据及表达式。各实参之间用逗号分隔。在程序中通过对函数的调用来执行函数体,其过程与其它语言的子程序调用相似。c语言中,函数调用的一般形式为:函数名(实际参数表),对无参函数调用时则无实际参数表。实际参数表中的参数可以是常数、变量或其它构造类型数据及表达式。各实参之间用逗号分隔。函数作为表达式中的一项出现在表达式中,以函数返回值参与表达式的运算。这种方式要求函数是有返回值的。例如:z=max(x,y)是一个赋值表达式,把max的返回值赋予变量z。

在实际应用中,函数作为另一个函数调用的实际参数出现。这种情况是把该函数的返回值作为实参进行传送,因此要求该函数必须是有返回值的。例如:printf("%d",max(x,y));即是把max调用的返回值又作为printf函数的实参来使用的。进一步的,由于各系统对函数调用的求值顺序的规定不一定相同,在函数调用中还应该注意求值顺序,应确定对实参表中各量是自左至右使用还是自右至左使用。

进一步的,c语言中不允许作嵌套的函数定义。因此各函数之间是平行的,不存在上一级函数和下一级函数的问题。但是c语言允许在一个函数的定义中出现对另一个函数的调用。这样就出现了函数的嵌套调用。即在被调函数中又调用其它函数。这与其它语言的子程序嵌套的情形是类似的。c程序的执行是从main函数开始的,如果在main函数中调用其他函数,在调用后流程返回main函数,在main函数中结束整个程序的进行。所有函数都是平行的,即在定义函数时是分别进行的,是互相独立的。一个函数并不从属于另一个函数,即函数不能嵌套定义。函数间可以互相调用,但不能调用main函数。main函数是被操作系统调用的。在调用函数时,主调函数在调用被调函数时,通过参数向被调函数传递数据。一般情况下,执行调用函数时会得到一个函数值,供主调函数使用。

需要说明的是,上述实施例的说明是在c语音的环境中进行的,除此之外,还可以是其他的编程语言,不论采用何种编程语音,都需要根据每个编程语言的编程规则确定每个程序对象之间的关联关系,此处不做限定。

s204:根据所述至少两个程序对象节点和所述调用关系,构建二元组g=<ni,ei>;根据所述源程序文件中的每个程序对象节点的二元组,构建所述对象关系网;其中,ni用于表示所述程序对象节点,ei用于表示所述程序对象节点之间的有向调用关系。

在确定了每个程序对象之间的调用关系之后,根据调用关系和每个程序对象构建对象关系网,用于表示每个程序对象之间的关联关系。其中,对象关系网中的每个节点用于表示每个程序对象,节点之间的有向连接关系用于表示程序对象之间的调用关系。

根据调用关系和每个程序对象构建对象关系网,它可以表达各个程序对象之间或者程序对象内部复杂的数据关系。不同于其他线性结构,对象关系网通过使用顶点集和边集表示各个程序对象之间的数据关系,更有效地呈现出系统中程序对象的关系结构。因此,使用对象关系网作为数据结构来表示软件执行网络中的复杂关系,获得软件执行网络中隐藏的信息。对象关系网一方面可以保存程序的执行过程中的一些特征信息,另一方面还可以删除一些冗余的信息。因此,采用对象关系网不仅可以有效地压缩数据,而且能够节约大量对软件错误处理而所需的内存和时间开销。

具体的,一个对象关系网是由许多二元组组合而成,例如,对象关系网中包括二元组g=<ni,ei>,其中ni代表对象关系网中节点的集合,ei代表对象关系网中边的集合。对象关系网模型是一个二元组<ni,ei>,它是一个有向图。其中,ni是对象关系网的节点集,表示软件动态执行过程中的函数、语句块和逻辑表达式,对应于软件动态执行路径中包含的程序对象。ei是对象关系网的边集,表示软件动态执行路径中在各个程序对象之间存在的调用关系,例如a到b的有向边,表示的是程序对象a调用了程序对象b。所有的边在同一个对象关系网中是唯一的。通过这种模型可以将软件执行轨迹转换为软件动态执行模型。通过执行软件获得的软件动态执行路径,很容易构造出对象关系网模型。把软件动态执行路径中的函数、语句块或逻辑表达式看作对象关系网中的节点,软件动态执行路径中的函数调用关系、基本块或逻辑表达式执行顺序看作对象关系网中的边。构建对象关系网模型就是将软件动态执行路径抽象为有向图的过程,其中边为路径中存在的调用关系。

s205:根据所述源程序文件中每个程序对象之间预设的关联关系,从所述变动程序中识别出与本次修改的所述修改对象关联的目标对象;所述目标对象包括函数、变量、页面或者按钮中的至少一种。

除了从版本系统中获取到原始代码与改动代码进行对比,确定发生变动的改动点之外,还需要通过该改动点确定与其有关联的测试覆盖点,以进行相应的测试,或者观察是否发生联动的变化,保证程序的正常运行。在确定出对象关系网模型之后,通过对象关系网模型便可以确定与修改对象关联的目标对象。

步骤s205中可以具体包括步骤s2051~s2053:

s2051:根据所述修改对象在所述对象关系网中的位置,以及与所述修改对象直接关联和\或间接关联的关联对象在所述对象关系网中的位置,计算每个所述关联对象与所述修改对象之间的距离。

每个程序对象在对象关系网模型中都有自己对应的节点,而与该程序对象关联的目标对象也能确定出对应的节点位置来,通过对象关系网模型便可以确定各个程序对象之间的关系,即各个程序对象对应的节点在对象关系网中的位置。将对象关系网中各个节点之间的位置进行量化,便可以确定各个节点之间的距离。

示例性的,将程序对象之间的每次调用,即两个相邻节点之间的距离作为一个单位长度,节点与节点中间相隔多少个调用节点便具有对应数量的单位长度,通过节点之间单位长度的数量确定对应的关联对象与修改对象之间的距离。

s2052:根据所述距离确定每个所述关联对象与所述修改对象之间的关联度。

在确定了关联对象与修改对象之间的距离之后,通过该距离确定关联对象与修改对象之间的关联度。具体的,在计算时,确定修改对象与n个关联对象之间的距离分别为l1,l2,…,li,…,ln;i∈[1,n],通过距离可以得到关联对象i与修改对象之间的关联度为其中α用于表示距离调节参数。考虑到距离越大的情况下,关联度便会越小,因为,本方案中设定距离调节参数,通过该参数减去距离,则节点之间的距离越大,则关联度越小。

s2053:将所述关联度符合预设关联条件的关联对象识别为与所述修改对象关联的目标对象。

在本实施例中,预设有关联条件,由于步骤s2062中计算出来的关联度为一个数值,本实施例中也可以设定一个关联度阈值用于衡量程序对象之间的关联度强弱,若计算出的关联度大于或者等于该关联度阈值,则说明关联度较高,便可将该关联对象识别为与修改对象关联的目标对象;若计算出的关联度小于该关联度阈值,则说明关联度较低,则该关联对象便不是目标对象,可以对该关联对象设定较低的优先级,放在最后进行处理。

s206:获取所有与所述修改对象关联的目标对象的对象信息,并根据所述修改对象确定所述目标对象的目标状态;所述对象信息包括所述变动程序文件中的函数名称、函数位置、变量名称、变量位置或者数值中的至少一种。

获取所有与修改对象关联的目标对象的对象信息,并根据修改对象确定的目标对象的目标状态,其中对象信息包括变动程序文件中的函数名称、函数位置、变量名称、变量位置或者数值中的至少一种;目标对象的目标状态用于表示修改对象在被修改之后,与修改对象关联的目标对象是否需要修改,如果需要修改,修改之后的状态即为目标状态。并且,由于有些目标对象需要修改,而有些不需要修改,则可以确定,有些目标对象的目标状态与该目标状态之前的状态相同,不需要修改,而有些目标对象的目标状态与该目标对象之前的状态不同,需要根据该目标对象应有的目标状态,对该目标对象进行修改或者维护。

s207:根据所述目标对象的所述对象信息和所述目标状生成程序关联变动表。

在确定目标对象的对象信息和目标状态之后,根据目标对象的对象信息和目标状态生成程序关联变动表。

s208:根据所述程序关联变动表检测所述变动程序文件的程序对象是否修改一致;所述修改一致包括所述变动程序文件中的所述程序对象都修改为对应的目标状态。

在确定出目标对象之后,根据该目标对象的信息生成程序关联变动表,用于通过程序关联变动表说明一个函数被哪些页面使用到了,这个功能在代码管理工具中已经有使用,以使测试人员可以清楚的确定可能涉及到的测试覆盖点,进行进一步的测试或修正。通过预先建立标识软件程序执行逻辑的动态执行图模型,并在变动程序中识别出修改之后的改动点,根据动态执行图模型和改动点的信息确定与改动点相关的测试覆盖点,以便测试人员或者开发人员针对测试覆盖点进行进一步的测试或者修改,保证了程序测试和开发过程的准确率和效率。

通过根据所述程序关联变动表检测所述变动程序文件的程序对象是否修改一致,其中,修改一致包括变动程序文件中的程序对象都被修改为对应的目标状态,当程序文件中所有的程序对象都为目标状态之后,则所有的程序对象的状态都是一致的。

与步骤s206~s208同步的,步骤s205之后,还可以包括步骤s209~s2010:

s209:根据所述对象信息生成应用预测变动表;所述应用预测变动表包括所述变动程序文件所对应的交互界面的变更信息;

在实际应用中,后方程序的变动将会引起该程序文件所对应的交互界面的变动,因此在本实施例中根据对象信息生成应用预测变动表,其中包括变动程序文件所对应的交互界面的变更信息。例如,可以通过变动程序文件中的修改对象的信息确定其对应的交互界面中的按钮、组件等的变化信息,以确定该变动程序文件所对应的交互界面的变更信息。

s2010:根据所述应用预测变动表检测所述变动程序文件对应的交互界面是否能够正常显示。

在确定了改动点和建立了动态执行图模型之后,根据改动点的信息和动态执行图模型确定测试覆盖点。具体的,由于动态执行图包括了整个程序的执行逻辑和调用关系,改动点也已经明确说明已发生变化的类、函数或者接口,则可以通过这两个信息确定与改动点相关的测试覆盖点,确定在该改动点发生变化之后,也可能发生相应变化的页面、按钮等。

进一步的,因为超级文本标记语言(hypertextmarkuplanguage,html)代码文件名基本上就是页面名称,所以可以很容易定位到改动的代码所在的页面名称等。同样的,也可以根据“#”等注释符,搜索到改动的代码所在的函数的注释。也可以分析得到使用到这个函数的文件、页面名称、注释信息等。

上述方案,通过获取修改之后的变动程序文件和修改之前的源程序文件;将所述变动程序文件与所述源程序文件进行对比,确定变更的修改对象;所述修改对象包括函数、变量或者数值中的至少一种;根据所述源程序文件中每个程序对象之间预设的关联关系,从所述变动程序中识别出与本次修改的所述修改对象关联的目标对象;所述目标对象包括函数、变量、页面或者按钮中的至少一种。通过计算修改对象与目标对象之间的关联度,确定与修改对象具有关联关系的关联对象,进而根据该关联对象的对象信息和状态信息对变动程序文件中的程序对象的状态和交互界面的显示状态进行检测和维护,提高了程序检测和维护的效率和准确度。

参见图3,图3是本发明实施例三提供的一种终端设备的示意图。终端设备包括的各单元用于执行图1~图2对应的实施例中的各步骤。具体请参阅图1~图2各自对应的实施例中的相关描述。为了便于说明,仅示出了与本实施例相关的部分。本实施例的终端设备300包括:

获取单元301,用于获取修改之后的变动程序文件和修改之前的源程序文件;

对比单元302,用于将所述变动程序文件与所述源程序文件进行对比,确定变更的修改对象;所述修改对象包括函数、变量或者数值中的至少一种;

构建单元303,用于获取所述源程序文件中的每个所述程序对象之间的调用关系,并根据所述调用关系和每个所述程序对象构建对象关系网;所述程序对象包括函数、变量或者数值中的至少一种;所述对象关系网用于表示每个所述程序对象之间的关联关系;

识别单元304,用于根据所述源程序文件中每个程序对象之间预设的关联关系,从所述变动程序中识别出与本次修改的所述修改对象关联的目标对象;所述目标对象包括函数、变量、页面或者按钮中的至少一种。

所述根据所述源程序文件中每个程序对象之间预设的关联关系。

进一步的,所述终端设备还可以包括:

目标信息获取单元,用于获取所有与所述修改对象关联的目标对象的对象信息,并根据所述修改对象确定所述目标对象的目标状态;所述对象信息包括所述变动程序文件中的函数名称、函数位置、变量名称、变量位置或者数值中的至少一种;

第一制表单元,用于根据所述目标对象的所述对象信息和所述目标状态生成程序关联变动表;

程序检测单元,用于根据所述程序关联变动表检测所述变动程序文件的程序对象是否修改一致;所述修改一致包括所述变动程序文件中的所述程序对象都修改为对应的目标状态。

对象信息包括页面名称、组件名称或者组件位置中的至少一种;

进一步的,所述终端设备还可以包括:

第二制表单元,用于根据所述对象信息生成应用预测变动表;所述应用预测变动表包括所述变动程序文件所对应的交互界面的变更信息;

界面检测单元,用于根据所述应用预测变动表检测所述变动程序文件对应的交互界面是否能够正常显示。

进一步的,所述构建单元303可以包括:

关系获取单元,用于确定所述源程序文件中的至少两个程序对象节点及其所述至少两个程序对象节点之间的有向调用关系;

网络构建单元,用于根据所述至少两个程序对象节点和所述调用关系,构建二元组g=<ni,ei>;根据所述源程序文件中的每个程序对象节点的二元组,构建所述对象关系网;其中,ni用于表示所述程序对象节点,ei用于表示所述程序对象节点之间的有向调用关系。

进一步的,所述识别单元303可以包括:

距离计算单元,用于根据所述修改对象在所述对象关系网中的位置,以及与所述修改对象直接关联和\或间接关联的关联对象在所述对象关系网中的位置,计算每个所述关联对象与所述修改对象之间的距离;

关联度计算单元,用于根据所述距离确定每个所述关联对象与所述修改对象之间的关联度;

目标识别单元,用于将所述关联度符合预设关联条件的关联对象识别为与所述修改对象关联的目标对象。

上述方案,通过获取修改之后的变动程序文件和修改之前的源程序文件,将所述变动程序文件与所述源程序文件进行对比,确定变更的修改对象;所述修改对象包括函数、变量或者数值中的至少一种;根据所述源程序文件中每个程序对象之间预设的关联关系,从所述变动程序中识别出与本次修改的所述修改对象关联的目标对象。通过在源程序文件中的程序对象之间设定关联关系,再根据该关联关系和修改对象的信息,确定与修改对象关联的目标对象,以便开发人员可以针对目标对象进行进一步的测试或者维护,提高了程序测试和开发过程的准确率和效率。

图4是本发明实施例四提供的终端设备的示意图。如图4所示,该实施例的终端设备4包括:处理器40、存储器41以及存储在所述存储器41中并可在所述处理器40上运行的计算机程序42。所述处理器40执行所述计算机程序42时实现上述各个程序分析方法实施例中的步骤,例如图1所示的步骤101至103。或者,所述处理器40执行所述计算机程序42时实现上述各装置实施例中各模块/单元的功能,例如图3所示单元301至303的功能。

示例性的,所述计算机程序42可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在所述存储器41中,并由所述处理器40执行,以完成本发明。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序42在所述终端设备4中的执行过程。

所述终端设备4可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述终端设备可包括,但不仅限于,处理器40、存储器41。本领域技术人员可以理解,图4仅仅是终端设备4的示例,并不构成对终端设备4的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述终端设备还可以包括输入输出设备、网络接入设备、总线等。

所称处理器40可以是中央处理单元(centralprocessingunit,cpu),还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

所述存储器41可以是所述终端设备4的内部存储单元,例如终端设备4的硬盘或内存。所述存储器41也可以是所述终端设备4的外部存储设备,例如所述终端设备4上配备的插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard,fc)等。进一步地,所述存储器41还可以既包括所述终端设备4的内部存储单元也包括外部存储设备。所述存储器41用于存储所述计算机程序以及所述终端设备所需的其他程序和数据。所述存储器41还可以用于暂时地存储已经输出或者将要输出的数据。

所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

所述集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中。

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

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