当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]如何提高嵌入式软件质量

 操作应用于安全苛刻的航空和军事领域的嵌入式软件时必须高度关注安全问题。为达到可靠性目标,软件开发团队精益求精,力争使这些软件应用符合严格的验证流程并实现零缺陷目标。Edsger Dijkstra有句名言:测试只能发现错误,但不能证明错误不存在。如果测试无法证明不存在严重的运行错误,那么嵌入式软件开发团队如何才能确定其软件没有这些错误呢?基于数学证明的代码验证是值得一试的解决方案。在软件验证方面,可扩展的高性能数学技术在实际应用方面的最新发展十分有用,可实现对软件中不存在运行时错误进行证明。

  航空领域的软件应用

  高集成系统中的嵌入式软件日益复杂。在军事领域中,用于F-22猛禽战斗机的航空电子软件由170万行代码组成,用于F-35联合攻击战斗机的航空电子软件预计有570万行代码。对于商务班机,波音787飞机飞行控制系统将有大约650万行代码。软件内容不断膨胀,飞机复杂性不断增加,使发生故障的风险也不断加剧,从而使获得高度可信性软件的过程复杂无比。

  软件故障风险

  研究以往发生的嵌入式设备故障对于理解代码相关的问题大有裨益。例如,一次性使用火箭在测试飞行期间发生的故障归根于代码缺陷。在这种特殊情况下,发射器在发射后不到一分钟的时间内自毁,原因在于:攻角超过规定的安全限度,导致发射器遭遇高气动载荷。

  事后调查揭露了故障的根本原因:溢出导致嵌入式软件发生运行错误。在将一个64位浮点数转换为16位有符号整数时,一对决定火箭姿态和位置的冗余惯性参考系统中产生溢出,从而将火箭喷管移到了极端位置。冗余系统的存在不起作用,因为备用系统也发生了同样的问题。

  如上所述的运行时错误代表一类特定的软件错误,称作潜伏性故障。这类故障位于代码中,但是除非在特殊条件下运行特定测试,否则在系统测试期间无法检测到这些故障。因此,这些代码表面上能正常运行,但实际上会导致意外的系统故障。以下为若干运行时错误示例:数据未初始化;数组访问越界;空指针解引用;溢出和下溢;计算错误;同时访问共享数据;非法类型转换。

  高集成软件验证

  按照传统方法,源代码级软件验证涉及代码检查、静态分析和动态测试。每种方法都有缺点。

  代码检查仅依赖于检察人员的专业技术,若有大量代码需要检查,则会是一项繁琐的工作。传统的静态分析技术主要依靠模式匹配方法检测不安全的代码模式,但无法证明不存在运行时错误。随着嵌入式软件日益复杂,对所有操作条件进行动态测试已经不太可能,这进一步证明了Edsger Dijkstra的观点:测试只能发现错误,但不能证明错误不存在。

  一种新的验证方法称为抽象解释,它以静态分析为基础,使用形式化数学证明,可发现某些运行时错误或证明它们不存在。抽象解释可直接应用于源代码,而无需执行代码。

  抽象解释和基于证明的验证方法作为一种基于证明的验证方法,通过在以下问题中将三个大整数相乘可对抽象解释进行说明:–4586×34985×2389=?

  虽然手动计算此问题的答案很费时,但是我们可以应用乘法法则确定答案的符号为负。确定此计算的符号就是抽象解释的一种应用。这种技巧使我们不需要对整数执行完成的乘法计算就能够准确地知道最终结果的一些属性,例如符号。利用乘法法则,我们还知道此计算的结果符号不可能为正。采用类似方式可将抽象解释应用到软件符号学中,以证明软件的某些属性。不执行程序本身,

  通过验证源代码的某些动态属性,抽象解释在传统静态分析技术和动态测试之间架起桥梁。抽象解释在单个阶段中调查程序的所有可能行为,即所有可能值的组合,以确定如何以及在何种条件下程序会产生某些类别的运行时故障。由于抽象解释与考虑中的操作相关,我们可以用数学方法证明该技术能预测正确的结果,因此它得出的结果被认为是可靠的。

  使用抽象解释验证软件

  抽象检查可用作静态分析工具,检测并用数学方法证明源代码中不存在某些运行时错误,如溢出、除以零以及数组访问超出边界等。执行此验证无需执行程序、代码插装或测试用例。MathWorks Polyspace代码验证产品使用的便是此类静态分析。向Polyspace产品输入C、C++或Ada源代码。Polyspace产品首先检查源代码,以确定可能出现潜在运行时错误的位置。然后它会生成一份报告,该报告使用颜色编码表示代码中各元素的状态,如图1和表1所示。

  


 

  图1 Polyspace颜色编码

  表1:颜色编码

  

 

  标为绿色的Polyspace结果表示代码中不存在某些运行时错误。在检测到运行时错误且代码显示为红色、灰色或橙色的情况下,软件开发人员和测试人员可使用验证流程中生成的信息修复发现的运行时错误。

  结论

  静态分析融合抽象解释后,可提高高集成系统中嵌入式软件的质量和可靠性。此方法能帮助工程师实现证明软件中不存在某些运行时错误的目标。具有抽象解释的代码验证解决方案有助于实现良好的质量流程。这是强有力的验证流程,可帮助实现嵌入式设备的高集成性。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

