大型复杂软件带约束逻辑属性的软件网络表示、存储与检索方法与流程

文档序号:12905919阅读:247来源:国知局
大型复杂软件带约束逻辑属性的软件网络表示、存储与检索方法与流程

本发明属于软件分析领域,具体涉及一种带约束逻辑属性的软件网络的表示、存储与检索方法。



背景技术:

随着网络技术的迅速发展和软件的广泛使用,我们进入了信息化时代。软件系统作为一类典型人工参与制造的复杂系统,可以解决变化多端的实际问题,在现代生活的方方面面起着很重要的作用,支持并控制着我们生活的很多重要领域。如何以最小的代价开发出更高质量的软件引起了广泛关注,软件质量和可靠性的提高成为软件业最为关注问题之一,软件分析的一个主要应用就是保障软件质量。然而应用领域在深度和广度上的扩展导致软件系统规模的激增和软件应用环境的日益复杂,近年来由于软件应用范围持续扩张、编程辅助工具提升了代码生成能力和开源理念的被认可,软件代码的增长十分迅速,据分析到2050年人们开发的代码将达到一万亿行,软件分析也因此需要一些新的视角。软件分析能够基于开发人员的当前任务持续的提供上下文信息。漂亮的可视化和人机交互技术促进了信息的有效呈现。

国内外众多科学家认为复杂系统和复杂性科学是21世纪科学发展的前沿。复杂系统和复杂网络研究的成果为探索大规模软件系统的结构特性和行为特性提供了有力支持,从整体和全局角度探索发现复杂软件系统的结构特性、演化规律和由此产生的行为特征。由于忽略实际细节、突出普遍规律,网络模型成为描述复杂系统的一种有效途径,网络分析也为探索大型复杂软件系统的分析提供了技术支持。采用软件网络并非是个新颖的方法,但是网络分析很少用于软件工程。

编译技术的发展大大带动了软件的自动分析技术,静态程序分析源自编译优化技术,通过分析程序代码求解关于程序特定性质的问题。在20世纪60年代floyd和hoare提出将程序特定性质表达为逻辑公式的方法,是程序正确性研究的主要方法,包括程序正确性证明、模型检验、反例制导的谓词抽象求精和符号执行等。算法由逻辑和控制两部分组成,分别存储求解问题时所用信息之间的逻辑方式和使用信息的方式,近年来将逻辑成分从控制成分中分离出来的陈述式语言被广泛研究。约束逻辑程序设计是基于人工智能中约束满足问题模型(csp)的一种程序设计风范,易于并行实现,约束网络上的信息可以同时传播,兼有逻辑编程和约束求解的能力。clp可以代表程序、执行和属性。

然而对于大型复杂软件构造的全局结构、行为特性可能过于庞大,存储、表示困难。redis为内存数据库的典型代表,由于读写速度快、数据类型丰富、具有面向高性能计算的高并发读写能力,已被应用于twitter、instagram、新浪微博等多家互联公司。其中的hash结构是一个string类型的field和value的映射表。可以将复杂网络的关键字作为键、属性名为字段名、属性值为值将软件网络存储在redis数据库中,用于大型复杂软件结构和行为特性的存储。对于大型和高并发性的软件应用。redis是键-值存储数据库,当其运行时所有数据被加载到内存,所有的操作运行在内存,然后阶段性地将数据异步保存到硬盘,完全内存操作使其每秒可以处理10万行以上的读写操作,性能高。支持列表、集合及其相关操作。

系统分解是指将大型的软件系统划分为若干子系统。对于大型软件系统的维护,维护任务通常只涉及其中很少的子系统,系统分解有助于对系统不熟悉的维护人员理解与维护任务相关的子系统。从已有文献看,系统分解一般也采用静态分析技术,其基本思路是通过对软件结构的分析,将软件划分为若干高内聚、低耦合的子部分,每个子部分对应一个子系统。程序切片是一种程序分析和理解技术,通过分析程序语句之间的依赖关系,剔除部分程序语句而只包含与特定计算相关的语句来分析程序,以减少程序规模的方法。它最早由weiser提出,通常应用于程序调试、测试和程序理解等。



技术实现要素:

本发明的目的是提出一种大型复杂软件带约束逻辑属性的软件网络表示、存储和检索方法,压缩状态空间,提取约束逻辑属性,建立全局和用例相关的局部可视化软件网络模型,实现大型复杂软件的可视化分析。

