面向C语言程序的软件大数据可视化技术研究文献综述

 2023-08-07 15:48:06
  1. 文献综述(或调研报告):

随着软件系统的不断更新,系统规模日益上升、逻辑逐渐复杂,系统内部的引用关系开始变得错综复杂,我们对于辅助我们更好理解程序和代码的工具的需求也在日益增加。软件可视化是可视化分析的一个特殊应用领域,如今还处于萌芽阶段,涉及图形工具和表示所介导的软件交互分析[1]。由于有限的成熟度,软件可视化在业内并没有被广泛地使用。

软件可视化为开发和维护提供巨大的优势,但是研究人员发现很多软件可视化的研究与开发人员的需求脱节;因此 Jonathan I. Maletic[2]等人提出了软件可视化的分类标准,以支持软件开发过程中的各种任务,并提出了五个维度来定义软件可视化,即任务、受众、数据源、表示方法和工具。本文主要关注可视化任务、可视化表示方法、和可视化工具三个方面。

可视化任务:可视化任务决定了要可视化的对象,包含了丰富的内容。在软件可视化的文献中,涉及的可视化内容和术语很多。从软件的抽象程度来划分的话主要可以分为程序可视化(PV:Program Visualization)、算法可视化、可视化程序设计、示范程序设计、计算可视化等[3]。这里主要关注的是程序可视化,其中又有静态和动态之分。程序可视化指对程序代码或数据结构的静态或动态特征进行的可视化。可分为静态代码可视化、动态代码可视化、静态数据可视化和动态数据可视化。目前静态代码可视化涉及控制流、代码映射、数据结构、数据流、依赖关系、软件架构和代码度量等。[4]例如,代码可视化有整齐打印源代码、结构图、调用树等;数据结构可视化有复合数据结构图,数据流可视化有数据流图、调用堆栈的活动视图等[5]。动态的软件可视化与软件演化(Software Evolution)相关,它涉及整个软件的历史,增加了时间维度以及多个方面的数据源,让开发者能全面地了解到在一个时间段内,系统发生了哪些变化,并预测与软件维护活动有关的未来特性,从而支持软件维护任务。[6]

在确定了要可视化的对象之后,就要利用合适的分析工具对C语言程序进行分析获得数据并处理。以下是几种静态代码分析工具。[10]

工具

Clang

Splint

Coverity Prevent

KLOCWORK

FORTIFY

语言

C / C

C/C

C/C ,C#,JAVA

C/C /JAVA

C/C /JAVA/PYTHON

/JavaScript

免费

免费

免费

付费

付费

付费

功能

语法分析、抽象树构建

规则检查

数据流分析、统计分析

数据流分析、统计分析

数据流、语义、结构、控制流、配置流分析

速度

较快

表1:静态代码分析工具比较

可视化表示方法:可视化的主要挑战是使用视觉隐喻找到可视化任务到图形表示的有效映射。现在软件可视化从二维图形到三维表示以及最近的虚拟环境以及取得了进展。

二维软件可视化技术通常涉及由大量节点和弧组成的图形或树状表示。一个复杂的软件系统可能包括成千上万个这样的节点和弧。为了便于用户进行概念化和理解,这种系统的可视化以不同的视图或不同的窗口呈现图形的片断,以便用户可以专注于他所期望的细节层面。

树形图(treemap visualization)是一个将分层数据显示在嵌套矩形里的填充技术,单元框表示方法,组合框表示类,所得到的可视化显示层次结构中的所有元素,元素的从属路径隐含在嵌套结构中。

锥树(cone tree)模型将层次结构在三维空间中均衡排列。层次结构的顶部放置在可视化空间的顶端,每个锥形的顶点表示该层结构的顶点,子节点均匀排列在锥形的底部。底的直径随着层次结构的深入逐渐减小,以保证最底层结构能在可视化空间中有效表示。

Voronoi 树形图可以用于跟踪软件质量属性的值随着软件从一个版本向下一个版本的演变。使用缩放的希尔伯特曲线将 Voronoi 站点放置在平面上,从而实现站点最终位置的可预

测的第一近似值,然后保持站点沿着该曲线放置的顺序,以便与相同软件的修订相比较系统。

基于双曲几何的可视化(hyperbolic tree)通过规范的算法将层次关系显示在双曲平面上,再将双曲平面映射到显示区域中。所选择的映射方式提供了一种鱼眼变形来支持 focus 和content之间的平滑过渡。该技术已经有成熟的产品。

