应用编码标准和自动化工具,提高代码质量

发布时间:2023-04-25  

在我们的日常生活中广泛存在,从消费类电子、医疗设备,到汽车,工业控制,航空航天等,它们的存在已经成为我们生活中不可分割的一部分。随着技术的不断进步和客户需求的增加,嵌入式系统和软件变得越来越复杂,同时产品的开发周期变得越来越短。如何在短时间内开发出高质量的软件对产品的成功起着决定性的作用。

本文将介绍如何应用编码标准和自动化工具,提高质量。

关于代码质量

代码质量总体上是指为软件编写的代码的整体优良水平,一般可以通过下面一些指标来评价代码质量:

可读性:代码应该易于阅读和理解,即使是不熟悉项目的人也是如此。

可维护性:代码应该有条理和模块化,可以方便地修改和更新。

可移植性:代码应该被设计易于在不同的平台上使用。

可重用性:代码应该是可重用的,可以在应用程序的其他部分使用。

可测试性:代码应该是易于进行单元测试和集成测试的。

安全性:代码应该是安全的,保护敏感数据并防止恶意攻击。

性能:代码应该是高效的,专注于优化性能,以最大限度地减少资源使用。

对于嵌入式系统,代码质量更加的重要。嵌入式系统经常是处理执行关键任务功能的设备。

如果嵌入式软件存在代码质量问题,可能会导致硬件设备的故障或安全漏洞,严重影响系统的正常运行。

编码标准是提高代码质量的最佳实践

基于历史原因,目前在嵌入式开发中,主要还是使用C/C++高级编程语言,而C/C++是一种不安全的语言,包含大量未定义的行为,对于这些行为的不同解释,可能会导致未知或不确定的副作用,其中一部分将会转化为我们俗称的“Bug”。比如C语言标准库中的一些输入输出函数,字符串函数导致的缓冲区溢出的问题,指针未初始化风险,重复释放内存等等。

同时,软件开发执行和实施的核心是“人”,也就是开发人员,在实践过程中,开发人员可能会一次又一次无意地将相同类型的错误写入到他们的源代码中。这一结论来自各种权威机构,如NASA、贝尔实验室和MITRE,它们进行了多项调查和研究。这些研究的结果是给出了最佳编程实践或推荐的编程实践,它们可以有效识别有风险和不良的编码行为。

有许多指南和编码实践可用于检查常见错误以及如何避免这些错误来提高代码质量,其中一些技术和实践在实施过程中,成为众所周知的编码标准。编码标准是编码规则、指导方针和最佳实践的集合,它可以识别语言中容易引起Bug的行为,防止你在源代码中做可疑的事情,消除容易出现缺陷的代码结构,帮助你快速提高代码质量。

在嵌入式系统中,MISRA-C/C++,CERT-C/C++,CWE等已经成为事实标准。特别是在汽车、医疗和铁路等安全关键型应用中,被IEC 61508、EN 50128和ISO 26262 等功能安全标准所要求。

很多大公司都有相应的代码编程规范,尤其是针对C语言,但这些编程规范往往与业界的编程标准(比如MISRA C)的侧重点不同。一般公司的编程规范更加注重代码风格,比如命名,缩进,括号的使用等,来提高可读性,而业界的编程标准更偏重于代码的可维护性,可移植性,可靠性和安全性。在具体实践中,往往是需要这二者结合使用。

MISRA

MISRA C由汽车工业软件可靠性协会开发。它的目的是提高嵌入式系统环境中的代码安全性、可移植性和可靠性,特别是那些用 ISO C 编程的系统。

MISRA C标准的第一版“Guidelines for the use of the C language in vehicle based software”于1998年制定,正式名称为MISRA-C:1998。2004年进行了一次更新“Guidelines for the use of the C language in critical systems”,正式名称为 MISRA-C:2004。从1998年的vehicle based software到2004年的critical systems,因为MISRA协会发现MISRA C不仅汽车行业需要,其他一些安全相关的行业也需要。最新的MISAR C标准是MISRA-C:2012。

关于MISRA C,很多开发者都有一个误解:MISRA C只适用于汽车电子嵌入式软件开发。对此,MISRA C的轮值主席Andrew Banks特意做了解释说明:虽然MISRA最开始推出的时候主要是针对汽车行业的,但由于它本身其实是在C/C++语言的基础上,加上了一些约束,去掉了一些让人容易出错的编程方法,保留了常用的写法,尽可能让开发者保持一致,提高可维护性和可移植性,从而提高安全性和可靠性,因此 MISRA 在飞机、机器人、无人机、医疗等其它的嵌入式行业也开始流行起来,成为了全球公认的嵌入式 C 编程标准。

CERT

CERT C/C++由卡内基梅隆大学软件工程研究所(SEI)的计算机紧急响应小组 (CERT)部门创建和发布,为C/C++编程语言的安全编码提供规则和建议,这些规则和建议的目标是开发安全、稳定和可靠的系统。

CWE

CWE是基于社区开发的一组影响信息安全的软件和硬件缺陷列表。它用通用语言描述和讨论软件和硬件的缺陷,可以作为缺陷识别、缓解和预防工作的公共基线标准。因此,CWE可以帮助开发人员和安全从业者检查现有软件和硬件产品的缺陷,评估针对这些缺陷的工具的覆盖率等。

