• 论文笔记:An Approach of Extracting God Class Exploiting Both Structural and Semantic Similarity(ENASE 2019)


    研究动机

    God class是一个常见代码气味,它的意思的一个类中承担了太多的责任,它会使整体代码的耦合性增加,内聚性下降。下图就是一个god class的代表。

    本文利用增加内聚性的方法,将一个God class提取到新类中。主要是根据对方法在类中的结构关系和语义关系进行分析,并将强相关的方法聚集在一起,建议它们位于同一个类中。实验结果表明,重构后类之间的内聚性得到了增强。

    模型

    模型的方法分为两个步骤

    • 根据结构相似度和语义相似度,构造方法相似矩阵
    • 利用层次聚类生成簇

    计算相似矩阵

    有三个度量方法来计算方法之间的结构相似性

    Structural Similarity between Methods

    SSM是方法之间的结构相似性,它考虑了方法之间的内聚和传递性内聚的一种度量。对于方法$m_i$和方法$m_j$之间的计算方法如下:

    其中$V_i$和$V_j$分别表示方法$m_i$和方法$m_j$表示的实体变量。SSM值越高,说明两个方法可能在同一个类中。

    Call based Dependence between Methods

    CDM也是方法之间的结构相似性,它通过方法调用来计算两个方法之间的关系。对于方法$m_i$和方法$m_j$之间的计算方法如下:

    其中$calls(m_i,m_j)$表示方法$m_j$被方法$m_i$调用的次数,$calls_(in)(m_j)$是方法$m_j$的调用总数。最终方法$m_i$和方法$m_j$的CDM为

    Conceptual Similarity between Methods

    CSM是类中每个方法的概念内聚度量。它度量两个方法在语义上的关联程度。在类中的每一个方法首先由Latent Semantic Indexing (LSI)构造的语义空间中的向量表示。然后计算$m_i$和$m_j$两种方法的向量表示$v_i$和$v_j$的余弦相似度,如下所示

    其中$||v_i||$代表向量$v_i$的欧几里德范数。在这篇文章中,作者使用LDA主题模型来表示在向量空间中的每一种方法的主题分布,去掉停止词,空格,下划线等信息,放入LDA模型中,形成两个矩阵:topic-word矩阵和document-topic矩阵。将document-topic矩阵的每一行作为该方法的主题分布,然后将向量放入上面的公式计算方法之间的相似度。 

    最终,两个方法在同一个类的可能性由下式表示。

    下图就是三个相似度矩阵

    层次聚类

     根据生成的相似度矩阵,进行层次聚类

    实验

    作者选取了2个开源数据集,并用两个内聚度量来评估方法的性能,分别为LCOM(Lack of Cohesion of Methods)和C3(Conceptual Cohesion of Classes),通过我们的方法,对重构前后15个God class的LCOM和C3指标进行了分析,从表中可以看到,对于所有类,本文的方法进行重构之后,内聚性都得到了改进。同时比较了一个文献中的方法,仍然取得了较好的效果。

  • 相关阅读:
    delphi string.split 按照任意字符串分割语句
    学习 TTreeView [16]
    学习 TTreeView [15]
    delphi TClientDatset资料
    delphi7 clientdataset 详解
    为TMenuItem增加指针Data属性
    构建一个用于产品介绍的WEB应用
    图片延迟加载技术-Lazyload的应用
    你想不到的压缩方法:将javascript文件压缩成PNG图像存储
    如何更快速加载你的JS页面
  • 原文地址:https://www.cnblogs.com/simplekinght/p/11285260.html
Copyright © 2020-2023  润新知