什么是误报?如何识别误报和漏报

2023-11-16

不管开发人员技能多么精通,误报和漏报总是会发生,很可能是他们的代码有某种无意的错误或漏洞。为了确保尽早发现这些编码错误和漏洞,开发人员通常使用代码静态分析工具,工具会根据开发人员设置的规则检查代码。

然而,代码静态分析工具并不完美,工具有时也会出现误报和漏报。这些编码错误如果没有被捕获,可能会对代码产生显著的影响。

因此,我们将阐释什么是误报,概述误报和漏报的区别,并提供一个误报示例和和一个漏报示例。

本文将包含如下几个部分:

  • 什么是误报?
  • 什么是漏报?
  • 是什么导致了误报和漏报?
  • 如何诊断误报和漏报?
  • 什么是误报示例和什么是漏报示例?
  • 如何减少误报和漏报?

什么是误报?

误报是指实际上并不存在于代码中的问题。它不需要修复。代码没有违反规则,但却被报了一个诊断问题,发生这种情况就是误报。

与之相反的真的问题就是需要被修复的。它违反了规则,实际上是一个真实的问题。

但是从误报中筛选出真的问题是很棘手的。而漏报可能更加棘手。

什么是漏报?

漏报是指没有被发现的问题。违反规则,但却没有被报出来,发生这种情况就是漏报。

除此之外都表示代码不违反规则。

所以,找出漏报真得很棘手。您如何知道自己是否漏掉了一个缺陷呢?

是什么导致了误报和漏报?

误报和漏报的主要原因有两个。

工具出错

工具并不完美,也会出错,因此误报和漏报是不可避免的。

这就是为什么让一个人评审您的代码以及复核工具检测到的任何违规是至关重要的。

例如,您可能设置一个规则,即不存在除零(DBZ)问题。然后,该工具可能会标记一段存在DBZ问题的代码。所以,您仔细看看这段代码,可能会发现其实并没有什么问题。这只是一个误报。

不可判定的规则

您可能有一些无法判定的编码规则。这意味着它不能以100%的准确性执行。

不可判定性是如何发生的?

当您缺乏可见性时,就会发生不可判定性。

如果您能够充分了解程序中的所有内容,那么您就可以判定是否违反了某个规则。您能够从一个静态分析工具中查看诊断结果,并知道“这是一个误报!”

但是,您无法了解程序中包含的所有内容。您无法访问其他程序员为程序的其他部分(例如,固件)所编写的代码。其他部分也会有输入。因此,如果不能清晰了解所有内容,您就无法判断是否存在真正的问题。

如何判断误报和漏报?

有一些误报和漏报是显而易见的,清晰可辨。

但是总有一个灰色地带。

识别误报和漏报

对诊断的判定是主观的,取决于您所从事的行业,以及您使用的编码规则。

误报各不相同

一家公司的误报可能不会是另一家公司的误报。

这里有一个误报的示例。您可能正在开发一款安装在汽车里的软件。如果软件出现问题,生命可能会受到威胁。因此,如果您设置一个规则,即不存在DBZ问题,而却得到了存在DBZ问题的诊断,那么您将需要仔细评估每个违规行为。

然而,您可能正在开发用于娱乐系统的软件。因此,您会只想要快速排除误报,只会去管那些真的问题。

漏报也各不相同

同样地,一家公司的漏报可能不会是另一家公司的漏报。

这里有一个漏报的示例。如果您需要对您的程序进行真正的防御,您可能会用到CERT或MISRA编码规则。如果一个规则没有捕获到某些事情发生的可能性,那么它就是一个漏报。

但是,对于另一家公司来说,只有当一个规则没有捕获到一些绝对会发生的事情,它才是一个漏报。

随着您的可见性增强,您所认为的误报或漏报会得到改进。

如何证明误报和漏报?

您需要做多少工作来证明误报和漏报是不同的。如果您在一个高风险的安全关键型行业,您需要证明它是误报还是漏报。如果您所在的行业风险较低,您可能会查看诊断结果,排除它是误报或漏报,然后继续检查。

