news 2026/2/10 7:21:56

21、安全关键系统的代码覆盖与静态分析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
21、安全关键系统的代码覆盖与静态分析

安全关键系统的代码覆盖与静态分析

代码覆盖指标

代码覆盖测量的挑战

在安全关键系统的嵌入式软件开发中,代码覆盖的测量存在诸多困难。一方面,语句和分支覆盖难以准确衡量。例如,一组测试可能在C源程序中实现了100%的分支覆盖,但在生成的汇编代码中,分支覆盖可能仅为40%。另一方面,C语言中的内联代码和宏也可能导致不合理的覆盖值。若内联代码包含分支,该分支在代码插入的某些实例中可能被执行,而在其他实例中则不会。若测量覆盖的分析工具在内联发生后查看代码,就会报告存在未覆盖的代码,尽管实际上并不存在。宏的情况也是如此。

实现代码覆盖

有多种工具可用于生成至少能提供良好语句和分支覆盖的测试用例,开源的KLEE符号执行程序就是其中之一。在进行符号执行时,它会进行必要的分析,以确定驱动程序沿每条路径执行所需的变量值。以计算最大公约数的程序为例,KLEE生成了以下测试用例:
-m = 2147483647, n = 2147483647 (GCD = 2147483647)
-m = 50790404, n = 54463393 (GCD = 1)
-m = 679738981, n = 340287488 (GCD = 1)

这些测试用例分别对应不同的执行路径,形成了一个基础,可提供100%的入口点、语句、分支和基本路径覆盖。由于决策的简单性,它们还提供了100%的修正条件判定覆盖(MC/DC)。在笔记本电脑上,KLEE只需几秒钟就能推导出这些测试用例。

然而,自动生成的测试用例虽能提供出色的各种类型的覆盖,但在实际经验

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/5 23:19:11

2025网盘下载加速神器:直链解析工具完整使用指南

2025网盘下载加速神器:直链解析工具完整使用指南 【免费下载链接】Online-disk-direct-link-download-assistant 可以获取网盘文件真实下载地址。基于【网盘直链下载助手】修改(改自6.1.4版本) ,自用,去推广&#xff0…

作者头像 李华
网站建设 2026/2/7 10:28:32

pywencai终极指南:Python量化投资的数据革命

还在为获取同花顺问财数据而烦恼吗?每次都要手动复制粘贴,数据格式还乱七八糟?今天,让我带你体验一场数据获取的革命,用pywencai这个开源工具彻底改变你的量化研究方式。 【免费下载链接】pywencai 获取同花顺问财数据…

作者头像 李华
网站建设 2026/2/8 4:03:08

终极指南:3步完成ReTerraForged地形模组编译安装

终极指南:3步完成ReTerraForged地形模组编译安装 【免费下载链接】ReTerraForged a 1.19 port of https://github.com/TerraForged/TerraForged 项目地址: https://gitcode.com/gh_mirrors/re/ReTerraForged 想要在Minecraft中体验更加真实多样的地形生成效果…

作者头像 李华
网站建设 2026/2/8 3:56:45

鸣潮性能优化完全指南:WaveTools高效配置方案

鸣潮性能优化完全指南:WaveTools高效配置方案 【免费下载链接】WaveTools 🧰鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools 还在为鸣潮游戏画面卡顿而困扰吗?想要获得流畅丝滑的游戏体验却总是配置失败&#xff…

作者头像 李华
网站建设 2026/2/7 1:49:21

终极指南:SteamAchievementManager成就管理全解析

终极指南:SteamAchievementManager成就管理全解析 【免费下载链接】SteamAchievementManager A manager for game achievements in Steam. 项目地址: https://gitcode.com/gh_mirrors/st/SteamAchievementManager SteamAchievementManager(简称SA…

作者头像 李华
网站建设 2026/2/8 20:29:31

Keil5代码自动补全设置从零实现(配合STM32芯片)

如何让Keil5“聪明”起来?手把手配置STM32代码自动补全,告别手敲API你有没有过这样的经历:写HAL_GPIO_Init()时,记不清第二个参数是指针还是结构体;想查SPI_FIRSTBIT_MSB怎么拼,只能切出去翻手册&#xff1…

作者头像 李华