鉴源实验室丨软件代码编码规则静态检测

2024-01-09

作者 | 李伟 上海控安安全测评部总监

来源 | 鉴源实验室

社群 | 添加微信号“ TICPShanghai ”加入“上海控安51fusa安全社区”

前几篇我们介绍了代码的不同类型结构覆盖率测试,属于代码的动态测试,本章我们介绍代码编码规则的静态测试。

01

关于代码静态检测

静态代码测试通常按照既定的编码规则,检查被测试代码的语法、语义、结构等,是否符合编码规则的要求。 代码的静态测试和动态测试的区别主要有以下几点:

1. 代码静态测试不会运行代码,代码动态测试会运行代码;

2. 静态测试会依据相应语言的编码规则,动态测试跟编码规则没有直接关系;

3. 静态测试和动态测试都可以通过人工结合工具辅助的方式执行,工具在静态编码规则检测效率和工具自动执行完成率上,普遍高于动态的结构覆盖测试;

4. 代码静态规则检测的部分准则内容在编译器编译代码时会执行类似的检查,但是编译器不会在编译时执行代码的动态结构覆盖检测。

02

代码规则检测的编码标准

不同的编程语言有不同的编码标准,我们以C语言为例,C代码的编码标准广为人知的有Misra-C、CERT-C、EADS-C、BARR-C等,我国常见C编码标准有GJB 5369、GJB 8114等。这其中应用最广泛的可能就是Misra-C了,有很多文章专门对其进行介绍,我们不做过多说明。同样C++和JAVA也有对应的国际组织或行业小组编制了相应的编码标准规范。

03

国军标编码规范的举例说明

本章我们使用GJB 8114标准列举其中的一些编码准则,让大家有所认识。 该标准的规则大体可以分为两类,一类是强制准则,还有一类是建议推荐准则。

3.1 强制准则举例

[GJB8114-2013] R-1-1-1 禁止通过宏定义改变关键字和基本类型含义。

描述:禁止通过宏定义改变关键字和基本类型含义。

正确示例:

图片

错误示例:

图片

3.2 建议准则举例

[GJB8114-2013] A-2-9-2 建议除常数指针外,const说明均在类型说明的最外层。

描述:建议除常数指针外,const说明均在类型说明的最外层。

示例:

图片

GJB8114定义的C代码准则从13个方面逐个进行约束,准则的条目较多,工作中涉及到政府、国企的高安全要求项目时该规范的使用率比较高,有需要时可以直接参考标准文档。

04

代码静态规则检测的过程

我们对一个工程的代码或者工程中几个代码文件进行静态规则检测时,必须提前做一些准备工作,来保证测试的顺利执行。

首先要确定代码编写的语言,C、C++或者其他语言,要确认工程使用的IDE以及编译器,最好能确定工程代码的头文件或者路径,以及宏定义。然后我们需要确定进行代码静态检测的标准依据,是Misra C还是GJB 8114,以及标准的版本如Misra-C 2004。

完成上述的准备工作后我们就可以选择使用的测试工具,是否已购买相关工具,还是使用开源产品,目前可以支持代码静态规则检测的开源工具还是比较多的,其中也有做的很好的产品,考虑到项目客户方对检测结果的认可程度,建议使用已通过相关认证的商用软件工具进行测试。

4.1 工具测试举例

我们以 TestGrid工具 SmartRocket TestGrid嵌入式软件自动化测试平台 )为例展示一个开源C代码项目基于Micra-C 2004准则的静态代码测试。首先我们建立一个规则模板,并将Micra-C 2004标准应用到该模板,如下图:

图片

从图中我们也可以得知,规则的模板是允许自定义组合的,意味着可以从已知的标准规则集中自由选取相关条目,根据需要组合成新的规则集合用于测试活动。

接下来我们将收集的工程相关信息填入测试配置,填入信息必须要准确,如下图所示:

图片

配置完成后执行规则检查,执行完成结果如下图显示:

图片

我们以被测文件为基准,查看该文件中的代码违反了哪些编码准则,选中某准则会跳转到该文件中所有违反该准则的界面,如下图所示:

图片

可以通过详情查看违反编码准则的详细内容,开发人员可以根据说明有针对性地进行代码改进。

05

测试小结

在执行代码的静态规则检测时我们有以下建议供大家参考:

1 .使用工具执行代码的规则检查可以大大提高测试工作的执行效率。

2 .工具设置规则执行严格时容易误报,执行规则设置宽松时容易漏报,这是正常现象。

3 .代码的规则检测需要跟实际项目上需要使用的规则进行适当结合和调整匹配,切不可不顾实际直接使用Misra C等规则进行生搬硬套。客户方的项目需求提出明确要求时除外。

4 .即使使用Misra C或者国军标的相关标准,规则内的约束门限值也需要结合实际情况在项目内协商确定,如单个函数的建议和最大行数,圈复杂度,if后一次判定参与条件的最大个数等等门限值设定。

参考文献:

[1] GJB 8114-2013 《C/C++语言编程安全子集》

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

鉴源实验室丨软件代码编码规则静态检测 的相关文章

  • pandas用法整理

    处理表格数据的时候经常用到pandas 每次用的时候都要去查函数 每次记不住 每次都查 哈哈哈 自己整理一下 码住 一 Pandas的数据类型 进行数据分析时 如何正确使用数据类型 这非常重要 在pandas中的数据类型和python原生数
  • 计算机配件杂谈-鼠标

    目录 基础知识 鼠标的发展 鼠标的左右手 鼠标的显示样式 鼠标的移动和可见性 移动 可见性
  • 6类典型场景的无线AP选型和部署方案

    你们好 我的网工朋友 前段时间刚给你们来了篇解决无线频繁断网的技术文 解决无线频繁断网 这个办法值得收藏 不少朋友私聊 说想再聊聊无线AP的选型和部署方案 这不就安排上了 无线网络覆盖项目中 无线AP的合理选型和部署非常重要 在设计施工中
  • K8S中的Secret创建和使用

    天行健 君子以自强不息 地势坤 君子以厚德载物 每个人都有惰性 但不断学习是好好生活的根本 共勉 文章均为学习整理笔记 分享记录为主 如有错误请指正 共同学习进步 文章目录 创建secret 1 kubectl命令创建 2 yaml文件创建
  • 浅谈安科瑞直流表在孟加拉某能源公司的应用

    摘要 本文介绍了安科瑞直流电表在孟加拉某能源公司的应用 主要用于光伏直流柜内 配合分流器对汇流箱的输出电流电压等进行测量 并采集配电现场的开关信号 装置带有RS485接口可以把测量和采集的数据和设备状态上传 Abstract This ar
  • OpenHarmony沙箱文件

    一 前言 1 前景提要 DevEcoStudio版本 DevEco Studio 3 1 Release SDK版本 3 2 2 5 API版本 9 2 概念 在openharmony文件管理模块中 按文件所有者分类分为应用文件和用户文件和
  • 论文为什么引用的句子被标红

    大家好 今天来聊聊论文为什么引用的句子被标红 希望能给大家提供一点参考 以下是针对论文重复率高的情况 提供一些修改建议和技巧 可以借助此类工具 论文为什么引用的句子被标红 在论文撰写过程中 我们经常需要引用他人的观点 数据或研究成果来支持自
  • 基于FNN的模糊控制器matlab仿真

    目录 1 算法仿真效果 2 MATLAB源码 3 算法概述 3 1 模糊逻辑基础 3 2 神经网络基础
  • 大学论文查重是用什么来查

    大家好 今天来聊聊大学论文查重是用什么来查 希望能给大家提供一点参考 以下是针对论文重复率高的情况 提供一些修改建议和技巧 可以借助此类工具 大学论文查重是用什么来查 一 背景介绍 在高等教育中 学术诚信和论文的原创性是每个学者必须遵守的原
  • python按列写入数据到excel

    要将数据按列写入 Excel 可以使用 Python 的 openpyxl 库 首先 需要安装 openpyxl 库 可以使用以下命令在终端或命令提示符中安装 pip install openpyxl 然后 可以按照以下步骤编写代码 1 导
  • 基于多目标粒子群的车间搬运费用和布局面积最小的多目标求解,基于MOPSO的多目标求解

    目录 摘要 测试函数shubert 粒子群算法的原理 粒子群算法的主要参数 粒子群算法原理 基于多目标粒子群的车间搬运费用和布局面积最小的多目标求解 基于MOPSO的多目标求解 代码 结果分析 展望 代码下载 基于多目标粒子群的车间搬运费用
  • python opencv orb特征点提取匹配然后图像拼接

    opencv 基于ORB特征点图像拼接 特征点 warpperspective CSDN博客 图像用这儿的 import cv2 import numpy as np from matplotlib import pyplot as plt
  • 处理不舒服的同事关系:实用建议与技巧

    处理不舒服的同事关系 实用建议与技巧 在工作中 我们难免会遇到一些与同事关系不和谐的情况 这些不舒服的关系可能会影响到我们的工作情绪和效率 那么 如何处理这些不舒服的同事关系呢 本文将为你提供一些实用的建议 一 保持冷静和理智 在处理同事关
  • creo老是卡住怎么办?如何解决Creo卡顿问题

    Creo PRO E 是美国PTC公司于2010年10月推出CAD设计软件包 Creo是整合了PTC公司的三个软件Pro Engineer的参数化技术 CoCreate的直接建模技术和ProductView的三维可视化技术的新型CAD设计软
  • 新导物联实验室设备定位管理系统

    新导物联实验室设备定位管理系统是一种用于实验室设备管理和定位的系统 它利用物联网技术和定位技术 帮助实验室管理人员实时了解实验室内设备的位置和状态 提高设备的利用率和管理效率 该系统使用传感器或标签对实验室设备进行标识和定位 每个设备都被配
  • Move 向未来,2024 开发者大会热潮涌动

    1 月 13 日至 14 日 2024 Move 开发者大会 Move 生态关键的一年 将于上海举办 本次大会由 MoveFuns OpenBuild 和 MoveBit 主办 Rooch AptosGlobal alcove zkMove

