没有合适的资源?快使用搜索试试~ 我知道了~
--理论计算机科学电子笔记233(2009)43-57www.elsevier.com/locate/entcs软件系统可维护性演化P. Antonellisa D.安东尼 Y.卡内洛普洛斯湾 C. 马克里斯aE.狄奥多罗拉 C. Tjortjisb N. 齐拉基斯a一adonel,antonid,makri,theodori,ceid.upatras.gr希腊帕特雷大学计算机工程与信息学系bYiannis. postgrad.manchester.ac.uk,christian.tjortjis@ manchester.ac.uk英国曼彻斯特大学计算机科学学院摘要本文介绍了正在进行的工作,使用数据挖掘聚类,以支持评估软件系统的可维护性。作为我们分析的输入,我们采用从Java源代码中提取的软件测量数据。我们提出了一个两步的聚类过程,便于评估系统的可维护性在第一,随后在集群分析,以研究每个集群的演变该过程在Apache Geronimo上进行评估,这是一个J2EE 1.4开放源码应用程序服务器。评估包括分析该软件系统的几个版本,以评估其随时间的演变和可维护性。本文最后提出了今后工作的方向。保留字:评估,软件,可维护性,数据挖掘1引言软件维护被认为是软件生命周期中最困难的阶段根据美国国家标准与技术研究所(NIST)的数据,它每年花费美国经济600亿美元[24]。鉴于这种高成本,维护过程可以被视为具有竞争优势的领域有几项研究用于评估系统的可维护性和控制执行维护活动所需的这项工作的范围是为了方便维护工程师理解一个软件系统,并评估其演变和可维护性。可以回答的问题是,哪些类容易出错,更难理解和维护;系统如何从一个版本发展到另一个版本,一个系统为此,我们提出了一种方法,采用聚类挖掘技术的软件度量数据的分析。k吸引子算法1571-0661/© 2009由Elsevier B. V.出版,CC BY-NC-ND许可下开放获取。doi:10.1016/j.entcs.2009.02.06044P. Antonellis等人/理论计算机科学电子笔记233(2009)43为此目的,使用了为软件测量数据量身定制的RITHM [17]。拟议的方法包括两个步骤。首先,对软件系统的每个版本进行单独分析,以评估其可维护性。第二步包括宏聚类分析,其调查来自软件系统的所有版本的导出的聚类。 这一步的目的是研究通过观察每个版本的集群如何增长或收缩以及它们的质心如何在空间中从一个版本移动到另一个版本来观察系统的演化。 我们试图为了评估我们使用ApacheGeronimo Application Server所做工作的有用性, 这是一个用于实际工业应用的开源服务器。本文件的其余部分安排如下。第2节回顾了现有的工作,在该地区的数据挖掘程序的理解和评估。第3节概述了整个过程的步骤以及每个步骤的基本原理。第4节评估了所提出的方法的输出的准确性,分析了其结果,并概述了其应用中的推论。最后,第5节提出了2相关工作数据挖掘[18],是从数据中提取隐含的,以前未知的和潜在有用的信息的过程,通过搜索大量的模式,并采用分类,关联规则挖掘和聚类等技术。这是一个相当复杂的课题,与计算机科学、统计学、信息检索、机器学习和模式识别等多个核心领域都有联系。它处理大量数据的能力被认为是辅助软件维护的合适解决方案,通常会产生显着的结果[9],[18],[19],[22]和[29]。正如以前的研究表明,数据挖掘是能够获得有用的知识,大型系统的结构。更具体地说,数据挖掘以前曾用于基于关联的子系统识别(ISA方法)[11]。Sartipi等人将其用于建筑设计恢复[27]。他们提出了一个基于系统组件之间的关联的系统架构设计评估模型,并使用系统模块化度量作为设计质量的指标,分解为子系统。除关联规则外,聚类数据挖掘技术已用于支持软件维护和软件系统知识发现[30],[26]。[26]中的工作提出了一种根据Java代码元素的相似性将它们分组在一起的方法,并关注于实现高层次的系统理解。通过挖掘C和COBOL遗留系统源代码,在函数、段落甚至代码行级别理解低/中级概念和组件之间的关系在[25]中得到了解决。对于C程序,函数被用作实体,属性根据参数和变量的使用和类型以及返回值的类型来定义。然后应用聚类来识别源代码的子集,这些子集根据定制的相似性度量分组在一起[25]。一种动态聚类评价方法P. Antonellis等人/理论计算机科学电子笔记233(2009)4345相关文献见[31]。该解决方案的范围是评估提供动态依赖关系作为软件集群租赁的输入的有用性。此外,模块依赖图(MDG)[20]上的聚类使用了一系列算法,这些算法有助于从其源代码中自动恢复软件系统的模块结构。该方法基于源代码中可以检测到的组件和组件之间的关系,将此外,[19]提出了一种方法,可以检查存储在源代码控制存储库中的代码的演变。这种技术识别变更集群,可以帮助管理人员将不同的代码变更活动分类为维护或新开发。另一方面,[29]分析了源代码实体之间的一些变化耦合是否很重要,或者只有微小的文本调整被检入;以反映源代码实体的变化。开发了一种基于代码修订的变更类型分析和分类方法。此外,Beyer和Noack [13]提出了一种基于软件工件聚类的方法,以便将软件系统组织成子系统,并通过这种方式使更改成本更低,更不易出错。为了通过创建软件系统结构的抽象来理解大型软件系统,Mitchell和Mancorn [16]提出了Bunch聚类系统。在这项工作中,聚类是通过搜索技术来实现的,并在表示系统结构的图上执行。子系统是通过划分实体和关系图来生成的。另一种在软件集群上下文中的方法是Limbo算法,由Tzerpos和Andritsos [8]引入。这种可扩展的分层算法的重点是最大限度地减少信息的损失时,聚类系统,通过应用加权方案,每个组件的重要性聚类算法也被Mancorn等人使用。[21]为了支持从其源代码中自动恢复软件系统的模块化结构。在这种情况下选择的算法是传统的爬山和遗传算法。为了理解程序,关键的一步是检测系统的重要类,因为它们实现了最基本和最高级的操作。Zaidman等人[32]介绍了四种静态Web挖掘和耦合度量,以识别此类类并通常分析软件系统。本文的工作与上述文献不同,通过对软件度量数据进行聚类,旨在对软件系统进行组合,并评估其可维护性。更具体地说,我们不是在图上或直接在源代码上应用聚类算法,而是在反映软件系统质量和可维护性的最重要设计方面的指标上使用k-吸引子聚类算法。我们采用了两步聚类分析,以提供一个快速和粗略的把握软件系统,并描绘其从版本到版本的演变46P. Antonellis等人/理论计算机科学电子笔记233(2009)43Σm(i)=ij=1PJ3聚类分析3.1目标建议的聚类方法的主要目标是提供一个通用的,但一个软件系统,可能导致工程师有用的结论,其可维护性启发性的看法。 这种数据挖掘技术对相似性/不相似性分析很有用;换句话说,它分析给定数据集中哪些数据点彼此接近。通过这种方式,根据它们的相似性创建了互斥的类组,因此促进了系统的理解和评估。因此,维护工程师提供了一个系统的发展全景,这有助于他们修改系统的可维护性,研究类的行为从版本到版本,发现编程模式和“不寻常”或离群的情况下,可能需要进一步关注。为了通过聚类分析为维护工程师提取有用的信息,观察每个聚类随时间的变化是非常有趣的。 每个集群如何增长或缩小以及其中位数如何移动在太空 为了实现这一点,要执行的第一项任务是识别每个版本中的每个集群。 一种方法是将所有数据集(对应于类的数据点)到大数据集中。 每一个点都被标记了 如果我们在这个数据集中应用聚类算法(在我们的例子中是k吸引子),我们可以假设 簇将包含通过版本的相同簇的数据项。在这些集群中的每一个将存在具有不同颜色的相同数据项,因此来自不同版本。我们可以通过发明一个内部度量来验证这一点:集群中存在的具有所有可能颜色的数据点的百分比(或它们各自的百分比,例如5个版本中的3个)。 那里有几种方法可以通过自动化的方法来利用这种集群:我们可以跟踪已经逃离集群的数据项,并检查它们是否已经去了一个更好的或者更差的聚类,通过检查每个聚类中的子聚类,每个子聚类具有不同的颜色,以及它们的质心如何移动以及它们的空间重叠部分。通过这些全景观测,质心的顺序和重叠的比例,我们可以看到相应的集群的数据项的发展更好或更差的状态。为了量化聚类的变化,我们定义了每个聚类i的度量m(i),它表示在同一时间同一聚类中存在多少变化,数据项(从版本到版本),因此在相同的质量空间中。此度量由以下公式表示巴恩Jj=1ocj(x)其中n是形成的聚类的数量,occ(xi)是每个数据项x在聚类i中出现的次数,pi是聚类i的基数(种群)P. Antonellis等人/理论计算机科学电子笔记233(2009)43473.2k-吸引子算法为此,采用了k-吸引子算法,该算法专为源代码中的测量等数值数据量身定制[17]。k吸引子的主要特征是:• 它定义了所需的集群数量(即k的数量),无需用户干预。• 该算法能够精确地定位聚类中心的初始吸引子• 它基于一个复合度量来度量相似性,该度量结合了汉明距离和事务与聚类吸引子的内积k-Attractor算法采用最大频繁项集发现和划分,以定义所需聚类的数量和这些聚类中心的初始吸引子。 直觉是频繁项集在软件度量的情况下,度量是在软件系统类的最小部分中一起出现的一组度量。具有相似度量的类应该在同一个集群上。术语吸引子被用来代替质心,因为它不是随机确定的,而是由它在软件系统类的整个群体中的频率决定的。k-Attractor的主要特点是它提出了一种适合于初始吸引子确定方式的相似性度量通过预处理方法。因此,它主要是基于频繁项集的比较。更具体地说,基于汉明距离和每个事务与吸引子之间的点(内积)的复合度量每个集群都被使用。k-Attractor算法的两个基本步骤是:• 第二阶段:- 这个阶段的第一步是使用Apriori算法生成频繁项集。该算法利用频繁项集构造项集图,通过图划分算法确定所需聚类的个数,并将每个频繁项集分配到相应的聚类中。- 一旦确定了所需的聚类数(k),我们就选择每个聚类的最大频繁项集,形成k个频繁项集的集合 作为初始吸引子。• 主要阶段:- 一旦找到吸引子,我们就将每个事务分配给具有最小吸引子得分(Ci←tj)的集群。- 当所有的事务都被分配到集群时,我们以与初始化阶段相同的方式重新计算每个集群k-Attractor算法利用基于数据项和聚类吸引子的向量表示的混合相似性度量。的相似性使用以下复合度量来测量这些向量的值分数(C i← t j)= h <$H(a i,t j)+i <$(a1<$t1+. n n n48P. Antonellis等人/理论计算机科学电子笔记233(2009)43Fig. 1. k吸引子输入参数图二. k-Attractor概述在这个公式中,第一项是吸引子和数据项之间的汉明距离。它由一对不同的字符串的位置数给出,定义如下:H(ai,tj)=n−#(ai<$tj)由于该算法主要基于项集的相似性,因此我们希望测量将一个项集变为另一个项第二项是这个数据项和吸引子之间的点(内积)。它用于补偿两个向量在欧几里得空间中的位置。由于软件度量数据的语义,通常使用的内部度量(如代码行,对象之间的耦合,注释数量等)具有较大的正整数值。因此,为了使内积距离更准确,我们首先将区间[-1,1]中的所有值归一化,然后应用k吸引子算法。等式(2)中的乘数分别定义了度量对汉明距离和内积的灵敏度。例如,该情况指示复合度量对数据项和聚类的质心之间的内积不敏感。和i都被作为我们算法的输入参数,P. Antonellis等人/理论计算机科学电子笔记233(2009)4349图3.第三章。类和代码行中的Apache Geronimo大小执行.因此,k吸引子提供了将复合距离度量的灵敏度改变为汉明距离和内积的灵活性,与每个聚类场景的语义相4成果评估对所提出的方法的评估涉及对ApacheGeron-imo应用服务器的研究。它是一个完全认证的J2EE 1.4平台,用于开发和部署企业Java应用程序,Web应用程序和门户。Apache Geronimo的三个公开版本[33]使用一组软件评估指标进行评估,并使用k-Attractor聚类算法进行分析。图3显示了它的大小,以类和代码行为单位进行度量。4.1数据提取和准备数据提取和准备的目的有两个:• 首先,收集描述软件体系结构及其特征的适当元素。这些元素包括本机源代码属性和指标。• 然后分析收集的元素,选择其中的一个细化子集,并将其存储在关系数据库系统中以供进一步分析。原生属性包括类,方法,字段等,另一方面,提供额外的系统信息,并更有效地描述系统所有收集的数据(即属性和指标)都存储在适当的结构化XML文件中。 我们之所以选择XML,是因为它具有互操作性,并且被广泛接受为数据表示和交换的事实标准。将指标存储在XML文件中可以使用各种工具进行进一步的处理和分析。每个XML文件的基本单位是Java源程序。每个Java源程序都与一个Java类文件相关联,并且可以包括一个包声明(package-decl),一个导入模块列表(import),一个接口列表(interface)和一个类列表(class)。对于每个这样的子单元,XML文件存储详细信息。例如,对于每个类,我们存储它的超类,它的成员字段列表(field),它的方法列表(methods)和它的构造函数列表(constructor),最后是相关的度量。为了简单起见,我们选择分析最重要的收集元素的细化子集。这个子集应该足够小,以便易于分析,并足够大,以包含所有必要的系统信息。基于此50P. Antonellis等人/理论计算机科学电子笔记233(2009)43需求,我们只存储和进一步分析指标及其相关的原生属性。4.2实验数据集对于我们的实验,我们结合了大小度量(即代码行数)和[14]和[12]提出的两组度量。导出的集合可以应用于OO程序,并且可以用作系统维护任务的预测器和评估器包括以下指标,并为系统的类进行计算• 代码行数(Lines of Code,简写为BLOG),用于度量一个类• Weighted Methods per Class(WMC),它只是其方法复杂度的总和[14]。• 对象之间的耦合-电子耦合(CBO),表示给定类的类数,耦合到[14]。• 方法缺乏内聚(LCOM),衡量一个类是否让所有的方法一起工作,以实现一个单一的、定义明确的目的。• 儿童数量(NOC),衡量班级直系后代的数量[14]。• 继承树深度(DIT),它为每个类提供了从对象层次结构顶部开始的继承级别的度量[14]。• 数据访问度量(DAM),它反映了封装属性应用于类的程度。• 聚合度量(MOA),它测量通过使用属性实现的部分-整体关系的程度[12]。• 多态方法数(NOP)是面向对象软件系统的覆盖(或虚拟)方法的度量[12]。• 消息数(NOM),这是一个类提供的服务的度量[12]。4.3k-吸引子调谐我们利用k-Attractor为每个版本的Apache Geronimo形成6个集群。所用的输入参数如图8所示。 我们选择在所有三个聚类操作中使用相同的参数,以便形成的聚类在所有版本中保持一致此外,我们选择给予更多的权重,以内积有关的汉明距离,因为不同的值的每个模块的度量,导致在一个高的汉明距离为大多数数据项。因此,我们设i=3,h=1。Apriori算法的支持度设置为0.1,因为我们只想考虑原始数据集中频率至少为10%的最后,初始吸引子的数量k被设置为6,因为我们希望每个吸引子形成6个集群P. Antonellis等人/理论计算机科学电子笔记233(2009)4351见图4。 k-吸引子输入值图五. 簇基数Apache Geronimo应用服务器版本4.4Geronimo应用服务器评估我们利用k吸引子与先前描述的输入参数,为每个版本的Apache Geronimo应用服务器形成6个集群。图5显示了每个形成的集群的基数Apache Geronimo形成的集群的主要特征• 集群1、2和3在每个版本中具有最大的种群(超过整个种群的70%),并且包含其测量值较低的类,因此更容易理解和维护它们。这些集群可以被标记为• 集群4和集群5包含的类的值增加了,这表明它们需要进一步检查和分类,以便在Apache Geronimo的未来版本中保持维护。我们可以将这些集群描述为“欠平衡”。• 聚类6具有最低的群体,并且它包含表现出异常测量值的类。这些类被认为是Apache Geronimo的异常值。包含它们的集群可以被标记为图6显示了ApacheGeronimoApplicationServer的所有三个版本中不同集群之间的复杂性分布(WMC)。由于空间限制,我们不包括直方图的其余利用指标。在下面的部分中,我们简要描述了每个集群的特殊特征,这些特征是通过观察Geronimo的3个版本中这些集群52P. Antonellis等人/理论计算机科学电子笔记233(2009)43图第六章通过不同版本形成的集群的复杂性4.4.1对第1、2和3组(“良好组”)的分析集群1、2和3在Apache Geronimo的可维护性评估中被认为是在1.1.0版中,集群1、2和3的类 例如在图6中, 很明显,对于版本,复杂度分布更接近于0(在X轴上)1.1.0比其他版本。另一个观察结果是,1.1.1版本中的所有这些聚类都开始远离0(在X轴上),这表明, 这些课程变得不那么重要了4.4.2对第4组和第5组的分析(集群4和集群5包含的类的值表明它们需要进一步关注和检查,以保持维护。从版本1.0.0到版本1.1.0,簇4和簇5的类变得越来越不重要,因为关于它们的复杂性,耦合性和缺乏内聚性的度量增加了。同样的行为(低可维护性)也适用于1.1.1版本。例如,如果我们考虑集群4和集群5的图,我们观察到,在版本4与版本相比,1.0.0的复杂度分布更接近于0(在X轴上)1.1.0和版本1.1.1。4.4.3第6类分析(离群值-聚类6包含在其测量中表现出异常值的那些类。因此,这些类是最难理解和维护的,可能需要重构来改进它们的设计。如果我们看一下图6,很明显,在Geronimo的所有3个版本中,聚类6的复杂度的值远离0(在X轴上),因此指示对应类的低可维护性。一个很好的例子是类CdrOutputStreamP. Antonellis等人/理论计算机科学电子笔记233(2009)4353图第七章群集1、2、3至版本(红色=v 1.0,绿色=v 1.1,蓝色=v 1.1.1)和CdrInputStream,用于以Corba公共数据表示格式流式传输对象。这些类在应用程序服务器中使用得相当广泛,尤其是用于序列化非原始数据结构,因此具有高复杂度值。维护工程师应该会对它们感兴趣,因为它们是Geronimo的核心并且被广泛使用,所以对于可维护性和运行时性能来说,它们将是重要的类。从维护工程师的角度来看,KernelManagementHelper和MockGBean类也很有趣4.4.4第一千一百零八章班级所执行的聚类分析还为我们提供了跟踪那些在1.0版本中分配的聚类中移动的类的能力,并检查它们在后续版本中是否更好或更差。一个很好的例子RFC=101,CBO= 23,MOA=56和WMC= 56),但在以下版本中移至群集3(RFC =91,NPM=10,DIT=0,NOC=0,NOM=27,LCOM= 45,RFC=27,CBO= 16,MOA=0和WMC= 21)和群集2(RFC =91,NPM=10,DIT=0,NOC=0,NOM=0,LCOM= 45,RFC=27,CBO= 16,MOA=0和WMC = 21= 19 ) 。另 一 方 面 , 一 个 类 移 动 到 更 差 的 集 群 的 例 子 是 类AbstractWebModuleBuilder,它从集群1(LCOM = 0,CBO = 3和WMC = 1)移动到集群5(LCOM = 394,CBO = 41和WMC = 74),在1.1和1.1.1版本中都是“正在检查”的集群。如图7和图8所示,每个集群由三个子集群组成,每个子集群对应一个版本(红色=版本1.0,绿色=版本1.1,蓝色=版本1.1.1)。我们可以观察到,许多数据项在空间中从一个版本转移到另一个版本,而一个具体的核心保留在同一个空间中。对于图7、8的聚类,每个聚类的m(i)值分别为0.5395、0.5439、0.4444、0.8108和0.476954P. Antonellis等人/理论计算机科学电子笔记233(2009)43图八、群集4、5至版本(红色=v 1.0,绿色=v 1.1,蓝色=v 1.1.1)因此,第四组是最具体的。 它位于轴线的起点而且在不同的版本中似乎都保持不变。 所有其他集群要么倾向于为了交换相当大量的项目或它们的数据项目,被省略了。通过观察每个簇的质心如何在空间中从一个版本转移到另一个版本,我们可以对它们的演化有一个概述。例如,对于聚类5(其在图8中描绘),版本的质心的距离1.0到1.1的距离为d1= 28.2452,而1.1到1.1.1的距离为d2= 25.3733。这个核心集群相当坚固。图6的聚类2的对应距离为d1= 403.5479和d2= 406.9371。在第一个集群中,进化是随意的,而在第二个集群中,从第一个版本到第二个版本的进化更重要,从第二个版本到第三个版本的进化更小5结论和今后的工作在这项研究工作中,提出了一种基于聚类数据挖掘技术的方法。它包括两个步骤:i。为系统的每个版本提供单独的聚类步骤,以帮助软件系统的可维护性评估。二.宏观聚类分析,以研究系统的动态从版本到版本。 拟议方法的范围是为了便于维护工程师识别容易出错的类和更难理解和维护的类,以及研究系统从版本到版本的演变及其类的动态。我们选择采用k-Attractor聚类算法,因为它是为分析软件测量数据量身定制的[17]。 我们的工作与[21]不同,[ 21 ]采用聚类, 生成源代码的高级组织。此外,我们没有在[23]或直接在源代码[21]上应用聚类算法,而是对反映系统质量和可维护性的最重要方面的软件度量进行聚类。此外,通过版本对类的进化的研究P. Antonellis等人/理论计算机科学电子笔记233(2009)4355类在系统的单个版本所提出的方法在Apache Geronimo(一个J2EE 1.4开源应用服务器)上进行了测试。在分析的第一步中,我们为每个Apache版本创建了概述,以指示其可扩展性状态。然后通过研究每个版本形成的集群,我们发现了容易出错的这些类是离群值集群的成员在第二步,宏观聚类分析,我们跟踪类,他们的质量是降级或升级。这些类是RefContext和AbstractWebModuleBuilder。我们的研究结果表明,所提出的方法具有相当大的优点,在facilitating维护工程师监测系统的可维护性如何演变。但另一方面,它缺乏预测即将到来的系统版本的可维护性的能力。可以另外采用具有预测能力(例如分类)的另一种数据挖掘技术,以增强我们的方法。此外,除此之外,我们还考虑了以下各种备选方案,以进一步发展拟议的方法:基于动态依赖关系的系统采用另一种方法来监视不同版本之间的群集更改另一种监视群集更改的方法是为每个版本执行我们在第二个聚类阶段使用所有这些聚类(根据所属版本,每个聚类具有不同的颜色我们可以假设每个二级聚类都由相同的数据项聚类组成。增强提取方法建议的方法只处理来自Java源代码文件(*.java)的信息。从其他语言(如C++,C和COBOL)中提取数据是非常有趣的,这些语言用于大多数遗留系统的开发,这是一类在程序理解和可维护性方面非常有趣的软件系统确认这项研究工作得到了希腊研究和技术总秘书处(GSRT)和Dynacomp S.A.的部分支持。在“体育运动“项目中,《西希腊法》第3.4引用[1] Civin,P.,和B.Yood,Involutions on Banach algebras,Paci fic J.数学9(1959),415[2] Cli Escherichord,A. H、和G. B. Preston,Providence,R.I. 一九六一年56P. Antonellis等人/理论计算机科学电子笔记233(2009)43[3] 陈http://www.elsevier.nl/locate/entcs/volume1.html。[4] 伊斯顿,D.,和W. D. Munn,逆半群代数上的迹函数,U. Glasgow,Dept.数学,预印本93/52。[5] Roscoe , A. W. , “The Theory and Practice of Concurrency,” Prentice Hall Series in ComputerScience, Prentice 与相关网站http://www.comlab.ox.ac.uk/oucl/publications/books/concurrency/网站。[6] Shehadah,A.一、“嵌入定理与对合半群“,博士。论文,普渡大学,印第安纳州,1982年。[7] Weyl,H., 普林斯顿大学Press,Princeton,NJ,一九四六年[8] 安德里索斯山口和Tzerpos,V. IEEE Trans.Software Eng. vol. 31(2),2005,pp.一百五十至一百六十五[9] Anquetil,N.和Lethbridge,T. C.”Experiments with Clustering as a Software Remodularization 235-255[10] Arisholm,E.,白里安湖C.和Foyen,A.“面向对象软件的动态耦合度量”,IEEE软件工程学报,第30卷,第8期,2004年8月,第100页。491-506[11] 班迪河K.,瓦什纳维和Turk,D. E.”Predicting Maintenance Performance Using Object Oriented DesignComplexity Metrics”, IEEE Transactions on Software Engineering, vol. 29(1), January 七十七比八十七[12] 王志华,2002年4月19日[13] 拜尔,D.和Noack,A.根据频繁的共同更改对软件工件进行聚类。在Proc. IWPC,IEEE,2005,pp.259-268.[14] S. R. Chidamber和C. F.凯默勒面向对象设计的度量套件。IEEE Transactions on Software Engineering,20(6):pp. 476-493,1994年[15] Dunham,M. H.数据挖掘:介绍性和高级主题。Prentice Hall PTR,2002年。[16] 坎,S.H. 软件质量工程中的质量模型艾迪森-韦斯利第二版。2002年。[17] Y. Kanellopoulos,P. Antonellis,C.特约特吉斯角Makris,[18] Kunz,T.和Black,J.P.21(6),1995,pp.515-527,[19] Lawrie,D. J.,菲尔德, H.和 Binkley,D.“Leveraged Quality Assessment using Information RetrievalTechniques”,第14届IEEE国际程序理解会议(ICPC'06),2006年,第14页。149-158.[20] Mancorn,S.,米切尔,理学士,Chen,Y.还有急诊室的甘斯纳”Bunch: A Clustering Tool for theRecovery and Maintenance of Software System Structures”, Proc. Int’l Conf. Software Maintenance(ICSM 99), 1999,[21] Mancorn , S., 米 切 尔 湾 美 国 , 罗 雷 斯 角 ”Using Automatic Clustering to Produce High-Level SystemOrganizations of Source Code”, (1998) IEEE Proceedings of the 1998 Int. Workshop on Program[22] 马克布尔岛,Babri,H.A.,卡里姆A. Sarwar,M. ”Metarule-guided association rule mining for program152(6),2005,pp.281- 296。[23] 米切尔湾S.和Mancorpus,S. ”On the Automatic Modularization of Software Systems Using the BunchIEEE Trans.软件工程师,卷32(3),2006,pp.193-208[24] 美国国家标准与技术研究所(NIST),2002年。[25] 奥 卡角 M. de 和 Carver , D. L.“使 用数 据 挖 掘技 术 的数 据 内聚 子 系 统的 识 别 ”, Proc. Int 'l Conf.Software Maintenance(ICSM 98),IEEE Comp. Soc. Press,(1998)16- 23。P. Antonellis等人/理论计算机科学电子笔记233(2009)4357[26] Rousidis , D. 和 Tjortjis , C. ”Clustering Data Retrieved from Java Source Code to Support SoftwareMaintenance: A Case Study”, Proc IEEE 9th European Conf. Software Maintenance and ReengineeringSoc. Press,(2005)276-279.[27] Sartipi,K.,Kontogiannis,K.和Mavaddat,F.”Architectural Design Recovery Using Data Mining129比140[28] 谭,Y.,Mookerjee,V.S.”Comparing Uniform and Flexible Policies for Software Maintenance and238-255[29] Tjortjis C.,锡诺斯湖和Layzell,P.J.“Facilitating Program Comprehension by Mining Association Rulesfrom Source Code”,Proc.IEEE 11th Int'l Workshop Program Comprehension(IWPC 03),2003,pp.125比132[30] Tserpos,V.和Holt,R. ”Software Botryology: Automatic Clustering of Software Systems”, Proc. 9thInt’l 811-818[31] 肖氏C.和Tzerpos,V.“Software Clustering on Dynamic Clustencies”,Proc.IEEE 9th European Conf. 软件维护和再工程(CSMR 05),2005年,pp。124-133[32] Zaidman , A. , 杜 波 依 斯 湾 和 Demeyer , S. ”How Webmining and Coupling Metrics Improve EarlyProgram ICPC,2006,pp.74-78[33] http://geronimo.apache.org/downloads.htm
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 5
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于Python和Opencv的车牌识别系统实现
- 我的代码小部件库:统计、MySQL操作与树结构功能
- React初学者入门指南:快速构建并部署你的第一个应用
- Oddish:夜潜CSGO皮肤,智能爬虫技术解析
- 利用REST HaProxy实现haproxy.cfg配置的HTTP接口化
- LeetCode用例构造实践:CMake和GoogleTest的应用
- 快速搭建vulhub靶场:简化docker-compose与vulhub-master下载
- 天秤座术语表:glossariolibras项目安装与使用指南
- 从Vercel到Firebase的全栈Amazon克隆项目指南
- ANU PK大楼Studio 1的3D声效和Ambisonic技术体验
- C#实现的鼠标事件功能演示
- 掌握DP-10:LeetCode超级掉蛋与爆破气球
- C与SDL开发的游戏如何编译至WebAssembly平台
- CastorDOC开源应用程序:文档管理功能与Alfresco集成
- LeetCode用例构造与计算机科学基础:数据结构与设计模式
- 通过travis-nightly-builder实现自动化API与Rake任务构建
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功