CN106951365B - 一种基于面向对象软件代码的软件复杂网络模型构建方法 - Google Patents

一种基于面向对象软件代码的软件复杂网络模型构建方法 Download PDF

Info

Publication number
CN106951365B
CN106951365B CN201710113704.3A CN201710113704A CN106951365B CN 106951365 B CN106951365 B CN 106951365B CN 201710113704 A CN201710113704 A CN 201710113704A CN 106951365 B CN106951365 B CN 106951365B
Authority
CN
China
Prior art keywords
software
entity
complex network
information
relation
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
CN201710113704.3A
Other languages
English (en)
Other versions
CN106951365A (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.)
Beihang University
Original Assignee
Beihang 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 Beihang University filed Critical Beihang University
Publication of CN106951365A publication Critical patent/CN106951365A/zh
Application granted granted Critical
Publication of CN106951365B publication Critical patent/CN106951365B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3608Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本发明提供了一种基于面向对象软件代码的软件复杂网络模型构建方法。本发明以易于工程化为前提,在对面向对象软件代码进行详细分析的基础上,通过构建具备软件代码基本实体、关系以及演化特征的数据化软件,并利用组网与展示规则细化软件复杂网络模型含义,构建出了具有明显层次性、层次独立性、软件信息可做苏醒、可扩展性的软件复杂网络。本方法可以有效简化面向对象软件复杂网络的构建过程,并可以从更多角度对统一软件进行分析,其可追溯性利于网络特征与软件特征的对应,而可扩展性大大提高了软件复杂网络模型所描述的软件特征范围,对于软件复杂网络的研究及工程实践具有深远的意义。

Description

