设计模式对软件可维护性影响的定量研究

2017-01-21 15:38刘伟李雅琎胡志刚
软件导刊 2016年12期
关键词:设计模式

刘伟+李雅琎+胡志刚

摘 要:软件可维护性是面向对象软件系统的重要质量属性之一,合理使用设计模式可以改善软件的可维护性。目前关于设计模式对软件可维护性影响的研究主要停留在定性分析阶段,缺少定量分析。针对这一问题,选取与软件可维护性相关的面向对象度量因子和可维护性指数,结合具体实例,研究了应用设计模式前后度量因子和可维护性指数变化情况,定量分析出设计模式对软件可维护性的影响。

关键词:设计模式;软件可维护性;面向对象度量因子;可维护性指数

DOIDOI:10.11907/rjdk.162142

中图分类号:TP319

文献标识码:A文章编号:1672-7800(2016)012-0095-03

0 引言

设计模式是从众多优秀软件系统中总结出来的专家设计经验,合理使用设计模式可以有效改善软件设计和程序代码质量[1]。目前关于设计模式对软件质量影响的研究更多停留在定性分析阶段,设计模式对软件质量改善的定量研究工作较少。正因如此,设计模式对软件质量影响的利弊在业界备受争议。

软件可维护性是指软件维护的难易程度,图灵奖得主Alan J.Perlis曾说过:在长久运行时间的考验下,每个程序都变得脆弱不堪。软件在开发结束后会经历一段长久的维护期。因此,可维护性是软件系统重要的质量属性之一。

本文定量研究了设计模式对软件可维护性影响,通过精确的数值对使用设计模式前后系统的可维护性进行精确的质量分析。与传统的定性分析相比,定量分析能够更准确、有效地证实设计模式的使用效果,更具说服力。

1 可维护性度量因子选取

为了提供一个定量方法来测量面向对象特征的软件质量属性,Bansiya和Davis提出一种具有层次结构的面向对象设计质量评估方法——QMOOD(Quality Model for Object-Oriented Design)[2],该方法构建了一个面向对象的质量评估模型,提供了设计质量属性(Design Quality Attributes)、面向对象设计属性(OO Design Properties)、面向对象设计因子(OO Design Metrics)和面向对象设计组件(OO Design Components)4个层次和它们之间的三级映射。Ampatzoglou等[3]首次将QMOOD运用到设计模式对软件质量影响的研究中并取得了较好效果。本文采用简化的QMOOD模型,首先针对软件可维护性选取合适的度量因子,然后计算应用某个设计模式前后度量因子值,最后通过度量因子值的变化来定量分析该设计模式对软件可维护性影响。

本文选取CK度量集和可维护性指数作为软件可维护性度量因子。

1.1 CK度量集

在研究面向对象系统时,经典的面向对象度量集——CK度量集应用非常广泛。CK度量集由Chidamber和Kemerer[4]于1994年提出,它奠定了面向对象软件度量的基础。CK度量集中的度量因子与面向对象软件的可维护性密切相关。

CK度量集包含6个基于面向对象类设计的度量因子,从不同角度反映了面向对象系统的设计质量,这6个因子分别是:加权方法计数(Weighted Methods for per Class,WMC)、继承树深度(Depth of Inheritance Tree,DIT)、子类个数(Number Of Children,NOC)、对象类之间的耦合(Coupling Between Object classes,CBO)、对类的响应(Response For a Class,RFC)和方法内聚缺乏度(Lack of Cohesion in Methods,LCOM)。

1.2 可维护性指数

可维护性指数(Maintainability Index,MI)由Oman等[5]于1992年提出,其计算公式如下:

公式(1)中的参数说明如表1所示。

MI的典型取值范围在-100~200,MI值越高说明软件的可维护性越好。

2 设计模式对可维护性影响定量分析

2.1 实验数据

根据设计模式的使用频率和重要性[6],本文选取10种常用的软件设计模式,每种设计模式提供5个程序规模相差不大的实例。对每个实例,提供两个版本的程序代码,使用设计模式的代码版本,简记为DP(Design Pattern),以及不使用设计模式的代码版本,简记为NDP(Non-Design Pattern),这些实例主要来自文献[6]。通过对这些软件可维护性相关度量因子进行计算,研究设计模式使用前后可维护性度量因子变化,将实验数据与开发人员经验进行比对,分析实验结果。

本研究选取的10种常用设计模式有:工厂方法模式(Factory Method Pattern,FMP)、抽象工厂模式(Abstract Factory Pattern,AFP)、适配器模式(Adapter Pattern,AP)、代理模式(Proxy Pattern,PP)、外观模式(Facade Pattern,FP)、桥接模式(Bridge Pattern,BP)、观察者模式(Observer Pattern,OP)、策略模式(Strategy Pattern,SrP)、状态模式(State Pattern,SaP)和模板方法模式(Template Method Pattern,TMP)。

