0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在寻求无错误软件的过程中增强静态代码分析

星星科技指导员 来源:嵌入式计算设计 作者:Rutul Dave 2022-06-28 15:58 次阅读

嵌入式软件无处不在,并在各种设备中提供关键功能,从最新智能手机和游戏小工具到救生医疗设备。创建嵌入式软件的工程组织明白,确保代码质量是一个关键的差异化因素和竞争优势。与其他测试和验证方法一起,许多公司利用代码测试和现代静态分析的优势在开发早期识别缺陷。在过去几年中,嵌入式市场研究公司 VDC Research 的各种报告表明,采用静态分析作为关键测试自动化工具的公司增长强劲。现代静态分析可以说是应对确保复杂软件质量挑战的最具成本效益、自动化和可重复的方法。

推动这种增长的一个重要原因是,用于识别关键缺陷(如内存损坏、资源泄漏、空指针取消引用和无效内存访问)的技术已经成熟到可以发现大量难以发现的遍历函数的缺陷的程度现在可以准确地完成文件边界,从而导致非常少的误报。然而,真正的创新在于为每个已识别的缺陷提供上下文信息。开发人员需要知道缺陷存在的原因、会产生什么影响以及需要修复的地方。

需要修复的问题的答案并不像知道文件名和行号那么简单。用于版本控制、代码重用和代码组件重用以提高开发效率的代码分支和合并允许缺陷进入多个版本和产品

考虑一个软件团队的情况,该团队拥有多个产品的不同版本的分支。由于代码复制,其中一个分支中的错误可能存在于一个或多个其他分支中。在另一种情况下,考虑创建框架以支持智能手机应用程序的团队。因为他们可能将框架移植到 Windows、AndroidiPhone 等各种平台上,所以静态分析结果清楚地表明已识别的缺陷是仅存在于一个地方还是存在于多个平台上,这一点至关重要。同样,当软件是通过从多个来源聚合创建的时,如果在各种产品中使用特定组件,那将是一场噩梦,因为一个第三方组件的缺陷最终可能会影响包含它的所有不同产品。

不同版本操作系统的多个分支

想象一个负责为移动智能手机创建新操作系统 (OS) 的软件开发团队。由于必须支持多个手机供应商 (OEM),因此源代码控制管理系统中的每个供应商都需要一个开发分支。此外,每个供应商通常都有针对不同版本和产品代的多个分支。画面开始变得非常复杂。

对代码的每个分支执行的静态分析会生成一个缺陷列表。但是,根据引入缺陷的时间,它可能存在于所有版本或子集中。当孤立地查看单个分支中的单个缺陷时,开发人员面临的挑战是他们无法在不知道缺陷存在于何处的情况下评估缺陷的严重性。不限于单个版本或一个 OEM 客户端的缺陷将是严重的,修复它需要优先于其他任何事情。此外,编写代码来修复缺陷的开发人员需要准确地知道需要签入源代码控制管理系统中的哪些分支。

图 1:由于代码分支和合并导致的重复缺陷。

poYBAGK6tOeAM116AAHt4wi8mqc418.png

适用于多个平台的单一框架

在分支的另一面,通常需要编写设计为在多个平台上运行的代码。诸如移动应用程序框架之类的软件组件通常被构建为在各种类型的移动电话平台上运行。对于嵌入式设备,一个常见的要求是构建相同代码库的 32 位和 64 位版本。我们举一个简单的例子:

gcc --m32 -c foo.c

// 32 位编译。包含空指针取消引用缺陷。

gcc -c foo.c

// 64 位编译。包含相同的空指针取消引用缺陷。

在 32 位和 64 位二进制文件中触发的foo.c中的缺陷将被检测并报告为单个缺陷。但是,由于源代码相同,因此复杂的分析不会将其报告为重复缺陷。在失去开发人员对静态分析解决方案的信任方面,重复与误报一样有害。

共享通用代码组件

在最后一个示例中,考虑一个为一系列网络交换机开发平台软件的团队。由于平台软件提供的功能必须在所有产品中实现,因此该代码组件将被共享(参见图 2)。对于在这个团队工作的开发人员来说,静态分析报告的缺陷严重性的最佳评估不仅是它对一个交换机产品的影响,还包括使用该平台软件组件的所有产品的信息。

图 2:单个软件组件在多个产品中重复使用。

pYYBAGK6tRCAFAMlAAFmrErrXjs168.png

产品通常是通过组合许多这样的共享组件来创建的。每个组件不仅是一个项目本身,而且是使用它的各种其他项目的一部分。分析结果需要确定此共享组件中的缺陷对使用它的各个项目有影响。

消除代码测试中的猜测