依赖结构矩阵(dependency structure matrix)可以解决混乱的问题,根据不同的导航级别展示组件,这些组件可以是最基本的类级别、包或文件级别。研究人员还尝试了不同的布局和过滤技术解决混乱的问题。

度量视图(metric view)就是在UML 图上显示度量值;还有一种模型是areas of interes,其应用一个布局算法将相似属性的实体放在一起,用不同的颜色标记度量。

二维可视化可能会导致在平面上混杂过多的信息。 通过增加一个额外的空间维度,可以为可视化设计人员提供更多可能性来描述程序或系统的某些方面。Richard Wettel和Michele Lanza[7]提出了一个基于城市隐喻的三维软件可视化方法,使用城市隐喻建立混合信息可视化系统。3D 模型很好地避免了混乱的问题,但也存在对象遮挡,性能等问题。

虚拟环境使用户能够与熟悉的东西进行交互, 其中“世界”的概念可以映射到面向对象代码或软件系统中的“实体”或“组件”。使用虚拟环境代表面向对象软件系统的软件可视化系统的例子是Imso Vision[8],该系统主要支持C 代码,其主要特点是把面向对象代码的静态属性映射到虚拟环境中的对象。Imso Vision使用平台,球体,水平和垂直列等几何三维形状作为C 代码特征的视觉元素。

可视化工具:软件可视化工具有三种常见的形式,一种是作为插件集成到 IDE 中,一种是作为一个独立的桌面软件,还有一种就是在线工具,即Web应用。本项目的目标是实现基于web的C语言软件代码大数据可视化,所以本文主要介绍web应用领域的可视化工具。

随着Web技术的发展,在Node.js的推动下,不仅衍生了大量的Web Server应用,还诞生以一些优秀的Web端应用开源框架。其中,Electron和Meteor等工具成了较为主流的使用Java S⁃cript 开发的框架。同时,随着组件化开发的流向,一些优秀的前端框架也被广泛地使用,如Facebook 的React 框架,Vue.js 和由Google维护的Angular JS2。

在Web应用领域中,已经有很多进行图表展示的成熟的解决方案,如D3.js、G2、Highcharts 和Echarts 等Java Script 库,这些可视化库的实现方式和成熟度都各有差异。以Echarts为例,Echarts有个性化的图表样式,可以在图表中加入交互组件,可以实现多种样式的折线图、柱状图、饼图、散点图、关系图、树图等。

现有的开源Java Script 可视化工具大多为度量指标的可视化如 plato[9],包括代码行数、可维护性、圈复杂度等。同时,Webpack 作为模组打包器可以将项目的文件结构以树形图展示出来,但是只停留在文件级别。

软件可视化(SV)领域主要关注程序的分析和开发,分析工具从软件中提取事实,可视化工具使用诸如数据注释图形,图表和树形图和度量标注代码等技术来展示这些事实,本文综述了软件可视化技术的研究现状,为今后实现C语言程序代码的可视化提供了基础。

小结:在软件产品线工程方面,大多数方法都没有利用当前可用的大量工具和可视化技术。许多现代的集成开发环境,比如Eclipse和Microsoft Visual Studio都内置了打断点、全局搜算、文件跳转、展示类的继承关系等功能,从而帮助我们对程序有基本的了解和掌控。然而这些功能都相对粗糙,没能以直观的可视化形式来帮助我们更深入、更全面地理解程序。针对以上现状,本项目将整合多种技术和工具,实现C语言软件数据的可视化。

参考文献:

[1]陈薇伊.软件可视化技术研究综述[J].电脑知识与技术,2019,15(8):219-220.

[2]Maletic J I, Marcus A, Collard M L. A Task Oriented View of Software Visualization[C]//International Workshop on Visualizing Software for Understanding and Analysis, 2002. Proceedings. IEEE, 2002:32-40.

[3]丁沂.软件代码可视化技术探讨[J].信息与电脑(理论版),2012:49,51.

[4] Xu Y, Liu Y, Zheng J. To Enlighten Hidden Facts in The Code: A Review of Software Visualization Metaphors[C]// The, International Conference on Software Engineering and Knowledge Engineering. 2015:294-297.

[5]刘孟仁,刘海庆.软件可视化技术及其应用研究[J].计算机应用研究,2002,19(6):26-28. DOI:10.3969/j.issn.1001-3695.2002.06.008.

[6]黄文达.面向程序理解的代码可视分析[D].浙江:浙江大学,2018.

[7]Wettel R, Lanza M. Visualizing Software Systems as Cities[C]// IEEE International Workshop on Visualizing Software for Understanding and Analysis. IEEE, 2007:92-99.