2.2 实验结果

以程序实例为单位,计算前文所述的度量因子,然后取5个实例的平均值,得到设计模式使用前后度量因子的平均值,计算结果如表2所示。

2.3 实验结果分析

(1)加权方法计数WMC:WMC越大,说明理解这个类所需时间越多。方法的个数多可能会导致沿用这些方法的子类行为更加复杂,使其可维护性降低。实验结果表明,7个设计模式会降低WMC值,WMC越小,可维护性越高。

(2)继承树深度DIT:DIT值越高的类继承更多的父类方法,使得它们的行为难以预测且维护相对复杂,可维护性更差。实验结果表明,有3个设计模式会使平均DIT变大,5个设计模式会使平均DIT变小,2个设计模式对DIT没有影响。

(3)子类个数NOC:由于大部分设计模式都引入了抽象层,通过子类来扩展系统行为,因此大部分设计模式的使用都会导致NOC变大。抽象层的引入提高了系统的可扩展性和灵活性,便于系统维护和二次开发。

(4)对象类之间的耦合CBO:根据软件工程高内聚、低耦合原则,降低系统耦合度可以提高系统的可维护性。过多的耦合会使整个系统变得难以维护,比如在一个类中进行修改可能会影响到与其产生耦合的其它类。实验结果表明,10个设计模式都可降低CBO,通过降低类与类之间的耦合度来提高系统的可维护性。

(5)类的响应RFC:某一个方法的RFC值很大,说明它调用了许多其它方法,对可维护性产生负面影响。从实验结果可以发现,除使用外观模式会使RFC值变大外,其余9种设计模式都会使系统的平均RFC值变小。

(6)方法内聚缺乏度LCOM:如果一个类的LCOM值高,可能意味着它所定义的方法可被分割到多个独立类中,不与其它方法共享字段,可以独立运行。类的LCOM值低说明类的设计质量高、封装性好、可维护性高。由于实验项目比较简单,类中的方法个数不多,因此在计算LCOM值时方法对的个数相对较小,所以整体来说LCOM值都偏小。实验结果表明,大部分设计模式的使用对系统的平均LCOM值影响不大。

(7)可维护性指数MI:MI在软件可维护性度量中广泛使用,MI值越高说明软件的可维护性越好。绘制设计模式使用前后MI的对比情况如图1所示。从图1可知,除外观模式(FP)和观察者模式(OP)外,其余8种设计模式均可使维护性指数变大。由于实验项目代码规模较小,业务方法较少,导致设计模式使用效果不显著。

3 结语

设计模式是成熟有效的专家设计方案,设计模式是否有助于提高软件质量,业界一直存在争议。本文结合软件度量因子,利用10种常用的设计模式对软件可维护性影响

进行了定量计算,探讨了可维护性指数及面向对象软件度量指数与软件可维护性的相互关系。实验结果表明,大部分设计模式的使用有助于提高面向对象软件的可维护性,少数设计模式对软件可维护性影响不显著,个别设计模式对软件可维护性有负面影响。

后续一方面将收集和整理项目实例进行定量评估,进而获得更加科学的结果,另一方面将研究更多的软件质量属性,包括可复用性、可靠性等,结合一系列实验,建立一套较为完整的设计模式对软件质量影响的评估框架。

参考文献:

[1] GAMMA E,HELM R,JOHNSON R,et al.Design patterns:elements of reusable object-oriented software [M].Addison-Wesley Professional,Reading,Massachusetts,1995.

[2] BANSIYA J,DAVIS C G.A hierarchical model for object-oriented design quality assessment [J].IEEE Transactions on Software Engineering,2002,28(28):4-17.

[3] AMPATZOGLOU A,FRANTZESKOU G,STAMELOS I.A methodology to assess the impact of design patterns on software quality [J].Information & Software Technology,2012,54(4):331-346.

[4] CHIDAMBER S R,KEMERER C F.A metrics suite for object oriented design [J].IEEE Transactions on Software Engineering,1994,20(6):476-493.

[5] OMAN P,HAGEMEISTER J.Metrics for assessing a software system's maintainability [C].The IEEE Proceedings Conference on Software Maintenance,IEEE Computer Society,1992:337-344.

[6] 刘伟.设计模式的艺术软件开发人员内功修炼之道 [M].北京:清华大学出版社,2013.

(责任编辑:杜能钢)

猜你喜欢
设计模式
设计模式识别的特征信息分类研究
“1+1”作业设计模式的实践探索
基于能力目标培养的药学专业课程整体教学设计模式研究
引入线索约束的设计模式变体挖掘研究*
设计模式挖掘的有效性评估策略
智慧图书馆环境下的融贯式服务设计模式研究
三维协同设计模式下的航天项目管理实践与展望
交通机电工程设计模式创新探讨
应用型高校学生程序设计能力培养研究
基于“双师制”指导下的工业设计专业毕业设计模式