利用正确的静态分析实现应用

描述

一般来说,最佳实践是平台中立的——这就是为什么它们被称为“最佳实践”。尽管嵌入式开发特有的微妙之处,有已知的标准来确保质量,无论平台如何。例如,避免内存泄漏应该是通用的。此外,静态分析和软件之间的关系不一定由应用程序定义:它由设备的用途定义。也就是说,运行静态分析是嵌入式软件开发特别重要的最佳实践。

传统上,嵌入式软件在发布后访问起来非常昂贵且痛苦。出于这个原因,大多数质量或验证活动都集中在消除修补或重构嵌入式代码的需要上。发布后修复错误不仅对品牌而且对利润构成最大风险。在某些行业,特别是在安全关键领域,与软件缺陷相关的后果非常严重,以至于必须完美地执行质量和验证任务。嵌入到胰岛素泵、武器控制系统、汽车制动系统等关键设备中的软件需要使用全方位静态分析功能的预防策略;否则后果可能包括代价高昂的诉讼、C 级辞职,甚至丧生。这与敏捷相反,持续开发,Web 驱动的软件应用程序,例如智能手机、电视等,对于这些应用程序而言,预防策略不太重要。为此,在软件开发范围的预防策略方面进行了以下讨论,检查了各种静态分析实现:

积分时静态分析

持续集成时间 (CI) 静态分析

指标分析

编辑时静态分析

运行时静态分析

积分时静态分析

在集成期间运行静态分析以检测容易实现的目标和严重错误是实施预防策略的良好起点。集成时静态分析在不实际执行代码的情况下模拟可行的应用程序路径,这对于无法进行运行时分析的系统非常有用。静态分析可以跨多个函数和文件进行测试,并捕获常见的内存问题,例如未初始化的内存、溢出、空指针等。

当组织开始在集成期间进行测试时,静态分析在开发策略方面有几个目的。首先,工程师可以查看测试结果并确定它们对于特定应用的重要性。静态分析可能会发现可能对软件安全性、可靠性或性能产生严重影响的潜在缺陷。另一方面,它可能会返回企业可能不关心的东西。例如,企业可能并不关心游戏控制台中的缺陷会导致软件在发生不太可能的操作序列时崩溃。用户可以简单地重新启动并继续享受他们的系统。然而,在其他情况下解决同类问题可能对于防止灾难性后果至关重要。

静态分析还可以帮助软件工程师发现在风险评估阶段很难想到的潜在缺陷。工程师可以对潜在缺陷进行分类,以改进未来的风险评估迭代。

持续集成时间 (CI) 静态分析

在运行集成时静态分析之后,软件工程师应该对代码中潜在的系统问题有更强烈的认识。下一步是运行 CI 静态分析,以执行规划阶段概述的编码策略。这可以防止在集成时间分析期间发现的缺陷类型。

对于静态分析中发现的每个问题,在代码的其他地方至少还有 10 个完全相同的东西。静态分析是同时解决所有同类违规行为的理想工具。这与在代码中追逐每一条可能的路径相反。找到系统性问题,创造一个bug无法生存的环境要好得多。

当我们谈论静态分析时,在很多情况下我们指的是反模式分析。积极的模式是应该在代码中的东西。例如,要求工程师在声明函数指针时使用typedef的策略是正模式静态分析规则。这与例如在与标准 C 库交互时禁止使用字符串类中的data()成员函数的策略形成对比。

执行两种类型(正模式和反模式)的静态分析很重要,但值得一提的是这种区别,因为如果组织花时间基于正模式构建编码策略,这可以确保软件工程师准确地构建代码它应该符合业务目标或合规性要求。

指标分析

指标分析是一种静态分析实现,它评估代码特征并提供有关代码的洞察力,可以帮助软件工程师识别弱点(图 1)。它是一种关键传感器,可以突出显示可能容易出现逻辑错误的应用程序区域。指标分析是一个基本的基线测量,应该触发进一步的分析,例如代码审查或其他一些补救活动。

图 1: Parasoft 静态分析指标报告

代码

指标分析最好尽早使用,因为它可能会影响软件工程师编写代码的方式。避免尝试被动地或在 QA 阶段实施指标分析。指标分析的目标不仅仅是检测潜在的缺陷;它以允许工程师遵循可持续编码轨迹的方式检测它们。对潜在缺陷热点运行指标分析,纠正任何违规行为,并实施基于模式的分析规则以防止将来发生。

任何与潜在问题相关的指标都是公平的游戏。例如,一家医疗设备公司可能会使用度量分析来衡量圈复杂度,因为高分表明设备在正常运行期间需要处理的决策点太多。当有 10 个分支需要削减时,知道复杂性分数超过了编码策略中设置的阈值,而不是在 QA 阶段发现,这将有助于保持项目按时和按预算进行。例如,组织可能想要测量公共变量,因为高数字可能与代码中过多的依赖关系相关。每个组织都需要决定哪些指标可以与代码中可能的缺陷相关联。

编辑时静态分析

静态分析的最佳点是开发人员在编辑器中工作时。在编辑时运行静态分析有几个目的。首先,它将软件工程师指出潜在的问题。其次,它通过确保系统地修复任何问题来实施风险评估策略。

但是什么时候应该实施静态分析呢?我们已经讨论了为什么太迟实施静态分析是一个问题。但是,它也可能实施得太早,因为静态分析必须有足够的上下文才能提供有意义的信息。对字符、行甚至语句运行静态分析会产生太多噪音而无用。实施积极的设计模式可确保新代码在编写时按预期构建。在编辑时运行静态分析是在开发团队中促进正确行为的一种有效方式,因为反馈是快速的并且是在正在编写的代码的上下文中。利用这种类型的分析可以提高代码审查的效率,因为工程师应该能够立即纠正基于策略的错误。

运行时静态分析

一些静态分析模式可以在运行时检测缺陷。如果嵌入式目标可以容纳开销,则组织应执行运行时静态分析以完善其预防策略。运行时静态分析在代码实际运行时检测错误,这使软件工程师能够使用真实数据测试真实路径。

关于静态分析和 QA 的最后说明

在理想的预防策略中,QA 运行静态分析时发现的错误应该已经知道并确定为可接受的。这是因为软件工程师应该已经针对设计模式进行了测试和调整以强制执行编码策略。此阶段的违规意味着流程存在问题,例如不正确的静态分析规则。在这些情况下,QA 需要将代码发送回开发人员,以便他们可以找到缺陷的系统原因并实施规则以防止将来发生。从这个角度来看,静态分析是一个比错误查找器更好的质量门。

作者:Arthur Hicken,Wayne Ariola,Adam Trujillo

审核编辑:郭婷

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分