CN108519881B - 一种基于多规则聚类的组件识别方法 - Google Patents

一种基于多规则聚类的组件识别方法 Download PDF

Info

Publication number
CN108519881B
CN108519881B CN201810221525.6A CN201810221525A CN108519881B CN 108519881 B CN108519881 B CN 108519881B CN 201810221525 A CN201810221525 A CN 201810221525A CN 108519881 B CN108519881 B CN 108519881B
Authority
CN
China
Prior art keywords
node
entity
dependency
entities
dependence
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
CN201810221525.6A
Other languages
English (en)
Other versions
CN108519881A (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.)
Southeast University
Original Assignee
Southeast 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 Southeast University filed Critical Southeast University
Priority to CN201810221525.6A priority Critical patent/CN108519881B/zh
Publication of CN108519881A publication Critical patent/CN108519881A/zh
Application granted granted Critical
Publication of CN108519881B publication Critical patent/CN108519881B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/23Clustering techniques
    • G06F18/232Non-hierarchical techniques
    • G06F18/2321Non-hierarchical techniques using statistics or function optimisation, e.g. modelling of probability density functions
    • G06F18/23213Non-hierarchical techniques using statistics or function optimisation, e.g. modelling of probability density functions with fixed number of clusters, e.g. K-means clustering

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Evolutionary Biology (AREA)
  • Evolutionary Computation (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Artificial Intelligence (AREA)
  • Probability & Statistics with Applications (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种基于多规则聚类的组件识别方法,通过对模块依赖图的分析,根据制定的规则,分别从依赖类型、依赖结构和依赖强度多个角度识别出组件,同时并分析组件间的依赖关系。同时本发明采用了中心‑层次混合聚类算法,对于聚合的判定基于一个度量标准D(a,b)。该值受到两个因素影响,分别是实体间的目录相似度,以及实体间的依赖强度,其中依赖强度又和依赖次数与依赖类型有关。在每次迭代后,围绕选取的聚类中心进行层次聚合,最后实现对目标系统由低层到高层的抽象。

Description

一种基于多规则聚类的组件识别方法
技术领域
本发明主要是基于多条组件规则进行聚合并执行聚类算法的组件识别方法,属于软件架构逆向工程中组件识别的技术领域。
背景技术
“组件识别方法”实际上属于“逆向工程”的研究和实践范畴,属于软件架构恢复中的信息提取部分,其主要目的是从工程项目中获取所需的架构信息,识别出架构的组成元素(elements),即组件元素、连接件元素、架构模式以及架构的配置信息等。
在架构恢复阶段,通常会根据系统的设计文档和源代码等低抽象层次的资源逐步识别出架构元素,这里主要是组件元素。研究人员提出了各种各样的组件识别技术,主要包括:
1)基于领域知识的方法(Domain knowledge):根据领域知识理解源码或架构设计,并识别出系统中的标准构件。基于领域知识的方法可以采用自顶向下的或者自底向上的过程。在自顶向下的方法中,通常从设计文档等文档性材料出发,整理出软件的组件。在自底向上的方法中,通常是从代码出发,运用领域知识,识别组件。此类方法需要大量人工参与,只适合于小型项目的组件识别。
2)基于聚类的方法(Clustering):自动化软件架构恢复技术中大部分方法都是采用聚类算法来进行,通过对实现级实体的聚类实现组件的提取。通常此类方法都是利用数学方法研究和处理给定事物的分类,按照某种准则将相似的样本尽可能的归为一类。早在1985年,D.H.Hutchens等就提出利用聚类算法来实现组件的识别。近年来,聚类算法得到了大量的关注,提出了一些能有效应用于组件识别的算法,如DSM,WCA,Bunch等。
3)基于机器学习的方法(Machine Learning):从源码中提取实体和特征之后,通过数据训练集对组件识别进行训练,从而识别组件。由于一般训练集都是已知架构的相关软件或者软件的既有版本,所以经过训练后可以提高架构恢复的精度,但训练集的获取比较困难。代表性方法如Sajnani H.提出的A Machine Learning Approach方法。
4)基于模式匹配的方法(Pattern Matching):基于一个交互环境,把识别过程建模为一个将高层模式图(从专家知识和设计文档得到的架构模式表示)与实体关系图(即源代码系统实体的表示形式)进行匹配的图模式匹配问题。这是一个半自动化的技术,需要人工的参与,而且图匹配也需要消耗大量的计算机资源和时间。
通过上面的调研可以发现,上述方法存在一些问题:
(1)自顶向下的过程必须基于相对完备的设计文档,对于经过多次演化的软件系统而言,通常很难具备这样的条件,因此很难单纯采用自顶向下的方法进行组件识别。
(2)绝大部分技术都需要或多或少的人工干预,并不完全支持自动化,实践性不高。只有基于聚类的方法能够实现准自动化或者自动化识别。
(3)完全自底向上的聚类方法其准确度和效率存在问题。聚类算法通常复杂度高,资源消耗大,精度对输入数据的依赖性强。
可以看出虽然聚类算法从理论上可以对软件进行模块划分,实现软件的组件识别,然而聚类分析的精度尚不够精确。如果能在以源码信息为主的情况下,综合考虑架构模式和领域知识等信息,应能适当减少依赖关系的复杂度,再结合聚类算法,可以实现高效且准确识别组件信息。
发明内容
本发明正是针对现有技术中存在的技术问题,提供一种基于多规则聚类的组件识别方法,该方法将对软件代码实现多层次组件识别,采取逐层深入的方式控制组件的颗粒度,帮助逆向工程逆向恢复到更高抽象层次上的系统模型。
为了实现上述目的,本发明的技术方案如下,本发明的基于多规则聚类的组件识别方法,其中分为两大部分,包括如下步骤:
模块化(组件规则化预处理)即是在文件依赖图的基础上,进行组件规则化处理,以提高组件化识别的效率和准确率;
聚类算法对于聚合的判定基于一个度量标准D(a,b)。该值受到三个因素影响,分别是实体集间的目录相似度、实体集间的依赖强度以及实体亲属之间的相似性,多角度识别模块的耦合程度。
具体步骤如下:
(一)模块化(组件规则化预处理):是在文件依赖图的基础上,进行组件规则化处理,以提高组件化识别的效率和准确率;
步骤1):遍历依赖图找到符合强依赖类型包括继承、实现、组合、定义与实现的实体集并聚合;
步骤2):寻找符合强依赖结构包括紧耦合、闭环依赖、开环依赖、循环依赖等的实体集并聚合,形成实体集,处理完毕得到的结果就是模块依赖图;
(二)聚类算法
中心-层次混合聚类算法,对于聚合的判定基于一个度量标准D(a,b)。该值受到三个因素影响,分别是实体间目录相似度、实体间的依赖强度以及实体亲属之间的相似性,多角度识别模块的耦合程度。同时采用了依赖频次公式来判断模块依赖的密集性。
步骤3):根据相似算法对2)得到的模块依赖图进行距离计算,如下公式用于描述两个实体或实体集之间的距离公式,D(a,b)值越大,距离越短;
D(a,b)=DirSim(a,b)*DependComab
其中,DirSim(a,b)表示实体集间的目录相似度,DependComab表示实体集a依赖实体集b的依赖强度;
步骤4):通过计算依赖频次来判断依赖密集的组件,相当于组件间不同元素间均有依赖关系,聚合这些具有较高的耦合度的组件;
步骤5):根据步骤2)得到的模块依赖图,根据出入边寻找K个聚类中心,进行排序,选出出入度总数前k的模块;
步骤6):根据3)计算的相互间距离,比较并找到距离聚类中心最近的模块,并预判聚合操作是否会引入新的耦合组件,以及对于新的组件进行规模预判;
步骤7):找到距离聚类中心最接近的两个模块执行聚合操作,并更新新节点信息,每次执行最多减少K个模块;
步骤8):重新计算新的模块与所有旧模块之间的距离,更新边信息,
步骤9):重复第5-8步,直到最后达到6-7(常见组件图的规模)为止。
作为本发明的一种改进,所述步骤2)中寻找符合强依赖结构,具体包括紧耦合、闭环依赖、开环依赖、循环依赖的实体集并聚合。
作为本发明的一种改进,所述步骤3)中的距离计算具体如下:
根据相似算法对步骤2)得到的模块依赖图进行距离计算,在本发明中,将借助实体依赖图来计算实体与实体之间的距离,然后借助实体距离来讨论聚类。距离与依赖关系成正比;距离越近,依赖关系越强;距离越远,依赖关系越弱。
具体的计算公式如下:
描述实体集X依赖实体集Y的依赖强度,其中numX表示实体集X内的实体(文件)
个数,DependFileij表示实体i对实体j的依赖强度;
Figure BDA0001600122280000031
描述实体或实体集间所在的目录相似度,|Dir(a)|表示路径层数,"∨"代表两个实体或实体集目录层数的交集,”∧”代表两个实体或实体集目录层数的并集,如果两个实体完全不属于一个目录,最小值取0.01;
Figure BDA0001600122280000041
依赖频次(DependencyFrequency)是指一个实体集中所有实体依赖另个实体集实体的总次数,若X和Y分别表示两个实体集,则实体集X依赖实体集Y的依赖频次表示为
DF(X,Y)=Num(Cx1,Cy1)+Num(Cx1,Cy2)…+Num(Cxm,Cyn);
其中M是实体集X内的实体数量,N是实体集Y内的实体数量;Num(Cxm,Cyn)表示Cxm依赖Cyn的次数,Cxm表示X实体集内第m个实体。
用于描述两个实体或实体集之间的距离公式,D(a,b)值越大,距离越短;
D(a,b)=DirSim(a,b)*DependComab
作为本发明的一种改进,所述步骤4)中密集依赖具体如下,依赖密集程度的判定是根据依赖频次,当依赖频次大于阈值时,认为相关实体属于依赖密集对,依赖频次(DependencyFrequency)是指一个实体集中所有实体依赖另个实体集实体的总次数。若X和Y分别表示两个实体集,则实体集X依赖实体集Y的依赖频次表示为
Figure BDA0001600122280000042
其中Fxi表示实体集X内的元素(一般是文件),Fyj表示实体集Y内的元素;Num(Fxi,Fyj)当Fxi依赖Fyj时为1,否则为0。
作为本发明的一种改进,所述步骤5)中混合聚类具体如下,
本发明最终选取了层次聚类算法作为本方案组件化的核心算法。但是两两聚合的层次聚类会带来衰减的层数过多,同时聚合过程逻辑意义并不明确,因此本方案引入了K-中心聚类算法,这样既避免了衰减的层数过多,同时可以围绕中心点(可以看作功能中心)聚类,所以最后聚类算法可以看作层次-中心混合聚类。
k中心聚类这部分主要工作是判断中心点,根据出入边总和进行排序,然后寻找K个聚类中心,K中心的判断标准:
1、出入边之和排在前K个;
2、出边不为零;
3、总规模不超过30%。
本发明与现有技术相比,主要有以下一些优点,本发明方法提通过利用规则和距离进行聚合从而识别组件,用于解决软件逆向工程中的组件识别问题;
(1)需要的信息较为简单,且易于获取。与一些现有的方法(自顶向下过程和混合式过程的方法),不需要用户提供设计文档仅仅需要用户提供程序源代码,大大降低了工具的使用难度。
(2)实现全自动化识别,可以适应大规模的系统分析,具有广泛的适用性。与一些现有的方法相比,不需要手动规定组件。
(3)支持不同层次之间的映射关系,本发明实现多层次的组件识别,产生不同粒度的抽象,可以较为准确地体现组件内部各个模块之间的层次情况。与现有的组件识别方法相比:简单的聚类方法生成的架构图粒度过细、缺乏层次,所以显得十分复杂,并不适合实现进一步的分析。
(4)大大提高识别算法的精度和效率,本发明充分考虑架构结构信息和强依赖类型,并结合架构知识和架构模式,制定了一些组件规则,预先聚合一部分强依赖类型和强依赖结构的模块。与一些现有的方法(单独聚类、模式识别等)对比,仅仅从一个方面识别组件,本发明使得组件识别更加精准更快。
附图说明
图1是本发明的流程示意图;
图2是模块化规则示意图,分别是紧耦合、闭环依赖、开环依赖、传递依赖示例;
图3是模块化技术流程图;
图4是聚类算法实现流程图;
图5是聚类过程中边的更新示例示意图;
图6是计算模块依赖距离的示例示意图;
图7是组件识别过程的示例示意图。
具体实施方式
为了加深对本发明的认识和理解,下面结合附图对发明的技术方案进行详细说明:
实施例:图1给出了所采用的方法中涉及到的操作流程,其中包括:1.文件依赖信息,通过分析软件源码构建抽象语法树的方式获取,是本方法中进行组件识别的输入信息;2.模块化,通过对依赖图的分析可以统计哪些模块需要被预先聚合,主要分为强依赖类型和强依赖结构;3.距离计算,将模块依赖图带入计算公式,可以算出任意两个模块之间的距离;4.聚类算法,其中包括中心聚类和层次聚类。
一种基于多规则聚类的组件识别方法,其中分为两大部分,包括如下步骤:
模块化,组件规则化预处理,即是在文件依赖图的基础上,进行组件规则化处理,以提高组件化识别的效率和准确率;聚类算法对于聚合的判定基于一个度量标准D(a,b)。该值受到三个因素影响,分别是实体集间的目录相似度、实体集间的依赖强度以及实体亲属之间的相似性,多角度识别模块的耦合程度。
(一)模块化,组件规则化预处理
经过基于代码文件和编译构建过程的架构信息提取,得到文件级依赖图。在这基础上,需要对文件依赖图进行模块化,通过一些预处理策略减少实体集的数量,以提高组件化聚类的效率和准确率。该部分的流程如附图3所示,分别识别强依赖类型和强依赖结构。
步骤1):遍历依赖图找到符合强依赖类型(包括继承、实现、组合、定义与实现)的实体集并聚合;
步骤2):寻找符合强依赖结构(包括紧耦合、闭环依赖、开环依赖、循环依赖等)的实体集并聚合,形成实体集,处理完毕得到的结果就是模块依赖图。
本发明中所使用具体的预处理策略主要分为两部分:
(1)强依赖类型:
继承关系(父类与子类)、实现关系(抽象与具体)、组合关系(整体与部分)、定义与声明关系(定义与声明变量)
(2)强依赖结构:如图2所示,分别展示了紧耦合、闭环依赖、开环依赖、循环依赖的示例。
紧耦合(双向依赖)、闭环依赖(循环依赖)
【开环依赖】:如果有一个路径,其起始节点和结束节点都被同一个域实体集(核心类)引用,那么可以从该路径中聚合出一个新的实体集;
【传递依赖】:如果有两个不同的路径具有相同的终端节点,并由同一个域实体集引用的起始节点,那么所有的两个路径的节点可以被抽象成一个新的实体集。
步骤3):距离计算;
根据相似算法对2)得到的模块依赖图进行距离计算。在本发明中,将借助实体依赖图来计算实体与实体之间的距离,然后借助实体距离来讨论聚类。距离与依赖关系成正比;距离越近,依赖关系越强;距离越远,依赖关系越弱。
具体的计算公式如下:
●描述实体集X依赖实体集Y的依赖强度,其中numX表示实体集X内的实体(文件)个数,DependFileij表示实体i对实体j的依赖强度。
Figure BDA0001600122280000071
●描述实体或实体集间所在的目录相似度,|Dir(a)|表示路径层数,"∨"代表两个实体或实体集目录层数的交集,”^”代表两个实体或实体集目录层数的并集,如果两个实体完全不属于一个目录,最小值取0.01。
Figure BDA0001600122280000072
●依赖频次(DependencyFrequency)是指一个实体集中所有实体依赖另个实体集实体的总次数。若X和Y分别表示两个实体集,则实体集X依赖实体集Y的依赖频次表示为
DF(X,Y)=Num(Cx1,Cy1)+Num(Cx1,Cy2)…+Num(Cxm,Cyn)
其中M是实体集X内的实体数量,N是实体集Y内的实体数量;Num(Cxm,Cyn)表示Cxm依赖Cyn的次数,Cxm表示X实体集内第m个实体。
●用于描述两个实体或实体集之间的距离公式,D(a,b)值越大,距离越短。
D(a,b)=DirSim(a,b)*DependComab
聚类算法
步骤4):密集依赖;
依赖密集程度的判定是根据依赖频次,当依赖频次大于阈值时,认为相关实体属于依赖密集对。依赖频次(DependencyFrequency)是指一个实体集中所有实体依赖另个实体集实体的总次数。若X和Y分别表示两个实体集,则实体集X依赖实体集Y的依赖频次表示为
Figure BDA0001600122280000081
其中Fxi表示实体集X内的元素(一般是文件),Fyj表示实体集Y内的元素;Num(Fxi,Fyj)当Fxi依赖Fyj时为1,否则为0。
步骤5)k中心聚类;
本发明最终选取了层次聚类算法作为本方案组件化的核心算法。但是两两聚合的层次聚类会带来衰减的层数过多,同时聚合过程逻辑意义并不明确,因此本方案引入了K-中心聚类算法,这样既避免了衰减的层数过多,同时可以围绕中心点(可以看作功能中心)聚类,所以最后聚类算法可以看作层次-中心混合聚类。
k中心聚类这部分主要工作是判断中心点,根据出入边总和进行排序,然后寻找K个聚类中心,。K中心的判断标准:
1、出入边之和排在前K个;
2、出边不为零;
3、总规模不超过30%;
步骤6)层次聚类;
层次聚类的合并算法通过计算两类数据点间的相似性(这里的距离已经在步骤3计算),对所有数据点中最为相似的两个数据点进行组合,并反复迭代这一过程。简单的说层次聚类的合并算法是通过计算每一个类别的数据点与所有数据点之间的距离来确定它们之间的相似性,距离越小,相似度越高。并将距离最近的两个数据点或类别进行组合,生成聚类树。层次聚类在实现过程中,模块依赖图会随着迭代更新的进行不断的减少图中节点和边的数量,节点代表模块,边代表依赖关系。
步骤7)节点的更新规则;
定义节点集合为nodesets,节点聚合的主要依据是节点间的最短距离,用i表示节点的标号,节点集合nodesets共有n个节点,i的取值是[0,n-1],节点i初始为0。
1)判断节点i是否为nodesets中最后一个节点,是则转到4),否则在nodesets里寻找距离节点i的最小的节点r,Min{d[i,r]},
Figure BDA0001600122280000082
2)若节点i与节点r聚集后规模过大,超过阈值,则取消聚合操作,并令i=i+1,转到1);否则执行下一步
3)将i节点和r节点聚合为一个父节点(簇),回到1)
4)退出。
步骤8)边的更新规则
在聚类的迭代过程中,边的更新是由节点的更新驱动的,如附图5中是一个边的更新的示例,反映了更新边与邻接表的过程。已知节点0和节点1聚为一个簇,边的粗细代表依赖强度,其中边Edge<1,3>的依赖强度添加到E<0’,3>中,最后删去了边Edge<1,3>。
下面给出边的更新的规则描述:已知要聚合节点r与节点s,
1)将r重命名为r’;
2)将节点s的出边叠加到节点r’的出边,将其他顶点中出边含有节点s的修改或添加成r’边;
3)若遇到节点r’与节点s出边指向同一节点i,则将边E<s,i>的依赖次数和依赖强度叠加到边E<r’,s>上。簇中内部节点之间的距离不作考虑;
4)在邻接表中删除节点s及其出边。
应用实施例:
为了方便描述,我们假定有如下简化的应用实例:
目标软件中有四个模块A、B、C、D等13个模块,如附图所示。根据前面提到的计算步骤,依次实施:
第一步,遍历模块图,寻找强依赖类型。可以发现被执行的模块中J-N之间的存在继承依赖,所以会优先把他们聚合。
第二步,再次遍历模块图,寻找强依赖结构。可以发现被执行的模块中A-C之间的存在紧耦合关系,同时模块B-D-F之间存在闭环依赖,所以这步将他们聚合。经过两步预处理得到的模块图如附图7-b所示。
第三步,计算模块间的依赖频次和距离,下面举例说明,如附图6。
首先计算模块间依赖频次。因为在前两步已经处理了环依赖,所以这里不存在相互依赖的情况,只需要直接计算。模块A/a内共有2个实体,与模块A里面的5个实体,产生了(1+2+3)次依赖,那么它们之间的依赖就是:(1+2+3)/(2*5)=0.6;同样可以算出其他模块之间的依赖频次。
DF(A,A/a)=(1+2+3)/(2*5)=0.6
DF(B/d,B/c)=(1+2+2)/(5*3)=0.333
DF(A,B/c)=(1+2+3)/(5*5)=0.2
通过上面计算可以发现,A与A/a之间的依赖比其他两组之间的依赖更加紧密。根据上面计算的依赖频次,选取超过0.5(超过一半的实体均发生依赖关系),将他们聚合。
然后计算模块之间的距离,这里以f(A,A/a)为例逐步计算:
1.A与A/a之间目录关系属于父子(包含)关系,共用一个父包(交集),共有2个不同包层次(并集),那么他们之间的目录相似度是
DirSim(A,A/a)=1/2=0.5
2.A与A/a之间的总的依赖强度是(1+1.5+1.2),那么平均依赖强度为
DependCom(A,A/a)=(1+1.2+1.5)/(5*2)=0.37
3.A与A/a之间的距离计算
D(A,A/a)=DirSim(A,A/a)*DependCom(A,A/a)=0.5*0.37=0.185
同样可以计算得出
D(B/d,B/c)=DirSim(B/d,B/c)*DependCom(B/d,B/c)=(1/3)*((0.4+0.6+1.5)/(5*3))=0.056
D(A,B/c)=DirSim(A,B/c)*DependCom(A,B/c)=(0.01)*((0.5+0.8+1)/(5*5))=0.00092
通过上面计算可以发现,A与A/a之间的依赖强度比其他两组之间的依赖更大。
第四步,分析依赖边的总数,并进行排序。其中符合中心节点的标准(详见上节),分别是A-C模块和J-N模块。
第五步,基于中心节点进行层次聚类,依据第三步计算的依赖强度。可以发现F距离A-C距离最近,所以将F与A-C聚合,以此类推,多次聚类,得到最后的组件图如附图7-c所示。
以上仅是本发明的优选实施方式,应当指出:对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和等同替换,这些对本发明权利要求进行改进和等同替换后的技术方案,均落入本发明的保护范围。

