張森森
(桂林航天工業學院 計算機科學與工程學院,廣西 桂林 541000)
隨著軟件工程技術的成熟與發展,采用工程化的方法進行軟件開發已成必然。在進行面向對象方法學開發時,軟件設計起到了至關重要的作用,只有好的設計才能保證編碼階段不會產生錯誤。因此,對大型的軟件進行開發,必須按照不同的主題來進行對象模型的設計。這樣即可以降低設計階段錯誤的引入,也能減少后期編碼階段的難度[1]。目前,常規的主題劃分方法,一般先由高級的軟件開發人員根據前期得到的類圖來進行劃分,然后由具體的項目負責人員對項目逐步進行深入了解后,再進行進一步的修改。所采用的技術大都是按著問題域來進行主題的確認,而此方法未將功能或者是對象之間的耦合性作為參考的標準。
一般在研究問題時得到的原始類圖中,類之間的相互連接因為有數據的傳送,僅僅按著問題域進行劃分并不是很好的選擇。由于前期設計階段得到的結果對后期的實現會產生深遠的影響。因此,在進行類圖主題劃分時,也應該將得到的類之間的數據傳送考慮進去。如果類圖中存在兩個類之間有密集的數據交流,但并不在同一個問題域中,也應該在實際的設計階段將其放到同一個主題中。那么依據什么來進行這些類的移動,如何將這些放到一個合適的主題中,是一個優秀設計的關鍵。
軟件重構應用于軟件開發的各個階段,主要目的是為了優化軟件的結構,提高軟件的可讀性。在軟件開發過程中占據的地位也是越來越大,例如軟件開發的預防性維護階段,主要采用的軟件重構技術來進行。軟件重構最主要的意義在于軟件重構前后軟件的功能不會發生改變,僅僅改變軟件的內部結構。在類圖主題劃分階段應用過程中,必須保證軟件重構前后類圖的整體設計不會發生改變,即系統對外顯示的功能不會發生改變[2-3]。
權重計算法是為了解決上述問題,優化類圖主題而提出的。權重計算的原理是根據類圖中類的相互依賴關系,確定一個數值,定量得到某個類與對應主題以及相關主題之間的依賴關系[4]。如圖1所示:類A按問題域劃分到a主題中,類B按問題域劃分到b主題中,A與B之間有數據交流給其定值為1。假設b主題中還有C、D兩個類,C、D都與類A有數據交流。但是主題a中的其它類與類A并沒有據交流,可以粗略的認為主題a與類A的權重值為1,主題b與類A的權重值為3,在不影響軟件整體功能的前提下,可以認為將類A移動到主題b中能夠減少主題之間的依賴性,提高軟件的質量,以及優化軟件的結構。

圖1 權重圖形化Fig.1 Weight graphing
研究對象自動取款機(ATM)系統,銀行擬開發一個對應的ATM系統。按照對應的軟件工程開發步驟先得到所需的類,建立相應的關聯,然后按照主題劃分為3個常見的主題,即總行、分行、ATM,如圖2所示。總行主要包含總行類與ATM類;分行主要包含分行類、分行計算機類、柜員終端類等等;ATM主要包含ATM類、遠程事務類以及銀行卡類以及儲戶相關類等。

圖2 ATM系統常見的主題圖Fig.2 Common themes of ATM systems
根據原始類圖此類相關的信息,將里面的類進行抽象化得到圖3。圖3具體記錄了ATM系統中各個類之間的關聯。此類連接主要分為二種情況,一是每個主題內部自身類之間的連接。如:在主題分行中,分行類用來保管賬戶,所以分行類與賬戶類之間具有具體的連接,分行類與柜員類、分行類與分行計算機類、柜員類與柜員事務類等都屬于這類的關系。通過相應的分析,也可以得到主題總行以及主題ATM的內部各個類之間相應的連接情況。另一種連接方式則是各個不同主題之間類的連接。如:在圖3中,主題ATM中的現金兌換卡能夠訪問主題分行中的賬戶,則需要在代表現金兌換卡類與代表儲戶類的抽象化的類之間建立相應的連接。同樣在圖3中也可以找到很多類似此類的連接,如主題分行計算機類與主題總行中的中央計算機類等等。為了能夠利用軟件重構的權重計算法來進行研究,本文粗略的將各個有關聯類之間的關聯數據定量為1。在進行研究時,研究的對象應該是那些與其他主題具有直接關聯的類,也就是能夠滿足第二種條件的類。

圖3 ATM權重圖Fig.3 ATM weight diagram
在研究的ATM系統中,中央計算機類、賬戶類、分行類、遠程事務類、現金卡類、儲戶類都是滿足第二種條件的類。因此,這些類作為全部的觀察對象,因為需要得到原先主題以及可能需要移動主題之間的關系,因此還需要得到這些類第一種方法的值,具體的數據分析見表1。表1中記錄的信息主要包括需要研究的這些類與相應主題之間的權重數據。對表1分析可見,中央計算機類、分行類、儲戶類與其它主題類的交流權重值等于與其對應主題的交流權重值,遠程事務、現金卡類與其它主題類的交流權重值小于與其對應主題的交流權重值。因此,這些類在原主體中應保持不變。分析賬戶類明顯看出,此類在分行主題中的權重值要小于ATM主題中的權重值,因此可以進行移動。

表1 各類在不同主題分布表Tab.1 The categories are distributed in different topics
通過利用權重計算法能夠定量的分析出主題間需要移動的類,保證了主題結構的清晰度,減少了主題之間的耦合性,確保在后期代碼編寫過程中軟件的穩定性,減少了代碼書寫量,縮短了開發的時間,優化了軟件的結構。在實際開發大型軟件過程中已有很多的可視化工具能夠幫助人們迅速找到類,以及各個類之間的關聯值。而開發者需要做的,就是利用這些關聯去得到需要進行比較的類,然后根據權重值來判斷類是否需要移動。對軟件重構來說,還有一點至關重要,就是主題之間類移動前后必須要保證軟件對外的功能沒有發生變化。由于本例中要移動的賬戶類設計較小,可以通過簡單的結構分析得到結論,保證軟件重構。但在大型的軟件開發時,特別對于那些結構復雜的軟件,在利用權重進行分析時必須要進行軟件重構分析,必要時需要進行相應的測試,來保證軟件重構前后軟件的功能不會發生變化。在實際的運用過程中,沒有必要去統計原有主題或者目標主題中的權重值,可以引進一個新的變量Q。Q代表的是某個類在主題之間移動之后權重值的差值,引進這個變量就可以直接通過其的正負值來得到需要移動的類。通過上訴分析可知,Q值為正時需要進行此類的移動,這在進行一些大型的軟件開發過程中能夠節省時間減少操作步驟。
本文雖然應用于一個小型的ATM系統開發,但軟件開發的步驟以及原則結構都非常的詳盡,將此技術應用于主題間類的移動,能夠明顯的改善原始類圖中主題的結構幫助,對整個軟件開發過程都具有深遠的影響。但是此項技術應用范圍比較局限,沒有得到更多的驗證,僅僅本文中的例子是遠遠不夠的,希望今后能夠在更多的軟件開發過程中得到運用。