静态和动态代码分析之间有什么区别,您如何知道使用哪个?

2023-11-10

让我们从体育类比开始,以帮助说明这两种方法之间的区别。静态代码分析类似于使用练习网和投球机练习棒球挥杆。几乎没有什么惊喜。经过几次挥杆后,您确切地知道每次球都在哪里。这有助于基础知识的工作,并确保您具有良好的状态。虽然这有助于改善您的游戏,但它只能使您步入正轨。

动态代码分析更像是在带电投手的情况下练习挥杆动作,每个投球的类型和位置都会发生变化。它不仅测试您的基础知识,还测试您对不同的意外情况做出反应的能力。在生产中完成后,就好比在第9根底部装满底座的时候完善挥杆动作。我是否提到分数与2局并列?赌注很高。

现在,让我们从技术角度比较和对比这两种不同的样式。

静态代码分析

静态代码分析是一种调试方法,通过在运行程序之前检查应用程序的源代码来完成。这通常是通过对照给定的一组规则或编码标准来分析代码来完成的。

这个地址是什么?

这些通常可以解决代码漏洞,代码气味和遵守公认的编码标准。这些包括常见的开发人员错误,这些错误通常在“代码同行评论”中发现。 

在SDLC(软件开发生命周期)的哪个阶段可以使用静态代码分析?

这些通常在“代码开发”阶段之后和“单元/组件/集成”测试阶段之前的任何阶段合并。在某些情况下,CI / CD管道将静态分析报告纳入代码提升的质量门。

好处

除其他好处外,识别代码弱点和遵守严格的开发标准的能力还有助于减少潜在的生产问题。这些还提供了“测试覆盖率”报告,这些报告描述了代码执行的程度。

局限性

在现实生活中,对“乔”有效的方法对“简”无效。静态代码分析将两者视为相同,因为它看不到数据。

考虑以下伪代码: 

function getFullName(firstName) {  
  if (firstName == “Joe”)
  return “Joe Smith”
  if (firstName == “Jane”)
  return “Dave” // This is incorrect business logic
  if (firstName != “Joe or Jane”)
  return “Joey”
  }

 

在上面的示例中,静态代码分析无法理解开发人员的意图。预期“简氏”全名为“简氏”的用户将获得“戴夫”。其他任何名称都将返回“ Joey”。任何期望有效用户的下游应用程序现在都将遇到运行时错误或异常。

这样的问题很容易通过“静态代码分析规则”,JUnits甚至“代码覆盖率”报告。生产是“狂野的西部”,通常包含多种商业风味。“生产方案”不遵循任何给定的规则集。

最后,自动化的静态代码覆盖工具通常会提供一种错误的安全感,即正在验证所有内容。事实是,这些报告仅与管理它们的基本规则一样好。

动态代码分析

动态代码分析是通过在程序运行期间或之后检查应用程序进行调试的方法。由于源代码可以通过各种不同的输入运行,因此没有一组适用于此样式的规则。

这个地址是什么?

这些解决了由于业务环境变化而导致的运行时漏洞。例如,上面的代码片段将通过动态代码分析进行标记。诸如OverOps之类的工具将进一步采取这一步骤。 

  1. 对于每个运行时事件,OverOps都会回答发生的情况,发生的时间以及发生的原因。

  2. OverOps可以在多个方面对所有运行时异常进行检测,分类和优先级排序。

在SDLC(软件开发生命周期)的哪个阶段可以使用动态代码分析?

这些可以在多个地方使用。 

  1. 对于生产,动态代码分析可提供信息以帮助快速排除生产事件。 

  2. 对于预生产,动态代码分析可防止不良代码进入生产。这些可以与CI / CD工具结合使用,作为代码提升的质量门。

好处

在生产中,动态代码分析有助于提供对应用程序问题的可见性,从而减少生产事件的MTTI。Overops甚至更深了–用变量值确定源代码的确切违规行。

局限性

如果代码没有运行,则不会被分析。此外,动态代码分析不能执行静态代码分析工具的功能,最好与它们结合使用。

结论

就像在机器和实地投手上练习挥杆一样,这些方法是相辅相成的。静态代码分析通常会在未经执行的代码中发现动态代码分析无法发现的问题。同时,动态代码分析涵盖了静态分析所没有的生产场景。