Claims (7)

1.一种基于多规则聚类的组件识别方法,其特征在于,所述方法包括如下步骤:
步骤1):遍历依赖图找到符合强依赖类型,包括继承、实现、组合、定义与实现的实体集并聚合;
步骤2):寻找符合强依赖结构的实体集并聚合,形成实体集,处理完毕得到的结果就是模块依赖图;
步骤3):根据相似算法对步骤2)得到的模块依赖图进行距离计算,如下公式用于描述两个实体或实体集之间的距离公式,D(a,b)值越大,距离越短;
D(a,b)=DirSim(a,b)*DependComab
其中,DirSim(a,b)表示实体集间的目录相似度,DependComab表示实体集a依赖实体集b的依赖强度;
步骤4):通过计算依赖频次来判断依赖密集的组件,聚合这些具有耦合度组件;
步骤5):根据步骤2)得到的模块依赖图,根据出入边寻找K个聚类中心,进行排序,选出出入度总数前k的模块;
步骤6):根据步骤3)计算的相互间距离,比较并找到距离聚类中心最近的模块,并预判聚合操作是否会引入新的耦合组件,以及对于新的组件进行规模预判;
步骤7):找到距离聚类中心最接近的两个模块执行聚合操作,并更新新节点信息,每次执行最多减少K个模块;
步骤8):重新计算新的模块与所有旧模块之间的距离,更新边信息,
步骤9):重复步骤5)—步骤8),直到最后达到步骤6)、步骤7)为止。
2.根据权利要求1所述的一种基于多规则聚类的组件识别方法,其特征在于,所述步骤2)中寻找符合强依赖结构,具体包括紧耦合、闭环依赖、开环依赖、循环依赖的实体集并聚合。
3.根据权利要求1所述的一种基于多规则聚类的组件识别方法,其特征在于,所述步骤3)中的距离计算具体如下:根据相似算法对步骤2)得到的模块依赖图进行距离计算,具体的计算公式如下:
描述实体集X依赖实体集Y的依赖强度,其中numX表示实体集X内的实体个数,numY表示实体集Y内的实体个数,DependFileij表示实体i对实体j的依赖强度;
Figure FDA0003042241240000021
描述实体或实体集间所在的目录相似度,
a、b分别代表两个实体或实体集,|Dir(a)|、|Dir(b)|分别表示a和b所在的目录路径层数,"∨"代表两个实体或实体集目录层数的并集,”∧”代表两个实体或实体集目录层数的交集,如果两个实体完全不属于一个目录,最小值取0.01;
Figure FDA0003042241240000022
依赖频次(DependencyFrequency)是指一个实体集中所有实体依赖另个实体集实体的总次数,若X和Y分别表示两个实体集,则实体集X依赖实体集Y的依赖频次表示为
DF(X,Y)=Num(Cx1,Cy1)+Num(Cx2,Cy2)…+Num(Cxm,Cyn);
其中m是实体集X内的实体数量,n是实体集Y内的实体数量;Num(Cxm,Cyn)表示Cxm依赖Cyn的次数,Cxm表示X实体集内第m个实体;
Cyn表示Y实体集内第n个实体;
用于描述两个实体或实体集之间的距离公式,D(a,b)值越大,距离越短;
D(a,b)=DirSim(a,b)*DependComab
4.根据权利要求1所述的一种基于多规则聚类的组件识别方法,其特征在于,步骤4)中密集依赖具体如下,依赖密集程度的判定是根据依赖频次,当依赖频次大于阈值时,认为相关实体属于依赖密集对,依赖频次(DependencyFrequency)是指一个实体集中所有实体依赖另个实体集实体的总次数,若X和Y分别表示两个实体集,则实体集X依赖实体集Y的依赖频次表示为
Figure FDA0003042241240000031
其中Fxi表示实体集X内的元素,一般是文件,Fyj表示实体集Y内的元素;Num(Fxi,Fyj)当Fxi依赖Fyj时为1,否则为0。
5.根据权利要求1所述的一种基于多规则聚类的组件识别方法,其特征在于,所述步骤5)中K个聚类中心具体如下,
K个聚类中心是判断中心点,根据出入边总和进行排序,然后寻找K个聚类中心,K中心的判断标准:
1、出入边之和排在前K个;
2、出边不为零;
3、总规模不超过30%。
6.根据权利要求1所述的一种基于多规则聚类的组件识别方法,其特征在于,所述步骤7)中更新新节点信息具体如下,
定义节点集合为nodesets,节点聚合的主要依据是节点间的最短距离,用i表示节点的标号,节点集合nodesets共有n个节点,i的取值是[0,n-1],节点i初始为0;
71)判断节点i是否为nodesets中最后一个节点,是则转到74),否则在nodesets里寻找距离节点i的最小的节点r,Min{d[i,r]},r∈nodesets;
72)若节点i与节点r聚集后规模过大,超过阈值,则取消聚合操作,并令i=i+1,转到71);否则执行下一步;
73)将i节点和r节点聚合为一个父节点簇,回到71);
74)退出。
7.根据权利要求1所述的一种基于多规则聚类的组件识别方法,其特征在于,所述步骤8)中更新边的信息,具体如下,
已知要聚合节点r与节点s,
81)将r重命名为r’;
82)将节点s的出边叠加到节点r’的出边,将其他顶点中出边含有节点s的修改或添加成r’边;
83)若遇到节点r’与节点s出边指向同一节点i,则将边E<s,i>的依赖次数和依赖强度叠加到边E<r’,s>上;
84)在邻接表中删除节点s及其出边。
CN201810221525.6A 2018-03-17 2018-03-17 一种基于多规则聚类的组件识别方法 Active CN108519881B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810221525.6A CN108519881B (zh) 2018-03-17 2018-03-17 一种基于多规则聚类的组件识别方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810221525.6A CN108519881B (zh) 2018-03-17 2018-03-17 一种基于多规则聚类的组件识别方法

