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

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

3天内不再提示

静态分析和动态分析的区别

麦克泰技术 来源:麦克泰技术 2023-05-16 16:03 次阅读

摘要

静态分析和动态分析是一种双管齐下的方法,可以在可靠性、错误检测、效率和安全性方面改进开发过程。为什么它们都很重要?它们又有什么区别呢?

前言

在开发早期,发现并修复bug在许多方面都有好处。它可以减少开发时间,降低成本,并且防止数据泄露或其他安全漏洞。特别是对于DevOps,尽早持续地将测试纳入SDLC软件开发生命周期是非常有帮助的。

这就是动态和静态分析测试的用武之地。它们在SDLC中各自服务于不同的目的,同时也为任何开发团队提供独特且几乎即时的投资回报率。

静态与动态分析:了解两者的区别

静态代码分析是一个广义的术语,用于描述几种不同类型的分析。然而,所有这些分析都有一个共同的特征:它们不需要代码执行即可运行。

相比之下,动态分析需要代码执行。尽管还有其他区别,但这一特征是区分这两种测试方法的根本因素。

这也意味着每种方法在开发过程的不同阶段都提供了不同的好处。为了理解这些差异,我们可以回顾以下内容。

每种策略需要什么。

需要使用测试类型。

协助该过程的工具。

什么是静态分析?

静态代码分析测试可以包括各种类型,其中两种主要的类型是基于模式的测试和基于流的测试。

基于模式的静态分析可以查找出违反定义编码规则的代码。除了确保代码满足合规性或内部计划的统一期望外,它还可以帮助团队预防缺陷,如资源泄漏、性能和安全问题、逻辑错误和API滥用等。

基于流的静态分析可以查找和分析代码的各种路径。这可以通过控制流(执行行(hang)的顺序)和数据流(变量或类似实体可以被创建、改变、使用和销毁的顺序)来实现。这些过程可以暴露出导致关键缺陷的问题,例如:

内存损坏(缓冲区覆盖)

内存访问违规

空指针解引用

竞态条件(Race conditions)

死锁(Deadlocks)

它还可以通过绕过安全关键代码(如身份验证或加密代码)的路径来检测安全问题。

此外,度量分析包括对代码的各个方面进行衡量和可视化。它可以帮助检测现有的缺陷,但更常见的是,为后续代码维护时,提前消除可能带来未知缺陷的可能性。这是通过发现代码中的复杂性和冗长性来完成的,例如:

过大的组件

过多的循环嵌套

一系列过于冗长的判定

复杂的组件间依赖关系

什么是动态分析?

动态分析有时被称为运行时错误检测,动态分析是测试类型之间的区别开始变得模糊的地方。动态应用程序安全测试(DAST)是一种分析测试,目的是检查测试项目而不是执行它。这种白盒测试检查的是内部行为,并非外部行为。然而测试中的代码必须被执行。这是通过运行与动态测试相同的黑盒测试来完成的。

这意味着动态分析可以在内部故障发生的瞬间检测并报告这些故障。这使得测试人员更容易精确地将这些故障与测试行动关联起来,以便进行事故报告。类似于好的静态分析,DAST提供了完整的技术细节,使开发人员能够隔离和修复潜在的缺陷。

DAST还扩展了所有级别的测试能力,从单元测试到验收,使检测内部故障成为可能,这些故障指向在测试停止后发生或将要发生的无法观察到的外部故障。

静态分析的利弊

凡事皆有利弊,静态分析测试也有优点和缺点。

静态分析的利弊

优点:

1. 在不执行源代码的情况下评估源代码;

2. 分析整个代码的漏洞和错误;

3. 遵循定制的、定义好的规则;

4. 增强开发人员的责任感;

5. 具有自动化能力;

6. 尽早突出错误并减少修复漏洞所需的时间。

缺点

1. 可能返回误报和漏报,会分散开发人员的注意力;

2. 手动操作需要很长时间;

