运用设计模式改进软件设计质量的研究

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第32卷第2期电子科技大学学报V ol.32 No.2 2003年4月 Journal of UEST of China Apr. 2003 运用设计模式改进软件设计质量的研究

唐晓君* 刘心松 查小科 邱元杰 杨 峰

(电子科技大学计算机科学与工程学院成都 610054)

【摘要】针对应用设计模式改进软件设计质量中不规范的问题,提出一种运用设计模式改进软件设计质量的通用规范化方法。该方法基于客观度量标准、问题驱动和半形式化描述,减少了人为因素的影响,提高了设计模式应用的自动化程度。同时,通过改进一个流播放器设计的实例演示了该方法的具体实施过程,结果表明,该方法为开发人员运用设计模式改进软件设计质量提供了有效手段。

关键词面向对象; 设计模式; 设计质量; 度量标准

中图分类号TP311.52 文献标识码 A

Research and Experiment on Applying Design Patterns to

Improve Software Design Quality

Tang Xiaojun Liu Xinsong Zha Xiaoke Qiu Yuanjie Yang Feng

(School of Computer Science and Engineering, UEST of China Chengdu 610054)

Abstract This paper proposes a semi-formal ,metric-based,problem-driven specification method to reduce the man-made effect and make the process of adopting design patterns on object-oriented software construction more automatically. Then, it demonstrates the method by redesigning an existed design of a streaming player via object-oriented method. Finally , it concludes the effect of this method on daily object oriented designing.

Key words object oriented; design pattern; design quality; metric

恰当地运用设计模式可提高面向对象软件设计质量[1],但依赖于设计者经验的运用方式常常无法达到预期的效果,不恰当的模式应用可能使设计更为复杂和难于维护[2]。为解决这一问题,文献[2]在具体的工程实践中开展了相关的尝试性工作,并取得了一定成效,但这些尝试仅局限于特定的工程设计,而不是通用的规范化方法。

本文提出一种运用设计模式改进软件设计质量的通用规范化方法,它基于客观度量标准,由问题驱动并采用半形式化描述,其主要特点为:1) 引入IEEE std.982.1的软件成熟度标准并加以改进[3],用于清晰、简洁地挖掘并描述待改进设计所面临的问题;2) 采用目前广泛使用的C&K度量体系来度量面向对象设计的各项指标[3,4],作为引入设计模式后对设计影响的客观评价基础;3) 采用半形式化的方式,以便结合标准化描述的设计模式和现有的uml设计工具(如dia),作为实现应用模式改进设计的辅助工具。

1 基本思想

1.1 度量标准

本文采用度量标准0来衡量软件设计稳定性[3],度量标准1~6为C&K面向对象度量标准[2, 4]。

1) 度量标准0为SMI=[|M t|−(|F a+|F c|+|F d|)]/|M t|,其中M t为软件中的模块全集;F c为被修改的模块集合;

2002年8月5日收稿

* 男 26岁硕士生主要从事面向对象技术、软件工程和分布式流媒体技术方面的研究

电 子 科 技 大 学 学 报 第32卷

170 F a 为新添加的模块集合;F d 为被删除的模块集合。SMI 越趋近1,表明需要变动的部分越少,软件设计越成熟、稳定。可用SMI (condition ,m )表示设计的成熟度,其中condition 为设计面临的改变需求,m 为计算SMI 的模块单位。

2) 度量标准1为WMC =,其中C ∑=n

i i C 1i 为类方法的cyclomatic complexity 复杂度。WMC 度量单个类的

复杂度,该指标越大,类越复杂,通用性、可复用性和可维护性越差。

3) 度量标准2为RFC =|RS |,RS ={M i }∪all ij {R ij },令M ={M i },M 为类的(包括其子类)方法全集,R ij 为M ij 调用的所有方法。RFC 度量某个类与系统其他部分的耦合度,RFC 越大,表明某个类与系统其他部分的耦合度越高,其可复用性、可维护性越差。

4) 度量标准3为LCOM =(|P |−|Q |) ,若|P |−|Q |<0,则LCOM =0。其中P 为类中不共享任何数据成员的方法对全集,Q 为类中共享数据成员的方法对全集。LCOM 度量某个类的内聚度,LCOM 越大,内聚度越低,类的划分越不合理,可复用性和可维护性越差,可以通过分解类降低LCOM 。

5) 度量标准4为CBO =|N relate_by_non-inheritance |,其中N relate_by_non-inheritance 为某个类发生非继承关系耦合的类的全集。CBO 度量类之间非继承耦合度,CBO 越小,类之间非继承耦合度越小,类的可复用性越好,且可理解程度和可维护性越好。

6) 度量标准5为DIT =某个类在继承关系树中层数,DIT 越大表明某个类从父类继承的成员越多,预测其行为越困难,设计和维护越复杂,但其可复用性越好。

7) 度量标准6为NOC =|N of_immediat_subclass |,其中N of_immediat_subclass 为类的直接子类集合。NOC 越大表明类设计不合理的可能性越大,但可复用性越好。 1.2 方法描述

1.2.1 基本设定

1) 令DS 为设计集合,包含供选择的设计,D x →DS 表示将设计D x 加入集合DS ;

2) 令D 为需要改造的原始设计,C 为设计面临的需求场景,P 为需要解决的问题集,D |C 表示设计D 在C 条件下需要作的改动,P :(SMI (D |C ,M ))表示由SMI (D |C ,M )导致设计面临的问题P ;

3) P i ⇒Pa i 表示列出可解决问题P i 的模式集合Pa i ;

4) TRY (D ,Pa i →P i )D ⇒i ,表示运用候选设计模式Pa i 改造设计D 得到D i ;

5) DataSet(D i ,D ) = { Data OOMETRIC ,D SMI },Data OOMETRIC =CMP (D ,D i ,OOMETRIC),D SMI = CMP (SMI (D |C ,M ),SMI (D i |C ,M )),其中DataSet(D i ,D )表示度量值比较集合,CMP(D ,D i ,OOMETRIC)表示统计并比较设计D i 和D 的度量标准1~6的值,CMP (D ,D i ,SMI )表示计算并比较设计D 和D i 的度量标准0的值。 1.2.2 应用设计模式改进设计质量方法的半形式化描述

1) D →DS ,定义C 、M ,计算SMI (D |C ,M ),得问题描述P :(SMI (D |C ,M ));

2) 对于每个P i ∈P :(1) P i ⇒Pa i ;(2) 对于每个Pa ij ∈Pa i ,TRY (D ,Pa i →P i )D ⇒i ,D i →DS ,计算得DataSet(D ,D i )={D METRICS ,D SMI },根据{D METRICS ,D SMI }评价D i ;

3) REPLACEWITH(D best ),选择DS 中最好的设计D best 替代D 。

2 应用实例

本文以一个改进流播放器设计为例,演示上文描述方法的具体实施过程。图1是一个流播放器的设计类图,其主要功能是实现从流服务器获得媒体流,解码后同步播放。图中,Skin 实现图形用户界面,Session 封装RTSP 协议[5],实现会话管理(创建媒体流、控制播放进度),MediaStream 描述一个媒体流,包括媒体流接收(RTPStream),解码(VCodec ,ACodec 负责音频和视频数据解码)和播放(VRender 、ARender 播放视频和音频解码后的数据)。

相关文档
最新文档