Publications (2)

Publication Number Publication Date
CN108519881A CN108519881A (zh) 2018-09-11
CN108519881B true CN108519881B (zh) 2021-06-11

Family

ID=63433219

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810221525.6A Active CN108519881B (zh) 2018-03-17 2018-03-17 一种基于多规则聚类的组件识别方法

Country Status (1)

Country Link
CN (1) CN108519881B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113222388A (zh) * 2021-04-30 2021-08-06 中核武汉核电运行技术股份有限公司 一种微服务评价方法及装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102024203A (zh) * 2010-12-02 2011-04-20 北京航空航天大学 一种用于产品可靠性维修性保障性与性能一体化流程构建的模板转换方法
CN105701596A (zh) * 2015-12-24 2016-06-22 国家电网公司 一种基于大数据技术的配网抢修精益化方法以及管理系统
CN107748944A (zh) * 2017-08-14 2018-03-02 国网浙江省电力公司经济技术研究院 一种售电侧放开环境下用户侧需求响应方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10511695B2 (en) * 2015-06-23 2019-12-17 Georgia Tech Research Corporation Packet-level clustering for memory-assisted compression of network traffic

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102024203A (zh) * 2010-12-02 2011-04-20 北京航空航天大学 一种用于产品可靠性维修性保障性与性能一体化流程构建的模板转换方法
CN105701596A (zh) * 2015-12-24 2016-06-22 国家电网公司 一种基于大数据技术的配网抢修精益化方法以及管理系统
CN107748944A (zh) * 2017-08-14 2018-03-02 国网浙江省电力公司经济技术研究院 一种售电侧放开环境下用户侧需求响应方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
"Comparing Software Architecture Recovery Techniques Using Accurate Dependencies";Thibaud Lutellier;《IEEE Computer Society》;20150520;全文 *

