本文分享自华为云社区《架构可视化支撑系统演进探索》,原文作者:无名小溪。
随着软件系统的规模和复杂度日益增长,软件的生命周期越来越长,软件开发的很大一部分工作集中于维护和改造现有的软件系统,实践研究表明,软件资源预算的50%~80%消耗在对现有系统的维护上,而软件维护者理解程序源代码的时间要占整个软件维护的47%~62%。软件维护已经成为软件工程面临的重要课题之一,而正确和全面地理解软件系统是对软件进行维护的前提,通过架构逆向分析,提供可视化能力,为软件系统的维护和演化可以提供有效支撑。
本文分享借助软件架构可视化辅助系统演进的几个探索:辅助理解现有系统、分析不合理依赖、看护现有架构、支撑架构演进。
1、架构可视化辅助理解现有系统
当新的项目成员加入项目,面对大量代码,如何快速理解、掌握,是否有啥工具可以借助,提高效率?
经过探索,通过在IDE中,提供架构可视化视图,展示系统的架构依赖,通过代码与架构图的双向关联,实现编辑代码时,自动高亮对应的架构元素,双击架构图中的元素,快速关联、跳转到对应的代码,实现代码和架构图的实时联动(Simon Brown的架构即代码理念),帮助开发人员更好的理解代码。
架构元素间,通过连线,展示之间的依赖关系,线上,通过数字表示耦合的数量,点击连线,可以展示、查看耦合的细节。
2、架构可视化分析不合理依赖
当系统在演进过程中腐化,产生不合理的依赖,架构的分层不再清晰,阅读和理解将变得极其困难。新特性开发、问题单修改变得困难重重,你在做UI修改的时候,可能影响到业务逻辑,对业务逻辑的变更,可能对数据库代码或其他元素造成影响。
基于生成的可视化架构,通过经典设计理念符合度分析,可以帮架构师、开发人员发现一些设计坏味道,比如是否存在循环依赖、跨层依赖、反向依赖等。为重构活动提供参考,提高重构效率。
以循环依赖为例,通过连线追踪,可以清晰看到产生循环依赖的架构元素、调用系列,通过环中各连线的数字,能够快速识别环薄弱点(数字越小,耦合度越低),作为可能的消除循环依赖的切入点,重点开展分析。
3、架构可视化看护现有架构
对于良好的架构设计,如何保障在进度紧张的版本交付周期内,不因为开发人员对架构的不充分理解,而对良好的架构设计造成破坏?
在前面可视化架构的基础上,通过对架构的依赖关系的合法性(设计约束)进行打标签,标注哪些架构依赖是允许的,哪些是不允许的。当开发人员在编码的过程中,出现违反架构设计约束的情况,架构视图立刻出现红线预警,同时给出告警信息,从代码产生的源头上防止架构腐化。
4、架构可视化支撑架构演进
基于架构可视化,记录架构的演进路径,通过不同时期的架构对比,可以清晰回溯架构的整个演进过程,对架构的腐化分析很有帮助。
如下图,我们对一个系统的V4、V5版本架构进行对比,可以清晰看到BrowserValidity在V5中删除了。同时,通过线条的不同颜色,区分哪些耦合关系是在V4、V5两个版本都存在,哪些耦合关系只存在于V4,哪些耦合关系只存在于V5。
通过切换、对比不同时期、不同版本的架构图,可以清晰看到架构的演进过程,并回溯过程中架构变更原因和思考。
从已经探索的实践看,架构可视化对软件系统,特别是大型软件系统的健康演进很有帮助。上面的探索,深度上尚浅,待进一步摸索,同时,广度上,也还有很多探索的空间,比如基于架构可视化,呈现架构热点,欢迎大家一起探讨!