一种基于面向对象软件代码的软件复杂网络模型构建方法
技术领域
本发明应用于软件复杂网络技术领域,是一种基于软件代码,提供规范化可复用的软件复杂网络模型构建方法。
背景技术
随着软件在人们生活中的应用的日益普及和深入,人们对软件功能的需求越来越丰富,对软件质量的要求也越来越高。软件规模的扩大和软件应用环境的日益复杂,使软件系统的规模和复杂性不断增长。一个简单的设计缺陷会经由软件元素间的相互作用而作用于整个软件产生无法估量的后果。为此,软件工程思想与统一建模语言(UML)被应用于软件开发过程;控制流图、数据流图与Pytri网等方法被应用于软件建模分析。而传统的软件分析方法,或着眼于宏观的架构,或着眼于局部的逻辑,难以给予以复杂逻辑关系为主的软件系统一个形象化的表示,并以模型的方式进行模型描述。而复杂网络的出现,为描述软件系统的复杂性提供了新的解决途径。
复杂网络是一种用于描述复杂系统的模型,通过将软件系统中的包、类、变量、函数等元素抽象为结点,元素之间的相互关系抽象为链接,整个软件可以抽象为一种具有特定拓扑结构的网络形态。在软件复杂网络方法的推动下,软件的演化规律,软件结构的复杂性和稳定性,以及类与类之间的耦合性等方面的研究取得了很好地效果。随着软件复杂性的不断提高,软件复杂网络的方法将更广泛的应用于抽象软件结构并进行分析软件特征的过程中。
当前,软件复杂网络构建过程中未对软件代码信息进行详尽的分析。这使得软件复杂网络模型的构建局限于有限的软件代码实体和关系,如类与类之间相关关系。因此,当前的软件复杂网络模型不能更全面的使用软件复杂网络的方法反映出软件的特征,难以描述具有复杂关系的面向对象软件。软件复杂网络的构建方式种类繁多,这使得软件复杂网络的构建方式难以进行统一的规划与比较,限制了软件复杂网络方法在实际软件特征分析中的应用。此外,软件复杂网络的研究中,对包含软件特征信息的软件复杂网络的组织与呈现并未整合到软件复杂网络的分析过程,使软件特征无法直观的展示,同时也使软件复杂网络的呈现难以复现。
发明内容
本发明针对目前软件复杂网络模型中软件信息不全面,软件复杂网络构建过程复杂无规律的问题以及软件复杂网络的组织与展示问题,提出一种基于面向对象软件代码的软件复杂网络模型构建方法。
本发明提出的一种基于面向对象软件代码的软件复杂网络模型构建方法,包括如下步骤:
步骤1:构建软件层,具体是:确定目标软件,获取目标软件所有版本的源代码。
步骤2:构建数据层,具体是:从软件源代码中提取直接存在的基本实体及基本实体关系,形成目标软件的数字化软件形式,基本实体作为软件元素,并在分析同一软件的不同版本时为数字化软件元素及元素关系添加版本演化信息。
步骤3:构建网络层,具体是:确定所构建软件复杂网络所要表达的软件特征,在步骤2中的数字化软件的基础上,利用组网规则构建软件复杂网络。
步骤4:构建组织层,具体是:在步骤3中软件复杂网络的基础上,利用表示规则构建复杂网络的分析展示。
所述的步骤2中,面向对象软件代码中,提取的基本实体包括类型结构、函数、变量和宏。基本实体的属性包括作用域、访问权限和实体定义段。提取的基本实体关系包括变量赋值变量、变量调用函数、变量指代函数、变量类型、函数使用变量、函数调用函数、函数重写关系、函数返回值类型、函数参数类型、函数异常类型抛出、类基于模板、类型继承、实体相互包含、以及宏类型定义。其中,函数使用变量分为两种,一种是函数使用变量作为“左值”的关系,一种是函数使用变量作为“右值”的关系;函数调用函数分为两种,一种是函数的顺序语句中调用其他函数的关系,一种是函数的条件或循环语句中调用其他函数的关系。
本发明与现有技术相比,具有以下明显的优势和积极效果:
(1)本发明对软件代码实体关系类型的分析更加具体,使得面向对象软件代码的软件复杂网络模型建模更加精确。
(2)为数据化软件的实体和实体关系的基本属性添加版本信息,记录不同软件版本下软件元素及软件关系是否存在;为数据化软件实体添加摘要信息,实现不同版本下同一软件实体间的差异比较。
(3)本发明通过分层次的方式规划了软件复杂网络的构建过程,使构建过程具有明显的层次性、层次独立性、软件信息可追溯性以及可扩展性。将面向对象软件代码作为构建复杂网络的信息,通过面向对象软件代码进行详细的分析,可以更全面地获取软件代码中的实体与实体关系信息。通过不同版本间数字化软件信息的叠加,可以使数字化软件包含软件代码的演化信息。分析的结果可以通过数字化软件的形式复用于软件特征关系的挖掘,扩展了软件复杂网络所能描述的软件特征范围。通过可扩展的网络层组网规则及组织层表示规则的结合,可以从更多角度对同一软件进行分析与描述。利用软件复杂网络所包含软件代码结构及演化信息的复杂软件网络表示,进一步拓宽了软件复杂网络软件模型所描述的软件特征范围,在整合现有方法的同时,完善了当前软件复杂网络构建过程中的问题,对基于软件复杂网络的工程实践具有深远的意义。
附图说明
图1是本发明的基于面向对象软件代码的软件复杂网络模型构建方法流程框图;
图2是本发明基于面向对象软件代码的软件复杂网络的分层构建示意图;
图3是软件复杂网络软件代码基本信息组网实例图;
图4是软件复杂网络软件代码演化信息组网实例图;
图5是软件复杂网络模型表示规则结果实例。
具体实施方式
为了便于本领域普通技术人员理解和实施本发明,下面结合附图对本发明作进一步的详细和深入描述。
本发明在分析总结当前软件复杂网络相关研究的基础上,通过对面向对象软件代码进行全面的分析,提出了层次化的软件复杂网络模型构造方法。本发明方法将软件复杂网络的构建过程分解为如图2所示的四个层次,分别是软件层、数据层、网络层和组织层。通过数据层中软件代码分析提取,可以获得更全面的面向对象软件代码实体与关系,尽可能的丰富可供建模的面向对象软件代码信息;通过构建数据化软件网络为挖掘软件代码中相关关系的建模提供了可复用的软件数据基础,并通过软件实体及关系属性表示软件版本演化信息的变化,使不同的软件可以用相似的模式进行表示,尽可能的简化软件复杂网络建模过程;通过组网规则描述软件复杂网络中节点与边与软件信息的映射关系,以及软件实体及关系中所包含的软件演化信息,并依据软件复杂网络的目的,利用权重等网络元素描述软件特征;组网规则可以直接作用于不同的数据化软件,同一数据化软件可以使用不同的组网规则进行网络的提取,这使软件复杂网络方法可以从不同角度对软件进行分析,同时增强了模型的可扩展性;通过组织层的展示规则可以将网络层中获得的具备软件信息与网络信息的网络以特定的形式表进行展示,网络所包含的信息更直观的体现。本发明规范并简化了软件复杂网络模型的构建过程,方法易于进行工程化实践的展开。
本发明中所提出的软件复杂网络建模方法的主要步骤如图1和图2所示,下面详细说明各个步骤。
步骤1:构建软件复杂网络的软件层。确定目标软件并获取其完整的软件源代码,使用源代码构建软件复杂网络的基本信息,作为本方法的软件层。
例如图2中,软件A和B为目标软件,获取软件A和软件B完整的源代码,获取软件A的n个版本的源代码,获取软件B的m个版本的源代码。
步骤2:在对目标软件的源代码进行全面分析的基础上,从软件代码中提取直接存在的基本软件实体及基本实体关系,形成目标软件的数字化软件形式,并在分析同一软件的不同版本时为数字化软件实体及关系添加代码演化信息,作为本方法的数据层。
在数据层软件代码分析阶段,根据目标软件代码的具体类型进行软件基本实体和基本实体关系的提取。依据面向对象软件的种类不同,根据软件代码中的不同结构的定义,在软件代码分析过程中,将面向对象软件代码中的基本实体分为如下部分:类型结构(类Class、接口Ifs、结构体Strc、枚举Enum、模板类Tmpl),函数(成员函数MbrFun、全局函数GlbFun、静态函数StcFun),变量(成员变量MbrVar、全局变量GlbVar、静态变量StcVar),宏(宏常量MCst、宏函数Mfun)。基本实体作为软件元素。软件元素具有以下属性:作用域,表示软件元素的作用范围;访问权限,表示面向对象结构描述为软件元素赋予的外部使用权限;实体定义段,由软件元素的文件和文件中的代码段决定,利于网络信息的回溯。
利用S代表软件元素的作用域属性取值集合,利用A代表元素的访问权限属性取值集合,利用L代表软件元素的实体定义段,即实体在文件实现段的表示,其定义表示如下:
S={global,member};(1)
A={public,private,protected};(2)
L=(file,start,end);(3)
式(1)中,global表示全局类型,member代表成员类型,作用域类型取值为其中一种;式(2)中的public表示共有类型,private表示私有类型,protected表示受保护类型,与面向对象语言中的表示一致,访问权限的取值为其中一种;式(3)中file代表文件之于软件项目的相对路径,start代表代码的起始行,end代表代码的结束行,软件实体的文件实现段为以上三个数据组成的数据组。
依据软件代码的定义及描述块中的软件定义,面向对象软件基本关系类型如表1所示。
表1软件代码实体关系类型
Figure BDA0001235118420000041
其中,宏常量在表中视作特殊的变量,宏函数在表中视作特殊的函数。在表1中可看出,函数使用变量和函数调用函数均为为两种,还定义了宏类型定义。本发明对软件代码实体关系类型的分析更加具体,使得面向对象软件代码的软件复杂网络模型建模更加精确。
依据以上软件代码实体关系分类,软件代码中所直接表达的软件实体关系如表2所示。
表2软件代码中基本实体的关系表
Figure BDA0001235118420000051
其中,“函数”包含成员函数、全局函数和静态函数;“变量”包含成员变量、全局变量和静态变量;表中的关系表示由横向的实体出发到达纵向的实体;关系类型来自于表1中的符号;关系中的“----”表示不存在所分类型的关系。软件基本实体元素间可能存在着复数的关系,也可能不存在任何关系。根据软件元素层级的差异可以将软件元素间关系分为同一粒度元素关系和不同粒度元素间的元素关系。类型结构之间的关系属于同一粒度元素关系,类型结构与函数、变量、宏常量或宏函数之间的关系均属于不同粒度元素间的元素关系。
当数据化软件的基本实体和实体关系提取完毕后,根据软件代码的版本信息为数据化软件添加版本演化信息。版本演化信息包含基本实体与实体关系在特定版本下的存在信息和版本的修改信息。通过为数据化软件的实体和实体关系的基本属性添加版本信息,记录不同软件版本下软件元素及软件关系是否存在。通过为数据化软件实体添加摘要信息,用于不同版本下同一软件实体间的差异比较。
软件元素的作用域会在软件演化过程中发生变化,定义Versions为进行分析的软件代码的版本集合,Scope(Elm)为软件元素Elm的作用域,modifier为带有版本信息的软件元素的作用域。编号为i的软件元素在ver版本下的摘要信息modifieri,ver表示如下:
modifieri,ver={(ver,s)|ver∈Versions,s=Scope(Ei,ver)∈S}(4)
其中,ver在软件代码库中的版本集合之内,编号为i的软件元素在ver版本下表示为Ei,ver,元素的作用域s取决于Ei,ver的作用域具体定义,元素作用域的取值范围为式(1)中的S。
软件元素的访问权限同样会在软件演化过程中发生变化,定义Access(Elm)为元素Elm的访问权限,因此access为带有版本信息的软件元素作用域定义如下:
accessi,ver={(ver,a)|ver∈Versions,a=Access(Ei,ver)∈A}(5)
式(5)中的accessi,ver为编号为i的软件元素在ver版本下的访问权限信息,ver在软件代码库中的版本集合之内,元素的访问权限a取决于软件元素Ei,ver的访问权限具体定义,元素访问权限的取值范围为式(2)中的A。
定义Location(Elm)为Elm元素的代码实现段的获取方法,因此location为带有版本信息的软件代码段信息,其定义如下
locationi,ver={(ver,l)|ver∈Versions,l=Location(Ei,ver)=(filei,ver,starti,ver,endi,ver)}(6)
式(6)中的locationi,ver为编号i的软件元素在ver版本下的软件代码段(即实体定义段)信息,ver在软件代码库中的版本集合之内,软件元素Ei,ver的代码段使用文件相对路径filei,ver,元素起始行starti,ver,元素结束行endi,ver进行表述。
定义Digest(Elm)为获取软件元素Elm实现代码摘要的函数,摘要信息是软件元素的特征值,可以用于检测元素的代码实现是否发生变化。软件元素的演化属性定义如下
implementi,ver∈{(ver,imp)|ver∈Versions,imp=Digest(Ei,ver)}(7)
式(7)中implementi,ver为编号为i的软件元素在ver版本下的摘要信息,软件演化属性是版本与对应版本下元素实现代码摘要的数据对,ver在分析的软件代码库中的版本集合之内,元素的摘要信息取决于编号为i并具有版本ver的软件元素Ei,ver的具体实现。
定义verexist为软件实体关系存在版本的集合,因此verexist为Versions的子集,即
Figure BDA0001235118420000061
根据实体和实体关系的分析结果,进行图2中的数据层(D)的描述。数据化软件主要由软件代码实体数据及实体关系数据组成,即
D={CodeEntity,CodeRelation}(8)
D代表数据化软件,CodeEntity代表软件实体数据,CodeRelation代表软件实体关系数据。使用代码扫描工具对函数抽象,获取软件基本实体及实体关系过程如下所示。
Figure BDA0001235118420000071
Etype∈{Class,Ifs,Strc,Enum,Tmpl,MbrFun,GlbFun,StcFun,MbrVar,(9)
GlbVar,StcVar,MFun,MCst}
函数Entity(Etype)用于获得代码中类型为Etype的软件实体集合,Etype作为获取制定软件元素类型的参数使用,可以获取软件中的某种类型软件元素的集合。面向对象软件中未出现Etype中类型的元素,Entity(Etype)获取的集合结果为空集;若存在Etype中类型的元素,则返回对应的软件元素集合。
通过扫描软件代码,根据基本实体类型,获得软件中所有的基本实体的集合,构成数据化软件的实体集合。利用代码元素类型表示方法,可以将一个软件的数据化软件实体集合用式(10)表示如下,
Figure BDA0001235118420000072
对面向对象软件的元素关系分析,将数据化软件的实体关系类型Rtypes利用表3进行表示。
表3软件代码实体关系类型
Figure BDA0001235118420000073
Figure BDA0001235118420000081
其中,将宏常量在表中视作特殊的变量,宏函数在表中视作特殊的函数。
利用函数Relation(Rtypes,Ei,Ej)表示两个实体Ei和Ej之间是否存在表1中所描述的关系类型Rtypes,如下:
Figure BDA0001235118420000082
其中,Rtypes为实体间关系的类型,i与j为实体的编号。Relation(Rtypes,Ei,Ej)如果存在由实体Ei到Ej的关系Rtypes,则判定为真(true),否则为伪(false)。
通过遍历所有的软件元素(基本实体)可以获得元素(基本实体)之间的关系集合,数据化软件的关系集合为各版本下表3所展示的元素关系的集合,由此CodeEntity可以表示为,
Figure BDA0001235118420000083
下面对数据化软件的各实体关系的定义进行说明。
1)变量赋值变量:
Figure BDA0001235118420000084
其中,vari、varj表示两个不同的变量,i、j为整数,用于标记变量编号,两者的取值范围根据实体类型的特定组合确定,rk表示存在由vari赋值给varj的关系,两实体间存在该类型关系的版本用集合表示为
Figure BDA0001235118420000085
k为整数,用于标记赋值关系集合中的元素;Relation(assign,vari,varj)=true,根据(11)和表3表示变量之间存在赋值关系。
2)变量调用函数:
Figure BDA0001235118420000091
公式(14)表示由两个集合组成,第一个集合中,vari表示变量,funj表示函数,i、j为整数,用于变量和函数编号,两者的取值范围根据实体类型的特定组合确定,rk表示存在使用vari调用funj的关系,其存在的版本用集合表示为
Figure BDA0001235118420000092
k为整数,用于标记版本用集合中的元素;Relation(invoke,vari,funj)=true表示变量调用函数的关系存在。由于静态函数的调用需要通过类或结构体进行,因此在第二个集合中,clsi表示类和结构体,funj表示函数,i、j为整数,用于标记变量编号,两者的取值范围根据表2中的实体类型的特定组合确定,rk表示存在使用clsi调用funj的关系,其存在的版本用集合表示为
Figure BDA0001235118420000093
Relation(invoke,vari,funj)=true表示变量调用函数的关系存在。
3)变量指代函数:
Figure BDA0001235118420000094
式(15)中vari、funj表示变量和函数,i、j为整数,用于对元素进行标记,两者的取值范围参照表2中的实体类型的特定组合确定,rk表示存在使用变量vari表示funj的关系,其存在的版本用集合表示为
Figure BDA0001235118420000095
k为整数,用于标记集合中的元素;Relation(pFun,vari,funj)=true表示变量指代函数的关系确定存在。
4)变量类型:
Figure BDA0001235118420000096
式(16)中vari、clsj表示变量和类型结构,i、j为整数,用于标记变量代号,两者的取值范围根据实体类型的特定组合确定,rk表示存在vari的类型为clsj的关系,特定的两个元素间存在的版本用集合表示为
Figure BDA0001235118420000097
k为整数,用于为版本用集合中元素编号;Relation(Var-Type,vari,clsj)=true根据(11)和表3表示保证了关系确定存在。
5)函数使用变量(左值):
Figure BDA0001235118420000098
式(17)中funi、varj表示函数和变量,i、j为整数,用于标记变量代号,两者的取值范围根据实体类型的特定组合确定,rk表示funi使用varj做“左值”的关系,其存在的版本用集合表示为
Figure BDA0001235118420000099
k为整数,用于标记集合中的元素;Relation(l-value,funi,varj)=true根据(11)和表3表示保证了函数使用变量(左值)关系确定存在。
6)函数使用变量(右值):
Figure BDA0001235118420000101
式(18)中funi、varj表示函数和变量,i、j为整数,用于标记变量代号,两者的取值范围根据实体类型的特定组合确定,rk表示funi使用varj做“右值”的关系,其存在的版本用集合表示为
Figure BDA0001235118420000102
k为整数,用于标记集合中的元素;Relation(r-value,funi,varj)=true根据(11)和表3表示保证了函数使用变量(右值)关系确定存在。
7)函数调用关系(必定):
Figure BDA0001235118420000103
式(19)中funi、funj表示两个函数,i、j为整数,用于标记变量代号,两者的取值范围根据实体类型的特定组合确定,rk表示存在funi必定调用funj的关系,其存在的版本用集合表示为
Figure BDA0001235118420000104
k为整数,用于标记集合中的元素;Relation(S-Call,funi,funj)=true根据(11)和表3表示保证了函数调用关系(必定)确定存在。
8)函数调用关系(条件):
Figure BDA0001235118420000105
式(20)中funi、funj表示两个不同的函数,i、j为整数,用于标记软件元素,两者的取值范围根据实体类型的特定组合确定,rk表示存在funi有条件的调用funj的关系,其存在的版本用集合表示为
Figure BDA0001235118420000106
k为整数,用于标记集合中的元素;Relation(C-Call,funi,funj)=true根据(11)和表3表示保证了函数调用关系(条件)确定存在。
9)函数重写关系:
Figure BDA0001235118420000107
式(21)中funi、funj表示两个重载函数,i、j为整数,用于标记软件元素,两者的取值范围根据实体类型的特定组合确定,rk表示存在funi的重写函数为funj,其存在的版本用集合表示为
Figure BDA0001235118420000108
k为整数,用于标记集合中的元素;Relation(Override,funi,funj)=true根据(11)和表3表示保证了函数重写关系确定存在。
10)函数返回值类型:
Figure BDA0001235118420000111
式(22)中funi、clsj表示函数和类型结构,i、j为整数,用于标记变量代号,两元素的取值范围参照表2中的实体类型的特定组合确定,rk表示funi的返回值是clsj类型,其存在的版本用集合表示为
Figure BDA0001235118420000112
k为整数,用于标记集合中的元素;Relation(Rtn-Type,funi,clsj)=true根据(11)和表3表示保证了函数返回值关系确定存在。
11)函数参数类型:
Figure BDA0001235118420000113
式(23)中funi、clsj表示函数和类型结构,i、j为整数,用于标记变量代号,两元素的取值范围根据表2中的实体类型的特定组合确定,rk表示funi的参数含有clsj类型,其存在的版本用集合表示为
Figure BDA0001235118420000114
k为整数,用于标记集合中的元素;Relation(Pam-Type,vari,funj)=true根据(11)和表3表示保证函数参数类型关系确定存在。
12)类基于模板:
Figure BDA0001235118420000115
式(24)中clsi、clsj表示类型结构与模板类,i、j为整数,用于标记变量代号,两元素的取值范围参照表2中的实体类型的特定组合确定,rk表示存在clsi类使用clsj模板,其存在的版本用集合表示为
Figure BDA0001235118420000116
k为整数,用于标记集合中的元素;Relation(TPL-Type,clsi,clsj)=true根据(11)和表3表示保证了类基于模板关系确定存在。
13)类结构的继承与实现:
Figure BDA0001235118420000117
式(25)中clsi、clsj表示两个不同类型结构,i、j为整数,用于标记变量代号,两元素的取值范围参照表2中的实体类型的特定组合确定,rk表示clsi的子类或实现为clsj结构,其存在的版本用集合表示为
Figure BDA0001235118420000118
k为整数,用于标记集合中的元素;Relation(Inherit,clsi,clsj)=true根据(11)和表3表示保证了类结构的继承与实现关系确定存在。
14)函数抛出异常:
Figure BDA0001235118420000121
式(26)中funi、clsj表示两个不同的变量,i、j为整数,用于标记变量代号,两元素的取值范围参照表2中的实体类型的特定组合确定,rk表示funi抛出类型为clsj的异常,其存在的版本用集合表示为
Figure BDA0001235118420000122
k为整数,用于标记集合中的元素;Relation(Exception,funi,clsj)=true根据(11)和表3表示保证了函数抛出异常关系确定存在。
15)实体包含关系:
Figure BDA0001235118420000123
式(27)由两个集合组成,第一个集合中,clsi表示类、结构体、接口,varj表示成员变量,i、j为整数,用于类型结构和变量编号,两者的取值范围根据表2中的实体类型的特定组合确定,rk表示存在使用clsi调用varj的关系,其存在的版本用集合表示为
Figure BDA0001235118420000124
k为整数,用于标记集合中的元素;Relation(Ctn,clsi,varj)=true根据(11)和表3表示实体包含关系的存在。由于静态函数的调用需要通过类或结构体进行,因此在第二个集合中,clsi表示类和结构体,funj表示函数,i、j为整数,用于标记变量编号,两者的取值范围根据表2中的实体类型的特定组合确定,rk表示存在使用clsi调用funj的关系,其存在的版本用集合表示为
Figure BDA0001235118420000125
k为整数,用于标记集合中的元素;Relation(Ctn,clsi,funj)=true根据(11)和表3表示实体包含关系确定存在。
16)宏类型定义:
Figure BDA0001235118420000126
式(28)中mi、clsj表示宏常量和类型结构,i、j为整数,用于标记变量代号,两元素的取值范围参照表2中的实体类型的特定组合确定,rk表示mi指代clsj类型,其存在的版本用集合表示为
Figure BDA0001235118420000127
k为整数,用于标记集合中的元素;Relation(Exception,funi,clsj)=true根据(11)和表3,表示保证了宏类型定义关系确定存在。
从上面可看出,数据化软件中基本实体的定义包含名称、作用域、访问权限、文件位置、软件实体的接入关系与引出关系、以及软件实体演化信息,分别使用name、modifier、access、location、rin、rout、implement表示,名称为基本实体的主键且全局唯一,根据软件元素的分析,modifier、access、location和implement都为含有版本信息的集合,将数据化软件实体关系的定义简化为rk=(ei,ej,versk),接入关系表示关系中的终止点ej为当前实体,即,
Figure BDA0001235118420000128
ej为该实体,接出关系表示关系中的起始节点ei为当前实体,
Figure BDA0001235118420000129
ei为该实体;v表示软件元素(基本实体)关系。数据化软件的演化信息implement为软件元素的版本与内容摘要的数据对。
下面描述软件元素(基本实体)的定义。
1)类与接口在软件代码中具有最为相似的结构,因此其定义也较为相似,定义为:
Figure BDA0001235118420000131
式(29)中的元素定义中si表示实体集合中的编号为i的元素,modifieri与式(4)的定义一致,表示了实体的作用域的演化信息;accessi与式(5)定义一致,表示了实体的访问权限的演化信息;locationi与式(6)定义一致,表示了实体的代码所处文件位置的演化信息;implementi与式(7)定义一致,表示了实体自身的演化信息;接入与接出关系是表3中的特定的关系集合合并后的子集,同时表现出了表1中类与接口相关的关系。v0、v1、u0、u1均代表一个基本实体。
2)结构体的数据化实体表示:
Figure BDA0001235118420000132
式(30)中的si表示实体集合中的编号为i的元素,modifieri与式(4)定义一致,表示了实体的作用域的演化信息;accessi与式(5)定义一致,表示了实体的访问权限的演化信息;locationi与式(6)定义一致,表示了实体的代码所处文件位置的演化信息;implementi与式(7)定义一致,表示了实体自身的演化信息;接入与接出关系是表3中的特定的关系集合合并后的子集,同时表现出了表1中结构体的关系。
3)枚举类型只能够作为类型存在,因此只有接入关系;
Figure BDA0001235118420000133
式(31)中si表示实体集合中的编号为i的元素,modifieri与式(4)定义一致,表示了实体的作用域的演化信息;accessi与式(5)定义一致,表示了实体的访问权限的演化信息;locationi与式(6)定义一致,表示了实体的代码所处文件位置的演化信息;implementi与式(7)定义一致,表示了实体自身的演化信息;接入与接出关系是表3中的特定的关系集合合并后的子集,同时表现出了表1中枚举类型元素的接入关系。
4)成员函数数据化实体;
Figure BDA0001235118420000141
式(32)中si表示成员函数实体集合中的编号为i的元素,modifieri与式(4)定义一致,表示了实体的作用域的演化信息;accessi与式(5)定义一致,表示了实体的访问权限的演化信息;locationi与式(6)定义一致,表示了实体的代码所处文件位置的演化信息;implementi与式(7)定义一致,表示了实体自身的演化信息;接入与接出关系是表3中的特定的关系集合合并后的子集,同时表现出了表1中函数中成员函数的相关关系。
5)全局与静态函数在使用时具有相似的特性,如全局唯一,需要借助文件或类的引用来实现使用,其表示方法如下:
Figure BDA0001235118420000142
式(33)中si表示全局与静态函数实体中的编号为i的元素,modifieri与式(4)定义一致,表示了实体的作用域的演化信息;accessi与式(5)定义一致,表示了实体的访问权限的演化信息;locationi与式(6)定义一致,表示了实体的代码所处文件位置的演化信息;implementi与式(7)定义一致,表示了实体自身的演化信息;接入与接出关系是表3中的特定的关系集合合并后的子集,同时表现出了表1中函数中成员函数的相关关系,与式(32)所表示的关系类型共同组成函数的相关关系。
6)成员变量、全局变量与静态变量的实体具有相似的特性
Figure BDA0001235118420000143
式(34)中si表示变量实体中的编号为i的元素,modifieri与式(4)定义一致,表示了实体的作用域的演化信息;accessi与式(5)定义一致,表示了实体的访问权限的演化信息;locationi与式(6)定义一致,表示了实体的代码所处文件位置的演化信息;implementi与式(7)定义一致,表示了实体自身的演化信息;接入与接出关系是表3中的特定的关系集合合并后的子集,同时表现出了表1中变量相关的关系。
7)宏函数在软件代码中较为特殊,其定义与全局函数相似,由于宏属于预编译内容,通常可以通过将预编译后的软件代码进行分析的方式进行处理,此处只给出了宏函数的定义。
Figure BDA0001235118420000151
式(35)中si表示宏函数实体中的编号为i的元素,modifieri与式(4)定义一致,表示了实体的作用域的演化信息;accessi与式(5)定义一致,表示了实体的访问权限的演化信息;locationi与式(6)定义一致,表示了实体的代码所处文件位置的演化信息;implementi与式(7)定义一致,表示了实体自身的演化信息;接入与接出关系是表3中的特定的关系集合合并后的子集,同时表现出了表1中宏函数相关的关系。
8)宏常量与变量的特征相似,但不能被反复修改因此接入接出关系的类型相对较少
Figure BDA0001235118420000152
式(36)中si表示宏常量实体中的编号为i的元素,modifieri与式(4)定义一致,表示了实体的作用域的演化信息;accessi与式(5)定义一致,表示了实体的访问权限的演化信息;locationi与式(6)定义一致,表示了实体的代码所处文件位置的演化信息;implementi与式(7)定义一致,表示了实体自身的演化信息;接入与接出关系是表3中的特定的关系集合合并后的子集,同时表现出了表1中宏常量相关的关系。
通过软件信息的分析、提取及有效整合形成数据化软件,以应用于后续的复杂网络构建过程,其基本步骤为:
(2.1)根据软件代码分析所得到的基本实体类型,扫描软件代码,根据软件代码中的元素定义,获得软件中的所有基本实体;所有的基本实体的集合,构成数据化软件的实体集合;
(2.2)遍历软件基本实体的定义及描述信息,根据实体的上下文,确定与该实体相关的实体,并根据软件代码分析所获得的实体关系类型,确定该实体与其他相关实体的具体关系;实体之间的关系集合,构成数据化软件的关系集合;
(2.3)根据软件基本实体与实体关系的提取结果,形成基本实体、实体关系与软件代码的映射关系。
(2.4)依据软件代码版本信息及软件版本信息间对比,为软件的基本实体与实体关系添加版本相关信息。
(2.5)使用利于相关关系挖掘的数据形式记录软件信息提取过程结构得到数字化软件,并通过数据化软件版本相关信息的合并,使数据化软件具备软件的演化信息。数字化软件的形成及演化信息的添加,存储了代码全面分析后的可追溯到软件代码的基本软件实体和基本实体关系,同时存储了软件代码实体及关系在不同版本间的增加、删除及修改信息,并能复用与该软件的软件复杂网络构建中。
步骤3:确定所构建软件复杂网络所要表达的软件特征,在步骤2中的数字化软件的基础上,利用组网规则构建软件复杂网络,作为本方法的网络层。由图2网络层的内容可知,通过该步骤可以生成由网络节点与边描述的软件复杂网络。
步骤3中组网规则指,根据所构建软件复杂网络所要表达的软件特征,完成可用于不同数字化软件的软件代码基本信息与软件复杂网络元素之间一对一或多对一的映射,同时完成软件代码单一版本及多个版本演化信息在网络节点及边中的体现,使软件复杂网络同时具备软件特征与网络特征。软件复杂网络可表示如下:
Figure BDA0001235118420000161
式(37)中的软件网络节点集Nodesk由多个节点组成;nodei为其中编号为i的节点,nid为软件复杂网络中的节点id,节点nodei的节点id为nidi,elmentity代表符合特定组网规则的数据化软件实体集合,elmrelation代表符合特定组网规则的数据化软件实体关系集合,下脚标n表示编号为n的节点,vers表示用于构建软件网络所使用的软件版本集合。NodeMapk与EdgeMapk表示特定版本范围内的网络节点映射和关系映射关系,而映射关系与软件网络模型构建过程中的组网规则相对应,组网规则直接作用于数据化软件,并确定了数据化软件实体形成网络元素的映射关系。这种映射通过式(38)和(39)进行描述,如下。
Figure BDA0001235118420000162
Figure BDA0001235118420000163
nodei,nodej∈Nodesk
Figure BDA0001235118420000164
式(38)表示节点的映射关系,其中elmentity代表符合特定组网规则的数据化软件实体集合,必然为式(8)中数据化软件实体的子集,elmrelation代表符合特定组网规则的数据化软件实体关系集合,必然为式(10)中数据化软件关系的子集,vers表示用于构建软件网络所使用的软件版本集合,NodeMap(elmentity,elmrelation,vers)返回的结果为软件网络中表示一个节点信息的集合;em代表组成该节点的数据化软件实体中编号为m的节点,m的取值范围是1至实体集合的元素总数
Figure BDA0001235118420000171
rn代表组成该节点的数据化软件实体关系中编号为n的关系,n的取值范围是1至实体关系集合的元素总数
Figure BDA0001235118420000172
节点映射的结果需要根据V确定,V表示用于构建网络节点的所有实体共存版本集、实体关系共存版本集与构建网络所用版本集合的并集,若为空表示无法形成所使用版本集vers下的软件网络节点,使用空集表示。若实体关系集合elmrelation为空,说明网络节点直接同软件实体形成一对一的简单关联,若elmentity与elmrelation都不为空,说明网络节点同软件部分实体和实体关系组成的复合结构相关联。
式(39)表示边的映射关系。其中,elmentity代表符合特定组网规则的数据化软件实体集合,必然为式(8)中数据化软件实体的子集,elmrelation代表符合特定组网规则的数据化软件实体关系集合,vers表示用于构建软件网络所使用的软件版本集合,必然为式(8)中数据化软件关系的子集,式(39)返回的结果为软件网络中表示一条边信息的集合。若elmentity为空,说明软件网络的边直接同软件实体关系形成一对一的简单关联,若elmentity与elmrelation都不为空,说明软件网络的边同软件部分实体和实体关系组成的复合结构相关联。
根据映射函数的定义可以看出,数据化软件到软件网络的映射分为:
1)简单映射,即网络层的软件网络节点与数据化软件实体直接形成映射,边与实体关系直接映射;
2)复合映射,即网络层的软件网络节点由多个数据化软件基本实体与实体关系构成,复合映射形成时需对所使用数据化软件实体和实体关系的版本进行更为精确地判断。
软件复杂网络的提取方法示意如图3和图4所示,具体的复杂网络构建过程如下:
(3.1)依据软件复杂网络组网原则中的软件信息与网络节点的映射关系,在数据化软件中提取复合映射的结构,作为构建软件复杂网络的节点要素;
(3.2)在所提取的软件信息的基础上,根据组网原则中的软件信息与网络边的映射关系,从数据化软件中提取复合映射的结构,作为构建软件复杂网络的边要素,同时依据组网原则中的软件代码版本相关信息,更新组网过程所使用的软件代码实体及实体关系信息,并为软件代码实体与实体关系信息添加演化信息。
(3.3)在所提取的实体和实体关系基础上,将各节点相关要素作为网络节点,将两节点之间的网络边的相关要素整合成为两节点之间的边,使软件复杂网络包含软件信息,并依据软件复杂网络目标将部分软件特征转化为复杂网络元素的权重表示。
步骤4:在步骤3中软件复杂网络的基础上,利用表示规则构建复杂网络的分析展示,作为本方法的组织层。表示规则是指利用图形化方法直接反应出软件复杂网络的软件信息及网络信息,构建可重现的软件复杂网络呈现形式,提供软件复杂网络的直观特征呈现。
由图1可知,在构建软件网络模型组织层时,软件复杂网络中点与边的表示特征描述如下,
Figure BDA0001235118420000181
其中,Points表示点的集合,每个点包括三个属性:风格psyle代表点的颜色color、大小size、形状属性shape,position表示点所对应的软件复杂网络中的节点的软件特征及网络特征所确定的网络坐标,nid表示点的id。Nodesk为软件复杂网络的节点集合。Lines表示边的集合,每条边包括三个属性:lsyle表示线的风格及颜色属性,length表示线的长度信息,eid表示边的id,Edgesk为软件复杂网络的边集合。下脚标i表示点或边的编号。
通过软件复杂网络展示规则的作用,可以形成具有特定形式的软件复杂网络模型,以便后续软件特征的探寻与分析。一个具体的软件复杂网络在两种不同组网规则作用后的软件复杂网络模型如图5所示,通过节点及边的风格,结合网络构建含义更清晰的反应软件特征。
经过软件信息采集、软件数据化,软件复杂网络抽取及复杂网络组织四大步骤之后,便形成了具有特定软件特这和组织形式的软件复杂网络模型。