Also Published As

Publication number Publication date
CN108519881A (zh) 2018-09-11

Similar Documents

Publication Publication Date Title
Chang et al. Data: Differentiable architecture approximation
Nikitin et al. Automated evolutionary approach for the design of composite machine learning pipelines
Magnusson et al. A batch algorithm using iterative application of the Viterbi algorithm to track cells and construct cell lineages
CN111597217B (zh) 基于模糊对象语言概念格的个性化推荐方法
Srinivas et al. Clustering and classification of software component for efficient component retrieval and building component reuse libraries
Bendkowski et al. Polynomial tuning of multiparametric combinatorial samplers
CN108229578B (zh) 基于数据、信息和知识三层图谱架构的图像数据目标识别方法
Fischer et al. Graph based molecular data mining-an overview
Xu et al. Protein complexes identification based on go attributed network embedding
CN107291765A (zh) 基于dc规划处理缺失数据的聚类方法
Bharill et al. Fuzzy based clustering algorithms to handle big data with implementation on Apache Spark
CN103226728A (zh) 高密度聚乙烯串级聚合反应过程智能检测与收率优化方法
CN102799960B (zh) 面向数据模型的并行业务流程异常检测方法
CN108519881B (zh) 一种基于多规则聚类的组件识别方法
Rao et al. A rough–fuzzy approach for retrieval of candidate components for software reuse
Wang et al. Optimal selection method of process patents for technology transfer using fuzzy linguistic computing
CN113470738B (zh) 基于模糊聚类和基因本体语义相似性的可重叠蛋白质复合物识别方法和系统
CN115204179A (zh) 基于电网公共数据模型的实体关系预测的方法及装置
Statt et al. DBgen: A python library for defining scalable, maintainable, accessible, reconfigurable, transparent (SMART) data pipelines
Gupta et al. Fuzzy rough set-based feature selection for text categorization
Fang et al. On aligning tuples for regression
Wang et al. Dynamic knowledge update using three-way decisions in dominance-based rough sets approach while the object set varies
Wang et al. Towards systematic parallel programming of graph problems via tree decomposition and tree parallelism
Dhandapani Design and implementation of scalable hierarchical density based clustering
Li et al. An evolutionary adaptive clustering algorithm

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