静态分析和动态分析

news2024/9/20 18:31:40

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

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

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

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

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

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

  • 每种策略需要什么。

  • 需要使用测试类型。

  • 协助该过程的工具。

什么是静态分析?

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

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

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

  • 内存损坏(缓冲区覆盖)

  • 内存访问违规

  • 空指针解引用

  • 竞态条件(Race conditions)

  • 死锁(Deadlocks)

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

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

  • 过大的组件

  • 过多的循环嵌套

  • 一系列过于冗长的判定

  • 复杂的组件间依赖关系

什么是动态分析?

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

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

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

静态分析的利弊

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

静态分析的利弊

优点:缺点
1. 在不执行源代码的情况下评估源代码;1. 可能返回误报和漏报,会分散开发人员的注意力;
2. 分析整个代码的漏洞和错误;2. 手动操作需要很长时间;
3. 遵循定制的、定义好的规则;3. 无法找到运行时环境中出现的错误或漏洞;
4. 增强开发人员的责任感;4. 决定应用哪些行业编码标准可能会令人困扰;
5. 具有自动化能力;5. 确定偏离违反规则是否合适,可能具有挑战性。
6. 尽早突出错误并减少修复漏洞所需的时间。

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

  • 自动化静态分析

  • 使用动态分析技术

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

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

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

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

超越静态分析的范畴

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

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

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

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

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

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

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

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

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

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

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/466632.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何在 Ubuntu 20.04 系统上安装 Docker方法和使用

0. docker的例子,ubuntu中运行docker例子应用 1.首先对docker环境进行安装,我这里是ubuntu20.04的系统,进行演示,更新 apt 包索引 sudo apt update2.安装依赖包 sudo apt install apt-transport-https ca-certificates curl gn…

BatteryChargingSpecification1.2中文详解

1. Introduction 1.1 Scope 规范定义了设备通过USB端口充电的检测、控制和报告机制,这些机制是USB2.0规范的扩展,用于专用 充电器(DCP)、主机(SDP)、hub(SDP)和CDP(大电流充电端口)对设备的充电和power up。这些机制适用 于兼…

从校园跑腿系统看当代青年的消费观念与行为习惯

当代大学生的消费观念和行为习惯正在发生着巨大的变化,他们越来越注重方便、快捷和贴近自己的消费体验。在这一背景下,校园跑腿系统应运而生,成为了解决学生日常生活中烦恼的新选择。 ​校园跑腿系统是一款基于互联网技术、致力于提供高效、…

做好韩语同声传译,译员需要具备这些能力!

我们知道,同声传译是口译的高级形式,难度比较大,对译员的综合能力要求非常高。那么,针对同声传译的韩语翻译,译员需要具备什么条件,如何翻译效果比较好? 据了解,韩语同声传译是一项高…

会声会影2023最新中文旗舰版新功能介绍

会声会影Corel VideoStudio2023一款功能丰富的视频编辑软件。具有拖放式标题、转场、覆叠和滤镜,色彩分级、动态分屏视频和新增强的遮罩创建器,超越基本编辑,实现影院级效果。优化分屏剪辑功能,简化多时间轴编辑的工作流程&#x…

数字硬件建模SystemVerilog-通信总线建模 --Interface和modport

来到了SV最后一部分,预计三篇文章,两周更完,所有的思维导图如下: 概述 SystemVerilog Interface是modport的一种,但比简单的输入、输出或输入输出端口的功能更多。在其最简单的形式中,Interface端口将相关的…

使用Tailwind CSS创建自定义动画,进阶您的前端开发技能

从零开始,探索如何使用 TailwindCSS 自定义动画 Tailwind CSS是一种颠覆性的CSS框架,改变了开发者处理前端开发的方式。它的低级性和移动优先的方法使得它成为设计独特、响应式和可扩展的网页设计的热门选择。此外,它还具有强大的动画支持&am…

13共模电感

目录 一、原理 二、差模噪声和共模噪声主要来源 三、共模电感如何抑制共模信号 四、共模电感的选取 一、原理 在介绍共模电感之前先介绍扼流圈,扼流圈是一种用来减弱电路里面高频电流的低阻抗线圈。为了提高其电感扼流圈通常有一软磁材料制的核心。共模扼流圈有…

Django企业it资产管理系统

背景 21世纪,我国早在上世纪就已普及互联网信息,互联网对人们生活中带来了无限的便利。像大部分的公司都有自己的系统,由从今传统的管理模式向互联网发展,如今开发自己的系统是理所当然的。那么开发企业it资产管理系统意义和用处…