3. 无法找到运行时环境中出现的错误或漏洞;

4. 决定应用哪些行业编码标准可能会令人困扰;

5. 确定偏离违反规则是否合适,可能具有挑战性。

虽然这些缺点看起来令人生畏,但静态分析的缺点可以用两件事来补充:

自动化静态分析

使用动态分析技术

为什么静态代码分析如此有价值?

所有这些类型的静态分析都有一个共同点:它们会涉及扫描或检查程序源代码。

这是一种快速而简单的暴露关键缺陷的方法。他实现了100%的覆盖率和100%的客观结果。

不断地执行这样的静态代码分析是有意义的,因为它提供了这些可操作的结果,减少了成本和开发时间,增加了代码覆盖率,等等。

超越静态分析的范畴

静态扫描提供信息来帮助预测代码集成和执行时可能会发生的情况。它根据工具认为的缺陷标准来检测缺陷。通常也可以根据您的偏好和优先级进行定制。

但是,工具不能告诉您测试中或生产中的系统何时交付了意外的、不适当的或不准确的结果。

这里的挑战是难以观察意想不到的行为。例如,对于用户、测试人员或测试执行工具来说,事务可能看起来正确地进行,但实际上,组件抛出了一个未处理的异常,并且未能正确地处理它。一个控制系统可能会在测试三天内快速正确地响应,但可能会在生产的第四天出现内存泄漏并导致崩溃。

通过使用静态代码分析工具修复所有检测到的缺陷,并不能保证不会有其他缺陷导致类似的失败。这就是为什么将失败的定义应用于内部和外部行为是很重要的,即使在集成之后也是如此。内部故障必须在外部故障出现之前检测到。

结合静态和动态分析的最佳实践

将静态和动态分析相结合,是获得可操作结果、减少错误发生、增加错误检测并创建更安全代码的最佳选择。两者并无优劣之分。它们像精心制作的瑞士手表的所有齿轮一样协同工作。

要同时使用静态和动态分析,请遵循这些最佳实践:

将它们与符合您需求的手动和自动化解决方案一起使用;

使代码对其他开发人员具有可读性和可重用性;

在SDLC的正确点使用正确的方法——在早期使用静态方法,在运行时环境中使用动态方法;

利用这两种方法对您的项目进行更全面的概述;

避免只依赖一种测试方法的陷阱,一个小的疏忽可能导致大的问题。

将静态和动态分析相结合,使团队能够定位更大范围和数量的代码威胁。

获取有价值的见解,来选择最适合您团队的软件测试解决方案。

审核编辑:汤梓红

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

    关注

    8

    文章

    4448

    浏览量

    125122
  • 代码
    +关注

    关注

    30

    文章

    4555

    浏览量

    66750
  • 动态分析
    +关注

    关注

    1

    文章

    19

    浏览量

    7221
  • 静态分析
    +关注

    关注

    1

    文章

    34

    浏览量

    3836

原文标题:静态分析和动态分析

