吳劍致
【摘 要】提出了一種基于分層體系結構模型識別的軟件體系結構重構技術。該技術使用目標軟件源代碼作為輸入,篩選出與分層體系結構無關的代碼,然后利用代碼詞匯信息探索程序實體之間的語義關聯,提取并計算程序實體與之間的角色相似性通過結合基于軟件集合的分層模型圖像屬性,確定軟件層次結構和軟件體系結構模型。基于方案識別,將系統中的違規定位為重建點,并生成和實施相應的重建建議案。最后,在開源Github和SourceForge社區中,選擇了10個開放源碼軟件系統作為試點項目。與傳統方法相比,本文提出的基于層次模型識別的軟件體系結構重構技術大大提高了模型識別的有效性、重構點識別的效果以及重構建議的實施效果。它可以有效地幫助開發人員識別軟件體系結構模型,獲取重建點并生成重建建議,幫助開發人員實施體系結構重組,改善系統違規情況,并提高軟件質量。
【關鍵詞】架構重構;分層架構模式;架構模式識別;重構點定位
前言
軟件體系結構是提高軟件系統質量并支持軟件開發和再利用的重要手段。在實際軟件開發中應用軟件體系結構的最大困難在于實際開發中不斷變化的需求,使得實際系統和軟件體系結構難以有效地指導軟件開發實踐。因此,重要的是從系統的實施中探討提取、分析和重組軟件體系結構的有效方法,以便更好地了解和分析現有系統,提高軟件系統的維護效率,降低維護成本。同時,軟件體系結構的重構可以有效地評估系統的實現是否符合設計體系結構,并檢查系統的實現是否違反設計,從而提高開發質量。因此,它已成為當前軟件體系結構研究的熱點之一。
一、分層架構模式識別方法
1.代碼預處理
與系統體系結構無關的代碼信息可能會嚴重干擾軟件體系結構模式識別過程,從而影響識別的準確性和有效性。本文使用一般規則、域規則和用戶定義的規則來篩選目標系統的源代碼。
2.軟件職責恢復
預處理的源代碼類文件將轉換為抽象語法樹(AST),并從每個類文件中通過AST節點提取術語信息。由于軟件責任的程序實體分組層是系統的軟件包層,因此必須根據每個類文件所屬的軟件包合并從每個類文件中提取的術語,并為每個軟件包生成一個詞匯文檔。將包裝詞匯文檔中的復合詞分為由子詞分隔的詞,將所有詞的樹干或根部抽出來,然后刪除不能傳遞有效信息的詞以消除噪聲。單詞的重要性因地點而異,因此可以根據出現次數加權。
3.軟件層次識別
軟件層次識別是指基于軟件組件在組件之間填充結構相關性信息,生成組件的完整示意圖,通過組合層次模型圖像屬性執行層次識別,以及獲取目標系統的層次結構。首先,將目標系統的類文件轉換為AST格式,并通過瀏覽AST節點提取所需類之間的結構相關性信息。最后來說,它生成類間結構依賴關系圖,定義g <類,邊>類結構依賴關系圖,該圖由類節點集類和類間依賴關系邊集組成,在相鄰表的抽象中表示,為目標系統中的實體類I生成相應的頂點關鍵點。將所有圖元類頂點存儲在一維數組中,并保存指向每個類頂點的從屬類,以這些頂點作為從屬關系的起點。
二、基于模式識別結果的分層軟件架構重構
1.基于模式識別的重構點定位
本文使用模型的一致性判斷,以圖形方式表示三個違規作為重建點。SKIP、BACK和INTERFACE是分別違反鄰近相關性規則、單向相關性規則和接口規則的程序實體。查找三個違規的過程定義如下:“跳過”和“后退”分別根據數據包結構相關性卡標識非法使用其不相鄰的底層和頂層服務的數據包。被認為是違反等級從屬關系的起點。該接口基于底層類結構的依賴關系圖。如果packageB包含依賴于其packageka子軟件包中cls gamma實體類的cls實體類,并且該cls gamma類不是接口形式,而是直接函數實現類,則視為在package-agea中發生了非表面接口違規。
2.重構建議生成
本文根據重構點的定位,按照自下而上的原則提出了體系結構和代碼重構建議。如圖5所示,PA在分層結構圖中非法調用非直接相鄰子實體的PB函數。因此,在構造點放置階段,pa將被添加到SKIP集合中。要使目標系統與分層模型的使用規范相匹配,建議您取消對pa到PB依賴性的重新構建。經過進一步分析,發現pa-pb依賴關系源自其內部類文件之間的依賴關系,因此切斷pa-pb依賴關系的重構建議映射到代碼層,而消除四個類之間依賴關系的重構建議{C1→C5,C3→C4,C3→C5,C2→C4 重組建議分為兩種類型:取消套裝程式之間的非法相依性,以及調整套裝程式的內部實體介面,以移除類別之間的非法相依性和抽象實體類別作為介面的相依性。
3.重構實施與效果評估
若要評估重建的影響,您必須采取適當的措施,包括針對層次間違規的措施、針對反向違規的措施以及針對非介面違規的措施。
結束語
綜上所述可知,提出了一種基于分層體系結構模型識別的軟件體系結構重建技術,通過使用代碼詞匯信息恢復軟件責任,并使用類圖生成組件結構依賴圖,實現了軟件體系結構模型識別。根據模式識別結果找到重建點并生成重建建議。最后,實驗分析證實,技術大大提高了模型識別的效率、確定重建點的效率以及與傳統方法相比執行重建建議的效率。它可以有效地幫助軟件開發人員識別軟件的結構模型,找到重建點并生成重建建議,幫助開發人員進行結構重建,改善系統違規情況,提高軟件質量。
參考文獻:
[1]杜鵬程.基于軟件職責和結構的分層架構模式識別及重構[D].江蘇南京∶東南大學,2019.
[2]任武.通過用況聚類促進軟件結構恢復的方法[J].電子學報,2013,41(7)∶166-172.
(作者單位:廣西智匯佳人力資源有限公司)