什么是误报示例和什么是漏报示例?

不同的开发人员对诊断结果有不同的阐释。这与他们所从事的行业以及经验有关。

下面介绍三种类型的开发人员如何阐释诊断结果。 

如何减少误报和漏报?

不幸的是,误报和漏报是不可避免的。

误报需要额外的检查时间,而且可能会导致真正的问题被草率地排除在外。

漏报是任务关键型软件开发人员的主要顾虑。对这些开发人员来说,误报胜过漏报。

并非所有的代码检查工具都是一样的…

并非所有的代码检查工具(如MISRA检查工具)都是一样的。有些检查工具的准确性更高。而有些会产生更多的误报和漏报。

选择针对误报和漏报最好的代码检查工具

选择正确的代码分析工具可以为您提供更好的诊断结果,并帮助您更好地识别误报和漏报。

当您获得正确的诊断结果时,您可以减少误报和漏报。因此,您将拥有安全可靠的代码、一致的风格以及更容易维护的代码库。

欲了解Perforce静态分析工具Helix QACKlocwork如何帮助提高代码质量,立刻注册申请免费试用吧。

“原创内容,转载请标明出处”

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

什么是误报?如何识别误报和漏报 的相关文章

  • vue开发:前端项目模板

    简介 vue cli创建vue项目 整合vuex vue router axios element ui 项目模板下载地址 创建项目 Java 前端项目合集 使用vue cli创建项目 功能选择 Babel Router vuex Lint
  • HJ67 24点游戏算法

    问题描述 给出4个1 10的数字 通过加减乘除 得到数字为24就算胜利 输入 本题含有多组样例输入 4个1 10的数字 数字允许重复 但每个数字仅允许使用一次 测试用例保证无异常数字 输出 true or false 示例 输入 7 2 1
  • CRC的基本原理详解

    CRC Cyclic Redundancy Check 被广泛用于数据通信过程中的差错检测 具有很强的 检错能力 本文详细介绍了CRC的基本原理 并且按照解释通行的查表算法的由来的思路介绍 了各种具体的实现方法 1 差错检测 数据通信中 接
  • mybatisplus多条件并列复杂查询

    在使用mybatisPlus时 有时需要一些负责的sql条件拼接 这时 我们可以利用 QueryWrapper的and Consumer consumer 和 or Consumer consumer 来对条件进行拼接 查询条件拼接 例如
  • 配置AOP时报错:java.lang.ClassCastException: com.sun.proxy.$Proxy2 cannot be cast to

    报错 Exception in thread main java lang ClassCastException com sun proxy Proxy2 cannot be cast to 看报错信息 显示的是动态代理生成的类无法转换到我
  • navigator.geolocation.getCurrentPosition 获取位置偏移

    navigator geolocation getCurrentPosition function position 获取当前位置成功返回 经度 coords longitude 纬度 coords latitude 准确度 coords
  • 前端Vue模板页面(组件最全)

    https github com PanJiaChen vue element admin 这里是一个真诚的 青年技术交流QQ群 761374713 不管你是大学生 社畜 想学习变成的其他人员 欢迎大家加入我们 一起成长 一起进步 真诚的欢
  • Centos7 安装 Docker Compose

    目录 一 Docker Compose 简介 二 环境准备 三 安装 四 验证 五 问题解决 一 Docker Compose 简介 Compose 是用于定义和运行多容器 Docker 应用程序的工具 通过 Compose 您可以使用 Y
  • 九、JDK1.8—并行流与串行流

    并行流 并行流就是把一个内容分成多个数据块 并用不同的线程分 别处理每个数据块的流 Java 8 中将并行进行了优化 我们可以很容易的对数据进行并 行操作 Stream API 可以声明性地通过 parallel 与 sequential
  • web自动化测试工具之Selenium的使用

    Selenium的使用 Selenium 概述 工作原理 应用场景 安装浏览器驱动 基本使用 安装Selenium模块 注意点 使用分析 代码实现 常见方法 driver对象 定位标签元素与获取标签对象 获取文本内容与属性值 使用无界面浏览
  • Oracle 【直接加载(sqlldr direct=true)】全方位解析与性能优化[2]

    3 比较direct方式使用并行和非并行选项的性能差异 数据文件 leo test data 100000记录 控制文件 leo test ctl 日志文件 leo test log 串行直接加载sqlload sqlldr userid
  • VC++ MapWinGis篇(一)

    添加高德图层 AMapProvider h pragma once include BaseProvider h class ABaseProvider public BaseProvider public ABaseProvider La
  • What time is it?【模拟】

    题目链接 POJ 1676 题意 给你两个时间点 前一个时间点比后一个时间点快了15分钟 当然 也有可能是隔天的 现在要问是否唯一确定第一个时间 输入坑点 两个时间之间用一个空格隔开 所以一行一共可以有25个字符 我们可以枚举00 00 2
  • ABAP doi 导出程序

    PERFORM FRM OUTPUT EXCEL 38 TABLES GT RESULT USING ZHRPA038 LDF PATH FORM FRM OUTPUT EXCEL 38 TABLES PT EXCEL TYPE STAND
  • css如何让两个div上下排列_深入了解CSS层叠上下层

    1 要想理解层叠上下层 首先要先从文档流和盒模型说起 文档流 在CSS中 文档流是一个很基础也是很重要的一个概念 很多时候她被称为Document Flow 但在CSS的标准被称为Normal Flow 即普通流或常规流 大家更喜欢称之为文

