147529344

静态分析?我们不需要讨厌的静态分析

2017年4月27日
在安全性和可靠性如此重要的今天,为什么使用静态分析工具的人如此之少?看看科技编辑Bill Wong是怎么想的。

当然,最初的报价出自1948年的电影,马德雷山的宝藏多年来,这部经典喜剧一直以戏仿而闻名,令人难忘燃烧的马鞍.但我们不是来谈徽章的。我们在这里讨论的是静态分析以及C和c++程序员。

我特别针对的是C和c++程序员,因为当涉及到嵌入式应用程序时,他们往往占大多数,但这个讨论同样适用于大多数其他常用编程语言,包括Java。

C程序员实际上是本文的目标,因为C几乎缺乏任何静态分析,不足以让编译器将源代码转换为目标代码。C一直被吹捧为高级宏汇编程序,这与事实相差不大。它的优势在于它允许开发人员接近硬件。缺点是开发人员必须基于他们的专业知识创建一个无错误的应用程序。大多数程序员都想认为自己是优秀和认真的,但专业知识差别很大。问题是,即使是最好的程序员也会犯错误,而这些错误很难发现和纠正。

c++有许多C语言的问题,但在其他方面有显著的改进,包括更好的类型和模板系统,可以进行更多的静态分析,从而有助于及早捕获错误。问题是c++本质上允许出现与C语言相同的问题。例如,

If (I == 10) {}

不做同样的事吗

If (I = 10) {}

后者是一个总是得到真条件的赋值。一些C和c++编译器会做一些静态分析,并将其标记为错误或警告,即使它是一个有效的语句。

编码标准通常捕获这类错误,特别是那些实现全部或的错误部分标准使用了静态分析工具.在最简单的情况下,它是由编译器启用这种检查的问题。即使使用这种最小的静态分析支持也是非常有益的。

那么为什么程序员要放弃静态分析呢?

在我们最近的嵌入式革命调查中,我们确实询问了编码标准和静态分析的重要性和使用(见下图),不为什么.调查中不到一半的人甚至有一个标准来遵循,更不用说使用一个静态的分析工具来执行这个过程了。

并不是所有的公司都在他们的开发过程中使用编码标准。多重回答是可能的,所以只有43%的人使用MISRA C/ c++(从电子设计2017年嵌入式革命调查)。

在这一点上,我必须从理论上解释为什么会出现这种情况,我认为这又回到了“我们不需要臭徽章”这句话。程序员和管理人员喜欢认为他们更擅长于防止bug进入他们的代码,并且认为任何会“碍事”的限制或工具都是不好的。从长远来看,这些工具或过程可以捕获或消除大量的bug,从而有更多的时间发现代码中的其他bug,或者花时间改进应用程序,或者让应用程序更快地完成,或者……

另一个问题是开源工具的可用性。的LLVM Clang静态分析仪是一种选择。它作为一个独立的应用程序与C、c++和Objective-C一起工作。CPPcheck是开源的另一个选择。它集成了许多开发工具,包括Eclipse、Visual Studio,甚至还有一个git插件,可以在文件提交时捕获错误。有一个CPPcheck检查清单可用。

也有许多项目添加了注释来解决编程问题,尽管没有一个项目像SPARK那样集成或详尽。一个例子是Clang线程安全注释.下面的示例显示了一些注释以及错误将发生的位置。

在这种情况下,函数喷火使用变量一个b.第一个是由互斥保护的mu1另一个是mu2.不幸的是在mu1,互斥锁。

这些工具通常涵盖静态分析的某些方面,例如寻找风格问题或特定类型的bug。使用多种工具可能更麻烦,但它们可以更好地覆盖潜在的问题。许多商业工具可以解决更广泛的问题,并且通常具有更好的报告功能。

就像许多人会说的那样,“天下没有免费的午餐”(TANSTAFL)。开发编码标准,实现它们,使用静态分析或使用编程语言,如铁锈和火花/艾达不是没有代价的。真正的问题是,使用这些技术或工具的成本是否能提供足够的回报。总的来说,虽然你的里程可能会有所不同,但他们确实会付钱,而且通常相当不错。

当现有的技术在某种程度上已经发挥作用时,任何类型的工人都很难转换到不同的技术。因此,对于那些提供工具的人来说,这也是一个很难推销的东西。如果这些工具和技术不被使用,那么损失将是全面的,因为应用程序会带有漏洞和安全漏洞,这些漏洞不仅会困扰消费者,还会困扰公司和员工。

从我们的合作伙伴

DIY pmic:用户可编程pmic

在DIY PMIC:用户可编程PMIC培训中,我们将介绍DIY PMIC的概念,然后是用户可编程PMIC。一节集中在h…

物联网设备调试工具和技术的专业指南

2021年3月23日
嵌入式系统的开发,其中软件和硬件必须很好地配合,已经变得极其复杂和具有挑战性,甚至…

你的科技指数是多少?

稍微看一下人工智能的技术图景——我们已经在哪里,我们在哪里,我们将走向哪里。然后与我们的合作伙伴Micr…

符合自动化和工业4.0标准的M12连接器编码

赞助。符合自动化和工业4.0标准的M12连接器编码连接器在任何一种电…

协同处理器体系结构:一种用于快速成型的嵌入式系统体系结构

2021年7月6日
编者注:尽管它以数字处理性能和吞吐量而闻名,但协处理器体系结构提供了嵌入式系统…

声音你的意见!

本网站要求您注册或登录后发表评论。
目前还没有任何评论。想开始对话吗?

从我们的合作伙伴

DIY pmic:用户可编程pmic

在DIY PMIC:用户可编程PMIC培训中,我们将介绍DIY PMIC的概念,然后是用户可编程PMIC。一节集中在h…

物联网设备调试工具和技术的专业指南

嵌入式系统的开发,其中软件和硬件必须很好地配合,已经变得极其复杂和具有挑战性,甚至…

你的科技指数是多少?

稍微看一下人工智能的技术图景——我们已经在哪里,我们在哪里,我们将走向哪里。然后与我们的合作伙伴Micr…

符合自动化和工业4.0标准的M12连接器编码

赞助。符合自动化和工业4.0标准的M12连接器编码连接器在任何一种电…

协同处理器体系结构:一种用于快速成型的嵌入式系统体系结构

编者注:尽管它以数字处理性能和吞吐量而闻名,但协处理器体系结构提供了嵌入式系统…
Baidu