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

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(使用前将#替换为@)

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

  • 如何为最终用户方便地启动Java GUI程序

    用户想要从以下位置启动 Java GUI 应用程序Windows 以及一些额外的 JVM 参数 例如 javaw Djava util logging config file logging properties jar MyGUI jar
  • Java EE:如何获取我的应用程序的 URL?

    在 Java EE 中 如何动态检索应用程序的完整 URL 例如 如果 URL 是 localhost 8080 myapplication 我想要一个可以简单地将其作为字符串或其他形式返回给我的方法 我正在运行 GlassFish 作为应
  • 在 java 类和 android 活动之间传输时音频不清晰

    我有一个android活动 它连接到一个java类并以套接字的形式向它发送数据包 该类接收声音数据包并将它们扔到 PC 扬声器 该代码运行良好 但在 PC 扬声器中播放声音时会出现持续的抖动 中断 安卓活动 public class Sen
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • 如何找到给定字符串的最长重复子串

    我是java新手 我被分配寻找字符串的最长子字符串 我在网上研究 似乎解决这个问题的好方法是实现后缀树 请告诉我如何做到这一点或者您是否有任何其他解决方案 请记住 这应该是在 Java 知识水平较低的情况下完成的 提前致谢 附 测试仪字符串
  • 制作一个交互式Windows服务

    我希望我的 Java 应用程序成为交互式 Windows 服务 用户登录时具有 GUI 的 Windows 服务 我搜索了这个 我发现这样做的方法是有两个程序 第一个是服务 第二个是 GUI 程序并使它们进行通信 服务将从 GUI 程序获取
  • JAXb、Hibernate 和 beans

    目前我正在开发一个使用 Spring Web 服务 hibernate 和 JAXb 的项目 1 我已经使用IDE hibernate代码生成 生成了hibernate bean 2 另外 我已经使用maven编译器生成了jaxb bean
  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • 列出jshell中所有活动的方法

    是否有任何命令可以打印当前 jshell 会话中所有新创建的方法 类似的东西 list但仅适用于方法 您正在寻找命令 methods all 它会打印所有方法 包括启动 JShell 时添加的方法 以及失败 被覆盖或删除的方法 对于您声明的
  • 从 127.0.0.1 到 2130706433,然后再返回

    使用标准 Java 库 从 IPV4 地址的点分字符串表示形式获取的最快方法是什么 127 0 0 1 到等效的整数表示 2130706433 相应地 反转所述操作的最快方法是什么 从整数开始2130706433到字符串表示形式 127 0
  • 如何将 pfx 文件转换为 jks,然后通过使用 wsdl 生成的类来使用它来签署传出的肥皂请求

    我正在寻找一个代码示例 该示例演示如何使用 PFX 证书通过 SSL 访问安全 Web 服务 我有证书及其密码 我首先使用下面提到的命令创建一个 KeyStore 实例 keytool importkeystore destkeystore
  • JRE 系统库 [WebSphere v6.1 JRE](未绑定)

    将项目导入 Eclipse 后 我的构建路径中出现以下错误 JRE System Library WebSphere v6 1 JRE unbound 谁知道怎么修它 右键单击项目 特性 gt Java 构建路径 gt 图书馆 gt JRE
  • 加密 JBoss 配置中的敏感信息

    JBoss 中的标准数据源配置要求数据库用户的用户名和密码位于 xxx ds xml 文件中 如果我将数据源定义为 c3p0 mbean 我会遇到同样的问题 是否有标准方法来加密用户和密码 保存密钥的好地方是什么 这当然也与 tomcat
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • Java列表的线程安全

    我有一个列表 它将在线程安全上下文或非线程安全上下文中使用 究竟会是哪一个 无法提前确定 在这种特殊情况下 每当列表进入非线程安全上下文时 我都会使用它来包装它 Collections synchronizedList 但如果不进入非线程安
  • 如何在桌面浏览器上使用 webdriver 移动网络

    我正在使用 selenium webdriver 进行 AUT 被测应用程序 的功能测试自动化 AUT 是响应式网络 我几乎完成了桌面浏览器的不同测试用例 现在 相同的测试用例也适用于移动浏览器 因为可以从移动浏览器访问 AUT 由于它是响
  • 声明的包“”与预期的包不匹配

    我可以编译并运行我的代码 但 VSCode 中始终显示错误 早些时候有一个弹出窗口 我不记得是什么了 我点击了 全局应用 从那以后一直是这样 Output is there but so is the error The declared
  • 编译器抱怨“缺少返回语句”,即使不可能达到缺少返回语句的条件

    在下面的方法中 编译器抱怨缺少退货声明即使该方法只有一条路径 并且它包含一个return陈述 抑制错误需要另一个return陈述 public int foo if true return 5 鉴于Java编译器可以识别无限循环 https
  • JGit 检查分支是否已签出

    我正在使用 JGit 开发一个项目 我设法删除了一个分支 但我还想检查该分支是否已签出 我发现了一个变量CheckoutCommand但它是私有的 private boolean isCheckoutIndex return startCo
  • 使用 xpath 和 vtd-xml 以字符串形式获取元素的子节点和文本

    这是我的 XML 的一部分

随机推荐

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

    注 本文默认读者都是控制类专业 先复习一下奈氏曲线和奈氏判据 以及波特图 下面进入今天的主题 开环与闭环传递函数波特图的意义 分为如下三个部分 开环波特图的意义 闭环波特图的意义 为什么大多研究开环波特图 开环与闭环传递函数 一个典型的控制
  • 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 文件名 假如我们的一开始是这样的 这是没有报错的状态文件 然后我添加了一段内容 比如我添加这段内容项目报错了 我需要恢复
  • 静态和动态代码分析之间有什么区别,您如何知道使用哪个?

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