OverOps提供了一种非常独特的动态代码分析方法–它在运行时分析应用程序代码,并且可以将具有完整上下文的每个问题检测到True Root Cause中。借助OverOps平台,DevOps团队能够根据实际代码情况实时观察和监视应用程序的可靠性。

 

精彩文章来源微信公众号     java微技术

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

静态和动态代码分析之间有什么区别,您如何知道使用哪个? 的相关文章

  • 模拟函数指针

    以下类包含一个应使用回调技术计算积分的方法 package integrals import java lang public class Integrals public static double f1 double x return
  • 使用 REST API 实现属性/字段级安全

    我正在为支持多租户授权模型的 REST API 构建概念验证 该模型不仅控制用户可以访问哪些对象 还控制对象中的字段 此模型的目标是确保租户管理员只能修改其租户并且只能查看允许的对象属性 我有一个正在开发的现有代码库 可在以下位置公开获取
  • log4j2 SMTP Appender:如何包含另一个级别的先前消息?

    我正在使用 log4j2 beta9 并且有以下配置 其中一部分
  • 转换为 JSON 后保留 XMLGregorianCalendar 日期格式 - Jackson Lib

    我有一个对象 它有 2 个 XMLGregorianCalendar 对象 一个用于日期 另一个用于时间 我使用 Jackson 对象映射器将日期转换为 JSON 格式 转换前的日期为2014年2月10日 时间为11 15 00 转换为 J
  • 如何设置Java线程的CPU核心亲和力?

    我搜索了以前关于类似主题的帖子 但找不到合适的答案 因此提出这个问题 非常感谢您帮助回答 我知道在 Linux 中通过任务集命令设置进程与特定 CPU 核心的关联性 但我想设置 Java 线程与特定 cpu 核心的亲和力 以便属于同一进程的
  • 从java应用程序发送电子邮件时出现异常:中继被拒绝

    我们正在使用 Spring Mail 从 java 应用程序发送电子邮件 org springframework mail javamail JavaMailSenderImpl Spring电子邮件配置是
  • 在 Retrofit 中的 POST 请求中发送空正文

    我的 api 需要一个空的 json 主体 发出帖子请求时 如何在 Retrofit 和 Jackson 中进行设置 我尝试通过null 和空字符串 以及 但无法让它发挥作用 POST my url Call
  • 如何将多个值存储到一个键(java)

    我搜索一个可以存储多个键值对的数据结构 数据基本上是这样的 1 value 1 2 value 2 于是我想到了使用HashMap 遗憾的是 这对我不起作用 因为一个键可能会出现多个值 在上面的例子中 1 value 2 可能是另一个条目
  • Java SSO 与 Wildfly 8、Java 1.8.0_45 和 Active Directory

    我对这个主题进行了很多搜索 但找不到解决方案 要求的简短描述 Wildfly 8 2 下 Web 应用程序上的 SSO 在 Active Directory 中验证 Windows 用户的身份 当 SSO 失败时回退到登录表单 在 Wild
  • 在Java中打印时差最惯用的方法是什么?

    我熟悉以毫秒为单位的打印时间差 long time System currentTimeMillis do something that takes some time long completedIn System currentTime
  • 如何用Java捕获音频数据

    我想访问我的麦克风用 Java 录制的音频数据 我该怎么做呢 我的目标是保存录制的音频数据并同时向用户播放 如果您不需要 JMF 中的任何附加功能 我会避免使用它 因为开发已经停止 最后一个版本是 2004 年 它与 Java 6 存在兼容
  • Java DocumentBuilder - XML 文件中的缩进错误

    我尝试使用 DocumentBuilder 用 Ja va 编写一个简单的 XML 文件 我期望 XML 文件如下所示
  • c3p0 Java 数据库池、故障转移配置

    当数据库关闭时 IP 和端口会自动切换到另一个数据库服务器 我应该如何配置 Web 应用程序的 c3p0 连接池以遵循此数据库故障转移机制 目前 我使用的是 c3p0 但是在上次数据库故障转移中 池连接无法重新建立 请求失败后重新建立 有助
  • 使用 testcontainer 作为 Dockerfile 的一部分运行测试

    我的 dockerfile 看起来像这样 FROM maven 3 jdk 11 slim COPY pom xml COPY src src RUN mvn clean install 这意味着构建的一部分是单元测试的执行 一些单元测试使
  • Java 堆分析因 SIGABRT 崩溃

    我正在尝试分析由 C 编写的方法分配并插入的本机内存JVM通过JNI 我安装了 valgrind version valgrind 3 13 0 并尝试使用以下选项运行 JVM valgrind tool massif massif out
  • 解析XML文件以获取所有命名空间信息

    我希望能够从给定的 XML 文件中获取所有名称空间信息 例如 如果输入 XML 文件类似于
  • 在硬件级别模拟按键 - Windows

    我正在寻找一种语言或库 使我能够在最大可能的水平上模拟击键 而无需实际按下按键 我对击键级别的具体衡量标准是 当我的计算机已经运行按键侦听器 例如鼠标键和粘滞键 时 它是否会产生与物理按键相同的输出 我尝试过很多击键模拟的方法 java A
  • 从java小程序获取正确的本地IP地址

    我想从我的 java 小程序确定本地 IP 地址 问题是当同一台机器上有多个 IP 地址时 该机器具有 LAN 和互联网连接 掌上电脑 VMWare 这是我的测试 public static void main String args tr
  • 在 Groovy 中将整数转换为 BigDecimal

    假设我们有一个 groovy 函数作为参数BigDecimal void func BigDecimal bd 并在 groovy 的其他课程中再次调用它var func 0 这工作正常 但在 java 中它根本无法编译 我知道有一个构造函
  • Java中不同格式的字符串解析为日期

    我想转换String to Date以不同的格式 例如 我从用户那里得到 String fromDate 19 05 2009 i e dd MM yyyy format 我想转换这个fromDate作为日期对象 yyyy MM dd fo

