CN112231175B - 一种基于动态仿真的软件状态监控点选择方法及系统 - Google Patents
一种基于动态仿真的软件状态监控点选择方法及系统 Download PDFInfo
- Publication number
- CN112231175B CN112231175B CN202011095616.3A CN202011095616A CN112231175B CN 112231175 B CN112231175 B CN 112231175B CN 202011095616 A CN202011095616 A CN 202011095616A CN 112231175 B CN112231175 B CN 112231175B
- Authority
- CN
- China
- Prior art keywords
- node
- software
- simulation
- software network
- nodes
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/302—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3051—Monitoring arrangements for monitoring the configuration of the computing system or of the computing system component, e.g. monitoring the presence of processing resources, peripherals, I/O links, software programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
Abstract
本发明涉及一种基于动态仿真的软件状态监控点选择方法及系统,该方法包括:获取目标软件完整的源代码;对源代码进行静态扫描,得到源代码与软件网络的节点和边之间的映射关系;根据映射关系构建第一软件网络;对源代码进行解析,得到结构化数据;根据结构化数据对第一软件网络进行扩展,得到第二软件网络;对第二软件网络的节点内部运行程序进行仿真分析,根据第二软件网络的节点间关系和仿真结果生成运行路径;对运行路径再次进行仿真分析,并根据该仿真结果计算监控点价值量化指标值;获取价值量化指标值最大的节点作为监控点。本发明能够在降低监控点资源消耗和保证监控效果的情况下优化监控点的设置。
Description
技术领域
本发明涉及软件复杂网络领域,特别是涉及一种基于动态仿真的软件状态监控点选择方法及系统。.
背景技术
随着信息技术的不断发展,计算机软件已经广泛应用于人类生活的方方面面,为人类社会经济的发展和科研的进步做出了巨大的贡献,软件的重要性急剧上升。与此同时,由于人们对软件功能需求的增多和软件应用环境的日益复杂,软件系统的规模和复杂性不断增长。软件运行状态的监控对实时健康状态分析、故障定位等都有比较重要的意义。由于软件运行中能够表征软件运行情况的量非常多,如果对所有节点的状态都进行监控的话,会给系统运行带来巨大的负载,同时也给数据的分析带来了极大的开销。
复杂网络是一种用于描述复杂系统的模型,通过将软件系统中的包、类、函数等元素以及元素之间的关系抽象为节点和边,整个软件可以抽象为一种具有特定拓扑结构的网络形态。这样的软件拓扑结构网络有助于程序开发人员对于软件整体框架有一个直观全面的理解,有利于对整个软件项目的开发、测试等工作。同时,这种软件网络(软件的复杂网络表示,下同)在软件的演化规律、软件结构的复杂性和稳定性等方面取得了很好的研究效果。
为了对复杂网络实现低开销和准确的在线监控,需要研究相应的方法,通过实现部分模块数据状态量的监控,有效的反映软件系统的运行状态,为软件的监控提供足够有效的数据,在降低监控点资源消耗和保证监控效果和质量的情况下优化监控点的设置。
发明内容
本发明的目的是提供一种基于动态仿真的软件状态监控点选择方法及系统,能够在降低监控点资源消耗和保证监控效果的情况下优化监控点的设置。
为实现上述目的,本发明提供了如下方案:
一种基于动态仿真的软件状态监控点选择方法,包括:
确定目标软件并获取所述目标软件完整的源代码;
对所述源代码进行静态扫描,得到所述源代码与软件网络的节点和边之间的映射关系;
根据所述映射关系构建软件网络,记为第一软件网络;
对所述源代码进行解析,得到结构化数据;
根据所述结构化数据对所述第一软件网络进行扩展,得到第二软件网络;
对所述第二软件网络的节点内部运行程序进行仿真分析,得到节点内仿真结果;
根据所述第二软件网络的节点间关系和所述内部仿真结果生成运行路径;
对所述运行路径进行仿真分析得到节点间仿真结果;
根据所述节点间仿真结果计算监控点价值量化指标值;
获取价值量化指标值最大的节点作为监控点。
可选的,所述根据所述映射关系构建软件网络,记为第一软件网络,包括:
将所述源代码的函数作为第一软件网络中的节点;将所述源代码中的依赖关系作为第一软件网络的边。
可选的,所述根据所述结构化数据对所述第一软件网络进行扩展,得到第二软件网络,包括:
获取所述结构化数据中的预设参数;
将所述预设参数设置为所述第一软件网络中的节点的属性和边的属性,得到第二软件网络。
可选的,所述预设参数包括传递参数和源代码的关键字类型。
可选的,所述价值量化指标值包括参数依赖量、节点执行的概率大小和节点执行的关联范围大小。
可选的,所述获取价值量化指标值最大的节点作为监控点,包括:
根据各价值量化指标值累加得到的总值大小进行监控价值排序;
将所述价值量化指标值最大的一批节点作为监控点。
一种基于动态仿真的软件状态监控点选择系统,包括:
源代码获取模块,用于确定目标软件并获取所述目标软件完整的源代码;
扫描模块,用于对所述源代码进行静态扫描,得到所述源代码与软件网络的节点和边之间的映射关系;
第一软件网络构建模块,用于根据所述映射关系构建软件网络,记为第一软件网络;
解析模块,用于对所述源代码进行解析,得到结构化数据;
第二软件网络构建模块,用于根据所述结构化数据对所述第一软件网络进行扩展,得到第二软件网络;
第一仿真模块,对所述第二软件网络的节点内部运行程序进行仿真分析,得到节点内仿真结果;
运行路径生成模块,用于根据所述第二软件网络的节点间关系和所述内部仿真结果生成运行路径;
第二仿真模块,用于对所述运行路径进行仿真分析得到节点间仿真结果;
价值量化指标值计算模块,用于根据所述节点间仿真结果计算监控点价值量化指标值;
监控点选择模块,用于获取价值量化指标值最大的节点作为监控点。
根据本发明提供的具体实施例,本发明公开了以下技术效果:
(1)本发明首先通过构建软件系统的属性方法网络,确保能够覆盖到软件系统最底层的信息,再在属性方法网络的基础上,添加了丰富的代码运行相关信息作为网络中的节点和边属性,这样能确保构建网络模型的过程中能做到软件运行信息的全覆盖,做到对精细仿真的支持。
(2)本发明完成了对代码运行状态的精确到行的仿真,相比现有方法,仿真程度更高、粒度更细,且从软件网络生成,到仿真结果生成,再到计算监控价值都是全自动完成。
(3)本发明的监控点选择方法考虑了程序运行的状态,相比现有方法,在降低监控点资源消耗和保证监控效果和质量的情况下优化了监控点的设置。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明基于动态仿真的软件状态监控点选择方法流程图;
图2是本发明构建的软件网络示意图;
图3是扩展后的软件网络节点属性示意图;
图4是节点内部仿真的对象——一个函数/方法示意图;
图5是节点内部仿真中构造的关键字树示意图;
图6是节点内部仿真中的if关键字处理逻辑示意图;
图7是节点内部仿真中的try关键字处理逻辑示意图;
图8是根据节点的度属性进行监控选择的示意图;
图9是根据节点的参数依赖属性进行监控选择的示意图;
图10是本发明基于动态仿真的软件状态监控点选择系统模块图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明针对软件状态数据的大量监控会给系统运行带来巨大的负载、监控点难以根据软件的结构、执行必然性、参数依赖强弱、控制流关联程度等进行客观的选择等问题,提供一种基于动态仿真的软件状态监控点选择方法及系统。而且经分析知,获取软件的运行路径对运行数据监控点的设置和故障的定位至关重要。根据调研,潜在监控要点如路径与功能的对应、数据流向、调用关系、执行先后顺序、关联影响范围等,都与程序的运行路径有较强的关联。本发明通过识别软件执行路径中的关键模块、获取波及效应较广的软件模块等方式,确定出在系统中应该设置的软件运行状态监控点。
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
本方法包含了从软件网络生成到运行路径信息生成的若干方法。首先将由目标软件获得软件网络,并结合提取的代码信息完成软件网络的运行信息扩展,之后提出了考虑控制流路径的执行和数据流动关系的仿真方法。结合内部仿真和方法/函数间仿真,得到较为完整的软件运行路径信息。得到的方法产出中,除了路径信息外,还包括节点在运行中的执行概率估计、公共部分等信息。并运用仿真产出的信息来选择监控点。
图1是本发明基于动态仿真的软件状态监控点选择方法流程图,如图1所示,一种基于动态仿真的软件状态监控点选择方法,包括:
步骤101:确定目标软件并获取所述目标软件完整的源代码;
步骤102:对所述源代码进行静态扫描,得到所述源代码与软件网络的节点和边之间的映射关系;
步骤103:根据所述映射关系构建软件网络,记为第一软件网络;
步骤104:对所述源代码进行解析,得到结构化数据;
步骤105:根据所述结构化数据对所述第一软件网络进行扩展,得到第二软件网络;
步骤106:对所述第二软件网络的节点内部运行程序进行仿真分析,得到节点内仿真结果;
步骤107:根据所述第二软件网络的节点间关系和所述内部仿真结果生成运行路径;
步骤108:对所述运行路径进行仿真分析得到节点间仿真结果;
步骤109:根据所述节点间仿真结果计算监控点价值量化指标值;
步骤110:获取价值量化指标值最大的节点作为监控点。
其中,步骤102具体是:对目标软件源代码进行静态扫描,分析软件中的元素实体(程序代码)和软件网络元素(节点、边、网络节点属性等)之间的相互映射关系(一一对应)。
步骤103具体为:在步骤102的基础上,根据分析得到的软件系统中代码与软件网络元素的关系,将代码的函数作为软件网络中的节点,代码中的依赖关系作为软件网络的边,构建具体的软件网络,即第一软件网络。
步骤104-105具体为:在步骤103的基础上,第一软件网络能够很好地展现节点间的关系和整体的结构,但是进行运行仿真需要更多的数据。为了在软件网络上准确地实施仿真,步骤104通过现有代码静态分析工具对步骤101中的源代码进行解析,得到包含更详细代码信息的结构化数据,并从中采集和提取了公认的与运行仿真密切关联的参数,如传递的参数、代码关键字类型等,步骤105将这些参数设计为节点的属性或者边的属性,构成信息扩展后的软件网络,即第二软件网络;
其中,如节点的属性包括:抽象成该节点的函数的名称、该函数在软件框架结构中的位置、该软件的语言类型、该函数包含的java关键字及其作用的行数范围、节点所表示的函数在java文件中的开始的行数、该节点所表示的函数的返回值类型、节点所表示函数作为被调用的方法时,所需要接受的参数名和参数类型等等;这种包含软件的函数内部信息作为属性的复杂网络构建方法是本发明的创新之处。
步骤106具体为:在步骤105得到的扩展后的软件网络中,步骤106通过对采集得到的丰富参数的利用,对软件网络中每一个节点(代表一个函数/方法)内部程序的运行情况进行精确到代码行的仿真分析,得到内部仿真结果,即各个函数内关键字构成的所有可能的函数内部运行逻辑和不同逻辑下函数内部每行代码是否执行。由于函数内部的每一行代码是否执行直接关系到函数间的执行关系,因此步骤106的作用是作为步骤107的基础和输入,并与步骤107一起构成最终的仿真结果。
步骤107-108具体为:在步骤106中,得到函数内部的运行仿真结果,步骤107基于步骤104得到的包含运行相关密切参数的网络节点/边的信息和步骤106中得到的内部运行仿真结果,考虑软件网络中节点之间的执行顺序关系和控制流中的参数传递关系等,形成一条完整的运行路径。对于一个软件,此步骤获得所有可能的运行路径。对每一条路径,按照路径上各关键字的运行处理逻辑,预先设定的各关键字的大致执行概率,如表1所示,利用该表中概率得到所有可能的运行路径,以及路径上每个函数节点的执行概率估计。
表1关键字执行概率
其中,所述的步骤106-108中,通过对步骤105中形成的每个软件网络节点中的各类关键字的层次关系进行整理,基于软件网络中提取到的属性信息,编写关键字关系的自动分析提取算法,形成关键字树。关键字类型如表1所示。对树中每一类关键字,依照概率并根据上下文情况进行运行仿真,得到节点内部代码每行的执行情况分析算法,在得到内部仿真结果后,形成程序执行路径起点仿真方法,根据软件网络的扩展后的属性和前述步骤得到的结果,形成所有可能的程序执行路径,完成软件网络中的细粒度运行仿真。这种仿真方法是本发明的创新之处。
步骤109-110具体为:由于监控点监控的是软件运行的状态,因此本发明中用于监控点选择的量化指标,是利用仿真结果得到的。根据上述步骤108的仿真结果,可计算出路径中的参数依赖量、节点执行的概率大小、节点执行的关联范围大小等作为衡量各节点监控价值的量化指标。然后根据各量化指标的值累加得到的总值大小进行监控价值排序,将值最大的一批节点作为最有监控价值的一批监控点。
所述的步骤109-110中,根据仿真结果获得一系列量化指标,这些指标有的度量了模块本身的复杂程度,有的度量了此模块在整个软件中的结构重要性和位置重要性,有的度量了此模块在抽象得到的软件网络结构中的重要性。通过指标来进行节点监控价值的排序。这是本发明的创新之处。
上述内容对本发明的方案进行了整体介绍,下面对一些细节做一些解释:
1、关于第一软件网络构建:
如图2所示,软件网络以程序的一个函数/功能/方法为节点。边的形式有两种,第一种是将节点与节点之间的调用(或继承)抽象为一条边。当调用发生在一个节点内部时,这样的调用是有指向性的,在软件网络中,边的方向由发出调用的节点指向被调用的节点,这类边称为调用边。第二种是在有参数关联的节点之间建立一条边。对于一个节点而言,局部参数的作用范围只在节点内部,而全局变量可以在多个节点之间传递、更改。因此全局变量像是一座桥,带来了各个节点之间的依赖关系,把这类边称为依赖边。通过现有代码解析工具,可通过代码扫描将函数间的调用和依赖关系提取为结构化数据,本发明读取这些提取到的结构化数据,在软件网络中生成调用边和依赖边。
2、关于第一软件网络信息扩展:
上一节中构建的第一软件网络能够很好地展现节点间的关系和整体的结构,但是进行运行仿真需要更多的数据。为了在软件网络上准确地实施仿真,本发明从源代码中采集并提取了与运行仿真密切关联的参数,并将这些参数设计为节点或者边的属性。
对节点而言,如图3所示,将获取的程序参数作为节点的属性,这些属性包括:
label:是抽象成该节点的方法的名称;
fullName:可识别该方法在软件框架结构中的位置;
language:该软件的语言类型;
keywords:该方法包含的java关键字及其作用的行数范围。
Keywords属性是通过逐行解析代码中的括号与关键字的关系而获得的;
bodyStart:节点所表示的方法在java文件中的开始的行数;
bodyEnd:节点所表示的方法在java文件中的结束的行数;
returnType:该节点所表示的方法的返回值类型;
args:节点所表示方法作为被调用的方法时,所需要接受的参数名和参数类型。
如图3所示,是以上节点参数的示例。以java程序为例,通过源代码逐行解析去识别的keywords是所有具有控制功能的keywords,包括try、catch、defaul、do、else、finally、for、if、switch、throw、throws、while、case。这些关键字及其作用的行数信息在软件运行过程中至关重要。若该方法没有以上关键字,则keywords属性为空。同样,若该方法没有返回值,节点的returnType属性为空;若节点被调用时没有传递参数,则args属性为空。除此之外其他属性都是不为空的。
对边而言,将获取的程序参数作为边的属性,这些属性包括:
linkCount:边的发生次数;
linkType:由此属性判断边是由于参数依赖形成的,还是由于发生了两个节点之间的调用而形成的,若属性的值为“depend”;该边为参数依赖,若为“call”,该边为调用;
lineNumber:该属性仅属于linktype为call的边拥有的属性,表示程序中的调用发生的行数。
callType:该属性仅属于linktype为call的边拥有的属性,表示该调用发生所在的行数在该节点哪些关键字的包含范围中。
3、关于节点方法内运行仿真
步骤106中,对方法(以Java语言的方法为例)内部的仿真需要对不同关键字及其组合情况进行分析。而不同关键字的组合和嵌套将会产生复杂的结果。本方法仿真了节点内关键字的执行情况。首先,通过几个实例展示节点内部关键字对于程序运行的影响:
if关键字与else、elseif关键字的执行是相互排斥的,在仿真运行情况时,当if以一定概率判断为满足执行条件,则else模块包含的内容都将不再执行。若else模块中嵌套有if,else关键字组合、或有对其他节点的调用,都将不再执行。
catch关键字,若以极小的概率执行了,整个程序都将停在此处。
return关键字如果出现在if关键字的作用范围内,当if关键字被执行,接下来该节点内的所有关键字都将不再执行。
如图4所示,深度为1的关键字处在嵌套结构的最外层;深度为2的关键字被深度为1的关键字所嵌套,即level2的关键字在level1的关键字的作用域内。为分析关键字间的关系,本方法充分利用了节点的keywords属性。将所有关键字按照其前后顺序和嵌套关系构建一颗关键字树,如图5所示,以帮助理清关键字之间的混乱关系。在关键字树中,关键字的等级体现为树的深度。这样的树结构存储的关键字关系能够被代码很好地读写,为仿真方法提供支持。
将关键字做这样的划分后,仿真获得关键字的执行情况。每一次仿真迭代针对关键字树中同一个级别的所有关键字。本方法对运行中遇到的每一个关键字设计该类型关键字的处理器(processor)进行处理。处理器将关键字树该级别中执行的关键字与未执行的关键字分开。对于未执行的关键字,嵌套在其中的关键字都将不再执行,因此下一步进行树的剪枝;对于执行了的关键字,如果其中任何一个关键字包含了下一层级,也就是在树中有子节点,那么将对下一层级的所有关键字重复上述步骤。直到所有关键字没有子节点,则返回一个包含执行了的关键字的树。
在上述方法中,对应每种类型的关键字提出了各不相同的处理器程序。由于篇幅有限,这里选择性地展示了几个关键字的处理逻辑。
1)关于if关键字的处理逻辑:
如图6所示,if处理器在判断关键字为if之后,按照表1所示,如每次仿真中if关键字的执行概率是50%。在每一次仿真中,运用python进行1-100的随机数生成,根据随机数的值判定本次仿真是否执行if关键字,当随机数大于50时选择执行if关键字。若执行,则需寻找后续与此关键字关联的elseif和if,在这一级别的全部关键字的列表中将elseif/if删除。若未执行,首先判断是否有后续elseif关键字,若执行了elseif,还需判断是否有else关键字,若有则删除(同时删除if)。
2)关于Try关键字的处理逻辑:
图7显示了try的处理器。如果catch关键字以很小的概率执行,则需要进入catch处理器。执行catch后,整个程序停止,节点中的后续关键字不执行,后续节点将不运行。但是,执行catch关键字包含的关键字和对其他节点的调用。此外,如果finally关键字存在,则必须执行它。
4、关于节点方法间运行仿真
步骤107-108中,程序运行路径的直观体现是方法之间的执行关系。上一小节中对软件网络节点内部的运行仿真是方法间运行仿真的必要条件,步骤106对软件网络中每一个节点(代表一个函数/方法)内部程序的运行情况进行精确到代码行的仿真分析,得到内部仿真结果,即各个函数内关键字构成的所有可能的函数内部运行逻辑和不同逻辑下函数内部每行代码是否执行。由于函数内部的每一行代码的执行情况直接关系到函数间的执行关系,因此基于方法内仿真的结果,本部分研究提出了方法间仿真的方法。
首先,确定了程序执行路径起点仿真方法。程序入口节点是一个软件开始运行的节点,对于不同类型的软件,这样的节点可能有一个或多个。本方法认为,入口节点一定是软件网络中入度为零的节点,这类节点不被其他模块调用,但能够调用其他节点,因此需要外部触发条件来使其运行。以下是本仿真方法获取程序执行入口的步骤:
1)删除软件网络中所有linktype为depend的边;
2)计算所有节点的度和入度(被指向的边的数量);
3)将度为零的所有孤立节点删除;
4)将入度为零且度不为零的所有节点作为程序入口节点。
从入口节点开始执行路径仿真。在形成路径时,根据节点内部的仿真,一个节点可能依概率调用多个节点,也可能所有潜在调用都不执行,甚至可能由于满足return条件立即返回上一节点或者由于catch语句的执行终止整条执行路径。因此,节点间的运行仿真还需要节点属性bodystart、bodyend、args、fullname、returntype以及调用类型的边的calltype、linktype、linenumber属性。
本方法通过仿真路径自动生成程序来自动化获取路径信息,程序功能如下:
1)当程序执行中遇到调用边,根据当前节点的内部仿真得到的关键字的执行情况,以及边属性calltype判断调用是否发生;
2)若调用发生,记录原节点调用的位置,被调用节点的属性args的内容为原节点传递给它的参数,程序执行到被调用节点;
3)被调用节点作为当前执行节点,重复步骤1)、2),直到没有后续节点;
4)从当前节点返回发出调用的节点,返回值类型为被调用节点的属性returntype,返回行数为边属性linenumber,从linenumber所示行数继续执行,重复步骤1),2),3),4);
5)返回到最开始运行的节点,一次仿真结束。
5、监控点选择
步骤109-110中,为了度量软件内各个模块在运行过程中的重要性,本发明选择了若干从不同角度表征重要性的因素,这些因素有的度量了模块本身的复杂程度,有的度量了此模块在整个软件中的结构重要性和位置重要性,有的度量了此模块在抽象得到的软件网络结构中的重要性。
例如:
HappyplayerPC是来自GitHub的一个开源音乐播放平台。其抽象得到的软件网络由355个不同节点及625条边组成。通过上述路径仿真方法获得了24条执行路径。
如下表2所示是24条中的其中一条执行路径,包含69个节点。路径上每个关键字按照表1所示概率选择执行,如每次仿真中if关键字的执行概率是50%。在每一次仿真中,运用python进行1-100的随机数生成,根据随机数的值判定本次仿真是否执行if关键字,当随机数大于50时选择执行if关键字。表2中列出了500次仿真实验获得的节点执行概率,保留一位小数。由表2可知,该路径中,com.happy.db.DBUtils.getConnection、com.happy.enterProgram.EnterProgram.initGlobalFont等节点是必然执行节点,而节点com.happy.db.DBUtils.isTableExist执行概率为0.1,前者比后者更值得监控资源的使用。(一个节点对应一套参数)
表2路径及执行概率
其中,执行概率通过仿真程序获得的,在一条执行路径的若干次执行中,某一个函数/方法的执行可能性估计。必然执行节点在一个功能模块中,往往具有中枢性和连通性,这样的节点具有较大的监控意义。
传参量是一个函数在执行时接收的传入参数和返回参数的数量之和。传参量表征了该函数通过控制流将数据变化进行传递的能力大小。传参量越大的函数,通过参数传递对整个软件的关联模块带来影响的可能越大,监控这些函数可以监控其参数的实时变化情况。
度是指复杂网络中与一个节点相连的节点的数量。在本发明抽象得到的软件网络中,边代表了节点之间的调用/继承关系,一个节点的度越大,表明它与周围环境的交流多、关系密切。如图8所示,左图方框中节点的度为3,后续相关节点为5个;右图方框中节点度为1,后续相关节点为2个。可以认为左图节点的重要性强于右图。
参数依赖量(依赖关系)是指一个函数对参数的依赖数量。这些参数未通过控制流在函数之间传递,但由于其全局性,参数可能被许多函数共同维护。如图9所示。参数依赖量越多,通过参数传递和接受数据变更影响的可能性越大。
关键字树容量指上述关键字树中所含关键字数量之和。表征函数内部控制逻辑的复杂程度。
关键字树深度指上述关键字树中关键字的最大层数。表征嵌套逻辑关系的深度,一定程度上刻画了函数的执行复杂程度。
圈复杂度是一种常用的代码复杂度的衡量标准。软件源码某部分的圈复杂度就是这部分代码中线性无关路径的数量。
正向波及度是复杂网络结构中,通过正向边关系可达的范围大小。在软件网络中,指一个函数通过对其他函数的调用所能到达的节点范围。
逆向波及度是复杂网络结构中,通过逆向边关系可达的范围大小。在软件网络中,指一个函数通过被其他函数调用所能到达的节点范围。
根据本发明中提出的方法,通过程序将上述因素累加得到节点(模块)的监控价值。公式如下:
Vi是节点i的监控价值量化值,f(i)是节点i的上述各重要性度量因素的计算值。根据路径对节点的重要性即从大到小进行排序,并按照常见监控点设置工作中取用的监控点数量,本发明取该路径中节点总数的10%作为该路径的监控点(向上取整)。
基于上述方法的内容,本发明还公开了一种基于动态仿真的软件状态监控点选择系统,如图10所示,包括:
源代码获取模块201,用于确定目标软件并获取所述目标软件完整的源代码;
扫描模块202,用于对所述源代码进行静态扫描,得到所述源代码与软件网络的节点和边之间的映射关系;
第一软件网络构建模块203,用于根据所述映射关系构建软件网络,记为第一软件网络;
解析模块204,用于对所述源代码进行解析,得到结构化数据;
第二软件网络构建模块205,用于根据所述结构化数据对所述第一软件网络进行扩展,得到第二软件网络;
第一仿真模块206,对所述第二软件网络的节点内部运行程序进行仿真分析,得到节点内仿真结果;
运行路径生成模块207,用于根据所述第二软件网络的节点间关系和所述内部仿真结果生成运行路径;
第二仿真模块208,用于对所述运行路径进行仿真分析得到节点间仿真结果;
价值量化指标值计算模块209,用于根据所述节点间仿真结果计算监控点价值量化指标值;
监控点选择模块210,用于获取价值量化指标值最大的节点作为监控点。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处。综上所述,本说明书内容不应理解为对本发明的限制。
Claims (7)
1.一种基于动态仿真的软件状态监控点选择方法,其特征在于,包括:
确定目标软件并获取所述目标软件完整的源代码;
对所述源代码进行静态扫描,得到所述源代码与软件网络的节点和边之间的映射关系;
根据所述映射关系构建软件网络,记为第一软件网络;
对所述源代码进行解析,得到结构化数据;
根据所述结构化数据对所述第一软件网络进行扩展,得到第二软件网络;
对所述第二软件网络的节点内部运行程序进行仿真分析,得到节点内仿真结果;
根据所述第二软件网络的节点间关系和所述节点内仿真结果生成运行路径;
对所述运行路径进行仿真分析得到节点间仿真结果;
根据所述节点间仿真结果计算监控点价值量化指标值;
获取价值量化指标值最大的节点作为监控点;
本方法通过仿真路径自动生成程序来自动化获取路径信息,程序功能如下:
1)当程序执行中遇到调用边,根据当前节点的内部仿真得到的关键字的执行情况,以及边属性calltype判断调用是否发生;
2)若调用发生,记录原节点调用的位置,被调用节点的属性args的内容为原节点传递给它的参数,程序执行到被调用节点;
3)被调用节点作为当前执行节点,重复步骤1)、2),直到没有后续节点;
4)从当前节点返回发出调用的节点,返回值类型为被调用节点的属性returntype,返回行数为边属性linenumber,从linenumber所示行数继续执行,重复步骤1),2),3),4);
5)返回到最开始运行的节点,一次仿真结束。
2.根据权利要求1所述的于动态仿真的软件状态监控点选择方法,其特征在于,所述根据所述映射关系构建软件网络,记为第一软件网络,包括:
将所述源代码的函数作为第一软件网络中的节点;将所述源代码中的依赖关系作为第一软件网络的边。
3.根据权利要求1所述的于动态仿真的软件状态监控点选择方法,其特征在于,所述根据所述结构化数据对所述第一软件网络进行扩展,得到第二软件网络,包括:
获取所述结构化数据中的预设参数;
将所述预设参数设置为所述第一软件网络中的节点的属性和边的属性,得到第二软件网络。
4.根据权利要求3所述的于动态仿真的软件状态监控点选择方法,其特征在于,所述预设参数包括传递参数和源代码的关键字类型。
5.根据权利要求1所述的于动态仿真的软件状态监控点选择方法,其特征在于,所述价值量化指标值包括参数依赖量、节点执行的概率大小和节点执行的关联范围大小。
6.根据权利要求1或5所述的于动态仿真的软件状态监控点选择方法,其特征在于,所述获取价值量化指标值最大的节点作为监控点,包括:
根据各价值量化指标值累加得到的总值大小进行监控价值排序;
将所述价值量化指标值最大的一批节点作为监控点。
7.一种基于动态仿真的软件状态监控点选择系统,其特征在于,包括:
源代码获取模块,用于确定目标软件并获取所述目标软件完整的源代码;
扫描模块,用于对所述源代码进行静态扫描,得到所述源代码与软件网络的节点和边之间的映射关系;
第一软件网络构建模块,用于根据所述映射关系构建软件网络,记为第一软件网络;
解析模块,用于对所述源代码进行解析,得到结构化数据;
第二软件网络构建模块,用于根据所述结构化数据对所述第一软件网络进行扩展,得到第二软件网络;
第一仿真模块,对所述第二软件网络的节点内部运行程序进行仿真分析,得到节点内仿真结果;
运行路径生成模块,用于根据所述第二软件网络的节点间关系和所述节点内仿真结果生成运行路径;
第二仿真模块,用于对所述运行路径进行仿真分析得到节点间仿真结果;
价值量化指标值计算模块,用于根据所述节点间仿真结果计算监控点价值量化指标值;
监控点选择模块,用于获取价值量化指标值最大的节点作为监控点;
本方法通过仿真路径自动生成程序来自动化获取路径信息,程序功能如下:
1)当程序执行中遇到调用边,根据当前节点的内部仿真得到的关键字的执行情况,以及边属性calltype判断调用是否发生;
2)若调用发生,记录原节点调用的位置,被调用节点的属性args的内容为原节点传递给它的参数,程序执行到被调用节点;
3)被调用节点作为当前执行节点,重复步骤1)、2),直到没有后续节点;
4)从当前节点返回发出调用的节点,返回值类型为被调用节点的属性returntype,返回行数为边属性linenumber,从linenumber所示行数继续执行,重复步骤1),2),3),4);
5)返回到最开始运行的节点,一次仿真结束。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011095616.3A CN112231175B (zh) | 2020-10-14 | 2020-10-14 | 一种基于动态仿真的软件状态监控点选择方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011095616.3A CN112231175B (zh) | 2020-10-14 | 2020-10-14 | 一种基于动态仿真的软件状态监控点选择方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112231175A CN112231175A (zh) | 2021-01-15 |
CN112231175B true CN112231175B (zh) | 2022-05-13 |
Family
ID=74113495
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011095616.3A Active CN112231175B (zh) | 2020-10-14 | 2020-10-14 | 一种基于动态仿真的软件状态监控点选择方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112231175B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103152224A (zh) * | 2013-03-21 | 2013-06-12 | 中国科学院信息工程研究所 | 一种实时动态监控模拟网络的方法及系统 |
CN105045574A (zh) * | 2015-06-24 | 2015-11-11 | 广东电网有限责任公司电力科学研究院 | 一种基于复杂网络故障传播的软件关键函数辨识方法 |
CN108255733A (zh) * | 2018-01-30 | 2018-07-06 | 北京航空航天大学 | 一种基于复杂网络理论评估软件系统可靠性的方法 |
CN108536471A (zh) * | 2018-03-21 | 2018-09-14 | 北京航空航天大学 | 一种基于复杂网络的软件结构重要模块识别方法 |
CN108664728A (zh) * | 2018-05-10 | 2018-10-16 | 北京航空航天大学 | 一种基于复杂网络动态仿真的软件模块变更影响确定方法 |
CN110110529A (zh) * | 2019-05-20 | 2019-08-09 | 北京理工大学 | 一种基于复杂网络的软件网络关键节点挖掘方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7412724B2 (en) * | 2003-07-31 | 2008-08-12 | International Business Machines Corporation | Data network and method for checking nodes of a data network |
CN109597752B (zh) * | 2018-10-19 | 2022-11-04 | 中国船舶重工集团公司第七一六研究所 | 基于复杂网络模型的故障传播路径仿真方法 |
CN110245409B (zh) * | 2019-06-05 | 2020-02-21 | 北京航空航天大学 | 一种基于虚拟现实与复杂网络的软件可靠性仿真分析方法 |
-
2020
- 2020-10-14 CN CN202011095616.3A patent/CN112231175B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103152224A (zh) * | 2013-03-21 | 2013-06-12 | 中国科学院信息工程研究所 | 一种实时动态监控模拟网络的方法及系统 |
CN105045574A (zh) * | 2015-06-24 | 2015-11-11 | 广东电网有限责任公司电力科学研究院 | 一种基于复杂网络故障传播的软件关键函数辨识方法 |
CN108255733A (zh) * | 2018-01-30 | 2018-07-06 | 北京航空航天大学 | 一种基于复杂网络理论评估软件系统可靠性的方法 |
CN108536471A (zh) * | 2018-03-21 | 2018-09-14 | 北京航空航天大学 | 一种基于复杂网络的软件结构重要模块识别方法 |
CN108664728A (zh) * | 2018-05-10 | 2018-10-16 | 北京航空航天大学 | 一种基于复杂网络动态仿真的软件模块变更影响确定方法 |
CN110110529A (zh) * | 2019-05-20 | 2019-08-09 | 北京理工大学 | 一种基于复杂网络的软件网络关键节点挖掘方法 |
Non-Patent Citations (3)
Title |
---|
Mining the key nodes from software network based on fault accumulation and propagation;H Guoyan,W Qian,L Xinqian,H Xiaobing,Y Huaizhi;《Security and Communication Networks》;20190307;全文 * |
基于函数调用关系分析软件网络特征;陈晓娟;《中国优秀硕士学位论文全文数据库 信息科技辑》;20171130;全文 * |
软件系统中类的重要性排序方法研究;刘文辉;《中国优秀硕士学位论文全文数据库 信息科技辑》;20170730;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN112231175A (zh) | 2021-01-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Cummins et al. | Programl: A graph-based program representation for data flow analysis and compiler optimizations | |
Herbst et al. | Integrating machine learning and workflow management to support acquisition and adaptation of workflow models | |
CN109739494B (zh) | 一种基于Tree-LSTM的API使用代码生成式推荐方法 | |
Cavalcante et al. | Statistical model checking of dynamic software architectures | |
Fanjiang et al. | Search based approach to forecasting QoS attributes of web services using genetic programming | |
Abdurazik et al. | Using coupling-based weights for the class integration and test order problem | |
Barrameda et al. | A novel statistical cost model and an algorithm for efficient application offloading to clouds | |
Avritzer et al. | A multivariate characterization and detection of software performance antipatterns | |
Mirandola et al. | UML based performance modeling of distributed systems | |
Uc-Cetina et al. | Composition of web services using Markov decision processes and dynamic programming | |
Ufuktepe et al. | A program slicing-based bayesian network model for change impact analysis | |
CN112231175B (zh) | 一种基于动态仿真的软件状态监控点选择方法及系统 | |
CN110109702B (zh) | 基于代码分析的Android计算迁移在线决策方法 | |
Boucher et al. | Transforming workflow models into automated end-to-end acceptance test cases | |
CN113918473B (zh) | 一种基于Swagger文档的RESTful APIs组合测试方法 | |
CN113010437B (zh) | 一种基于故障分析的软件系统可靠性管理方法及系统 | |
Nielsen | Application of artificial intelligence techniques to simulation | |
CN114780443A (zh) | 微服务应用自动化测试方法、装置、电子设备及存储介质 | |
Herbert et al. | SBAT: a stochastic BPMN analysis tool | |
Natarajan et al. | Programming by rewards | |
Goyal et al. | Smartphone Context Event Sequence Prediction with POERMH and TKE-Rules Algorithms | |
Adekile et al. | Object-oriented software development effort prediction using design patterns from object interaction analysis | |
Mala et al. | On the use of intelligent agents to guide test sequence selection and optimization | |
Shen et al. | Goal-based intelligent agents | |
Bataineh | Verifying worst-case execution time of timed automata models with cyclic behaviour |
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 |