编码标准的应用对提高代码质量有立竿见影的作用。在Dr. Dobbs所做的一项研究中(Code Quality Improvement | Dr Dobb's),引入编码标准进行符合性检查后,缺陷注入率降低了41%,这节省了大量测试时间,既提高了代码质量,又缩短了工程时间,从而加速了产品上市。在这项研究中,每个月的缺陷注入率是相当稳定的,直到该组织引入编码标准,然后缺陷率急速下降(见下图)。

随着对标准遵从度的提高,质量也随之提高,偏差越来越少,缺陷率直线下降。

自动化工具是实施编码标准的最佳路径

有了编码标准后,应用标准意味着代码除了需要遵守语言本身的规则外,还需要遵守成百上千条编码标准所包含的规则和要求。理论上,我们可以通过人工来检查每条编码规则的实施情况,但对于日益复杂的软件显然是力不从心的。大量的实践表明,应用自动化工具是实施编码标准,提高代码质量的最佳路径。

自动化工具中我们最熟悉的就是编译器和链接器。高质量的编译器和链接器应支持现代编程语言,如最新的C和C++规范,报告每个构建步骤中可能出现的问题,以便它生成怀疑的警告,例如易失性变量或内存访问,其评估顺序可能会影响应用程序的逻辑。警告是第一道静态分析检查,绝不能忽视,尤其是在功能安全设置中。最好的建议是通过更改编译器设置将所有警告都视为错误来将警告转化为错误。这将迫使开发人员修复代码中的所有歧义,因为所有的警告都将作为真正的问题处理。

专用的静态分析工具基于源代码分析,可以在不执行程序的情况下发现潜在的问题,比如 IAR 提供了与 IAR Embedded Workbench 无缝集成的静态分析工具 C-STAT。这种类型的工具可以帮助你找到代码中最常见的缺陷来源,也可以帮助你找到开发人员在试图编写代码时往往不会考虑的问题,特别是当他们为了让某些功能运行而加入支撑代码时。静态分析工具确实能帮助你开发出更好的代码,因为它们强制执行编码标准。事实上,如果正在创建一个功能安全认证的应用,你可能会被建议,甚至强制要求使用静态分析工具。

此外,嵌入式软件在运行时仍然容易受到算术问题、缓冲区溢出、边界问题、堆完整性和内存泄漏的影响。一个可行的方法是在可能发生潜在错误的所有地方插入特定的检测代码或断言来检测此类错误。但是,手动添加指令来检测并以某种方式在运行时报告问题是一项非常耗时的任务。因此,使用动态或运行时分析工具来捕获和触发仅在运行时的缺陷和错误,是一个可以极大提高效率和生产力的方法。例如,在 IAR Embedded Workbench 中,开发人员可以使用运行时分析工具插件 C-RUN。

综上所述,编译器和链接器可以报告在构建中可能出现的问题,静态分析工具擅长发现一些未定义行为的缺陷,检查编码标准的符合性,而运行时分析工具擅长发现只有在执行时才会触发的缺陷。这些缺陷有时会有重叠,但有时只能在一个域或另一个域中检测到。为了尽可能提高代码质量,以及发现问题的效率,需要将几者结合使用并尽可能与开发和构建工具集成。下图矩阵代表组合不同工具时的完整缺陷覆盖率。

总结

随着的复杂性提高,对于嵌入式软件的要求也越来越高,其中最核心最根本的是代码质量,而编码标准是提高代码质量的最佳实践。遵循编码标准的最有效的方式是应用自动化工具,包括静态分析工具,运行时分析工具,这样可以有效地在开发过程中提高质量,既减少了项目的开发时间和成本,又提高了产品的质量和竞争力。

文章来源于:21IC    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    都有相当大程度的信号丢失,这也是它们能达到10%的压缩率的根本原因。而无损压缩格式,就好比用Zip或RAR这样的压缩软件去压缩音频信号,得到的压缩格式还原成WAV文件,和作为源的WAV文件是一模一样的!但是......
    LED闪烁(2024-08-16)
    --)     {         //什么也不做     };                             } 这段代码是一个不太精确的延时函数,比如你给它一个参数是6000,函数......
    问题有多严重,我们能做什么来解决它呢?   代码漏洞容易成为黑客的目标 代码质量糟糕实际上是一个普遍存在的问题,而且有相当多的证据支持这样的说法:糟糕的编码直接导致了漏洞。虽然......
    ,这个问题有多严重,我们能做什么来解决它呢? 代码漏洞容易成为黑客的目标 代码质量糟糕实际上是一个普遍存在的问题,而且有相当多的证据支持这样的说法:糟糕的编码......
    与您一路同行:从代码质量到全面安全;作者:Shawn Prestridge,IAR资深现场应用工程师 / 美国FAE团队负责人 安全一直都是一个非常热门的话题,似乎每周都会听到这样的消息:某某......
    与您一路同行:从代码质量到全面安全;作者:Shawn Prestridge,IAR资深现场应用工程师 / 美国FAE团队负责人安全一直都是一个非常热门的话题,似乎每周都会听到这样的消息:某某......
    【灵码】会自动写代码的AI大模型来了!阿里云推出智能编码助手通义灵码;会的AI大模型来了!阿里云推出智能编码助手本文引用地址:颠覆程序员编码体验 阿里云发布智能编码助手“”  用大模型写代码是什么样的......
    否符合标准,标准本身是否有问题,所生成的代码是否符合系统级要求、是否符合集成要求,都是未知。这样的情况下,生成代码越多需要的测试也越多。 “无论是从系统的设计、架构......
    本身是否有问题,所生成的代码是否符合系统级要求、是否符合集成要求,都是未知。这样的情况下,生成代码越多需要的测试也越多。 “无论是从系统的设计、架构的把控还是从软件的质量等维度看, Qt认为AI,特别......
    本身是否有问题,所生成的代码是否符合系统级要求、是否符合集成要求,都是未知。这样的情况下,生成代码越多需要的测试也越多。“无论是从系统的设计、架构的把控还是从软件的质量等维度看, Qt认为AI,特别......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>