英语原文共 5 页,剩余内容已隐藏,支付完成后下载完整资料
设计模式和变化倾向:复制使用C#专有文件
M.Gatrell, S.Counsell, T.Hall
摘要
本文主要研究在商业模式的改变中,专有软件试图确定一个类之间存在关系的变化及其倾向设计上下文的变化;更确切地说:一个类是否是一个参与者在一个设计模式。我们确定了具体的设计模式和变化的倾向。我们发现设计模式参与者变化的概率高于没用类参与设计的模式,Bieman等人的早期研究支持表明,一些设计模式,如适配器,方法和单例被发现比其他的模式有更高的变化倾向。
关键字:模式,C#,改变
- 介绍
一个系统识别趋势的改变可以突出系统的问题,从而使系统的开发人员得到通知而采取补救行动。他还可以帮助开发人员或项目经理预测未来的变化以及资源的配置。复制先前实验研究的软件可以帮助我们建立一个知识支持或者反驳一组假设[2, 12]。在对有争议或反直觉的研究结果发现的情况下,其优点是有相当大的价值去探索这种观点。Bieman等人的早期研究结果中表明,基于模式类比没有参与设计模式的类更易于改变。在本文中,我们通过分析设计上下文类的变化,结合Bieman等人先前的研究成果,我们检查了一个商业C#系统,其系统的组成有266行代码,7439个类和79964种方法。由于改进和修正,这个系统在过去的两年间已经有过19054次改变,其改进的目标用于铜鼓的人工检查是否一个类一个参与者在设计一个模式。通过改变历史的模式参与特征比较的类来确定任何关系。
许多设计模式包括那些被Gamma等人通过专业化促进适应性支持修改的模式,使用模式构建的系统可以通过创建新的修改具体类所需的功能来改变,而不是通过直接修改现有的类。我们可能会因此认为相对于其他类,设计模式“参与者”类会有一个相对较低的倾向变化。结果你发现早些时候类的支持,发现早期的研究结果支持类参与设计模式被发现的概率比其他类更频繁。
- 动机
本文研究的动机来源主要有以下几个来源。首先,据我们所知,Bieman等人早先的研究工作成果尚未出版以来,它代表的是一个具有争议的和有趣的研究。其次,模式类设计的是专有软件,知识的变化趋势是具有开发价值的信息,也可以告知未来维护轰动和资源优先级。最后,分析了标志着一系列的开始,作者打算进行模式的使用引起的故障模式类包括一个分析相对于其他类。从Gamma记录的23个设计模式和这些模式已经进行添加和修改以来来看,其他几个Bieman等人的研究消息,选择13个这种设计模式,我们可以来看看他们的预期收益,看看他们的系统是否相对稳定,相比于其他类的实现情况如何。Bieman等人的研究本身就是一个复制的过程,早期研究方向相同的作者提供了39种C 版本的系统使用方法。早期的研究结果表明,被发现的类是最容易发生改变的类。最后,一些工作一直进行自动提取模式使用指标和其他工具(而不是修改已经存在的类)。模式促进易于改变,因此类参与模式需要有更少的变化发生。
- 前言
软件作为实证研究的基础,从一个大型国际软件公司专门从事事务处理软件的内容,报告的作者之一是该公司的建筑师。在公司,因为可以对系统进行所有的更改,因此可以使用版本来控制系统。需要记录文件和签入的每一个变化是一个标准的实施严格的公司所必须的。开发者用c#编写的一组8 - 10与代码本身相关的核心技术产品已经运行了大约4年。对于这个时期我们的分析是基于代表最近的两年的发展成果,系统包括服务器端组件,web应用程序和客户端组件和工具。从今以后,我们将参考软件系统作为“WebCSC”包括超过7439个类和大约266行代码(LOC)。
3.1假设
第一种假设是探索作为我们的研究的一部分,假设的构成是Bieman等人相同的成分的研究:
假设H1:基于模式类变化倾向低于其他类吗?对于模式设计进行更改,我们可以这样通过子类或增加新的参与者类(而不是修改已存在的类)。模式设计促进改变,因此类参与模式需要有更少的变化。
3.2识别设计模式
与Bieman等人最初的研究方向一样,我们集中我们的研究方向在策划好的设计模式上面。手动方法用于识别模式(符合Bieman等人的研究)包括四个步骤:
- 在文档中搜索设计模式名称。
- 识别类在步骤一中确定的背景下通过分析对象模型来进行。一旦相关类的文档指定的类模式或者角色被发现,我们就会检查了对象模型来识别模式的类组成成分,然后我们寻找一种类可以实现了模式之间的联系。
- 验证候选模式是一个模式实例。我们检查了模式实现寻找低层次的细节,例如,要求代表团结构。
- 验证模式的目的。我们检查了每一组类的代表候选人确认模式的类和关系描述的目的,其具有相同的权威模式参考。
相同的设计模式和Bieman等人的研究成果一样作为这项研究的一部分:
- 适配器:适配器就是一个接口转换器,它可以是一个独立的硬件接口设备,允许硬件或电子接口相连,也可以是信息接口,将一个接口的类转换为一个不同接口的类允许一起工作,通常不肯能是由于不兼容的接口。
- 建立者:分离对象建设表示,通过抽象的建筑的步骤。不同的实现这些步骤可以导致提供对象的不同表示形式。
- 命令:封装命令请求为对象,记录所学的所有信息在以后调用一个方法,方法名等拥有对象方法和参数值。
- 创造者:根据原来的类包含、聚集或者包含初始化信息被实例化的类来定义哪些类有责任创建其他类的新实例。
- 工厂: 创建多个派生类的一个实例,通过定义一个方法创建对象,可以被子类覆盖指定派生类。
- 方法:方法是包含一系列语句的代码块,在C#中,每个执行指令都是在方法的上下文中完成的。方法允许子类的实现可以通过方法覆盖不同的行为。
- 过滤器:允许可插入过滤器拦截传入或传出消息,过滤器可以添加或删除不显眼,无需修改现有代码。
- 集合的迭代器:迭代器有时又称为游标,是程序设计的软件设计模式,可在容器上遍访的接口,设计人员无需关心其内容。集合迭代器则是指顺序访问元素没有暴露底层表示。
- 代理:一个对象代表另外一个对象通过允许一个类函数作为一个接口,一个不同的对象。
- 单例:单例模式是一种常见的软件设计模式,在它的核心结构中只包含一个被称为单例的特殊类,通过单例模式可以保证系统中一个类只有一个实例可以通过限制存在一个对象的实例化,也即是一个类只有一个实例。。
- 状态:允许一个对象的改变它的状态改变时的行为。
- 策略:封装在一个类中的一个算法允许算法动态的交换。
- 参观者:定义了一个新的操作类的分离算法无需更改对象结构对其运作。
3.3决定改变
每个修改的版本控制系统,故障修复是否增强(或其他)构成了一个新版本的类,每个版本都算作一个改变。本文研究的目的与Bieman等人的研究目的是一致的,我们假设每一个变化是等价的,即变化的相对大小的LOC的影响没有考虑。
- 数据分析
在这两年期间,系统一共发生了19054次变化。在同一时期,7439个类中有4434个类没有更改。从研究结构中可以看出,大量的类有2到30次更改,只有29个类有30次或者更多次的改变。与75次改变相比,最频繁改变的类有145次变化应用,是近两倍的数量变化的第二大变化类。表一显示了每个类的频率变化。29个类发生了30多次变化,56个类发生的变化次数在20到29和之间发生变化,380个类发生的次数在10至19之间发生变化。
表1
无变化 |
1-9 |
10-19 |
20-29 |
gt;=30 |
4434 |
2687 |
280 |
56 |
29 |
从表1中可以看出,高偏向类有lt;10,总共有4434个类没有发生变化,变化次数为1至9次的有2687个。系统中的每个类的平均数量变化(包括基于模式类)为2.55。
-
- 模式类和变化
我们探索的假说是基于模式类是否容易改变其他的类。
总的来说,7439个类中有658个类被发现参与设计模式。相关类单例和战略模式被发现是最受欢迎的(分别为168和101次类),而创造者和基于方法的类是不太常见的分别只有5和8个参与者类。在系统中,没有发现基于迭代器和只有一个代理被确认的例子。然而,惊人的统计数据的平均数量变化,不参与故意设计模式是2.51个变化点,对比的平均数量的变化,参与故意设计模式的平均点数为6.34。五种模式,即适配器,方法,代理,单例和状态与整个系统作为一个整体相比有一个非常高的变化率。战略和访问者模式也发现有一个相对更高的倾向变化。工厂和过滤器被发现有一个接近正常的倾向变化(当与系统相比),而命令和创建者模式实际上有一个较低的倾向相比整个系统的平均变化,表2显示了13种模式的变化数据。与人辨别事物相比,机器识别事物的方法是很不同的,在目前也是很简单与低级的,因此机器识别事物的能力还很差。这主要的原因是人们在学习与认识事物中总会总结出规律,并把这些规律性的东西抽象成概念。模式类与模式,或者模式与样本在集合论中是子集与元素之间的关系。当用一定的度量来衡量两个样本,而找不到它们之间的差别时,它们在这种度量条件下属于同一个等价类。这就是说它们属于同一个子集,是一个模式,或一个模式类。而不同的模式类之间应该是可以区分的,它们之间应有明确的界限。但是对于实际样本来说,有时又往往不能对它们进行确切的划分,即使在所用的度量关系中,分属不同的类别的样本却表现出相同的属性,因而无法确凿无误的对它们进行区分。
当我们动手检查那些已接受高于正常的变化率的模式类的样本时,我们注意到,这些类中的许多包含执行代码,而出现的这个问题不应该是该模式类提供的责任。我们怀疑,因为对模式类的强烈熟悉,系统开发人员很自然地选择了这些模式类作为更改的焦点,而不是立即围绕类(这将是一个更合理的行动)来作为系统开发的焦点。模式类中特别容易变化的模式案例有以下几个:适配器、方法、代理、单例和状态。换句话说,我们的研究揭示了一些现象,那就是为什么基于模式的类可能更容易发生改变,这些原因不仅仅只是由于那些开发者对模式类的熟悉使它们很容易适应和改变。
表2 模式类的更改
模式 |
类 |
变化 |
平均变化率 |
适配器 |
74 |
466 |
6.38 |
生成器 |
64 |
176 |
2.75 |
命令 |
26 |
37 |
1.42 |
创建者 |
5 |
6 |
1.20 |
工厂 |
97 |
256 |
2.73 |
方法 |
8 |
64 |
8.00 |
过滤器 |
16 |
39 |
2.44 |
迭代器 |
0 |
0 |
0.00 |
代理 |
1 |
6 |
6.00 |
单例 |
168 |
822 |
4.89 |
状态 |
32 |
146 |
4.56 |
策略 |
101 |
371 |
3.67 |
访问 |
66 |
267 |
4.05 |
总计 |
658 |
2665 |
图1显示了对参与者的盒型图类的设计模式进行了研究,其结果证实了类参与模式比其他模式更容易发生变化。这些发生变化的类参与模式中,下四分位数、上四分位数和基于模式类的值更高。同时上极端和异常
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[152902],资料为PDF文档或Word文档,PDF文档可免费转换为Word
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。