高雄 張貴友 唐秀蓮
摘 要 :現(xiàn)有評估方法很少考慮模塊間依賴關(guān)系程度,導(dǎo)致軟件結(jié)構(gòu)評估結(jié)果不能準(zhǔn)確反映軟件質(zhì)量。基于PageRank思想計(jì)算軟件中各模塊的依賴關(guān)系權(quán)重,改進(jìn)解耦水平(DL)的結(jié)構(gòu)評價(jià),開發(fā)了一個(gè)軟件結(jié)構(gòu)質(zhì)量評價(jià)平臺,并分別在6個(gè)數(shù)據(jù)集上實(shí)驗(yàn),比較改進(jìn)前后DL的準(zhǔn)確度。實(shí)驗(yàn)結(jié)果表明,改進(jìn)的DL在4個(gè)指標(biāo)上都有較大提高,更能準(zhǔn)確反映軟件質(zhì)量狀況。
關(guān)鍵詞:軟件質(zhì)量評價(jià);傳播代價(jià);獨(dú)立水平;解耦水平;PageRank
DOI:10. 11907/rjdk. 182348
中圖分類號:TP319 文獻(xiàn)標(biāo)識碼:A 文章編號:1672-7800(2019)005-0137-05
Abstract: In order to improve the situation that the lack of attention on the module dependency in the software leads to the inaccurate evaluation result of the software quality, we calculate the dependency weight of each module in the software on the basis of the PageRank idea to improve the decoupling level (DL) structural evaluation. We establish a software structure quality evaluation platform and experimentally compare the accuracy of DL before and after the improvement on six data sets. The experimental results show that the improved DL has a greater improvement in the four indicators, so it can reflect the quality of the software more accurately.
Key Words: software quality evaluation; propagation cost; independency level; decoupling level; PageRank
0 引言
隨著軟件產(chǎn)業(yè)飛速發(fā)展,軟件規(guī)模越來越大,功能越來越復(fù)雜,代碼量也隨之越來越大。因此,反映軟件模塊間關(guān)系的結(jié)構(gòu)好壞直接影響軟件質(zhì)量。結(jié)構(gòu)好的軟件憑借其良好擴(kuò)展性和模塊獨(dú)立性,不僅可以簡化開發(fā)人員的工作量,而且可以保證軟件質(zhì)量。
在實(shí)際開發(fā)過程中,由于開發(fā)任務(wù)繁重,開發(fā)者很難保證每次都能遵循設(shè)計(jì)好的軟件結(jié)構(gòu),但僅憑觀察代碼很難評價(jià)軟件結(jié)構(gòu)好壞,因此設(shè)計(jì)軟件體系結(jié)構(gòu)評估方法是至關(guān)重要的一環(huán)。現(xiàn)有軟件結(jié)構(gòu)評價(jià)技術(shù)側(cè)重于通過計(jì)算軟件系統(tǒng)中各模塊間耦合程度評鑒軟件的結(jié)構(gòu)質(zhì)量,即通過傳播代價(jià)(Propagation Cost,PC)[1]、獨(dú)立水平(Independency Level,IL)[2]和解耦水平(Decoupling Level,DL)[3]定量地評價(jià)出軟件結(jié)構(gòu)質(zhì)量。在上述3個(gè)指標(biāo)中,DL指標(biāo)是最具代表性的,但它分配給軟件中各模塊的權(quán)重由模塊中文件數(shù)量得到,沒有考慮模塊間不同依賴關(guān)系對軟件質(zhì)量的影響程度不同。本文提出通過PageRank算法計(jì)算出軟件中各模塊的依賴關(guān)系權(quán)重,從而提高DL度量準(zhǔn)確性,并結(jié)合PC、IL、DL以及改進(jìn)的DL(Improved DL,IDL)4種評價(jià)指標(biāo)開發(fā)出一個(gè)軟件結(jié)構(gòu)質(zhì)量評價(jià)平臺。實(shí)驗(yàn)結(jié)果表明,IDL度量結(jié)構(gòu)有較好效果。
1 研究現(xiàn)狀
一直以來,代碼質(zhì)量度量方法都是軟件質(zhì)量領(lǐng)域研究熱點(diǎn),常見度量元有McCabe循環(huán)復(fù)雜度[4]、Halstead度量元[5]、代碼行等。還有許多度量元專用于度量面向?qū)ο箝_發(fā)的軟件,如CK度量元[6]、LK度量元[7]、MOOD度量元[8]等,可以用來預(yù)測質(zhì)量問題或者定位缺陷位置[9-12]。此外,還有部分研究人員將不同度量元結(jié)合起來,用于度量軟件可維護(hù)性,例如Oman[13] & Hagemeister[14]提出了可維護(hù)性指標(biāo)(MI),Bijlsma等[15]、Heitlager等[16]也進(jìn)行了類似工作。
雖然目前面向代碼質(zhì)量的度量方法已經(jīng)相當(dāng)豐富,但是Nagappan等[17]指出,在不同軟件中,最合適的度量元并不一定相同;Menzies[18] 也指出從一個(gè)項(xiàng)目中收集到的數(shù)據(jù)在另一個(gè)項(xiàng)目中并不一定適用。所以,提出一個(gè)相對普適的軟件度量或評價(jià)方法成為當(dāng)下需要解決的關(guān)鍵問題。
為了科學(xué)有效地研究軟件體系結(jié)構(gòu),建立合適的模型描述軟件各個(gè)模塊間關(guān)系十分必要。Parnas等[19]提出的 information hiding principle把模塊當(dāng)作一個(gè)獨(dú)立的分配任務(wù)。另外,Baldwin等[20]提出的design rule theory理論表明,獨(dú)立模塊是由系統(tǒng)設(shè)計(jì)規(guī)則(DRs)解耦創(chuàng)建的,只要DRs保持穩(wěn)定,某個(gè)獨(dú)立模塊的改變就不會影響到其它模塊;Sullivan等[21]將該項(xiàng)理論引入軟件設(shè)計(jì)中來,在軟件中design rule常常體現(xiàn)為接口和抽象類,當(dāng)接口和抽象類不變時(shí),滿足design rule的接口實(shí)現(xiàn)類的增加、刪除、更新,都不會影響到系統(tǒng)其它部分。這些理論雖然可以一定程度體現(xiàn)軟件結(jié)構(gòu)質(zhì)量,但是還不全面,并且沒有實(shí)際操作或算法體現(xiàn)。
為了在軟件系統(tǒng)中監(jiān)測設(shè)計(jì)規(guī)則和獨(dú)立模塊,Cai等[22-23]利用聚類算法提出了設(shè)計(jì)規(guī)則等級(DRH),它把一個(gè)軟件分成若干層,其中最頂層往往是接口或抽象類等一些最重要的文件。文獻(xiàn)[24]將DRH用于軟件恢復(fù)。此后,相關(guān)學(xué)者又對DRH進(jìn)行了可視化,形成了設(shè)計(jì)結(jié)構(gòu)矩陣(DSM)。
在上述理論基礎(chǔ)上,相關(guān)專家分別基于傳播代價(jià)、獨(dú)立水平、解耦水平提出了一些可行方案。具體有:
(1)基于傳播代價(jià)的結(jié)構(gòu)評價(jià)。為了測量系統(tǒng)變化的修改性和影響,MacCormack等[1]提出的傳播代價(jià)是一種依賴結(jié)構(gòu)矩陣度量軟件系統(tǒng)可變性的方法。研究者可從架構(gòu)的依賴結(jié)構(gòu)矩陣視圖中提取穩(wěn)定性和傳播成本指標(biāo),表明變更傳播的可能性,因此它對未來維護(hù)成本和修改易用性產(chǎn)生了影響。提供一個(gè)依賴結(jié)構(gòu)矩陣,首先計(jì)算傳遞閉包添加間接依賴關(guān)系,然后計(jì)算矩陣中存在依賴關(guān)系的節(jié)點(diǎn)占總關(guān)系節(jié)點(diǎn)的比例。傳播代價(jià)數(shù)值越低,說明軟件系統(tǒng)耦合性越低,結(jié)構(gòu)就越好。
(2)基于獨(dú)立水平的結(jié)構(gòu)評價(jià)。由于環(huán)境因素的高度波動性,模塊化和穩(wěn)定軟件開發(fā)對軟件架構(gòu)師來說是一個(gè)越來越大的挑戰(zhàn)。利益相關(guān)者關(guān)注是影響架構(gòu)決策的經(jīng)典外部因素,影響軟件的模塊性和穩(wěn)定性。因此,驅(qū)動軟件變化的環(huán)境條件是推理傳統(tǒng)和現(xiàn)代架構(gòu)設(shè)計(jì)替代方案的關(guān)鍵步驟。直接受環(huán)境因素影響的架構(gòu)級決策對于在整個(gè)軟件開發(fā)生命周期中保持模塊化和穩(wěn)定性至關(guān)重要。因此,需要從體系結(jié)構(gòu)模型而不是源代碼評估和權(quán)衡模塊化替代品。Cai等[22-23]提出的獨(dú)立水平,以量化設(shè)計(jì)支持模塊式獨(dú)立搜索和替換的程度,揭示哪種模塊化替代方案可以從高級模型中生成更穩(wěn)定的模塊化設(shè)計(jì)。
(3)基于解耦水平的結(jié)構(gòu)評價(jià)。Baldwin等[20]認(rèn)為一個(gè)高可用模塊應(yīng)該是足夠小的并很少具有依賴性,設(shè)計(jì)規(guī)則的層次結(jié)構(gòu)允許人們評估軟件架構(gòu)潛力,以生成選項(xiàng)值,因?yàn)槠滹@式地識別模塊、大小以及它們之間是如何解耦的。因此,Cai等[22-23]提出了結(jié)構(gòu)水平以度量體系結(jié)構(gòu)與模塊的耦合程度。具體地,按設(shè)計(jì)規(guī)則的層次結(jié)構(gòu)將模塊劃分為層,計(jì)算每一層的結(jié)構(gòu)水平,然后求平均值。
雖然基于解耦水平(DL)的結(jié)構(gòu)評價(jià)很好地實(shí)現(xiàn)了軟件分層計(jì)算,但是它分配給軟件中各模塊的權(quán)重是由模塊中文件數(shù)量得到的,沒有考慮到模塊間不同依賴關(guān)系對軟件質(zhì)量的影響程度不同,對一些核心文件是不公平的,例如被多次實(shí)現(xiàn)的接口類。針對該問題,本文提出通過PageRank算法計(jì)算出軟件中各模塊依賴關(guān)系權(quán)重,以提高DL度量的準(zhǔn)確性。
目前軟件結(jié)構(gòu)評價(jià)只停留在度量指標(biāo)設(shè)計(jì)上,沒有一個(gè)開放平臺供開發(fā)者們檢驗(yàn)自己的軟件結(jié)構(gòu)是否足夠好,并且,基于PageRank算法改進(jìn)DL的評價(jià)指標(biāo)理論上可以提高評價(jià)準(zhǔn)確度。本文從解決以上問題入手開展實(shí)證研究,對得到的數(shù)據(jù)進(jìn)行合理分析,并開發(fā)出一個(gè)可供任意用戶使用的軟件質(zhì)量評價(jià)平臺。本文貢獻(xiàn)主要有:①基于PageRank算法改進(jìn)DL評價(jià)算法,并通過實(shí)驗(yàn)比較改進(jìn)前后的評價(jià)結(jié)果;②利用調(diào)研過程中得到的結(jié)論,實(shí)現(xiàn)了一個(gè)簡單的軟件結(jié)構(gòu)評價(jià)平臺。該平臺基于B/S架構(gòu),具有用戶管理模塊、文件上傳模塊和結(jié)構(gòu)度量模塊等,可對用戶提交的軟件進(jìn)行質(zhì)量評價(jià)。
2 DL算法演化
2.1 DL介紹
DL(Decoupling Level)是一個(gè)對Baldwin and Clark的Design Rule Theory與Parnas's Information Hiding Principle以及DRH理論的結(jié)合,是一個(gè)用來衡量軟件去偶成模塊后軟件結(jié)構(gòu)好壞程度的指標(biāo)。基于DRH理論,一個(gè)軟件被分為n個(gè)層,根據(jù)Baldwin and Clark的Design Rule Theory,在每層產(chǎn)生一些模塊,這些模塊根據(jù)Parnas理論是獨(dú)立的。一個(gè)軟件的DL,應(yīng)是經(jīng)過DRH分層之后每層[DLLi](0
將[#AllFiles]定義為系統(tǒng)中文件的總數(shù),將[#File(Mj)]定義為DRH模塊中的文件數(shù)[Mj]。給定具有n層的DRH,其DL等于所有層DL的總和。
3 改進(jìn)DL軟件質(zhì)量評估平臺
本文搭建了一個(gè)B/S架構(gòu)的軟件結(jié)構(gòu)評價(jià)平臺,專門用于評價(jià)Java項(xiàng)目。該平臺具有完善的用戶模塊和結(jié)構(gòu)質(zhì)量評價(jià)模塊,用戶登錄后,可以提交檢測軟件源碼壓縮包,服務(wù)器對其進(jìn)行解壓,分析出軟件中各模塊的依賴關(guān)系,然后計(jì)算PC、IL、DL、IDL,將計(jì)算結(jié)果保存到數(shù)據(jù)庫,最終將評價(jià)結(jié)果展示在用戶頁面上。
3.1 設(shè)計(jì)目的
平臺開發(fā)應(yīng)著重兩點(diǎn):對提交軟件進(jìn)行PC、IL、DL、IDL分析。由于軟件結(jié)構(gòu)指標(biāo)是一個(gè)較新的技術(shù),現(xiàn)在也沒有較為成熟的平臺或軟件提供對PC、IL、DL的分析,所以平臺最初目的是給開發(fā)者們提供一個(gè)能夠分析軟件結(jié)構(gòu)指標(biāo)的便捷途徑,另一個(gè)目的是為改進(jìn)的DL收集更多檢測數(shù)據(jù)。由于改進(jìn)的DL測試樣本較少,希望通過該平臺收集大量樣本數(shù)據(jù),以論證改進(jìn)DL相較于原始DL的優(yōu)越性。在實(shí)驗(yàn)驗(yàn)證時(shí)發(fā)現(xiàn),改進(jìn)的DL在實(shí)際運(yùn)行過程中存在耗時(shí)較長的問題,希望通過檢測數(shù)據(jù)進(jìn)行測試和改進(jìn)。
3.2 數(shù)據(jù)集
本文使用了6個(gè)不同的真實(shí)代碼,以比較改進(jìn)前后DL的準(zhǔn)確度,其中包括:Apache Ant、ElasticSearch、Guava、Tetris、AircraftBattle、CRM。
3.3 網(wǎng)站組織結(jié)構(gòu)
如圖1所示,軟件質(zhì)量評測網(wǎng)的主要頁面是首頁和個(gè)人中心頁。首頁是軟件質(zhì)量評測的門戶頁面,為了便于開發(fā)者使用,首頁風(fēng)格簡潔,只提供上傳檢測、登錄和注冊功能。個(gè)人中心頁面提供與開發(fā)者個(gè)人信息相關(guān)的頁面,如查看個(gè)人信息、修改密碼和查看檢測記錄等。
3.4 網(wǎng)站功能模塊
從開發(fā)角度考慮整個(gè)網(wǎng)站,使用圖2刻畫網(wǎng)站內(nèi)部結(jié)構(gòu)。
網(wǎng)站主要由5個(gè)模塊組成:用戶模塊、上傳模塊、分析依賴模塊、結(jié)構(gòu)度量模塊、視圖模塊。