朱云娜
(遼寧廣播電視大學 110034)
在軟件工程與技術領域中,傳統的軟件度量技術與面向對象的軟件度量技術之間,最大的不同之處主要表現在面向對象的度量技術在實現定量測量的過程中,需要對于類之間的耦合程度以及類的復雜度、內聚力、繼承層次復雜度等進行研究。在面向對象的軟件度量體系中,雖然能夠應用傳統方法進行軟件體系中某一模塊復雜度的定量測量與度量實現,但是對于軟件體系中的某些定義的還需要進行補充。結合當前軟件工程以及技術的發展應用情況,國內外已經存在有一些進行計算機程度復雜度計算應用的軟件工具,像SafePro/Eval等軟件工具就能夠實現對于C++以及ADA等語言程序中McCabe以及Halstead、MOOSE、MOOD等計算機程序復雜度的計算測量。此外,在軟件工具的設計開發中,通過應用CK度量套件中的度量方法,并利用Delphi進行設計開發出針對Java語言程序的度量工具,在我國也有實現,同時,再加上我國這一時期設計開發出的通過VC++的應用進行McCabe、Halstead復雜度的軟件工具,這兩種軟件工具均在不具有跨平臺性的情況下,都涉及到對于計算機數據庫的相關操作。最后,在這一時期,國外的Shimba以及Jstyle則是針對Java語言程序的開發設計的兩個度量工具,在實際應用中具有不能夠實現Halstead復雜度計算的局限性。
在面向對象的軟件度量技術中,面向對象程序的基本單位是類,因此,在面向對象的度量計算中,主要是進行類的規模以及類的層次、類的協作、個體類的度量計算。通常情況下,在進行程序規模的度量計算中多采用行數度量法;對于類之間的繼承層次復雜性度量計算,則多采用DIT以及NOC度量法進行度量計算;對于類之間的通信復雜性則多是采用RFC度量法進行度量計算;此外,對于類的邏輯復雜性的度量計算則采用的是WMC度量法;最后,應用McCabe以及Halstead度量法進行方法復雜性的度量計算。
首先,在進行程序規模的度量中,主要是通過對于程序規模的度量,實現對于程序復雜性的度量評價,通常情況下,多采用的是行數度量法,也就是通過對于程序的源代碼行數情況進行統計,實現對于程序規模以及程序復雜性的度量。通常情況下,在相關研究中顯示,小于100條語句的小程序出錯率與可執行代碼的行數之間具有一定的線性關聯,往往隨著程序的增大,程序出錯率會呈現出非線性增長變化。因此,使用行數度量法能夠非常直觀的實現對于程序規模與復雜性的度量。
其次,在進行類之間的繼承層次復雜性度量計算中,Java語言程序對于類之間的繼承層次要求使用單繼承機制實現,也就是說Java語言程序中,類繼承樹都只存在有一個根結點,不管是J2SE提供的類,還是程序員開發設計的類都繼承于這個根結點。由于在進行類之間的繼承層次復雜性度量計算中,主要是進行程序開發員所開發程序的復雜度度量計算,因此,多使用DIT以及NOC兩種度量方法進行類之間繼承層次復雜度的計算,其中,DIT度量法主要是進行繼承樹的深度度量計算,也就是進行從結點到樹根之間最大距離的度量計算;而NOC度量法則是進行直接從屬于某類的子類總數的度量計算。
再次,在進行類之間的通信復雜性度量計算中,類的響應集合RFC通常多包含類中被調用的其他類的方法,能夠實現對于潛在類之間的通信度量,因此,對于類之間的通信復雜度多使用RFC度量法進行計算。具體度量計算過程如下,假設某類的方法為M1、M2、M3……Mn,{Ri}表示某類中方法i調用的方法集合,{M}表示某類的所有方法的集合,則有RS={M}∪alli{Ri};RFC=|RS|。
在進行類的邏輯復雜性的度量計算中,類的加權方法數WMC主要是對于類所包含的方法數的體現與反映,或者是對于類之間方法的邏輯復雜性進行度量,因此,對于類之間的邏輯復雜性的度量計算多是采用WMC度量法進行。
最后,在進行方法的邏輯復雜性度量計算中,多是使用McCabe以及Halstead度量法進行度量計算。首先,McCabe度量法在進行方法的邏輯復雜性度量計算中,是通過模塊的控制流量圖,實現對于模塊結構復雜性的度量確定,主要是通過下列計算公式(1)進行度量計算實現。

