0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

支持静态分析的高级程序可视化简化了开发过程

星星科技指导员 来源:嵌入式计算设计 作者:Paul Anderson 2022-06-19 07:13 次阅读

长期以来,图片往往比文字更能帮助开发人员理解复杂的程序和审查代码,因此在软件开发中程序可视化的使用很普遍。UML 和其他主要图形形式的设计符号现在被广泛接受为沟通软件设计各个方面的最佳标准机制。一些基于模型的设计工具可以直接从图形表示中生成代码。在非正式的范围内,开发人员经常画出流程图或调用图来告知自己或其他人软件的重要方面。

UML 图都非常适合设计,但在开发过程的后期使用以帮助开发人员理解现有代码时存在两个重要缺点。首先,作为设计抽象,它们(正确地)省略了一些实现细节,但如果目标是理解完成的软件,这些细节通常很重要。其次,设计图在实现方面经常是陈旧的,导致对实际存在的系统的描述不准确或不完整。

非正式的可视化往往是短暂的,很少进入程序文档的正式记录。

很多时候,开发人员必须使用的唯一工件就是代码本身。不幸的是,代码可视化工具在历史上一直存在图表混乱和难以扩展到大型程序等问题。然而,正在出现的新工具正在开始解决这些问题。这些工具的主要优势是它们能够直接从代码本身生成有用的可视化。因此,它们保证是准确和最新的。

程序结构

程序由许多不同类型的组件之间的庞大而复杂的依赖网络组成。试图同时显示所有这些的可视化将太笨重而无用。事实上,没有单一的理想可视化。相反,对特定任务最有用的可视化是与执行该任务的工程师使用的心智模型相对应的可视化。一些更有用的程序结构如下:

类型层次结构

开发人员通常发现了解数据类型相互关联的各种方式非常有用。标准的 UML 类图以一种非常容易理解的形式表示类层次结构,其关联和包含关系处于比代码更高的抽象级别。虽然从设计的角度来看这很好,但程序员通常会发现查看类型之间的具体关系更有帮助。

包括树

C 和 C++ 程序通常会大量使用预处理器。如果做得好,这可以使程序易于理解,但通常它会插入一个阻碍理解的层。不规范地使用预处理器可能会导致依赖缠结,从而导致构建问题并损害可重用性潜力。因此,能够查看哪些文件包含在哪里可以帮助工程师解开复杂的依赖关系。

调用图

调用图,其中每个节点代表一个子程序,每条边表示对另一个子程序的一个或多个调用,通常被认为是最有助于可视化的程序结构。子程序是方便开发人员推理的单元,调用关系很好地捕获了数据和控制流。即使是一个小程序的调用图也可以有数百个节点和数千条边,因此人们早就认识到一次可视化整个调用图基本上是没有用的。相反,研究人员专注于将调用图可视化为更小、更容易消化的部分。

新的调用图技术和工具

由于调用图在程序理解中的重要性以及可视化它们所涉及的挑战,它们一直是许多研究的主题。特别是,已经开发出新技术来帮助控制调用图的复杂性。本节介绍了在提供高级可视化功能的静态分析工具中实现的一些机制。

自上而下的视图

调用图的自上而下视图有助于回答用户问题,例如“该程序的高级组件是什么,它们的属性和关系是什么?”

为了在程序理解的背景下解决这个问题,工具设计者从诸如谷歌地图之类的地理地图程序中汲取灵感。随着用户放大,更多细节开始显现:首先是城市,然后是城镇、村庄,最后是个别建筑物。显示的细节级别与缩放级别相关联。

程序由组件组成,这些组件本身又由较小的组件组成,依此类推,形成层次结构;虽然直接调用关系是在低级子程序之间,但它可以投射到包含这些子程序的高级组件。在调用图的自上而下视图中,最高级别的项目是目录。这些可以包含子目录和文件的某种组合,然后这些文件将包含子程序。因此,从一个框到另一个框的边仅表示包含在第一个框内的子程序调用了包含在第二个框内的子程序。

