复杂网络的视角去看软件结构,还是挺有意思的。一度和点权这两个指标,能比较直观地反映软件系统里哪些类最“活跃”或者“重要”。作者还真不只是停留在理论,挑了几个经典的面向对象系统,做了详细的统计拟合,还挺有说服力。
软件架构里常说要解耦、分层,那到底怎么量化这些设计是否“合理”?这篇文章就给了一个不错的切入点。你可以把类、模块当成节点,依赖关系当成边,搞一个网络出来。就能从图的角度研究软件系统结构,逻辑也蛮清晰的。
有一点我喜欢——它不是光谈理论,还引入了一个叫r
的参数,模拟软件在演化过程中的增长机制。意思就是说,随着项目越来越大,代码结构是怎么变的?哪些部分会越来越“重”?用复杂网络的套路,竟然也能推导出来。
结果也挺有意思:度分布和点权分布都表现出指数衰减的特性,尤其是在有向图中更。这其实跟平时做项目时的经验挺贴近的——确实有那么几个模块关键,其他模块基本围着它们转。
如果你现在正在搞大型系统的重构,或者在考虑做架构优化,这个方法可以参考看看。想象一下,把你的代码结构建个网络图出来,清晰度一下就上去了。
文章里还附了不少延伸阅读,比如复杂网络的 MATLAB 实现
、复杂网络平均路径长度计算
这些,做深挖也方便。哦对了,如果你之前没怎么接触过复杂网络的概念,也不用担心,作者讲得还算通俗。
,比较推荐架构师和做代码质量的朋友看一看。如果你喜欢用数据说话、看图说话,这篇文章会挺对胃口的。