[8] Maletic JI, Leigh J, Marcus A, Dunlap G(2001)Visualizing object-oriented software in virtual reality. In: Proceedings of the 9th international workshop on program comprehension (IWPCrsquo;01), Toronto, pp 26–35.

[9]es-analysis/plato. https://github.com/es-analysis/plato

[10]李蓬,崔宝江.基于C/C 代码的静态分析工具的比较研究[C].//国际信息技术与应用协会.2010国际计算机科学技术与应用论坛论文集.2010.

[11] Bedu, Laure amp; Tinh, Olivier amp; Petrillo, Fabio. (2019). A Tertiary Systematic Literature Review on Software Visualization. 33-44. 10.1109/VISSOFT.2019.00013.

[12]Shahin, M., Liang P., and Ali Babar M. ”A systematic review of software architecture visualization techniques”, Journal of Software and Systems, Volume 94, Pages 161-185, 2014,http://dx.doi.org/10.1016/j.jss.2014.03.071.

[13]Bani-Salameh, Hani, Ahmad, Ayat, and Aljammal, Ashraf. ”Software evolution visualization techniques and methods - a systematic review” 7th International Conference on Computer Science and Information Technology, Pages 1-6, 2016, 10.1109/CSIT.2016.7549475.

[14] Renato Lima Novais, Andr Torres, Thiago Souto Mendes, Manoel Mendona, Nico Zazworka, ”Software evolution visualization: A systematic mapping study”, Information and Software Technology, Volume 55, Issue 11, 2013, Pages 1860-1883, https://doi.org/10.1016/j.infsof.2013.05.008.

[15] Koschke, Rainer. ”Software Visualization in Software Maintenance, Reverse Engineering, and Reengineering: A Research Survey”, Journal on Software Maintenance and Evolution. Volume 15, Pages 87-109, 2003,10.1002/smr.270.

[16]S. Bassil and R. K. Keller ”Software visualization tools: survey and analysis”, Proceedings 9th International Workshop on Program Comprehension, Pages 7-17, 2001, 10.1109/WPC.2001.921708.

  1. 文献综述(或调研报告):

随着软件系统的不断更新,系统规模日益上升、逻辑逐渐复杂,系统内部的引用关系开始变得错综复杂,我们对于辅助我们更好理解程序和代码的工具的需求也在日益增加。软件可视化是可视化分析的一个特殊应用领域,如今还处于萌芽阶段,涉及图形工具和表示所介导的软件交互分析[1]。由于有限的成熟度,软件可视化在业内并没有被广泛地使用。

软件可视化为开发和维护提供巨大的优势,但是研究人员发现很多软件可视化的研究与开发人员的需求脱节;因此 Jonathan I. Maletic[2]等人提出了软件可视化的分类标准,以支持软件开发过程中的各种任务,并提出了五个维度来定义软件可视化,即任务、受众、数据源、表示方法和工具。本文主要关注可视化任务、可视化表示方法、和可视化工具三个方面。

可视化任务:可视化任务决定了要可视化的对象,包含了丰富的内容。在软件可视化的文献中,涉及的可视化内容和术语很多。从软件的抽象程度来划分的话主要可以分为程序可视化(PV:Program Visualization)、算法可视化、可视化程序设计、示范程序设计、计算可视化等[3]。这里主要关注的是程序可视化,其中又有静态和动态之分。程序可视化指对程序代码或数据结构的静态或动态特征进行的可视化。可分为静态代码可视化、动态代码可视化、静态数据可视化和动态数据可视化。目前静态代码可视化涉及控制流、代码映射、数据结构、数据流、依赖关系、软件架构和代码度量等。[4]例如,代码可视化有整齐打印源代码、结构图、调用树等;数据结构可视化有复合数据结构图,数据流可视化有数据流图、调用堆栈的活动视图等[5]。动态的软件可视化与软件演化(Software Evolution)相关,它涉及整个软件的历史,增加了时间维度以及多个方面的数据源,让开发者能全面地了解到在一个时间段内,系统发生了哪些变化,并预测与软件维护活动有关的未来特性,从而支持软件维护任务。[6]

在确定了要可视化的对象之后,就要利用合适的分析工具对C语言程序进行分析获得数据并处理。以下是几种静态代码分析工具。[10]

剩余内容已隐藏,您需要先支付 10元 才能查看该篇文章全部内容!立即支付

发小红书推广免费获取该资料资格。点击链接进入获取推广文案即可: Ai一键组稿 | 降AI率 | 降重复率 | 论文一键排版