Proj FuzzViz Paper Reading: CodeSurveyor: Mapping large-scale software to aid in code comprehension
Abstract
本文: CodeSurveyor
任务:大型代码库空间可视化,允许查看所有抽象级别
to support code comprehension in large codebases by allowing developers to view large-scale software at all levels of abstraction.
方法: cartographic metaphor to produce an interactive map
组件是大陆,文件是国家等等,含有系统依赖信息和区域信息
效果:
- 能在1.5分钟内生成Linux kernel的code maps
- show the effectiveness of the approach with developers of varying experience levels.
3. CodeSurveyor
- To Incorporate system structure
- To provide strong visual landmarks
- To Support smooth updates
- To scale to codebases of millions of lines of code
步骤
- hierarchical graph layout 确定source file在2D平面上的坐标
- Implicit surface generation 将靠的近的放在一起成为岛的形状
- recursive tree-map subdivision 进一步将大岛分成小岛
- recursive region amalgamation 生成boundary
布置每一层是作为一个能量最小化问题来实现的,相当于一个力导向的图布局。 这是通过定义一个能量模型来完成的,该模型将什么是好的布局形式化。 它指定如何计算给定布局中给定图形的能量,以便更好的布局将产生更低的能量。 CodeSurveyor 中使用的能量模型基于 Noack [8] 提出的模型。
它与 Noack 的模型的不同之处在于,除了位置之外,还给节点一个半径,这样得到的圆形面积与它们的线数成正比。 在这个模型中,相邻节点贡献吸引能量,与它们之间的距离成正比; 每对节点贡献排斥能量,与它们的中心之间的距离成反比; 每个节点都会贡献引力能量,与它们的中心与父节点的距离成正比。