静态分析和动态分析
在开发早期,发现并修复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的正确点使用正确的方法——在早期使用静态方法,在运行时环境中使用动态方法;
-
利用这两种方法对您的项目进行更全面的概述;
-
避免只依赖一种测试方法的陷阱,一个小的疏忽可能导致大的问题。
将静态和动态分析相结合,使团队能够定位更大范围和数量的代码威胁。
获取有价值的见解,来选择最适合您团队的软件测试解决方案。
相关文章:

静态分析和动态分析
在开发早期,发现并修复bug在许多方面都有好处。它可以减少开发时间,降低成本,并且防止数据泄露或其他安全漏洞。特别是对于DevOps,尽早持续地将测试纳入SDLC软件开发生命周期是非常有帮助的。 这就是动态和静态分析测试的用武之地…...
代码随想录_贪心_leetcode 1005 134
leetcode 1005. K 次取反后最大化的数组和 1005. K 次取反后最大化的数组和 给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组: 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。 重复这个过程恰好 k 次。可以多次选择同一个下标 i 。 以…...

笔记:对多维torch进行任意维度的多“行”操作
如何取出多维torch指定维度的指定“行” 从二维torch开始新建torch取出某一行取出某一列一次性取出多行取出连续的多行取出不连续的多行 一次取出多列取出连续的多列取出不连续的多列 考虑三维torch取出三维torch的任意两行(means 在dim0上操作)取出连续…...

【VSCode】1、VSCode 如何连接服务器
文章目录 一、安装 remote-ssh 插件二、直接连接三、配置 SSH 公匙,免密登录 一、安装 remote-ssh 插件 点击插件搜索框,搜 remote-ssh,点击安装 安装完成后就会出现下面的图标: 二、直接连接 点击加号,输入 ssh 连接…...
AI工具:通过智能实现工作和学习效率的革命化
AI工具是指一系列人工智能技术和工具,包括机器学习、深度学习、自然语言处理、计算机视觉等。这些工具可以帮助开发人员和数据科学家通过处理和分析海量数据来自动识别和解决问题,提供智能的决策和预测模型。常见的AI工具包括TensorFlow、PyTorch、Keras…...
static 和构造方法
文章目录 static构造方法内存中数据的存储方式示例 static 具体对象的属性,称之为对象属性,成员属性,实例属性。 具体对象的方法,称之为对象方法,成员方法,实例方法。 静态:static 和具体对…...

【Linux 裸机篇(八)】I.MX6U EPIT 定时器中断、定时器按键消抖
目录 一、EPIT 定时器简介二、定时器按键消抖 一、EPIT 定时器简介 EPIT 的全称是: Enhanced Periodic Interrupt Timer,直译过来就是增强的周期中断定时器,它主要是完成周期性中断定时的。学过 STM32 的话应该知道, STM32 里面的…...

Web安全 XSS靶场搭建(玩转整个XSS环境.)
Web安全 XSS靶场搭建 XSS又叫CSS(Cross Site Script)跨站脚本攻击,指的是攻击者在Web页面,插入恶意JS代码,当用户浏览该页之时,嵌入其中JS代码就会被执行,从而达到攻击的目的.(包含…...
前端开发技术——DOM(上)
一.单选题(共4题,44.4分) 1 下列选项中,关于事件的描述错误的是() A、 事件指的是可以被JavaScript侦测到的行为 B、 事件驱动程序指的是事件触发后要执行的代码 C、 事件源是指触发的事件 D、 事件的种类称为事件…...
银河麒麟v10服务器版安装OpenDDS
1. OpenDDS简介 OpenDDS是OMG数据分发服务(DDS)的一种开源实现,它遵循实时系统v1.2的DDS规范(OMG Document formal/07-01-01)和实时公布/订阅互操作性通信协议v2.1的DDS-RTPS规范(OMG Document formal/2010-11-01)。OpenDDS由OCI公司设计和维护,可从http…...

curl方式调用电商API接口示例 详细介绍
cURL是一个利用URL语法在命令行下工作的文件传输工具,1997年首次发行。它支持文件上传和下载,所以是综合传输工具,但按传统,习惯称cURL为下载工具。cURL还包含了用于程序开发的libcurl。 cURL支持的通信协议有FTP、FTPS、HTTP、H…...

Duboo介绍与入门
文章目录 1、Dubbo的前世今生2、Dubbo的快速入门2.1、Dubbo的基本架构2.2、Nacos2.3、管理后台2.4、入门案例2.4.1、服务提供者搭建环境代码实现配置文件 2.4.2、服务消费者搭建环境代码实现配置文件 最后说一句 1、Dubbo的前世今生 2011年10月27日,阿里巴巴开源了…...

人工智能中(Pytorch)框架下模型训练效果的提升方法
大家好,我是微学AI,今天给大家介绍一下人工智能中(Pytorch)框架下模型训练效果的提升方法。随着深度学习技术的快速发展,越来越多的应用场景需要建立复杂的、高精度的深度学习模型。为了实现这些目标,必须采用一系列复杂的技术来提…...

树莓派CSI摄像头使用python调用opencv库函数进行运动检测识别
目录 一、完成摄像头的调用 二、利用python调用opencv库函数对图像进行处理 2.1 图像处理大体流程 2.2 opencv调用函数的参数以及含义 2.2.1 ret, img cap.read() 读取帧图像 2.2.2 cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 灰度图像 2.2.3 gray_diff_img cv2.absdiff(g…...
Parameters(in)、Parameters(out) and Parameters(inout)
0前言 参数类型(Parameters)指的是函数参数在调用时所具有的性质,从而对函数的调用方式产生影响。在 C 语言中,存在三种不同类型的函数参数:Parameters(in)、Parameters(out) 和 Parameters(inout) 1定义 Parameter…...

jstat命令查看jvm内存情况及GC内存变化
命令格式 jstat [Options] pid [interval] [count] 参数说明: Options,选项,一般使用 -gc、-gccapacity查看gc情况 pid,VM的进程号,即当前运行的java进程号 interval,间隔时间(按该时间频率自动刷新当前内存…...

java 图形化小工具Abstract Window Toolit :画笔Graphics,画布Canvas(),弹球小游戏
画笔Graphics Java中提供了Graphics类,他是一个抽象的画笔,可以在Canvas组件(画布)上绘制丰富多彩的几何图和位图。 Graphics常用的画图方法如下: drawLine(): 绘制直线drawString(): 绘制字符串drawRect(): 绘制矩形drawRoundRect(): 绘制…...

HCIA-RS实验-STP和RSTP(1)
这篇文章开始前,先简单说下这2个协议; 本文介绍了STP和RSTP的基本原理、优缺点以及应用场景。STP和RSTP都是生成树协议,主要作用于避免网络中的环路,保证数据包能够正常转发。在实际应用中,需要根据实际情况选择合适的…...

Leetcodes刷题之删除链表的倒数N个结点和删除链表的中间的结点
吾心信其可行,则移山填海之难,终有成功之日。 --孙中山 目录 🍉一.删除链表的倒数N个结点 🌻1.双指针 🍁2.求链表的长度 🌸二.删除链表的中间的结点 🍉一.删除链…...

Java-数据结构-并查集<二>
一.并查集的简单介绍 二. 并查集的主要构成和实现方式 三.HashMap模板和数组模板 由于在下文的模板基本一致,不再每次都罗列,大体的模板如下,若有错误可以在leetcode找到对应的题目解答,已经附上连接。 HashMap class UnionFi…...

IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...

【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...