在上述計算公式中,V(G)表示的是強連通有向圖G中的環數情況,m則表示G中的弧數,n表示G中的結點數,p則是G中強連通分量的個數。其次,應用Halstead度量法進行方法的邏輯復雜性度量計算時,Halstead軟件工具主要是進行軟件規模的度量,也就是根據軟件的詞匯量的相關信息進行軟件長度的預測,從而實現對于軟件級別等的度量實現。應用Halstead度量法進行度量計算中,主要是根據Halstead度量軟件工具中的一系列度量值,通過軟件程序代碼中出現的不同操作符個數以及不同操作數個數、操作符總數、操作數總數等參數,根據計算公式進行度量計算。
本文中所分析探討以及設計實現的Java程序度量工具是在對于SafePro/Eval所支持開發的度量工具以及測試工具QE-SAT的集成應用上設計實現的,其中,QE-SAT工具能夠對于Java程序項目中的源代碼進行分析,并實現動態以及靜態的測試。在QESAT工具對于Java程序項目源代碼的靜態以及動態測試中,靜態測試是進行被測試程序的程序結構以及復雜度信息的分析,而動態測試則是進行程序項目源代碼中語句以及分支、方法、類的覆蓋等測試實現,同時動態測試還能夠實現對于程序執行頻度的分析測試。Java程序度量工具在通過上述設計組成工具的度量計算后,將計算所得的復雜度信息顯示在QE-SAT工具中的圖形顯示界面中,以實現對于Java程序結構與復雜度的度量測試。如下圖1所示,為Java程序度量工具中靜態分析器的結構示意圖。

圖1 Java程序度量工具中靜態分析器的結構示意圖
根據上示靜態分析器的總體結構示意圖可以看出,Java程序度量工具中的靜態分析器主要由Java語法分析器以及符號表、復雜度信息分析器、語法樹四個結構部分組成。Java程序度量工具在度量計算中,Java程序中的源文件在通過語法分析器進行分析后,形成符號表以及語法樹,然后再通過復雜度信息分析器對于語法樹的各節點進行分析,同時根據符號表中相關的標識符的相關定義信息,將分支作為基本單元結構對于其中的變量操作信息進行提取,以實現對于程序結構與復雜度的度量計算,計算結果將以XML格式存入到計算機的信息庫中,以輸出應用。在Java程序度量工具中,靜態分析器中的語法分析器是基于Java語言并根據相關語法自動生成的一種語法分析器,在對于這種自動生成語法分析器修改的基礎上,最終形成靜態分析器中的語法分析器。
Java程序度量工具在進行代碼分析時具有較為突出的輔助作用,下文將以Java程序度量工具對于QE-SAT測量工具中jstaticdata數據包源代碼的分析為例,進行探討說明。為運行QE-SAT工具情況下,對被測數據包中的源代碼靜態分析后,生成信息顯示界面。在上述QE-SAT靜態分析器分析顯示的結果中,用戶在項目視圖或者是類視圖中進行類或者是方法的名稱選擇,就能夠通過信息視圖得知所選擇的類與方法的相對應各種度量值。
總之,Java程序度量工具在進行軟件程序開發設計中,具有幫助程序員分析代碼、及時發現軟件程序代碼中的問題,實現程序的優化,因此,進行Java程序度量工具的實現以及案例探討,具有積極的作用與價值意義。
[1]王樹森,顧慶,陳燾,陳道蓄.基于復雜網絡的大型軟件系統度量[J].計算機科學.2009(2).
[2]姜元鵬,張永平,姜淑娟.測試Java異常處理機制的方法[J].計算機工程與設計.2010(20).
[3]黃沛杰,楊銘銓.代碼質量靜態度量的研究與應用[J].計算機工程與應用.2011(23).
[4]徐軍,張嬡,葉澄清.Java多線程動態測試中的插裝[J].計算機工程與應用.2011(19).
[5]李必信,楊朝暉,譚毅,朱平,李宣東,鄭國梁.一種基于切片技術度量Java耦合性的框架[J].計算機學報.2011(3).