魏 崢
摘要:度量技術(shù)是保證軟件質(zhì)量的重要手段,它定量地反映了軟件某一方面的特征。隨著面向?qū)ο蠹夹g(shù)的發(fā)展,傳統(tǒng)的結(jié)構(gòu)化度量不再適合面向?qū)ο蟮能浖嫦驅(qū)ο蠖攘渴菍?duì)象技術(shù)不可分割的一部分,基于對(duì)象技術(shù)的軟件度量成為必然的需求,從而面向?qū)ο筌浖O(shè)計(jì)度量的研究與實(shí)現(xiàn)是文章研究的內(nèi)容。文章在現(xiàn)有度量公式的基礎(chǔ)上,利用正則表達(dá)式,可以簡(jiǎn)單度量出Java源代碼的復(fù)雜度屬性。
關(guān)鍵詞:軟件度量;面向?qū)ο螅欢攘抗ぞ?/p>
中圖分類號(hào):TP311.5
文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1006-8937(2009)16-0116-02
1軟件度量的背景和意義
軟件度量(software measurement)是對(duì)軟件開發(fā)項(xiàng)目、過(guò)程及其產(chǎn)品進(jìn)行數(shù)據(jù)定義、收集以及分析的持續(xù)性定量化過(guò)程,目的在于對(duì)此加以理解、預(yù)測(cè)、評(píng)估、控制和改善。沒有軟件度量,就不能從軟件開發(fā)的暗箱中跳將出來(lái)。通過(guò)軟件度量可以改進(jìn)軟件開發(fā)過(guò)程,促進(jìn)項(xiàng)目成功,提高軟件質(zhì)量。
隨著面向?qū)ο箝_發(fā)方法和面向?qū)ο笤O(shè)計(jì)語(yǔ)言的廣泛使用,用戶采用面向?qū)ο蠹夹g(shù)開發(fā)的軟件系統(tǒng)和產(chǎn)品日益增多,有關(guān)面向?qū)ο筌浖攘康难芯恳彩艿杰浖绲闹匾?,面向?qū)ο蠹夹g(shù)采用數(shù)據(jù)抽象、封裝、繼承、多態(tài)性、信息隱藏、重用機(jī)制等。為提高軟件的可重用性,增強(qiáng)可維護(hù)性、可靠性,提高生產(chǎn)效率等方面提供了可能。
2面對(duì)對(duì)象軟件度量
2.1度量的定義
度量(Metrics)的定義是:“度量是一個(gè)函數(shù),它的輸入是軟件數(shù)據(jù),輸出是單一的數(shù)值,能用以解釋軟件所具有的一個(gè)給定屬性對(duì)軟件質(zhì)量影響的程度?!避浖|(zhì)量度量是對(duì)影響軟件質(zhì)量的屬性所進(jìn)行的定量測(cè)量。
人們已經(jīng)提出的軟件度量包括軟件復(fù)雜性度量、模塊性度量、可修改性度量、可移植性度量、可擴(kuò)充性度量、可靠性度量、可維護(hù)性度量等等。盡管在IEEE的定義中,“軟件數(shù)據(jù)”沒明確提出,但如果評(píng)測(cè)一個(gè)軟件產(chǎn)品,則這個(gè)被評(píng)測(cè)的產(chǎn)品就是輸入的軟件數(shù)據(jù),這些軟件數(shù)據(jù)均可以形式地予以定義。
2.2面向?qū)ο筌浖攘磕P?/p>
傳統(tǒng)的非面向?qū)ο蟮能浖攘枯^多的關(guān)心軟件復(fù)雜度的度量。通過(guò)軟件復(fù)雜性折射軟件的質(zhì)量。面向?qū)ο蟮姆椒▽W(xué)的出現(xiàn)帶來(lái)了軟件開發(fā)的革命,也帶來(lái)了面向?qū)ο筌浖攘康母锩a槍?duì)面向?qū)ο蟮能浖芷诤唾|(zhì)量保證,F(xiàn).B.Abem非形式的提出了七條標(biāo)準(zhǔn):①度量應(yīng)該形式化定義;②度量應(yīng)該與系統(tǒng)大小無(wú)關(guān);③度量應(yīng)該選擇合適的刻度類型;④度量應(yīng)該在生命周期的早期就可用;⑤度量應(yīng)該具有可擴(kuò)展性;⑥度量應(yīng)該易于計(jì)算;⑦度量應(yīng)該獨(dú)立于語(yǔ)言。
Abreu的七條標(biāo)準(zhǔn)對(duì)開發(fā)針對(duì)面向?qū)ο蟮亩攘烤哂幸欢ǖ囊饬x。近幾年來(lái)涌現(xiàn)了大量面向?qū)ο蟮能浖攘磕P?,比較有影響的如:C&K度量集,MOOD度量集,MOOD2度量集等。
3Java軟件的度量工具的設(shè)計(jì)思想與開發(fā)
3.1Java軟件度量工具(Metric Tool)的設(shè)計(jì)
所謂Java軟件的質(zhì)量度量,就是對(duì)Java程序源代碼進(jìn)行分析度量。Java軟件的度量工具設(shè)計(jì)的總體思路將遵從面向?qū)ο笤O(shè)計(jì)的基本原則,如圖1。
文章設(shè)計(jì)的軟件度量工具是一個(gè)基于C&K和MOOD理論的度量工具,該工具可以運(yùn)行在Windows XP上,其主要功能就是通過(guò)對(duì)用戶Java源程序的掃描,計(jì)算出C&K度量指標(biāo):方法數(shù)、繼承類的總數(shù),接口總數(shù),繼承樹深度(DIT)、孩子數(shù)目(NOC)、每個(gè)類的加權(quán)方法(WMC);MOOD度量指標(biāo):方法繼承因子(MIF)、多態(tài)因子(PF)。通過(guò)所該工具得到的度量數(shù)據(jù),可以幫助開發(fā)人員及時(shí)地了解程序的復(fù)雜性,估計(jì)出程序的穩(wěn)定性及可維護(hù)性,指導(dǎo)測(cè)試人員進(jìn)行有效的測(cè)試。
3.2實(shí)現(xiàn)功能模塊的簡(jiǎn)述
查看度量結(jié)果有兩個(gè)入口,首先是本地工程度量,其次是歷史工程查看。
3.2.1本地工程度量(XML信息庫(kù)的創(chuàng)建)
由于我們?cè)O(shè)計(jì)的度量工具以xml作為信息庫(kù),因此度量某工程首先必須把需要度量的信息存入xml信息庫(kù)中,實(shí)現(xiàn)的步驟如下:
①選擇工程目錄,遍歷整個(gè)工程目錄,提取出.java的文件名。②得到的.java的輸出流(BufferedReader),將其傳人語(yǔ)法分析器中,返回List集合類,該集合存放著XClass對(duì)象。由從該XClass對(duì)象中可以提取出這個(gè)類的繼承類、實(shí)現(xiàn)的接口、方法個(gè)數(shù)、方法名稱、變量個(gè)數(shù)及名稱、子類的個(gè)數(shù)、繼承數(shù)的深度等信息。③將得到的XClass傳入XML創(chuàng)建類(XmlFileCreate)中,該類通過(guò)傳入的信息返回要一定格式的Document,通過(guò)idom來(lái)構(gòu)建xml信息庫(kù)。JDOM是一個(gè)開源項(xiàng)目,它基于樹型結(jié)構(gòu),利用純JAVA的技術(shù)對(duì)XML文檔實(shí)現(xiàn)解析、生成、序列化以及多種操作。JDOM直接為JAVA編程服務(wù)。它利用更為強(qiáng)有力的JAVA語(yǔ)言的諸多特性(方法重載、集合概念以及映射),把SAX和DOM的功能有效地結(jié)合起來(lái)。在使用設(shè)計(jì)上盡可能地隱藏原來(lái)使用XML過(guò)程中的復(fù)雜性。④將得到的Document寫入創(chuàng)建的XML文件中,存放在工程目錄xmlfile文件夾下面,該文件默認(rèn)以工程名稱+時(shí)間作為文件名,來(lái)避免出現(xiàn)相同的文件名,名字規(guī)范如下:softmeasure-2008-05-31 18:36:50.xml。⑤歷史文件的管理。包括歷史文件的修改名稱、刪除、查看度量結(jié)果。
3.2.2度量計(jì)算器的實(shí)現(xiàn)
度量計(jì)算器讀取xml信息庫(kù)的結(jié)果,根據(jù)度量模型對(duì)相關(guān)度量指標(biāo)進(jìn)行計(jì)算。度量計(jì)算器只和知識(shí)庫(kù)交換,不受外界環(huán)境的影響,這是知識(shí)庫(kù)的隔離變化和分析器的適應(yīng)變化發(fā)揮功效的體現(xiàn)。度量計(jì)算器套用C&K和MOOD度量集給出了一些計(jì)算公式,來(lái)實(shí)現(xiàn)軟件工程的度量。
3.2.3度量結(jié)果的展示
①窗口視圖展現(xiàn)。度量結(jié)果的展示由三個(gè)窗口視圖JInteranlFrame和中間JTabbedPane組成。三個(gè)窗口視圖分別是項(xiàng)目視圖、類視圖、信息視圖。類視圖:以樹的形式展現(xiàn)了類的信息,包括繼承類、實(shí)現(xiàn)接口、方法體及名稱;信息視圖:以JTable顯示有C&K、MOOD套件度量出的信息、以及其他類的信息;項(xiàng)目視圖:以樹的形式展現(xiàn)了工程目錄所有java文件。樹的結(jié)構(gòu)按工程目錄一>包名稱一>類名稱,該樹添加了一個(gè)鼠標(biāo)事件監(jiān)聽器。②中間區(qū)域信息的展現(xiàn)。中間信息區(qū)域?yàn)橐粋€(gè)JTabbedPane面板,有4中的tab頁(yè)的類型,報(bào)表的實(shí)現(xiàn)一JFmeChart包來(lái)實(shí)現(xiàn),JFreeChart目前是最好的java圖形解決方案,基本能夠解決目前的圖形方面的需求,本系統(tǒng)中用到了餅圖和柱狀圖的實(shí)現(xiàn)。③XML信息庫(kù)的讀取和存放。對(duì)XML信息庫(kù)的讀取同樣是用jdom包實(shí)現(xiàn),讀取到的信息則將其存在Map集合類中,以key值作為包名,值是一個(gè)以類名為key值,TreeNode類為value值的HashMap。④面板工廠管理。由于系統(tǒng)面板比較多,所以采用工廠模式對(duì)面板進(jìn)行管理,使得代碼更加清晰易懂。⑤程序截圖,如圖2所示。
3.3Java軟件度量工具開發(fā)平臺(tái)與工具的介紹
Eclipse平臺(tái):Eclipse是一個(gè)開放源代碼的、基于Java的可擴(kuò)展開發(fā)平臺(tái)。Eclipse是一個(gè)開發(fā)源碼項(xiàng)目,可擴(kuò)展性很好,而且任何人都可以免費(fèi)得到,并可以在此基礎(chǔ)上開發(fā)各自的插件,開源插件和商業(yè)插件都可以用來(lái)擴(kuò)充Eclipse。因此越來(lái)越受人們關(guān)注。
4結(jié)語(yǔ)
面向?qū)ο筌浖攘考捌渥詣?dòng)化的研究具有廣闊的應(yīng)用前景。面向?qū)ο筌浖亩攘磕壳爸皇翘幱谔接戨A段,尚沒有從面向?qū)ο筌浖奶攸c(diǎn)挖掘出具有理論價(jià)值和實(shí)用價(jià)值的度量方法和準(zhǔn)則。以上的度量方法只是對(duì)面向?qū)ο蠹夹g(shù)中某一方面特有的內(nèi)部屬性進(jìn)行了評(píng)估,還不能將它們與整個(gè)系統(tǒng)的件復(fù)雜性對(duì)應(yīng)起來(lái)。即使不精確,也有一定的參考價(jià)值,因此,我們所設(shè)計(jì)出的度量工具也正基于這些度量集來(lái)實(shí)現(xiàn)。