文章出处:【微信号:麦克泰技术,微信公众号:麦克泰技术】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基本共射放大电路的组成、静态分析动态分析

       分析基本共射放大电路的需要从静态动态分析静态指的是“直流通路在直流电源作用下直流电流流经的通路”,用于研究
    发表于 01-12 11:38 8897次阅读
    基本共射放大电路的组成、<b class='flag-5'>静态</b><b class='flag-5'>分析</b>及<b class='flag-5'>动态</b><b class='flag-5'>分析</b>

    放大电路的动静态分析求教

    先大概对问题进行一下描述,共发射极基本交流放大电路如下图。然后可以得到上面这幅图的直流和交流通路如下面两幅图。下面是问题:静态分析就是先根据左图确定静态工作点,然后用右图在确定静态工作
    发表于 01-13 15:27

    传统静态配置方法与动态配置方法的区别在哪?

    传统静态配置方法有什么缺点?MAC地址和IP地址的动态配置方法是什么?传统静态配置方法与动态配置方法的区别在哪?
    发表于 05-27 06:51

    静态动态时序模拟的优缺点

    不能保证100%的覆盖率。如果到了门级的仿真将非常消耗时间。 静态时序分析静态时序分析只能分析时序要求而不能进行功能验证。不需要测试向量,能
    发表于 09-04 14:26

    动态BGP与静态BGP的区别

    动态BGP与静态BGP的区别 动态BGP与静态BGP的区别 1.
    发表于 12-01 16:55

    动态ip、静态ip、pppoe拨号的区别

    在设置无线路由器上网时,上方方式有pppoe拨号(宽带拨号、ADSL拨号)、动态IP(DHCP、自动获取IP)、静态IP(固定IP)这个选项;那么动态ip、静态ip、pppoe拨号这3
    发表于 12-27 11:31 6.3w次阅读
    <b class='flag-5'>动态</b>ip、<b class='flag-5'>静态</b>ip、pppoe拨号的<b class='flag-5'>区别</b>

    时序分析静态分析基础教程

    本文档的主要内容详细介绍的是时序分析静态分析基础教程。
    发表于 01-14 16:04 14次下载
    时序<b class='flag-5'>分析</b>的<b class='flag-5'>静态</b><b class='flag-5'>分析</b>基础教程

    双极性晶体管的动态分析

    既然有静态分析,当然也会伴随着动态分析静态分析是去掉了放大电路中的交流成分,那么,
    的头像 发表于 08-14 16:34 1409次阅读
    双极性晶体管的<b class='flag-5'>动态</b><b class='flag-5'>分析</b>

    双极性晶体管的静态分析

    上篇对双极性晶体管的放大作用做了一下简单分析,知道了要实现放大作用,不但静态下要满足条件,动态下也对电路有所要求。本篇就介绍一下关于静态分析
    的头像 发表于 08-14 16:39 1913次阅读
    双极性晶体管的<b class='flag-5'>静态</b><b class='flag-5'>分析</b>

    什么是静态分析?如何管理早期静态分析报告

    简单来说,静态分析是在不执行代码的情况下检查源代码和二进制代码的过程,通常用于查找bug的前期准备或评估代码质量。与需要运行程序的动态分析(例如Parasoft Insure ++)不
    的头像 发表于 11-01 11:35 3014次阅读

    什么是完备静态分析

    在开发安全、可靠和合规的软件时,完备静态分析是一种有益的实践。本篇文章中,我们将讨论完备分析静态分析的不同之处,为什么它很重要,以及完备
    的头像 发表于 11-11 10:16 410次阅读
    什么是完备<b class='flag-5'>静态</b><b class='flag-5'>分析</b>?

    什么是静态代码分析静态代码分析概述

    静态分析可帮助面临压力的开发团队。高质量的版本需要按时交付。需要满足编码和合规性标准。错误不是一种选择。 这就是开发团队使用静态分析工具/源代码分析
    的头像 发表于 07-19 12:09 923次阅读
    什么是<b class='flag-5'>静态</b>代码<b class='flag-5'>分析</b>?<b class='flag-5'>静态</b>代码<b class='flag-5'>分析</b>概述

    动态电路和静态电路的区别

    动态电路和静态电路的区别 动态电路和静态电路是电路的两种基本类型,它们在电子设备中的作用与应用不同。本文将详细介绍
    的头像 发表于 09-17 10:47 3287次阅读

    网络静态ip和动态区别

    网络静态IP和动态IP是指在网络中分配给设备的唯一标识符,下面将详细探讨网络静态IP和动态IP的区别。 一、定义
    的头像 发表于 11-27 14:46 494次阅读

    静态电流什么意思 静态电流和动态电流的区别

    静态电流什么意思 静态电流和动态电流的区别  静态电流是指电荷在不发生移动的情况下所产生的电流。在静电场中,电荷通过金属导线或其他连续的导电
    的头像 发表于 12-19 14:02 1115次阅读