论文部分内容阅读
摘要:本文主要从聚类属性的选取和聚类单元粒度的选取两方面去分析对聚类结果,面向对象程序中的三个关键因素,并给出了相应的聚类结果。本文从面向对象程序聚类的基本方法与属性及面向对象程序程序聚类实验分析与讨论进行了探讨。
关键词:面向对象;程序聚类;克隆代码
中图分类号:TP311.5
程序聚类方面的研究工作所采用的聚类对象往往是一些面向过程的程序代码。其他一些针对面向对象程序聚类的研究工作除了将继承、聚类等面向对象程序语法关系作为聚类属性考虑外,并未对面向对象程序聚类的一些特殊问题进行进一步的深入研究。程序聚类是常用而有效的逆向分析和辅助理解技术,通过聚类算法将一个软件系统分解为一系列具有需求或设计含义的小规模系统,聚类属性中的形式化属性主要来源于程序语法结构上的一些信息,得到的聚类单元都是由一些关系密切的代码实体组成。基于非形式化信息的程序聚类在实际应用中往往难以保证正确性,因为很多软件系统的变量命名等非形式化信息的规范性和统一性经常较差,提到的这些例如聚类过程中有诸多因素会影响聚类结果,从而影响构件提取、代码重构等一系列利用代码聚类结果所进行的逆向工程活动,从量化比较和定性分析两个方面初步揭示了这些因素对于面向对象程序聚类结果的影响。
一、程序聚类的基本方法与属性
程序聚类的基本方法以及本文所采用的聚类属性,然后对面向对象程序聚类中的多态、代码克隆以及聚类单元粒度的选择进行了介绍。
(1)程序聚类通过同一个需求或设计元素聚集在一起来辅助程序理解及分析。分为聚类对象的选择﹑聚类属性的选择﹑聚类算法的选择﹑聚类结果分析等几个步骤。聚类对象在程序中可以为代码片段﹑方法/函数﹑文件﹑类等等,聚类属性可以分为形式化与非形式化等,聚类算法可以分为层次化算法与非层次化算法等。
(2)多态多态也称动态绑定﹑后期绑定或运行时绑定,是面向对象程序的一个基本特性。多态通过抽象类或接口机制实现了接口与实现的分离,多态不但能改善代码的组织结构和可读性,而且还增强了程序的可扩展性,因此在面向对象程序中得到了广泛的应用.面向对象程序中的多态形式上一般都是通过抽象类或接口实现的。如果不采用多态和动态绑定,那么方法通常会通过条件判断语句直接调,以满足不同的情况下的功能要求。并将进一步对聚类结果造成影响,我们希望通过对比实验,分析多态机制的使用对于聚类结果的具体影响,并据此对相应的聚类策略提出建议。代码克隆代码克隆是指源代码文件中多个相同或相似的代码片段,希望通过对比实验分析代码克隆对于聚类结果的影响,并据此对相应的聚类策略提出建议。
(3)聚类单元的粒度面向对象程序的一个主要特点是类作为属性和操作的统一封装体,面向对象程序聚类一般都采用类作为基本的聚类单元,不良的面向对象设计所带来的超大类内聚性不足的类等设计问题导致以类为基本单位的程序聚类无法较好地反映软件的逻辑结构。此时打破类的边界,以更小粒度的方法作为基本聚类单元可能是一种更加合理的策略。
二、程序聚类实验分析与讨论
为了分析面向对象多态机制、代码克隆以及聚类单元粒度选择这三个问题的聚类结果的特点及其在相关场景下的应用,主要包括聚类信息抽取、聚类以及聚类结果对比分析。
(1)聚类信息主要包括语法信息以及代码克隆信息两方面,通过抽取后这些信息构成了程序聚类的数据集。为了研究多态、代码克隆以及聚类单元粒度对于聚类结果的影响,使用多态与不使用多态的聚类结果,考虑代码克隆与不考虑代码克隆的聚类结果,类级以及方法级聚类结果。这在一定程度上也说明了多态等面向对象设计要素的使用有利于构件的封装和复用。因此,在对面向对象程序聚类时,我们希望用聚类结果来提取系統的构件,把多态作为聚类属性的聚类结果更加构件化,更易于构件的提取。
(2)为了深入分析克隆属性对于聚类结果的影响,我们进一步考虑了考虑克隆属性后的聚类结果差异模式,这两个方法都是对图形进行绘画操作,只是前者是对图形的某个区域进行填充操作,而后者则是在图形上画一笔.从而更好地反映系统的设计结构。不同粒度聚类结果的差异更多体现在聚类结果的抽象层次上。而设计较差的面向对象程序类级和方法级聚类存在较强的异构性,其聚类结果在关联结构上就存在较大差异。我们发现两种聚类单元的差异程度与设计质量相关。设计质量较好的系统方法级聚类虽与类级聚类存在差异,但主要体现为对类级聚类的进一步精化。因此,对于设计质量较好的系统,类级聚类有利于获得结构清晰、复杂性更低的模块结构,对于体系结构逆向恢复和构件抽取而言都更有利。对于设计质量较差的系统,类级聚类结构往往比较混乱,这与类级质量较差相关,包括类的规模以及类间责任分配等方面设计不当。
(3)程序聚类是一种常用的软件系统辅助理解和分析方法,被广泛应用于需求模型和体系结构逆向恢复、构件抽取、重构机会识别等软件维护和逆向工程任务中。通过对比实验分析可以看出,多态机制以及聚类层次的选择的聚类结果都在不同的场景中有一定的应用,主要体现使用多态的聚类结果有利于系统模块的解耦合,能较好的帮助我们提取遗留系统构件。对于是否考虑代码克隆我们有如下结果,如果我们的目标是需求模型的恢复以及代码模块重构的识别,那就考虑代码克隆; 反之如果我们的目的只是想恢复系统的原有设计,就不考虑。在面对聚类的对象过程中,如果我们面对的聚类对象在设计质量上相对较好,那么我们就应该选择以类为聚类单元,因为从实验可以得出面对设计质量较好的系统得出的聚类结果在系统层次上较为清晰,有利于构件的提取以及体系结构的恢复,反之面对设计质量较差的系统,它们在类级上的聚类结果在系统层次上较为模糊,而在方法级上的聚类就表现出较为清晰,所以采取方法级的聚类更有利于体系结构恢复等逆向工程活动。对不同的软件维护和逆向工程任务而言,其程序聚类目标和评价标准也有所不同。因此我们必须针对特定的聚类目标评价这些因素对于聚类结果的影响,并确定相应的策略选择。
三、结 束
多态机制的使用将使得聚类结果倾向于将与多态相关的功能依赖中的客户端与服务端进行分离,从而有利于我们对遗留构件的提取,特别是有助于客户端与服务端模块的分离,考虑克隆代码信息为聚类提供了更多隐含的相关性,从而有利于通过聚类揭示更加准确的程序逻辑结构,因此可以帮助我们进行设计模型恢复与代码重构识别; 而类级与方法级聚类结果的差异性大小与程序的设计质量相关,一般设计质量较好的面向对象程序两个层次上的聚类体现出了更好的同构性,有助于在我们面对不同系统时应采取何种聚类单元的聚类效果较好提供了指导。面向对象程序聚类中多态机制、代码克隆以及聚类层次的选择。聚类结果及其在不同场景的应用,通过一个基于开源软件的程序聚类实验进行了对比分析。
参考文献:
[1]黄素萍. 面向对象程序设计教学改革模式研究[J]. 教育教学论坛,2013,No.8302:264-265.
[2]杨旺明. 基于工程的面向对象程序设计课程教学的求索与实践[J]. 中国科技信息,2012,No.45821:181-182.
[3]张红霞. 《面向对象程序设计》课程教学研究与探索[J]. 现代计算机(专业版),2012,No.40622:34-36.
关键词:面向对象;程序聚类;克隆代码
中图分类号:TP311.5
程序聚类方面的研究工作所采用的聚类对象往往是一些面向过程的程序代码。其他一些针对面向对象程序聚类的研究工作除了将继承、聚类等面向对象程序语法关系作为聚类属性考虑外,并未对面向对象程序聚类的一些特殊问题进行进一步的深入研究。程序聚类是常用而有效的逆向分析和辅助理解技术,通过聚类算法将一个软件系统分解为一系列具有需求或设计含义的小规模系统,聚类属性中的形式化属性主要来源于程序语法结构上的一些信息,得到的聚类单元都是由一些关系密切的代码实体组成。基于非形式化信息的程序聚类在实际应用中往往难以保证正确性,因为很多软件系统的变量命名等非形式化信息的规范性和统一性经常较差,提到的这些例如聚类过程中有诸多因素会影响聚类结果,从而影响构件提取、代码重构等一系列利用代码聚类结果所进行的逆向工程活动,从量化比较和定性分析两个方面初步揭示了这些因素对于面向对象程序聚类结果的影响。
一、程序聚类的基本方法与属性
程序聚类的基本方法以及本文所采用的聚类属性,然后对面向对象程序聚类中的多态、代码克隆以及聚类单元粒度的选择进行了介绍。
(1)程序聚类通过同一个需求或设计元素聚集在一起来辅助程序理解及分析。分为聚类对象的选择﹑聚类属性的选择﹑聚类算法的选择﹑聚类结果分析等几个步骤。聚类对象在程序中可以为代码片段﹑方法/函数﹑文件﹑类等等,聚类属性可以分为形式化与非形式化等,聚类算法可以分为层次化算法与非层次化算法等。
(2)多态多态也称动态绑定﹑后期绑定或运行时绑定,是面向对象程序的一个基本特性。多态通过抽象类或接口机制实现了接口与实现的分离,多态不但能改善代码的组织结构和可读性,而且还增强了程序的可扩展性,因此在面向对象程序中得到了广泛的应用.面向对象程序中的多态形式上一般都是通过抽象类或接口实现的。如果不采用多态和动态绑定,那么方法通常会通过条件判断语句直接调,以满足不同的情况下的功能要求。并将进一步对聚类结果造成影响,我们希望通过对比实验,分析多态机制的使用对于聚类结果的具体影响,并据此对相应的聚类策略提出建议。代码克隆代码克隆是指源代码文件中多个相同或相似的代码片段,希望通过对比实验分析代码克隆对于聚类结果的影响,并据此对相应的聚类策略提出建议。
(3)聚类单元的粒度面向对象程序的一个主要特点是类作为属性和操作的统一封装体,面向对象程序聚类一般都采用类作为基本的聚类单元,不良的面向对象设计所带来的超大类内聚性不足的类等设计问题导致以类为基本单位的程序聚类无法较好地反映软件的逻辑结构。此时打破类的边界,以更小粒度的方法作为基本聚类单元可能是一种更加合理的策略。
二、程序聚类实验分析与讨论
为了分析面向对象多态机制、代码克隆以及聚类单元粒度选择这三个问题的聚类结果的特点及其在相关场景下的应用,主要包括聚类信息抽取、聚类以及聚类结果对比分析。
(1)聚类信息主要包括语法信息以及代码克隆信息两方面,通过抽取后这些信息构成了程序聚类的数据集。为了研究多态、代码克隆以及聚类单元粒度对于聚类结果的影响,使用多态与不使用多态的聚类结果,考虑代码克隆与不考虑代码克隆的聚类结果,类级以及方法级聚类结果。这在一定程度上也说明了多态等面向对象设计要素的使用有利于构件的封装和复用。因此,在对面向对象程序聚类时,我们希望用聚类结果来提取系統的构件,把多态作为聚类属性的聚类结果更加构件化,更易于构件的提取。
(2)为了深入分析克隆属性对于聚类结果的影响,我们进一步考虑了考虑克隆属性后的聚类结果差异模式,这两个方法都是对图形进行绘画操作,只是前者是对图形的某个区域进行填充操作,而后者则是在图形上画一笔.从而更好地反映系统的设计结构。不同粒度聚类结果的差异更多体现在聚类结果的抽象层次上。而设计较差的面向对象程序类级和方法级聚类存在较强的异构性,其聚类结果在关联结构上就存在较大差异。我们发现两种聚类单元的差异程度与设计质量相关。设计质量较好的系统方法级聚类虽与类级聚类存在差异,但主要体现为对类级聚类的进一步精化。因此,对于设计质量较好的系统,类级聚类有利于获得结构清晰、复杂性更低的模块结构,对于体系结构逆向恢复和构件抽取而言都更有利。对于设计质量较差的系统,类级聚类结构往往比较混乱,这与类级质量较差相关,包括类的规模以及类间责任分配等方面设计不当。
(3)程序聚类是一种常用的软件系统辅助理解和分析方法,被广泛应用于需求模型和体系结构逆向恢复、构件抽取、重构机会识别等软件维护和逆向工程任务中。通过对比实验分析可以看出,多态机制以及聚类层次的选择的聚类结果都在不同的场景中有一定的应用,主要体现使用多态的聚类结果有利于系统模块的解耦合,能较好的帮助我们提取遗留系统构件。对于是否考虑代码克隆我们有如下结果,如果我们的目标是需求模型的恢复以及代码模块重构的识别,那就考虑代码克隆; 反之如果我们的目的只是想恢复系统的原有设计,就不考虑。在面对聚类的对象过程中,如果我们面对的聚类对象在设计质量上相对较好,那么我们就应该选择以类为聚类单元,因为从实验可以得出面对设计质量较好的系统得出的聚类结果在系统层次上较为清晰,有利于构件的提取以及体系结构的恢复,反之面对设计质量较差的系统,它们在类级上的聚类结果在系统层次上较为模糊,而在方法级上的聚类就表现出较为清晰,所以采取方法级的聚类更有利于体系结构恢复等逆向工程活动。对不同的软件维护和逆向工程任务而言,其程序聚类目标和评价标准也有所不同。因此我们必须针对特定的聚类目标评价这些因素对于聚类结果的影响,并确定相应的策略选择。
三、结 束
多态机制的使用将使得聚类结果倾向于将与多态相关的功能依赖中的客户端与服务端进行分离,从而有利于我们对遗留构件的提取,特别是有助于客户端与服务端模块的分离,考虑克隆代码信息为聚类提供了更多隐含的相关性,从而有利于通过聚类揭示更加准确的程序逻辑结构,因此可以帮助我们进行设计模型恢复与代码重构识别; 而类级与方法级聚类结果的差异性大小与程序的设计质量相关,一般设计质量较好的面向对象程序两个层次上的聚类体现出了更好的同构性,有助于在我们面对不同系统时应采取何种聚类单元的聚类效果较好提供了指导。面向对象程序聚类中多态机制、代码克隆以及聚类层次的选择。聚类结果及其在不同场景的应用,通过一个基于开源软件的程序聚类实验进行了对比分析。
参考文献:
[1]黄素萍. 面向对象程序设计教学改革模式研究[J]. 教育教学论坛,2013,No.8302:264-265.
[2]杨旺明. 基于工程的面向对象程序设计课程教学的求索与实践[J]. 中国科技信息,2012,No.45821:181-182.
[3]张红霞. 《面向对象程序设计》课程教学研究与探索[J]. 现代计算机(专业版),2012,No.40622:34-36.