采用静态分析等现代开发人员测试方法是嵌入式软件行业的一个积极趋势。该技术已经成熟到可以成为软件工程师武器库中强大武器的程度。无需创建复杂的测试用例和测试基础设施,静态分析就可以在编写和编译代码时自动发现关键缺陷。但是,要使静态分析成为开发人员最有价值的工具,分析必须提供诸如“此缺陷的影响是什么?”之类的问题的答案。和“我需要在哪里检查修复?” 帮助确定修复已识别缺陷的优先级,并消除猜测以确保软件尽可能无错误。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    4981

    文章

    18274

    浏览量

    288360
  • Android
    +关注

    关注

    12

    文章

    3851

    浏览量

    125635
  • WINDOWS
    +关注

    关注

    3

    文章

    3438

    浏览量

    87142
收藏 人收藏

    评论

    相关推荐

    STM32G431RB使用软件生成代码过程中报错怎么解决?

    使用软件生成代码过程中报错,使用但是STM32G431RB 的开发板
    发表于 03-06 06:15

    c语言代码错误怎么找

    ,它们通常是由于C语言编写规则被打破所引起的。实际上,C编译器会提供非常详细的错误消息,告诉我们在哪个地方发生了错误。 当我们在编译过程中遇到语法错误时,我们需要仔细阅读编译器提供的
    的头像 发表于 11-24 10:05 1460次阅读

    AbsInt—确保代码安全的静态性能分析工具

    德国AbsInt公司是专注于安全苛求软件研发、确认、验证和认证的工具链供应商,能够为客户提供完整的确保代码安全的性能分析工具套件以及软件分析
    的头像 发表于 11-08 11:15 225次阅读
    AbsInt—确保<b class='flag-5'>代码</b>安全的<b class='flag-5'>静态</b>性能<b class='flag-5'>分析</b>工具

    SPI通信的过程中如果设备地址错误还能正常通信吗?

    SPI通信的过程中如果设备地址错误还能正常通信吗
    发表于 10-13 06:25

    步进电机控制的过程中怎么防止丢步?

    步进电机控制的过程中怎么防止丢步
    发表于 10-12 08:07

    OLED驱动的过程中怎么避免烧屏?

    OLED驱动的过程中怎么避免烧屏
    发表于 10-12 08:02

    步进电机控制的过程中怎么提高控制的精度?

    步进电机控制的过程中怎么提高控制的精度
    发表于 10-12 06:02

    HC05使用的过程中怎么修改设备地址?

    HC05使用的过程中怎么修改设备地址
    发表于 10-11 07:56

    PID控制的过程中怎么控制超调大小?

    PID控制的过程中怎么控制超调大小
    发表于 10-10 07:56

    封装过程中常用的检测设备

    程序的质量和稳定性。本文将详细介绍在封装过程中常用的检测设备及其作用。 第一、编译器 编译器是将源代码翻译成目标代码软件程序,编译器在封装过程中
    的头像 发表于 08-24 10:42 592次阅读

    医疗器械软件风险分析介绍 医疗设备软件静态和动态分析技巧

    静态和动态分析是满足软件测试合规性的关键,但这些过程并不容易实施。这篇文章提供了有关如何自动化该过程的专家指南。
    的头像 发表于 08-11 11:07 1295次阅读
    医疗器械<b class='flag-5'>软件</b>风险<b class='flag-5'>分析</b>介绍 医疗设备<b class='flag-5'>软件</b><b class='flag-5'>静态</b>和动态<b class='flag-5'>分析</b>技巧

    嵌入软件静态解析工具

    表和外部变量对照情报表的功能。可以用来确认整个Project的外部变量在那里被参照,在那里被写入。也可以通过列表跳到相对应的代码所在行。能够早期发现不正确的写入及读取,发现那些意想不到的
    发表于 08-02 11:51

    什么是静态代码分析静态代码分析概述

    静态分析可帮助面临压力的开发团队。高质量的版本需要按时交付。需要满足编码和合规性标准。错误不是一种选择。 这就是开发团队使用静态分析工具/源
    的头像 发表于 07-19 12:09 920次阅读
    什么是<b class='flag-5'>静态</b><b class='flag-5'>代码</b><b class='flag-5'>分析</b>?<b class='flag-5'>静态</b><b class='flag-5'>代码</b><b class='flag-5'>分析</b>概述

    Rust代码中加载静态库时,出现错误 ` rust-lld: error: undefined symbol: malloc `怎么解决?

    我正在 MCUXpresso IDE 创建一个静态库。我正在使用 redlib 我的代码中导入 ` [i]stdlib.h`。它成功地构建了一个
    发表于 06-09 08:44

    静态分析和动态分析的区别

    静态分析和动态分析是一种双管齐下的方法,可以在可靠性、错误检测、效率和安全性方面改进开发过程。为什么它们都很重要?它们又有什么区别呢?
    的头像 发表于 05-16 16:03 3992次阅读