面向计算机程序的可视化综述
面向计算机程序的可视化综述
计算机程序可视化是将计算机程序的代码结构、执行过程和运行结果以直观形象的方式呈现出来,帮助开发者更好地理解和调试程序。本文从程序执行前、中、后三个阶段对程序可视化技术进行了分类和总结,并对每种技术的优缺点进行了分析。
研究背景与简介
计算机程序是由开发者使用编程语言编写、被计算机识别并执行的一系列指令。大型程序源代码通常逻辑复杂,句法抽象,造成较大的认知困难。计算机程序可视化以直观形象的方法呈现计算机程序的代码结构、执行过程和运行结果,增强用户理解和调试程序的能力。本文以一个不同的视角,将开发者作为受众目标,基于程序执行流程对程序可视化的相关工作进行分类和总结,帮助开发者在程序执行的各个阶段及时获取到重要信息。
本文从IEEE TVCG, CHI, UIST, ICSE, SIGCSE, VISSOFT中查阅了近年来有代表性的程序可视化技术和程序可视化系统,使用software, program, algorithm, runtime, debug, visualization等关键词进行搜索,从中挑选了几篇重要的文献;并分别从程序的执行前、中、后3个阶段介绍其相关工作,总结每个阶段不同的可视化技术和未来发展方向。
论文亮点
01 程序可视化框架
本文基于程序执行流程制定了程序可视化相关工作的分类框架。
02 程序执行前的可视化
在程序执行前,能够获取的信息全部来源于程序的代码,通过分析代码能够得到作用域链、依赖关系、程序流程、体系结构和抽象语法树等信息。由于作用域链存在层级关系,使用圆树图等分层可视化技术能够理解变量的作用范围。体系结构等包含了各个模块之间的关系和各自的不同性质等信息,与二维的UML图等方式相比,三维的隐喻能够更好地帮助开发者记忆和理解。通过识别抽象语法树或从代码中分析得出的错误信息,使用嵌入式可视化和热力图等可视化方式,能够在代码的基础上更快地获取到错误的信息和危害。
a. Hunter b. Component Graph
图2 二维代码组织可视化
a. Code Forest b. VariCity
图3 三维代码组织可视化
03 程序执行中的可视化
在程序执行过程中会产生实时的运行堆栈数据,包含变量信息、内存信息和调用过程等内容,这些数据被用于展示运行状态或过程。其中,变量信息包含变量的引用、地址、类型等,使用带有颜色编码的表格配合上箭头能够清晰地表示变量;内存信息包含每个模块的内存占用情况等信息,使用热力图、火焰图等可视化方法能够快速监测程序运行时的各模块内存使用状态;调用过程包含函数、方法调用和数据传递等信息,使用动画、时间线、控制流图以及数据流图等可视化方法能够更好地表示运行时状态的变化,理解其运行过程。
a. Decode b. METAL
图4 算法理解可视化
a. Python Tutor b. PVC
图5 运行调试可视化
a. MemAxes b. Flame Graph
图6 状态监测可视化
04 程序执行后的可视化
在程序执行后,对日志、调用上下文等程序运行时的数据进行可视分析,有助于进行性能评估优化和异常检测。日志数据通常不具备固定的数据格式,使用多视角交互式的可视化方式能够多角度地利用数据信息。调用上下文生成的调用上下文树具有层次结构,使用桑基图可视化了其时间维度,以流的形式交互式探索程序性能。
a. CallFlow b. EnsembleCallFlow
图7 性能评估与优化可视化
结 语
对近年来程序可视分析的方法、交互方式以及使用场景进行综述,程序可视化方法分类与相关的可视表达如表1所示。近年来,对于程序结果可视化中的异常检测部分的相关工作较少,更多地关注于程序运行过程中的运行调试方面;同时,这些程序行调试的可视化形式比较单一,只在交互后简单地对数据进行了呈现,难以胜任复杂程序的调试任务;在大部分情况下,程序可视化的方法针对性都很强,难以做到适用多种场景。
当前,除了人工智能领域外,对于算法理解方面的可视化大多还停留在较为初级的算法层面,具有很大的局限性,今后希望能产生具有泛化性或是应对复杂算法的可视化技术。随着计算机技术的迅猛发展,未来会有更多关于程序可视化方面的需求,无论是在教育领域还是在互联网领域,程序可视化在一定程度上都起到了促进作用,帮助开发者们理解程序,降低上手难度。在未来的工作中,虽然已经实现了很多程序可视化方面的系统,但教育领域和互联网领域可以分别针对程序运行过程中的可视化和程序运行后的可视化进行更深入的研究,达到更优的理解性和适配性。
作者简介
张炜, 硕士研究生, 主要研究方向为可视化与可视分析;
温圳, 博士研究生, 主要研究方向为可视分析;
潘嘉铖, 博士研究生, 主要研究方向为可视化与可视分析;
陈为, 博士, 教授, 博士生导师, CCF会员, 《计算机辅助设计与图形学学报》编委,论文通信作者, 主要研究方向为大数据可视化和可视分析。
参考文献
张炜, 温圳, 潘嘉铖, 陈为. 面向计算机程序的可视化综述[J]. 计算机辅助设计与图形学学报, 2023, 35(8): 1139-1149.
本文原文来自《计算机辅助设计与图形学学报》