随机推荐

  • 开环与闭环传递函数波特图的意义

    注 本文默认读者都是控制类专业 先复习一下奈氏曲线和奈氏判据 以及波特图 下面进入今天的主题 开环与闭环传递函数波特图的意义 分为如下三个部分 开环波特图的意义 闭环波特图的意义 为什么大多研究开环波特图 开环与闭环传递函数 一个典型的控制
  • stm32学习—库函数总结

    库函数总结这一章 描述了一般stm32开发的流程 一些常用库函数的设置 一般一开始是使用结构体进行数据的初始化 然后通过使用的途径进行划分 比如常用的数据的输出和输出 这在大部分的外设中都是大量涉及的 再接是辅助我们进行逻辑代码的设计的状态
  • 如何在Java项目中定义并调用自己编写的native方法?

    如何在Java项目中定义并调用C C 编写的native方法 开发工具 编写测试的java代码 编写C 代码 将dll文件链接到java项目中 总结 开发工具 IntelliJ IDEA 2020 用来编写java代码 Visual Stu
  • 关于Markdown表格中如何进行换行、合并单元格

    关于Markdown表格中如何进行换行 合并单元格 1 表格中内容对齐 换行 设置对齐方式 表格内容换行 2 表格中单元格的合并 合并表格行 合并表格列 综合使用 1 表格中内容对齐 换行 常规表格使用 一般我们都会这样用表格如下 姓名 年
  • Kruskal算法求解最小生成树

    最小生成树是一个连通图 什么是连通图 强 连通图详解前面介绍了 图存储结构 本节继续讲解什么是 连通图 前面讲过 图中从一个顶点到达另一顶点 若存在至少一条路径 则称这两个顶点是连通着的 例如图 1 中 虽然 V1 和 V3http c b
  • 空间相关分析(三) 局部莫兰指数的理解与计算

    在上篇中 我们详细地阐述了全局莫兰指数 Global Moran I 的含义以及具体的软件实操方法 今天 就来进一步地说明局部莫兰指数 Local Moran I 的含义与计算 首先说明一下进行局部相关分析的必要性 在全局相关分析中 如果全
  • Java8新特性之时间API

    本篇主要介绍Java 8中新引入的全新的一套时间API Java 8之前的Date类的缺陷 java util包和java sql包中都有一个Date类 区别是util包中的Date类存储的是年月日时分秒 而sql包中的Date只存储年月日
  • 小程序随机生成文字卡片文案海报,带分享保存

    概述 文字随机生成 更换头像 生成卡片 保存卡片 分享卡片 详细 文字随机生成 更换头像 生成卡片 保存卡片 分享卡片 数据是在data js中 随机文案获取 demo直接在微信开发者工具可以运行 index xml 代码
  • python字典中的键是什么_python字典中的键是什么

    字典的键 字典中的值没有任何限制 可以是任意Python对象 即从标准对象到用户自定义对象皆可 但是字典中的键是有类型限制的 1 不允许一个键对应多个值 必须明确一条原则 每个键只能对应一个项 也就是说 一键对应多个值是不允许的 像列表 元
  • 银联商务MISPOS接口开发demo 需要调用POSINF.DLL

    1 接口文档 1 1 无gmc界面接口 dll ocx dll调用 posinf dll 函数名为 int bankall char request char response 其中第一个参数为传入参数 ocx调用 umsocx ocx t
  • Mavenx学习笔记二十二:Maven仓库(从仓库解析依赖的机制)

    Maven仓库 从仓库解析依赖的机制 Maven是根据怎样的规则从仓库解析并使用依赖构件的呢 当本地仓库没有依赖构件的时候 Maven会自动从远程仓库下载 当依赖版本为快照版本的时候 Maven会自动找到最新的的快照 这背后的依赖解析机制可
  • gcc编译提示错误“multiple definition of“

    在做OS实验的过程中 由实验书给出的代码 仍然无法通过编译 查到了很多方法 比如条件编译等等 但经过多次尝试后发现并没有效果 终于在网上找到了一篇能够解决问题的文章 原因是 gcc版本太高 需要降低gcc版本 查看当前gcc版本 gcc v
  • CUDA协作组详解

    CUDA中的协作组 1 协作组简介 Cooperative Groups 是 CUDA 9 中引入的 CUDA 编程模型的扩展 用于组织通信线程组 协作组允许开发人员表达线程通信的粒度 帮助他们表达更丰富 更有效的并行分解 从历史上看 CU
  • 关于C++中的条件编译

    2019独角兽企业重金招聘Python工程师标准 gt gt gt C 中的条件编译 分为三种形式 分别如下 1 ifdef define name else endif 这种形式的条件编译 意思大概就是 如果定义了宏define name
  • Typora+PicGo-Core+腾讯云COS 图床配置教程

    typora PicGo Core 腾讯云COS 图床配置教程 前言 1 typora PicGo Core 腾讯云COS 图床 分别是什么 为什么把他们组合在一起 typoa是一个能做Markdown的一个软件 我们可以在里面编辑文本 添
  • 掌优始终坚持技术价值与社会价值并重

    上公交车时无需任何操作 乘客只需将脸对准智能人脸识别设备即可 刷脸乘车 已不是新鲜事 全国各省市都在紧锣密鼓地推进 智慧交通 的建设 在我国上海 北京 济南 广州等地区 乘客可以直接在地铁站的人脸识别终端或自助票务机进行注册和拍照上传 之后
  • Redfish接口测试

    Redfish接口测试 1 Postman使用 2 登录BMC 获取session 3 获取服务器资产信息 4 服务器上下电 5 创建BMC用户 6 删除BMC用户 7 获取指定BMC用户的信息 8 修改指定BMC用户信息 9 获取指定BM
  • SpringBoot 集成XxlJob定时任务使用过程

    POM文件
  • git 文件恢复与项目还原:008

    1 文件恢复 将文件恢复到上一次提交的状态 注意 新建且没有提交的文件无法使用文件恢复 命令 git checkout 文件名 假如我们的一开始是这样的 这是没有报错的状态文件 然后我添加了一段内容 比如我添加这段内容项目报错了 我需要恢复
  • 静态和动态代码分析之间有什么区别,您如何知道使用哪个?

    让我们从体育类比开始 以帮助说明这两种方法之间的区别 静态代码分析类似于使用练习网和投球机练习棒球挥杆 几乎没有什么惊喜 经过几次挥杆后 您确切地知道每次球都在哪里 这有助于基础知识的工作 并确保您具有良好的状态 虽然这有助于改善您的游戏