随着嵌入式计算设备基础硬件性能的提升,在通信、工业制造、交通运输等领域,嵌入式系统逐渐承担起更加综合化和关键的任务,这也导致嵌入式软件在结构愈加复杂的同时,其安全性问题也越来越受到重视。堆栈是嵌入式软件中的重要存储结构,...

关键字: 嵌入式软件 堆栈

嵌入式开发是一种专门针对特定硬件平台设计和实现软件系统的工程实践,它涵盖了从需求分析、系统设计、编程实现、调试测试直到产品部署及维护的全过程。本文将深入探讨嵌入式开发的主要阶段,分解其流程并阐述每个步骤的关键要点,以便于...

关键字: 嵌入式开发 嵌入式软件

如今,汽车已经不再是一个简单的交通工具,而是一种智能化的移动终端。通过集成各种先进的传感器、控制器和执行器,汽车可以实现对环境的感知、分析和决策,实现自动驾驶、智能导航、车辆间通信、互联网连接等功能。这些功能不仅提高了驾...

关键字: HMI 驾驶舱 嵌入式软件

为增进大家对嵌入式的认识,本文将对嵌入式软件方向的分类以及嵌入式的应用予以介绍。

关键字: 嵌入式 指数 嵌入式软件

在这篇文章中,小编将为大家带来嵌入式软件及其作用的相关报道。如果你对本文即将要讲解的内容存在一定兴趣,不妨继续往下阅读哦。

关键字: 嵌入式 嵌入式软件

嵌入式软件测试是针对嵌入式系统中的软件进行验证和验证的过程。嵌入式系统是集成在其他设备或系统中的计算机系统,例如汽车、医疗设备、家电等。为确保嵌入式软件的质量和可靠性,进行适当的测试是至关重要的。嵌入式软件测试是确保嵌入...

关键字: 嵌入式软件 计算机 硬件

嵌入式软件开发已经成为现代科技领域中不可或缺的一部分。从智能手机到家用电器,从汽车到医疗设备,嵌入式软件无处不在。然而,嵌入式软件的开发具有挑战性,因为它需要满足高度的性能、稳定性和可靠性要求。为了确保嵌入式软件的成功开...

关键字: 嵌入式软件 智能手机 家用电器

在嵌入式软件开发中,利用完整的应用跟踪,可为开发人员分析其产品行为提供无限的可能性。通过对应用程序的全面了解,他们可以跟踪每一条指令,看看他们的应用程序是否按照预期运行,或者是否出现错误或漏洞。那么,如何才能最大化地利用...

关键字: RISC-V 嵌入式软件

2023年上半年收入7.459亿元 同比增长5.1% 毛利率水平上升 海外收入同比增长65.4% 香港2023年8月22日 /美通社/ -- 金邦达宝嘉控股有限公司及其附属公司(以下合称「金邦达」、「...

关键字: 数字化 代码 嵌入式软件 COM

【2023 年 6 月 9 日,德国慕尼黑讯】英飞凌科技股份公司(FSE代码:IFX / OTCQX代码:IFNNY)通过在现有的AUTOSARv4.2.2 MCAL基础上增加对AUTOSARv4.4.0的支持,进一步扩...

关键字: 嵌入式软件 发动机
关闭
关闭