Claims (6)

1.一种基于面向对象软件代码的软件复杂网络模型构建方法,其特征在于,实现步骤如下:
步骤1:构建软件层,具体是:确定目标软件,获取目标软件所有版本的源代码;
步骤2:构建数据层,具体是:从软件源代码中提取直接存在的基本实体及基本实体关系,形成目标软件的数字化软件形式,基本实体作为软件元素,并在分析同一软件的不同版本时为数字化软件元素及元素关系添加版本演化信息;版本演化信息包含基本实体与实体关系在特定版本下的存在信息和版本的修改信息;
步骤3:构建网络层,具体是:确定所构建软件复杂网络所要表达的软件特征,在数字化软件的基础上,利用组网规则构建软件复杂网络;
所述的步骤3中,基于组网规则构建软件复杂网络的过程包括:
(3.1)依据软件复杂网络组网原则中软件信息与网络节点的映射关系,在数据化软件中提取复合映射的结构,作为构建软件复杂网络的节点要素;所述的软件信息包括基本实体和实体关系;
(3.2)在所提取的软件信息的基础上,根据组网原则中软件信息与网络边的映射关系,从数据化软件中提取复合映射的结构,作为构建软件复杂网络的边要素,同时依据组网原则中的软件代码版本信息,更新组网过程所使用的软件代码实体及实体关系信息,并为软件代码实体与实体关系信息添加演化信息;
(3.3)在所提取的实体和实体关系基础上,将各节点要素作为网络节点,将两节点之间的边要素整合成为两节点之间的边,并依据软件复杂网络目标用元素的权重表示部分软件特征;
步骤4:构建组织层,具体是:在软件复杂网络的基础上,利用表示规则构建复杂网络的分析展示。
2.根据权利要求1所述的基于面向对象软件代码的软件复杂网络模型构建方法,其特征在于,所述的步骤2中,提取的基本实体包括类型结构、函数、变量和宏,基本实体的属性包括作用域、访问权限和实体定义段;提取的基本实体关系包括变量赋值变量、变量调用函数、变量指代函数、变量类型、函数使用变量、函数调用函数、函数重写关系、函数返回值类型、函数参数类型、函数异常类型抛出、类基于模板、类型继承、实体相互包含、以及宏类型定义;其中,函数使用变量分为两种,一种是函数使用变量作为“左值”的关系,一种是函数使用变量作为“右值”的关系;函数调用函数分为两种,一种是函数的顺序语句中调用其他函数的关系,一种是函数的条件或循环语句中调用其他函数的关系。
3.根据权利要求1所述的基于面向对象软件代码的软件复杂网络模型构建方法,其特征在于,所述的步骤2的数据化软件中,基本实体的定义包含名称、作用域、访问权限、文件位置、软件实体的接入关系与引出关系、以及软件实体演化信息;名称为主键且全局唯一;其中作用域、访问权限、文件位置和软件实体演化信息都为含有版本信息的集合;软件实体演化信息为基本实体的版本与内容摘要的数据对。
4.根据权利要求1或2或3所述的基于面向对象软件代码的软件复杂网络模型构建方法,其特征在于,所述的步骤2,包括:
扫描软件代码,根据基本实体类型,获得软件中所有的基本实体的集合,构成数据化软件的实体集合;
遍历所有的基本实体,根据实体的上下文,确定与该实体相关的实体,获得实体之间的关系集合,构成数据化软件的关系集合;
根据软件基本实体与实体关系的提取结果,形成基本实体、实体关系与软件代码的映射关系;
依据软件代码版本信息及版本信息间对比,为软件的基本实体与实体关系添加版本信息;
使用利于相关关系挖掘的数据形式记录软件信息提取过程结构,得到数字化软件;当软件存在不同版本时,将数字化软件的改动以版本为标识进行合并记录,使数据化软件具备软件的演化信息;数据化软件存储了可追溯到软件代码的基本实体和基本实体关系,以及基本实体和基本实体关系在不同版本间的增加、删除及修改信息。
5.根据权利要求1所述的基于面向对象软件代码的软件复杂网络模型构建方法,其特征在于,所述的步骤3中的组网规则,是指根据所构建软件复杂网络所要表达的软件特征,完成用于不同数字化软件的软件代码基本实体与软件复杂网络元素之间一对一或多对一的映射,同时完成软件代码单一版本及多个版本演化信息在网络节点及边中的体现,使软件复杂网络同时具备软件特征与网络特征。
6.根据权利要求1中所述的一种基于面向对象软件代码的软件复杂网络模型构建方法,其特征在于,所述步骤4中的表示规则,是指利用图形化方法直接反应出软件复杂网络的软件信息及网络信息,构建可重现的软件复杂网络呈现形式。
CN201710113704.3A 2016-03-01 2017-02-28 一种基于面向对象软件代码的软件复杂网络模型构建方法 Active CN106951365B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN201610116227 2016-03-01
CN2016101162271 2016-03-01