随机推荐

  • 基于MATLAB粒子群算法求解单目标优化问题

    基于MATLAB粒子群算法求解单目标优化问题 在实际应用中 优化问题是非常常见的一类问题 而对于单目标优化问题 粒子群算法是目前被广泛采用的一种优化算法 通过对分布在搜索空间中的粒子进行适应度评估和位置调整 粒子群算法可以在较短时间内找到全
  • uniapp开发微信小程序与H5的区别(Vue)

    1 微信小程序中父组件监听子组件的事件 子组件的 listeners拿不到事件 2 微信小程序中event stopPropagation 没用 只能用vue指令的 stop来阻止 3 vue开发网页的时候 一般对于不需要响应式的数据我们可
  • python flask框架下登录注册界面_Python-用户登录 Flask-Login

    用户登录功能是 Web 系统一个基本功能 是为用户提供更好服务的基础 在 Flask 框架中怎么做用户登录功能呢 今天学习一下 Flask 的用户登录组件 Flask Login Python 之所以如此强大和流行 除了本身易于学习和功能丰
  • Nginx基础知识(个人总结)

    声明 1 本文为我的个人复习总结 并非那种从零基础开始普及知识 内容详细全面 言辞官方的文章 2 由于是个人总结 所以用最精简的话语来写文章 3 若有错误不当之处 请指出 Nginx C语言编写 战斗民族俄罗斯人所创 是高性能的 HTTP
  • Java学习之笔试面试题总结

    1 浅复制 浅克隆 被复制对象的所有变量都含有与原来的对象相同的值 而所有的对其他对象的引用仍然指向原来的对象 换言之 浅复制仅仅复制所考虑的对象 而不复制它所引用的对象 深复制 深克隆 被复制对象的所有变量都含有与原来的对象相同的值 除去
  • ctfshow-web3

    0x00 前言 CTF 加解密合集 CTF Web合集 0x01 题目 0x02 Write Up 这个题目一看就知道是一个文件包含漏洞 php input可以访问请求的原始数据的只读流 将post请求的数据当作php代码执行 GET ht
  • 【Dexie.js 踩坑】Failed to execute ‘transaction‘ on ‘IDBDatabase‘

    查了很多资料 显示都是 indexedDB 的报错 说是异步操作无法保证下一次操作时上一步已经完成 试了很多按顺序执行的方法都无效 再后来试着解决控制台显示的警告提示我版本控制有问题 我就把版本升级了 问题迎刃而解 Dexie 官方文档是英
  • LayuiAdmin模板(0积分免费下载,非单独框架)

    点击这里直接下LayuiAdmin模板 请选择 普通下载
  • 4.通过Opencv采集摄像头视频数据

    VideoCapture 虚拟采集器 一般设备号从0开始 cap read 读取视频帧 返回值有两个 第一个为状态值 读到帧为true 第二个值为视频帧 cap release 释放资源 示例程序 import cv2 引入CV库 创建窗口
  • 深度干货:制造进销存国内现状如何?2023年五大制造进销存最新盘点!

    制造进销存是什么 制造进销存的发展如何 制造进销存的优势在哪里 制造进销存都能为企业提供什么 本文将带大家深入浅出的聊聊制造进销存 全面剖析制造进销存的前世今生 并且为大家提供2023年十大制造进销存系统大盘点 一 什么是制造进销存 制造进
  • W801

    目录 文档来源 芯片概述及MCU 特性可参考 安全特性 Wi Fi 特性 蓝牙特性 低功耗模式 芯片结构 与前述介绍的外设相对应 总线结构 说明 1 AHB 1 总线 主设备列表 编辑 从设备列表 2 AHB 2总线 时钟结构 CDK中对运
  • linux入门系列18--Web服务之Apache服务2

    接上一篇文章 在了解Apache基本配置以及SELinux相关知识后 继续演示Apache提供的虚拟主机功能以及访问控制方式 如果还没看上一篇的建议先查看后再来 上篇文章 linux入门系列18 web服务之apache服务1 三 Apac
  • openwrt调试用到的

    PC间文件共享 python3 m http server 在共享的电脑上 打开浏览器 直接输入 serverip 8000 NFS Ubuntu PC端 sudo apt get install nfs kernel server sud
  • shell的模拟实现

    目录 整体框架分析 代码演示 代码分析 整体框架分析 考虑下面这个与shell典型的互动 xzy ecs 333953 date16 ls makefile mycmd mycmd cpp myexec myexec c test py x
  • Python爬虫,私活接单记录,假日到手5500,美滋滋

    前言 每年的元旦节前后 都会是Python兼职接单的小高潮 这段时间各个行业对爬虫类的需求会暴增 圈子里很多朋友在元旦假期都没闲着 两天赚上万的不在少数 所以近来问我技术变现 兼职接单问题的朋友也特别多 我把问题总结下来 发现大部分人都有着
  • dataframe中如何筛选包含特定字符串(单个字符串、字符串列表)的列?

    里斯斯里 dataframe中如何筛选包含特定字符串 单个字符python基础教程 串 字符串列表 的列 问题描述 dataframe的某一列均为字符串格式 想筛选出含有特定字符串的行 具体实现代码如下 df df 地址 str conta
  • React循环

    import React Component from react class App extends Component constructor props super props this state str 这是react数据 num
  • golang之json注释处理

    场景 json 作为现代比较常用的文本格式 本身是不支持注释的 因为它的设计初衷是作为一种轻量级数据交换格式 只需要包含数据本身 而不应该包含注释或者其他无关的信息 但是有时json内字段较多 想写一些注释说明 这些都是编程工具或者编辑器特
  • Qt Assistant使用心得

    Qt Assistant也就是Qt助手 1 如何添加文档 编辑 gt 首选项 gt 文档 gt 添加后选择需要添加的 qch文件 qch是Qt帮助文档的格式 通常Qt的帮助文档在qt目录下ducuments文件夹里 比如我的在 opt V
  • 什么是误报?如何识别误报和漏报

    不管开发人员技能多么精通 误报和漏报总是会发生 很可能是他们的代码有某种无意的错误或漏洞 为了确保尽早发现这些编码错误和漏洞 开发人员通常使用代码静态分析工具 工具会根据开发人员设置的规则检查代码 然而 代码静态分析工具并不完美 工具有时也