Code Monkey home page Code Monkey logo

code-visualization-book's Introduction

Code Visualization

最新版阅读地址:code-visualization
GitHub地址:code-visualization-book,欢迎贡献想法、提建议😄。


【What】什么是代码可视化?

Code visualization is the process of creating graphical representations of source code to help understand and analyze it.
代码可视化是创建源代码的图形表示以帮助理解和分析它的过程。

个人理解:通过使用图形化手段(架构图、依赖图、分布式追踪、类图、火焰图、CallGraph等)使代码在某些特征上变得可观测,用于辅助开发人员理解分析项目或建设一些自动化工具。

【Why】为什么需要代码可视化?

下面通过几个场景来说明开发、测试同学为什么需要代码可视化功能:

场景1:代码逻辑理解困难

项目代码量很大且需求迭代快,每次梳理的文档很快就过时了。新同学入手困难苦不堪言,老手也很难对项目整体的业务逻辑有一个全面的认知,常常需要重新梳理逻辑。

图1.代码逻辑理解困难

场景2:代码改动影响面难以评估

需求的诉求是修改A页面的逻辑,但由于后端代码很多公用逻辑且调用层级很深,上线才后发现影响了B页面的逻辑,造成了线上事故。

图2.影响面难以评估

场景3:遗留项目重构缺少抓手

老旧遗留项目经过长时间迭代和多次更换团队,导致内部代码逻辑十分混乱且没人能完全讲明白所有逻辑。但新的业务迭代需求源源不断,在原有项目上修改成本越来越高,亟需重构以获得更高地研发效率。

图3.遗留项目重构

其他场景:代码改动影响面评估不准导致自动化case编写困难,回归也常常覆盖不到关联逻辑;线上问题排查困难,难以快速定位到出错代码......

【How】怎么实现代码可视化?

大体可以分三步走:

  • 第一步程序分析:获取到源码、中间表示方式或其他方式采集的数据形成数据基础(根据诉求可能会存在多次数据加工;储存的方式也有多种选择,如:图数据库);
  • 第二步数据可视化:根据想要观测的视角选择对应的图表类型,将数据进行可视化展示。

对于实际应用场景完成可视化也只是刚刚开始,之后会再基于可观测的部分结合自己的诉求建设更复杂的工具。本书将会从理论和实践两部分进行阐述,先了解实现代码可视化需要掌握的基础理论,例如:AST生成、CFG和DFG等;接着实践部分我们会实现“CallGraph可视化”并提供“基于Git的代码影响变更分析”功能;最后会列举一些业界已知的实践方案供大家扩展学习。
信息结构参考下面的思维导图(图内容还在迭代中,原图获取点这里): 图4.代码可视化导图


本书适合谁

  • 喜欢研究源码且深知源码本身蕴藏信息拥有无限可能
  • 对编译原理、程序分析感兴趣
  • 想要解决实际业务中因代码理解不足而导致的各种问题
  • 喜欢将一切事物可视化,视觉系才是最diao的
  • 仅仅是想多学一点,或掌握一门装*技术
    ......

交流联系

公众号二维码

code-visualization-book's People

Contributors

xiaoxie1994 avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.