为了实现上述技术目的,本发明的技术方案是,

一种大型复杂软件带约束逻辑属性软件网络的表示、存储与检索方法,包括对软件源代码执行以下步骤:

a)首先结合语言识别工具antlr,并以目标源码对应的g4文法生成对应的包括词法分析器类、语法分析器类、监听器接口和监听器类在内的工具类,然后继承mbaselistener类自定义其中的监听器类,重写与包、类、方法、语句、变量、视频、音频、图片及这些元素之间关系的相关方法,以用于提取软件源码中相应的关键信息,并将语句信息翻译为约束逻辑表达式,结合复杂网络理论构建带有约束逻辑属性的软件网络模型;然后以各关键词的相对路径为节点名,实线箭头连接有属性包含关系的节点,虚线箭头连接有引用关系的节点,使用graphviz工具输出可视化的关于目标开源软件的全局视图;

b)将步骤a中得到的软件网络模型存储到redis数据库中。

c)给定待分析的关键字,结合可达性分析算法在redis数据库中检索得到用例相关的局部视图和约束逻辑事实库。

所述的方法,所述的步骤a)中,所述的语句信息为包括赋值、选择、循环在内的语句类型、语句控制信息、语句变量信息和语句行号信息

所述的方法,所述的步骤a)中,将语句信息翻译为约束逻辑表达式,是根据约束逻辑理论进行的。

所述的方法,所述的步骤a)中,结合复杂网络理论构建带约束逻辑属性的软件网络模型,是以关键信息的名称为节点,以关键信息之间的属性包含关系、方法间的调用关系和方法与变量间通信关系为边,构建软件网络模型。

所述的方法,步骤b是将得到的软件网络模型及其约束逻辑属性以软件网络模型的关键字为键、边的属性名为域名、属性值为值存储到nosql数据库-redis中。

所述的方法,步骤c是结合可达性分析和属性包含关系与引用关系提取与关键字用例相关的局部视图和约束逻辑事实库。

本发明提出的大型复杂软件带约束逻辑属性的软件网络表示、存储和检索方法主要是使用解析器从开源软件提取结构、行为和属性,将方法内的软件代码翻译为约束逻辑表达式,形成约束逻辑事实库,并基于提取的信息以包、类、方法、变量、视频、音频、图片为节点,他们之间的关系(包括属性包含关系、方法间的调用关系和方法与变量间的通信关系)为边构建软件网络模型。然后以软件网络的关键词为键、对应的属性名为字段名、属性值为值使用redis集群存储到redis数据库中。可以根据给定关键字结合redis的键-值对实现快速检索得到用graphviz可视化显示的初始关键字的相关局部软件网络模型实现用例切片和初始关键字用例相关的所有约束逻辑属性,用于程序分析和软件验证等。软件网络模型作为目标开源软件的资源库为探索大规模软件系统的结构和行为特性提供了强有力的支持;约束逻辑属性可以压缩状态空间便于程序分析和软件验证;redis集群存取方案适用于对大型复杂软件的存取;基于可达性的检索方案可以提取出与待分析关键字相关的所有关键信息,忽略不相关信息实现用例切片;全局和局部可视化方案促进了信息的有效呈现。

附图说明

图1为方法总流程图。

图2为软件网络模型构建与表示的子流程图。

图3为基于软件网络和可达性分析进行程序切片的子流程图。

图4为使用graphviz进行软件网络可视化的流程图。

具体实施方式

参见图1,本发明提出的大型复杂软件带约束逻辑属性的软件网络表示、存储和检索方法首先结合g4文法、antlr工具、复杂网络理论和约束逻辑林仑构建目标软件的带约束逻辑属性的软件网络模型,然后以软件网络模型中的节点(包、类、方法、变量、视频、音频、图片的绝对路径)为键,边的信息(属性类别为字段名,属性值为值)为值实现软件网络结构和行为的redis集群存储,并使用graphviz工具完成软件网络全局视图的可视化展示,最后基于软件网络模型和可达性分析在redis中检索软件网络模型得到与给定关键字用例相关的关键元素属性及其关系,并得到可视化的用例相关局部视图和约束逻辑事实库。其中g4文法是基于编译原理中基于all(*)解析策略的一种文法规则,适用于antlr4。与antlr3的ll(*)分析策略相比,all(*)可以在生成的解析器执行前动态执行语法分析。https://github.com/antlr/grammars-v4保存了各种常用语言的相关g4文法。

