静态分析和动态分析
在开发早期,发现并修复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…...

JSP网上教学资源共享系统(源代码+论文)
通过网上教学资源共享系统的建设,完成了对于操作系统课程的远程化授课。可以使学生不受时间空间的限制,通过网络对于这门课程进行学习。建立起了基于B/C的网络化教学系统。本网站采用当前最流行的JSP网络编程技术,可以实现数据的高效、动态、…...

QT C++入门学习(1) QT Creator安装和使用
Qt官方下载 Qt 官网有一个专门的资源下载网站,所有的开发环境和相关工具都可以从这里下载,具体地址是:http://download.qt.io/ 进入链接后,是一个文件目录,依次进入这个路径:archive/qt/5.12/5.12.9/qt-o…...

UE动画状态机的事件触发顺序测试
正常A状态过渡到B状态的事件顺序: 整个流程为: 调用B状态的On Become Relevant事件调用B状态的On Update事件调用A状态的Left State Event事件调用B状态的Entered State Event事件调用B状态的Start Transition Event事件调用B状态的End Transition Even…...

数学建模的搜索技巧
你真的会使用“度娘”吗?是不是在查找所需要的东西的时候,搜出来的信息价值并不是很大,跟着北海老师学习,如何更高效的使用百度去查询自己想要的,有用的资料! 搜索技巧 完全匹配搜索 : 查询词的外边加上双…...

学成在线笔记+踩坑(10)——课程搜索、课程发布时同步索引库。
导航: 【黑马Java笔记踩坑汇总】JavaSEJavaWebSSMSpringBoot瑞吉外卖SpringCloud黑马旅游谷粒商城学成在线牛客面试题_java黑马笔记 目录 1 【检索模块】需求分析 1.1 全文检索介绍 1.2 业务流程 1.2.1、课程发布时索引库里新增一条记录 1.2.2、课程搜索 2 准…...

某应用虚拟化系统远程代码执行
漏洞简介 微步在线漏洞团队通过“X漏洞奖励计划”获取到瑞友天翼应用虚拟化系统远程代码执行漏洞情报(0day),攻击者可以通过该漏洞执行任意代码,导致系统被攻击与控制。瑞友天翼应用虚拟化系统是基于服务器计算架构的应用虚拟化平台,它将用户…...

solaris-Oracle11g于linux-mysql相连
Oracle11g(solaris64sparc)mysql(linux)实验 此实验目的,实现公司ebs R12 连mysql上的短信平台.预警和提示ebs中信息, 一,环境 主机名 ip 平台 数据库 dbname ebs234 192.168.1.234 …...

大厂齐出海:字节忙种草,网易爱社交
配图来自Canva可画 随着国内移动互联网红利逐渐触顶,互联网市场日趋饱和,国内各互联网企业之间的竞争便愈发激烈起来。在此背景下,广阔的海外市场就成为了腾讯、阿里、字节、京东、拼多多、百度、网易、快手、B站等互联网公司关注和争夺的重…...

几个实用的正则表达式
1到100之间的正整数正则 表达式:^[1-9]\d?$|^100$ 解释: ^表示匹配字符串开始位置 [1-9]表示数字1-9中的任意一个 \d表示任意一个数字 ?表示前面一个字符或子表达式出现0或1次 $表示匹配字符串结束位置 |表示或 最终的解释为:匹配满…...

python实战应用讲解-【numpy数组篇】常用函数(八)(附python示例代码)
目录 Python Numpy MaskedArray.cumprod()函数 Python Numpy MaskedArray.cumsum()函数 Python Numpy MaskedArray.default_fill_value()函数 Python Numpy MaskedArray.flatten()函数 Python Numpy MaskedArray.masked_equal()函数 Python Numpy MaskedArray.cumprod()函…...