JavaWeb开发学习笔记_Vue

JavaWeb开发学习笔记_Vue Vue快速入门常用指令v-bind和v-modelv-onvif和vshowvfor 案例生命周期参考 Vue快速入门 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible"…

Windows上使用CLion配置OpenCV环境,亲测可用的方法(一)

一、Windows上使用CLion配置OpenCV环境&#xff0c;亲测可用的方法&#xff1a; Windows上使用CLion配置OpenCV环境 教程里的配置&#xff1a; widnows 10 clion 2022.1.1 mingw 8.1.0 opencv 4.5.5 Cmake3.21.1 我自己的配置&#xff1a; widnows 10 clion 2022.2.5 mingw 8.…

Flink 2.0 启航,开启全新篇章

我们已经在开发者邮件列表上发起了关于 Flink 2.0 版本计划的讨论。我们相信现在是时候启动这个计划了&#xff0c;以便在明年作为 Apache Flink 的十周年庆典推出这个版本。欢迎大家参加关于 Flink 2.0 的愿景、功能、时间表、流程、路线图等方面的讨论&#xff01; 开发者邮件…

04.DolphinScheduler使用详细介绍

文章目录 创建Worker分组-指定执行机器使用创建执行脚本用户 执行脚本执行Shell脚本执行Spark任务执行Spark任务可能的报错Storage service config does not exist! 执行Hive任务执行HTTP任务创建任务任务参数任务样例 参数使用内置参数基础内置参数衍生内置参数画布中引用方法…

拓展业务规模 | 2023 Google 游戏开发者峰会

将游戏拓展到 PC 端&#xff0c;在很大程度上能够帮助您向更多玩家展示游戏魅力&#xff0c;进一步提高用户覆盖率、互动度和 ROI&#xff0c;并在 Google Play 平台上构建高质量的游戏。Google Play 游戏电脑端的每次更新&#xff0c;都旨在让您的跨平台开发更加轻松&#xff…

初探 VS Code + Webview

本文作者为 360 奇舞团前端开发工程师 介绍 VSCode 是一个非常强大的代码编辑器&#xff0c;而它的插件也非常丰富。在开发中&#xff0c;我们经常需要自己编写一些插件来提高开发效率。本文将介绍如何开发一个 VSCode 插件&#xff0c;并在其中使用 Webview 技术。首先介绍一下…

功率放大器在MTT检测超声医疗中的应用

实验名称&#xff1a;MTT检测超声激活血卟啉对SW-480细胞的杀伤作用 研究方向&#xff1a;超声医疗 测试目的&#xff1a; 自提出激光与血卟啉结合具有明显的抗肿瘤效应&#xff0c;PDT法在诊治肿瘤方面已做了大量研究并在临床中得到应用。但由于激光对组织穿透力较差&#xff…

C语言CRC-8 ROHC格式校验函数

C语言CRC-8 ROHC格式校验函数 CRC校验基于前处理和后处理的不同&#xff0c;由不同的协会标准推出了一些不同格式的版本。这里介绍CRC-8 ROHC格式的校验函数。 CRC-8 ROHC格式特征 标准CRC-8的校验函数参考&#xff1a; C语言标准CRC-8校验函数 CRC-8 ROHC格式有如下的不同&…

Numpy从入门到精通——详解广播机制

这个专栏名为《Numpy从入门到精通》&#xff0c;顾名思义&#xff0c;是记录自己学习numpy的学习过程&#xff0c;也方便自己之后复盘&#xff01;为深度学习的进一步学习奠定基础&#xff01;希望能给大家带来帮助&#xff0c;爱睡觉的咋祝您生活愉快&#xff01; 这一篇介绍《…

机器学习-线性模型(波士顿房价预测)

机器学习-线性模型(波士顿房价预测) 文章目录 机器学习-线性模型(波士顿房价预测)人工智能、机器学习、深度学习的关系机器学习深度学习 波士顿房价预测数据集介绍模型假设 → \rightarrow →线性回归模型评价函数 → \rightarrow →均方误差线性回归模型网络结构实现波士顿房价…

HummerRisk V1.0 安装部署指南

HummerRisk v1.0 开始采用 springcloud 微服务架构&#xff0c;微服务架构更加易于扩展、易于容错、灵活部署&#xff0c;但是需要注意的是 HummerRisk v0.x 版本无法直接升级到 v1.0&#xff0c;如需使用 HummerRisk 请手动安装最新版本。 环境要求 全新安装的 Linux(x64)需要…