随机推荐

  • go-carbon v2.3.4 发布,轻量级、语义化、对开发者友好的 Golang 时间处理库

    carbon 是一个轻量级 语义化 对开发者友好的 golang 时间处理库 支持链式调用 目前已被 awesome go 收录 如果您觉得不错 请给个 star 吧 github com golang module carbon gite
  • mybatis 增删改查

    MyBatis 是一种持久化框架 主要用于简化数据库访问代码的编写 它允许开发者使用 XML 或注解来配置 SQL 映射 并提供了自动将数据库操作映射到 Java 对象的功能 以下是 MyBatis 中的基本增删改查操作的示例 1 增加 I
  • Spark 中 BroadCast 导致的内存溢出(SparkFatalException)

    背景 本文基于 Spark 3 1 1 open jdk 1 8 0 352 目前在排查 Spark 任务的时候 遇到了一个很奇怪的问题 在此记录一下 现象描述 一个 Spark Application Driver端的内存为 5GB 一直
  • 服务器超线程的好处

    服务器超线程的好处 1 提高性能 超线程通过提高整体系统吞吐量显着提高服务器性能 通过允许多个线程在单个物理内核上同时执行 超线程减少了空闲时间并最大限度地利用了可用资源 这会加快任务执行速度并缩短应用程序的响应时间 尤其是在多线程工作负载
  • Uservisual studio winform界面切换成设计器模式,按钮移动一个位置,但是很多的designer.cs代码都变化

    当你在 Visual Studio 中通过设计器模式移动 WinForms 界面上的控件 例如按钮 实际上是在进行图形化的布局更改 这会导致设计器生成的 designer cs 文件中的相应代码也发生变化 以下是一些可能导致代码变化的情况
  • 智能访客定位在实际生活的应用

    随着科技的发展 定位技术在我们的生活中扮演着越来越重要的角色 如今 智能访客定位系统已经成为了各大企业单位办公的标配 在这个万物互联 信息数据大爆发 移动互联网普及的时代 基于物联网技术的智能访客定位系统可以说是 无处不在 它的作用不仅仅是
  • 改善python程序的91建议记录

    使用else子句简化循环 异常处理 案例1 执行sql异常时处理 def save db obj try save attr1 db execute a sql stmt obj attr1 save attr2 db execute an
  • DD小桔高级数分 2面挂

    偏业务分析一点 注重AB实验在实际业务中的操作 业务方交流方式 一面 同事面 中规中矩 面试内容偏简单 不知道是不是因为晚8点面试的原因项目没有进行深究 自我介绍 项目介绍 1 你在实际项目中是怎么设计AB实验 2 你在实际业务场景中是怎么
  • K8S部署pod状态CreateContainerConfigError问题解决

    天行健 君子以自强不息 地势坤 君子以厚德载物 每个人都有惰性 但不断学习是好好生活的根本 共勉 文章均为学习整理笔记 分享记录为主 如有错误请指正 共同学习进步 文章目录 场景 问题 解决 场景 在k8s中部署gitlab后查看状态并非R
  • 安达发|基于APS排程系统的PDM功能

    APS系统 Advanced Planning and Scheduling 先进计划与排程 是一种基于APS系统 Advanced Planning and Scheduling 先进计划与排程 是一种基于供应链管理和生产管理的综合性软件
  • Firefox浏览器-渗透测试插件推荐

    在日常工作中可能需要一些浏览器插件辅助我们做工作 下面是比较好的 当然不一定对你有用 找到适合自己的即可 FoxyProxy FoxyProxy是一个高级的代理管理工具 它完全替代了Firefox有限的代理功能 它提供比SwitchProx
  • 如何进行文本的全局搜索/替换?

    如果您经常处理大量文本 需要搜索和替换特定的词语或其他内容 HelpLook则通过其搜索 替换功能提供了一个方便的解决方案 通过使用搜索 替换功能 您可以在文章中快速找到特定的单词 并用新的文本替换它们 这对于处理大型文档或者需要大量更新的
  • 开关电源测试方法:怎么测试开关电源输入电压跌落和输出动态负载?

    开关电源输入电压跌落与输出动态负载测试 电压跌落是指开关电源电压突然从额定值降到某一电势点 从而引起用电设备线路电流突然变化 形成电势冲击造成损坏 在电源使用过程中 当输入电压跌落时 开关电源突加负载的情况是可能发生的 此时功率器件 磁性元
  • 更改本地NuGet包的存储位置

    如果你想更改NuGet本地包的默认存储位置 你可以按照以下步骤进行 更改本地NuGet包的存储位置 1 打开 Visual Studio 并进入 Tools 菜单 2 选择 Options 3 在弹出的对话框中 展开 NuGet Packa
  • 安达发APS排产软件之PDM产品工艺数据管理

    PDM Product Data Management 产品数据管理 是一种用于管理产品全生命周期内所有与产品相关的信息和数据的技术 在制造业中 PDM系统被广泛应用于产品工艺数据管理 以提高生产效率 降低成本 保证产品质量和缩短产品上市时
  • Android 9.0 ota升级关于SettingsProvider新增和修改系统数据相关功能实现

    1 前言 在9 0的系统rom定制化开发中 在进行ota升级的过程中 由于在SettingsProvider中新增了系统属性和修改某项系统属性值 但是在ota升级以后发现没有 更新 需要恢复出厂设置以后才会更改 但是恢复出厂设置 会丢掉一些
  • 等价类划分法

    专注于分享软件测试干货内容 欢迎点赞 收藏 留言 如有错误敬请指正 软件测试面试题分享 1000道软件测试面试题及答案 软件测试实战项目分享 纯接口项目 完整接口文档 软件测试实战项目分享 WEB 测试自动化项目实战 软件测试学习教程推荐
  • 医疗机构如何释放数据要素价值 推动数据资产化

    在智慧医院建设加速的今天 数据已经成为医疗机构核心的资产之一 无论是基于数据的智慧运营决策 还是医疗AI模型训练与推理 都需要大规模数据的利用 在近日国家数据局等17部门联合印发的 数据要素 三年行动计划 2024 2026年 中 要求医疗
  • 【已解决】Pytorch RuntimeError: expected scalar type Double but found Float

    本文作者 slience me 文章目录 项目场景 问题描述 原因分析 解决方案 项目场景 在训练模型时候 将数据集输入到网络中去 在执行卷积nn conv1d 的时候 报出此错误 问题描述 报错堆栈信息 Traceback most re
  • 鉴源实验室丨软件代码编码规则静态检测

    作者 李伟 上海控安安全测评部总监 来源 鉴源实验室 社群 添加微信号 TICPShanghai 加入 上海控安51fusa安全社区 前几篇我们介绍了代码的不同类型结构覆盖率测试 属于代码的动态测试 本章我们介绍代码编码规则的静态测试 01