Publications (2)

Publication Number Publication Date
CN106951365A CN106951365A (zh) 2017-07-14
CN106951365B true CN106951365B (zh) 2020-04-03

Family

ID=59468065

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710113704.3A Active CN106951365B (zh) 2016-03-01 2017-02-28 一种基于面向对象软件代码的软件复杂网络模型构建方法

Country Status (1)

Country Link
CN (1) CN106951365B (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108255733B (zh) * 2018-01-30 2019-05-03 北京航空航天大学 一种基于复杂网络理论评估软件系统可靠性的方法
CN108491192A (zh) * 2018-04-01 2018-09-04 苏州汉能网络科技有限公司 一种用于软件的开发方法
CN108664728B (zh) * 2018-05-10 2021-05-25 北京航空航天大学 一种基于复杂网络动态仿真的软件模块变更影响确定方法
CN109492113B (zh) 2018-11-05 2022-05-13 扬州大学 一种面向软件缺陷知识的实体、关系联合抽取方法
CN116301735B (zh) * 2023-05-19 2023-07-21 华南理工大学 将软件要素组织为软件数据链路的方法、装置及存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104035773A (zh) * 2014-06-11 2014-09-10 清华大学 基于扩展调用图的软件系统结点重要度评价方法
CN105022689A (zh) * 2015-07-02 2015-11-04 北京理工大学 一种发现大型面向对象软件系统关键测试函数的方法
CN105068928A (zh) * 2015-08-04 2015-11-18 中国人民解放军理工大学 一种基于复杂网络理论的软件测试用例生成方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2808794A1 (en) * 2013-05-30 2014-12-03 Siemens Aktiengesellschaft Rearranging a server response

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104035773A (zh) * 2014-06-11 2014-09-10 清华大学 基于扩展调用图的软件系统结点重要度评价方法
CN105022689A (zh) * 2015-07-02 2015-11-04 北京理工大学 一种发现大型面向对象软件系统关键测试函数的方法
CN105068928A (zh) * 2015-08-04 2015-11-18 中国人民解放军理工大学 一种基于复杂网络理论的软件测试用例生成方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
复杂网络理论在软件系统设计中的应用研究;何明东;《中国优秀硕士学位论文全文数据库》;20111115(第11期);第9-50页 *

Also Published As

Publication number Publication date
CN106951365A (zh) 2017-07-14

Similar Documents

Publication Publication Date Title
CN106951365B (zh) 一种基于面向对象软件代码的软件复杂网络模型构建方法
Kamimura et al. Extracting candidates of microservices from monolithic application code
Telea et al. Code flows: Visualizing structural evolution of source code
Steimann Role= Interface: a merger of concepts
CN106649100A (zh) 一种自动化测试方法及系统
US20100057482A1 (en) Roundtrip merge of bpel processes and bpmn models
Van Den Brand et al. Generic tool for visualization of model differences
CN116340940A (zh) 代码识别方法、终端设备及存储介质
Tauscher et al. A modular graph transformation rule set for IFC‐to‐CityGML conversion
Buinevich et al. Method and algorithms of visual audit of program interaction.
CN110413793A (zh) 一种基于翻译模型的知识图谱实体特征挖掘方法
CN110162731B (zh) 一种IFC模型构件空间信息在Web显示的方法
ITTO20130133A1 (it) Metodo per la realizzazione di specificazioni di sistemi software, in particolare di tipo oltp-app, e relativo dispositivo
CN116401145A (zh) 一种源代码静态分析处理方法及装置
CN115934969A (zh) 一种不可移动文物风险评估知识图谱构建方法
CN105224693B (zh) 基于知识建模的空间信息处理方法
CN112199075B (zh) 一种基于微服务智能信息处理方法及框架系统
Kraft et al. Graph technology support for conceptual design in civil engineering
Eshkevari et al. JSDeodorant: Class-awareness for JavaScript programs
Garcés et al. Aiming towards modernization: visualization to assist structural understanding of oracle forms applications
CN118297148B (zh) 一种体系架构设计模型跨角度关联处理方法和系统
CN109635062A (zh) 一种城市级测绘地理信息标准体系融合构建方法
Fill et al. Integration of conceptual models and data services using metamodeling
Alanazi Software Analytics for Improving Program Comprehension
Gröner et al. Categorization and recognition of ontology refactoring pattern

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