事实证明,这种方法在帮助开发人员更深入地了解程序方面非常有效。

在左侧窗口中,用户选择了从组件find到组件gnulib的边。此聚合边缘汇总的函数调用显示在右侧的窗格中。右侧窗口说明当用户放大查看单个功能时会显示更多细节。此缩放级别进一步说明了一个重要特性:开发人员能够将视图与代码本身相关联非常重要。因此,选择其中一个函数会导致显示该函数的源代码。

自下而上的视图

通常,开发人员会希望采用自下而上的方法。这有助于用户回答诸如“这个过程做什么,它如何适应程序的结构,以及它是如何被调用的?”之类的问题。

例如,假设某个程序在特定功能中崩溃。为了找到崩溃的原因并计划修复,开发人员可能会首先关注该单个函数,然后探索其附近的其他函数,以查看它调用和调用的其他函数。以前在白板上手动完成,一个工具可以自动处理绘图和布局的苦差事。

指标层

通过添加层来显示各种指标的价值,可以增加可视化的实用性。图 1 显示了一个示例。这显示了一个特别有用的可视化 - 树状图。在树状图中,节点的面积与度量标准成正比——通常是对项目大小进行编码的度量标准。然后将子节点平铺在顶级节点内。通常不显示边缘。在这个例子中,每个项目的颜色强度编码了静态分析工具发出的代码漏洞警告的数量。

图 1:中型程序(大约 200 KLOC)的树形图。颜色的强度表示在每个部件中检测到的静态分析警告的数量。

pYYBAGKsRdGAFkNLAAYAA9dSzX4298.png

从这个角度来看,很容易挑选出风险最大的程序组件。树形图对于显示深度嵌套的结构非常有效,并且也非常适合前面讨论的缩放范例,其中更多细节在更高的放大倍率下显示。

当开发人员以交互方式使用它们来平移和放大和缩小,甚至添加和删除节点和边缘时,这些可视化是最有用的。如果没有足够的响应,与这样的界面交互可能会非常令人沮丧。显示数百个节点和数千条边可能是一个挑战。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    19191

    浏览量

    229314
  • C++
    C++
    +关注

    关注

    22

    文章

    2105

    浏览量

    73531
