架構視覺化支撐系統演進探索

華為雲開發者社群 發表於 2021-04-08
摘要:本文分享藉助軟體架構視覺化輔助系統演進的幾個探索:輔助理解現有系統、分析不合理依賴、看護現有架構、支撐架構演進。

隨著軟體系統的規模和複雜度日益增長,軟體的生命週期越來越長,軟體開發的很大一部分工作集中於維護和改造現有的軟體系統,實踐研究表明,軟體資源預算的50%~80%消耗在對現有系統的維護上,而軟體維護者理解程式原始碼的時間要佔整個軟體維護的47%~62%。軟體維護已經成為軟體工程面臨的重要課題之一,而正確和全面地理解軟體系統是對軟體進行維護的前提,通過架構逆向分析,提供視覺化能力,為軟體系統的維護和演化可以提供有效支撐。

本文分享藉助軟體架構視覺化輔助系統演進的幾個探索:輔助理解現有系統、分析不合理依賴、看護現有架構、支撐架構演進。

1、架構視覺化輔助理解現有系統

當新的專案成員加入專案,面對大量程式碼,如何快速理解、掌握,是否有啥工具可以藉助,提高效率?

經過探索,通過在IDE中,提供架構視覺化檢視,展示系統的架構依賴,通過程式碼與架構圖的雙向關聯,實現編輯程式碼時,自動高亮對應的架構元素,雙擊架構圖中的元素,快速關聯、跳轉到對應的程式碼,實現程式碼和架構圖的實時聯動(Simon Brown的架構即程式碼理念),幫助開發人員更好的理解程式碼。

架構元素間,通過連線,展示之間的依賴關係,線上,通過數字表示耦合的數量,點選連線,可以展示、檢視耦合的細節。

架構視覺化支撐系統演進探索

2、架構視覺化分析不合理依賴

當系統在演進過程中腐化,產生不合理的依賴,架構的分層不再清晰,閱讀和理解將變得極其困難。新特性開發、問題單修改變得困難重重,你在做UI修改的時候,可能影響到業務邏輯,對業務邏輯的變更,可能對資料庫程式碼或其他元素造成影響。

基於生成的視覺化架構,通過經典設計理念符合度分析,可以幫架構師、開發人員發現一些設計壞味道,比如是否存在迴圈依賴、跨層依賴、反向依賴等。為重構活動提供參考,提高重構效率。

以迴圈依賴為例,通過連線追蹤,可以清晰看到產生迴圈依賴的架構元素、呼叫系列,通過環中各連線的數字,能夠快速識別環薄弱點(數字越小,耦合度越低),作為可能的消除迴圈依賴的切入點,重點開展分析。

架構視覺化支撐系統演進探索

3、架構視覺化看護現有架構

對於良好的架構設計,如何保障在進度緊張的版本交付週期內,不因為開發人員對架構的不充分理解,而對良好的架構設計造成破壞?

在前面視覺化架構的基礎上,通過對架構的依賴關係的合法性(設計約束)進行打標籤,標註哪些架構依賴是允許的,哪些是不允許的。當開發人員在編碼的過程中,出現違反架構設計約束的情況,架構檢視立刻出現紅線預警,同時給出告警資訊,從程式碼產生的源頭上防止架構腐化。

架構視覺化支撐系統演進探索

4、架構視覺化支撐架構演進

基於架構視覺化,記錄架構的演進路徑,通過不同時期的架構對比,可以清晰回溯架構的整個演進過程,對架構的腐化分析很有幫助。

如下圖,我們對一個系統的V4、V5版本架構進行對比,可以清晰看到BrowserValidity在V5中刪除了。同時,通過線條的不同顏色,區分哪些耦合關係是在V4、V5兩個版本都存在,哪些耦合關係只存在於V4,哪些耦合關係只存在於V5。

通過切換、對比不同時期、不同版本的架構圖,可以清晰看到架構的演進過程,並回溯過程中架構變更原因和思考。

架構視覺化支撐系統演進探索

從已經探索的實踐看,架構視覺化對軟體系統,特別是大型軟體系統的健康演進很有幫助。上面的探索,深度上尚淺,待進一步摸索,同時,廣度上,也還有很多探索的空間,比如基於架構視覺化,呈現架構熱點,歡迎大家一起探討!

 本文分享自華為雲社群《架構視覺化支撐系統演進探索》,原文作者:無名小溪。

點選關注,第一時間瞭解華為雲新鮮技術~