参见图2,首先使用cmd的java-jarantlr-4.4-complete.jarm.g4命令或netbeans的antlrworks2插件生成文法相关的词法分析器mlexer、语法分析器mparser、监听器接口mlistener和监听器类mbaselistener等四个java文件。接着继承mbaselistener监听器类定义myevallistener类并重写与元素特性及关系的相关方法,用于提取包、类、方法、语句、变量、视频、音频、图片在内的关键信息。最后将目标源码进行词法分析、语法分析、树分析和自定义的myevallistener监听类提取如表1所示的关键信息。

表1软件网络的关键元素及其属性列表

然后根据约束逻辑理论将语句信息转换为约束逻辑属性,以关键信息的名称为节点,他们之间的关系(包括属性包含关系、方法间的调用关系和方法与变量间通信关系)为边构建软件网络模型,形成大型复杂软件带约束逻辑属性的表示方法。所称的相关方法,以java项目为例,java.g4文法经antlr解析后生成的javabaselistener类中与包信息相关的方法为enterpackagedeclaration(@notnulljavaparser.packagedeclarationcontextctx){}和exitpackagedeclaration(@notnulljavaparser.packagedeclarationcontextctx){}。而语句信息是指语句类型(包括赋值、选择、循环等)、语句控制信息、语句变量信息和语句行号信息等。约束逻辑理论是公知是理论,论文deangelise,fioravantif,pettorossia,etal.verificationofimperativeprogramsbyconstraintlogicprogramtransformation[j].arxivpreprintarxiv:1309.5139,2013.中给出了将程序语句翻译为约束逻辑程序的表示方法。

参见图3,基于软件网络和可达性分析进行程序切片是在redis的软件网络模型中检索与待分析关键字用例相关的关键节点及其关系。给定待分析关键字首先要在redis中检索与其存在属性包含关系的上层节点信息(以变量节点为例其上层节点信息为包、类信息),并将上层节点与关键字节点及其关系添加到用例相关的局部网络中。若关键字为包或类节点时(可以在redis数据库中查询关键字的level字段)在redis数据库中检索与其存在属性包含关系的方法和变量节点(可以在redis数据库中查询关键字对应的memfun+i和memvar+i字段),并将方法对应的约束逻辑属性(可以在redis数据库中查询方法对应的fact字段)添加到约束逻辑事实库中,接着在redis数据库中检索与该方法、变量节点存在引用关系的节点(可以在redis数据库中查询方法对应的instancevar+i字段和变量对应的fun+i字段),并将引用关系中的方法节点对应的约束逻辑属性添加到约束逻辑事实库中,然后在redis数据库中检索各引用关系节点的与关键字同粒度的节点(若关键字为方法节点可以在redis数据库中查询应引用节点的fun字段),并将其与上层节点添加到局部网络中;当关键字为方法或变量节点时在redis数据库中检索与该方法、变量节点存在引用关系的节点添加到局部网络中,并将引用关系中的方法节点对应的约束逻辑属性添加到约束逻辑事实库中。最后返回用例相关的约束逻辑事实库,并将局部网络使用graphviz进行可视化输出。

参见图4,本发明中存在使用graphviz对软件网络进行全局和用例局部两种可视化方案。首先生成带有digraph头(如digrapha{)的空dot文件,然后以关键信息为节点,关系信息(包括属性包含和引用关系)为边构建软件网络模型。其中包含包、类、方法、变量等四种粒度的元素,节点名用各元素的绝对路径表示(如变量节点的节点名为”包名.类名.变量名”),属性包含关系用实线箭头表示(graphviz默认),引用关系(包含方法间的调用关系和方法与变量间的通信关系)用虚线箭头表示(style=dotted)。如果要构建全局视图可以使用红、黄、绿、蓝等四种节点的填充色分别表示包、类、方法、变量等粒度,特别地对于属于库函数的被调函数无填充色,然后使用twopi径向布局生成反映目标开源软件结构和行为特性的软件网络。如果要构建用例局部视图可以使用tab、record和自定义的方法、变量形状分别表示包、类、方法、变量等粒度,用节点的相对路径表示节点的label属性,用red、gold、springgreen和blue等四种不同的字体颜色分别表示public、private、friendly和protected等访问权限,节点填充与否表示是否实现,然后dot默认布局和rank=same,生成相同粒度节点在同一层次的软件网络。

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