收藏 人收藏

    评论

    相关推荐

    智慧能源可视化监管平台——助力可视化能源数据管理

    博达可视化大屏设计平台在智慧能源领域的价值体现在实时监控、数据可视化、决策支持和效率提升等方面。借助该平台,企业可以轻松搭建智慧能源类可视化大屏,更加精确和高效地管理生产和生活,实现能
    的头像 发表于 11-29 10:00 145次阅读
    智慧能源<b class='flag-5'>可视化</b>监管平台——助力<b class='flag-5'>可视化</b>能源数据管理

    智慧楼宇可视化的优点

    智慧楼宇可视化是指通过数据可视化技术来展示和分析楼宇的各种数据,为楼宇管理者和用户提供直观、清晰的信息展示和决策支持。以下是智慧楼宇可视化
    的头像 发表于 11-19 14:25 145次阅读

    焊接过程可视化的应用前景有哪些

    检测。随着智能制造的快速发展,焊接过程可视化技术逐渐兴起,为焊接质量控制带来了全新的解决方案,今天一起了解焊接过程可视化的应用前景有哪些。 焊接
    的头像 发表于 11-07 15:33 138次阅读
    焊接<b class='flag-5'>过程</b><b class='flag-5'>可视化</b>的应用前景有哪些

    实时操作系统开发工具:鸿道Intewell Developer介绍

    鸿道Intewell Developer是鸿道Intewell操作系统的实时应用开发环境,拥有可视化的操作界面,提供规范、统一、集中的配置入口,提供项目管理、编程开发环境、目标机配置管理等功能,规范、
    的头像 发表于 11-04 14:51 189次阅读
    实时操作系统<b class='flag-5'>开发</b>工具:鸿道Intewell Developer介绍

    汽车异构硬件平台开发如何进行静态代码分析

    先进的静态代码分析工具,其新版本中引入的多CCT功能为开发人员提供了强大的支持,该功能不仅简化了多编译器环境下的代码
    的头像 发表于 10-09 16:15 464次阅读
    汽车异构硬件平台<b class='flag-5'>开发</b>如何进行<b class='flag-5'>静态</b>代码<b class='flag-5'>分析</b>

    Node-Red可视化编程:简化开发的创新之选

    Node-Red 是构建物联网 (IOT Internet of Things) 应用程序的一个强大工具,其重点是简化代码块的“连接 ” 以执行任务。它使用可视化编程方法,允许开发人员
    的头像 发表于 09-21 10:37 255次阅读
    Node-Red<b class='flag-5'>可视化</b>编程:<b class='flag-5'>简化开发</b>的创新之选

    态势数据可视化技术有哪些

    智慧华盛恒辉态势数据可视化技术是一种将数据以图形、图像、动画等视觉形式展现出来的技术,特别是在处理和分析态势数据时,该技术能够将复杂的数据转化为直观、易于理解的视觉表现。以下是态势数据可视化技术
    的头像 发表于 06-11 15:47 359次阅读

    上位机可视化界面编程软件有哪些

    上位机可视化界面编程软件是一类用于开发图形用户界面(GUI)的软件工具,它们通常提供了丰富的界面元素、易于使用的编程接口和强大的功能。这些软件可以帮助开发者快速构建出美观、易用且功能丰富的应用
    的头像 发表于 06-06 10:48 2293次阅读

    c语言怎么做可视化界面

    C语言是一种通用的编程语言,广泛应用于系统编程、嵌入式开发等领域。虽然C语言本身并不支持直接创建可视化界面,但通过结合一些图形库和工具,我们可以为C语言程序
    的头像 发表于 06-06 10:46 2173次阅读

    FUXA基于Web的过程可视化软件案例

    FUXA——基于Web的过程可视化软件
    发表于 04-24 18:32 2次下载

    态势数据可视化技术有哪些

    智慧华盛恒辉态势数据可视化技术是一种将复杂、动态的态势数据以直观、易于理解的方式展现出来的技术手段。以下是几种主要的态势数据可视化技术: 网络安全态势指标可视化分析系统及方法,针对安全态势指标不准
    的头像 发表于 04-22 15:17 388次阅读

    Stages—研发过程可视化建模和管理平台

    Stages是美国UL Solutions旗下UL Method Park GmbH的产品,用于帮助企业定义、管理、发布、控制、优化其研发过程,同时使其研发过程符合CMMI、ASPICE
    的头像 发表于 02-05 14:36 369次阅读
    Stages—研<b class='flag-5'>发过程</b><b class='flag-5'>可视化</b>建模和管理平台

    低代码可视化开发 快速构建工业物联网云平台

    代码开发。 什么是低代码? 低代码(Low Code)是一种可视化的软件开发方法,通过最少的手动编码可以更快地交付应用程序。低代码平台的图形用户界面和拖放功能可自动执行
    的头像 发表于 01-22 16:46 982次阅读
    低代码<b class='flag-5'>可视化开发</b> 快速构建工业物联网云平台

    ASIC芯片开发过程

    电子发烧友网站提供《ASIC芯片开发过程.ppt》资料免费下载
    发表于 12-25 10:04 1次下载

    一键生成可视化图表/大屏 这13款数据可视化工具很强大

    前言 数字经济时代,我们每天正在处理海量数据,对数据可视化软件的需求变得突出,它可以帮助人们通过模式、趋势、仪表板、图表等视觉辅助工具理解数据的重要性。 如果遇到数据集需要分析处理,但是你不又知道
    的头像 发表于 12-19 17:27 5306次阅读
    一键生成<b class='flag-5'>可视化</b>图表/大屏 这13款数据<b class='flag-5'>可视化</b>工具很强大