劉偉+李雅琎+胡志剛
摘 要:軟件可維護性是面向?qū)ο筌浖到y(tǒng)的重要質(zhì)量屬性之一,合理使用設(shè)計模式可以改善軟件的可維護性。目前關(guān)于設(shè)計模式對軟件可維護性影響的研究主要停留在定性分析階段,缺少定量分析。針對這一問題,選取與軟件可維護性相關(guān)的面向?qū)ο蠖攘恳蜃雍涂删S護性指數(shù),結(jié)合具體實例,研究了應用設(shè)計模式前后度量因子和可維護性指數(shù)變化情況,定量分析出設(shè)計模式對軟件可維護性的影響。
關(guān)鍵詞:設(shè)計模式;軟件可維護性;面向?qū)ο蠖攘恳蜃樱豢删S護性指數(shù)
DOIDOI:10.11907/rjdk.162142
中圖分類號:TP319
文獻標識碼:A文章編號:1672-7800(2016)012-0095-03
0 引言
設(shè)計模式是從眾多優(yōu)秀軟件系統(tǒng)中總結(jié)出來的專家設(shè)計經(jīng)驗,合理使用設(shè)計模式可以有效改善軟件設(shè)計和程序代碼質(zhì)量[1]。目前關(guān)于設(shè)計模式對軟件質(zhì)量影響的研究更多停留在定性分析階段,設(shè)計模式對軟件質(zhì)量改善的定量研究工作較少。正因如此,設(shè)計模式對軟件質(zhì)量影響的利弊在業(yè)界備受爭議。
軟件可維護性是指軟件維護的難易程度,圖靈獎得主Alan J.Perlis曾說過:在長久運行時間的考驗下,每個程序都變得脆弱不堪。軟件在開發(fā)結(jié)束后會經(jīng)歷一段長久的維護期。因此,可維護性是軟件系統(tǒng)重要的質(zhì)量屬性之一。
本文定量研究了設(shè)計模式對軟件可維護性影響,通過精確的數(shù)值對使用設(shè)計模式前后系統(tǒng)的可維護性進行精確的質(zhì)量分析。與傳統(tǒng)的定性分析相比,定量分析能夠更準確、有效地證實設(shè)計模式的使用效果,更具說服力。
1 可維護性度量因子選取
為了提供一個定量方法來測量面向?qū)ο筇卣鞯能浖|(zhì)量屬性,Bansiya和Davis提出一種具有層次結(jié)構(gòu)的面向?qū)ο笤O(shè)計質(zhì)量評估方法——QMOOD(Quality Model for Object-Oriented Design)[2],該方法構(gòu)建了一個面向?qū)ο蟮馁|(zhì)量評估模型,提供了設(shè)計質(zhì)量屬性(Design Quality Attributes)、面向?qū)ο笤O(shè)計屬性(OO Design Properties)、面向?qū)ο笤O(shè)計因子(OO Design Metrics)和面向?qū)ο笤O(shè)計組件(OO Design Components)4個層次和它們之間的三級映射。Ampatzoglou等[3]首次將QMOOD運用到設(shè)計模式對軟件質(zhì)量影響的研究中并取得了較好效果。本文采用簡化的QMOOD模型,首先針對軟件可維護性選取合適的度量因子,然后計算應用某個設(shè)計模式前后度量因子值,最后通過度量因子值的變化來定量分析該設(shè)計模式對軟件可維護性影響。
本文選取CK度量集和可維護性指數(shù)作為軟件可維護性度量因子。
1.1 CK度量集
在研究面向?qū)ο笙到y(tǒng)時,經(jīng)典的面向?qū)ο蠖攘考狢K度量集應用非常廣泛。CK度量集由Chidamber和Kemerer[4]于1994年提出,它奠定了面向?qū)ο筌浖攘康幕A(chǔ)。CK度量集中的度量因子與面向?qū)ο筌浖目删S護性密切相關(guān)。
CK度量集包含6個基于面向?qū)ο箢愒O(shè)計的度量因子,從不同角度反映了面向?qū)ο笙到y(tǒng)的設(shè)計質(zhì)量,這6個因子分別是:加權(quán)方法計數(shù)(Weighted Methods for per Class,WMC)、繼承樹深度(Depth of Inheritance Tree,DIT)、子類個數(shù)(Number Of Children,NOC)、對象類之間的耦合(Coupling Between Object classes,CBO)、對類的響應(Response For a Class,RFC)和方法內(nèi)聚缺乏度(Lack of Cohesion in Methods,LCOM)。
1.2 可維護性指數(shù)
可維護性指數(shù)(Maintainability Index,MI)由Oman等[5]于1992年提出,其計算公式如下:
公式(1)中的參數(shù)說明如表1所示。
MI的典型取值范圍在-100~200,MI值越高說明軟件的可維護性越好。
2 設(shè)計模式對可維護性影響定量分析
2.1 實驗數(shù)據(jù)
根據(jù)設(shè)計模式的使用頻率和重要性[6],本文選取10種常用的軟件設(shè)計模式,每種設(shè)計模式提供5個程序規(guī)模相差不大的實例。對每個實例,提供兩個版本的程序代碼,使用設(shè)計模式的代碼版本,簡記為DP(Design Pattern),以及不使用設(shè)計模式的代碼版本,簡記為NDP(Non-Design Pattern),這些實例主要來自文獻[6]。通過對這些軟件可維護性相關(guān)度量因子進行計算,研究設(shè)計模式使用前后可維護性度量因子變化,將實驗數(shù)據(jù)與開發(fā)人員經(jīng)驗進行比對,分析實驗結(jié)果。
本研究選取的10種常用設(shè)計模式有:工廠方法模式(Factory Method Pattern,F(xiàn)MP)、抽象工廠模式(Abstract Factory Pattern,AFP)、適配器模式(Adapter Pattern,AP)、代理模式(Proxy Pattern,PP)、外觀模式(Facade Pattern,F(xiàn)P)、橋接模式(Bridge Pattern,BP)、觀察者模式(Observer Pattern,OP)、策略模式(Strategy Pattern,SrP)、狀態(tài)模式(State Pattern,SaP)和模板方法模式(Template Method Pattern,TMP)。
2.2 實驗結(jié)果
以程序?qū)嵗秊閱挝唬嬎闱拔乃龅亩攘恳蜃?,然后?個實例的平均值,得到設(shè)計模式使用前后度量因子的平均值,計算結(jié)果如表2所示。
2.3 實驗結(jié)果分析
(1)加權(quán)方法計數(shù)WMC:WMC越大,說明理解這個類所需時間越多。方法的個數(shù)多可能會導致沿用這些方法的子類行為更加復雜,使其可維護性降低。實驗結(jié)果表明,7個設(shè)計模式會降低WMC值,WMC越小,可維護性越高。
(2)繼承樹深度DIT:DIT值越高的類繼承更多的父類方法,使得它們的行為難以預測且維護相對復雜,可維護性更差。實驗結(jié)果表明,有3個設(shè)計模式會使平均DIT變大,5個設(shè)計模式會使平均DIT變小,2個設(shè)計模式對DIT沒有影響。
(3)子類個數(shù)NOC:由于大部分設(shè)計模式都引入了抽象層,通過子類來擴展系統(tǒng)行為,因此大部分設(shè)計模式的使用都會導致NOC變大。抽象層的引入提高了系統(tǒng)的可擴展性和靈活性,便于系統(tǒng)維護和二次開發(fā)。
(4)對象類之間的耦合CBO:根據(jù)軟件工程高內(nèi)聚、低耦合原則,降低系統(tǒng)耦合度可以提高系統(tǒng)的可維護性。過多的耦合會使整個系統(tǒng)變得難以維護,比如在一個類中進行修改可能會影響到與其產(chǎn)生耦合的其它類。實驗結(jié)果表明,10個設(shè)計模式都可降低CBO,通過降低類與類之間的耦合度來提高系統(tǒng)的可維護性。
(5)類的響應RFC:某一個方法的RFC值很大,說明它調(diào)用了許多其它方法,對可維護性產(chǎn)生負面影響。從實驗結(jié)果可以發(fā)現(xiàn),除使用外觀模式會使RFC值變大外,其余9種設(shè)計模式都會使系統(tǒng)的平均RFC值變小。
(6)方法內(nèi)聚缺乏度LCOM:如果一個類的LCOM值高,可能意味著它所定義的方法可被分割到多個獨立類中,不與其它方法共享字段,可以獨立運行。類的LCOM值低說明類的設(shè)計質(zhì)量高、封裝性好、可維護性高。由于實驗項目比較簡單,類中的方法個數(shù)不多,因此在計算LCOM值時方法對的個數(shù)相對較小,所以整體來說LCOM值都偏小。實驗結(jié)果表明,大部分設(shè)計模式的使用對系統(tǒng)的平均LCOM值影響不大。
(7)可維護性指數(shù)MI:MI在軟件可維護性度量中廣泛使用,MI值越高說明軟件的可維護性越好。繪制設(shè)計模式使用前后MI的對比情況如圖1所示。從圖1可知,除外觀模式(FP)和觀察者模式(OP)外,其余8種設(shè)計模式均可使維護性指數(shù)變大。由于實驗項目代碼規(guī)模較小,業(yè)務方法較少,導致設(shè)計模式使用效果不顯著。
3 結(jié)語
設(shè)計模式是成熟有效的專家設(shè)計方案,設(shè)計模式是否有助于提高軟件質(zhì)量,業(yè)界一直存在爭議。本文結(jié)合軟件度量因子,利用10種常用的設(shè)計模式對軟件可維護性影響
進行了定量計算,探討了可維護性指數(shù)及面向?qū)ο筌浖攘恐笖?shù)與軟件可維護性的相互關(guān)系。實驗結(jié)果表明,大部分設(shè)計模式的使用有助于提高面向?qū)ο筌浖目删S護性,少數(shù)設(shè)計模式對軟件可維護性影響不顯著,個別設(shè)計模式對軟件可維護性有負面影響。
后續(xù)一方面將收集和整理項目實例進行定量評估,進而獲得更加科學的結(jié)果,另一方面將研究更多的軟件質(zhì)量屬性,包括可復用性、可靠性等,結(jié)合一系列實驗,建立一套較為完整的設(shè)計模式對軟件質(zhì)量影響的評估框架。
參考文獻:
[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,F(xiàn)RANTZESKOU 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] 劉偉.設(shè)計模式的藝術(shù)軟件開發(fā)人員內(nèi)功修煉之道 [M].北京:清華大學出版社,2013.
(責任編輯:杜能鋼)