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

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

3天内不再提示

如何在日常开发过程中提高代码质量

IAR爱亚系统 ? 来源:IAR爱亚系统 ? 2025-01-23 09:09 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

随着技术的不断进步,客户期望越来越高,嵌入式设备变得越来越智能,对应的嵌入式系统和软件也变得越来越复杂,同时产品的开发周期变得越来越短。如何在短时间内开发出高质量的软件对产品的成功起着决定性的作用。提高代码质量是一个系统工程,本文主要介绍开发人员如何在日常开发过程中提高代码质量。

01

什么是代码质量?

代码质量一般用于衡量代码的“好”和“烂”:“好”代码表示代码质量高,“烂”代码表示代码质量低。虽然目前代码质量没有一个单一客观的定义,但是代码质量一般可以通过一些指标来衡量:

可读性(Readability):“好”代码应该易于阅读和理解。

可靠性(Reliability):“好”代码应该是可靠的(Bug越少,代码质量越高)。

可测试性(Testability):“好”代码应该易于测试。

可重用性(Reusability):“好”代码应该易于在不同项目里面重用。

可维护性(Maintainability):“好”代码应该易于修改和维护。

可扩展性(Extensibility):“好”代码应该易于扩展。

可移植性(Portability):“好”代码应该易于在不同的平台上移植。

02

如何提高代码质量?

提高代码质量不是一项一次性任务,而是一项需要长期坚持的实践。下面是目前常用的一些提高代码质量的实践:

遵循编码标准:编码标准是前辈总结的一些编码最佳实践和经验教训。编码标准一般分为公司内部编码标准(比如代码风格和命名规则等)和行业编码标准(比如MISRA, CERT和CWE等)。

静态代码分析:静态代码分析可以帮助检查代码是否遵循相关编码标准。

单元测试:单元测试主要是功能测试,可以帮助测试代码是否符合对应的设计,确保代码功能的正确性。

代码审查:代码审查可以加强开发者之间的协作,帮助检查代码中潜在的逻辑问题。

使用版本控制:使用版本控制可以管理代码变更历史,同时方便团队协作。

CI/CD:CI/CD可以实现自动化构建、静态代码分析和单元测试。

03

为什么需要在日常开发过程中提高代码质量?

下面是Capers Jones 的著作“Applied Software Measurement: Global Analysis of Productivity and Quality”里面关于Bug引入、检测和修复成本的一张图:

绝大部分Bug是在日常开发编码阶段引入的。

Bug发现的越早,越容易修复,修复成本越低;反之Bug发现的越晚,越难修复,修复成本越高。

在日常开发编码阶段过程中提高代码质量,可以尽早发现代码中的Bug,尽快修复代码中的Bug,大大降低修复Bug的成本。

80e448e2-d8a0-11ef-9310-92fbcf53809c.png

04

如何在日常开发过程中提高代码质量?

前面介绍了提高代码质量的一些通用实践,下面具体介绍开发人员如何在日常开发过程中提高代码质量。

构建0 Error和0 Warning

在构建的时候,开发人员会做到0 Error (因为Error会导致构建失败)。但是很多时候没有做到0 Warning (因为Warning不会导致构建失败)。但是Waring有可能是潜在的隐藏的Bug。

下面是一个经典的编译器Warning:提示应该使用比较运算符==而不是赋值符=:

8106d308-d8a0-11ef-9310-92fbcf53809c.png

修改之后重新构建:0 Error和0 Warning:

81266b46-d8a0-11ef-9310-92fbcf53809c.png

静态代码分析

构建0 Error和0 Warning之后,建议先做静态代码分析,因为静态代码分析不需要运行代码,分析起来比较方便快捷,而且静态代码分析能检测出一些常见的代码错误。

在IAR Embedded Workbench当中,只需要先勾选对应的C-STAT静态代码检查规则:

814eef9e-d8a0-11ef-9310-92fbcf53809c.png

就可以使用C-STAT对整个工程进行静态代码分析:

81700198-d8a0-11ef-9310-92fbcf53809c.png

也可以使用C-STAT对单个文件进行静态代码分析:

8193c7ae-d8a0-11ef-9310-92fbcf53809c.png

分析完成后,对应C-STAT Messages窗口会显示对应检查结果,双击对应信息可以定位到源代码位置:

81a4f57e-d8a0-11ef-9310-92fbcf53809c.png

如果不太熟悉对应检查规则,可以按F1,会弹出对应帮助文档(包含对应检查规则的描述,对应编码标准以及违反和遵循对应规则的代码示例等)来帮助快速定位和解决问题:

81c3026c-d8a0-11ef-9310-92fbcf53809c.png

根据帮助文档中的信息,推测需要将代码里面的4u改成(int32_t) 4。修改代码之后重新进行静态代码分析,之前的违反修复了:

81deb5fc-d8a0-11ef-9310-92fbcf53809c.png

使用IAR C-STAT可以非常方便地进行静态代码分析并且迅速得到反馈,以确保代码符合相应的编码标准。

单元测试

在静态代码分析之后,建议做单元测试。因为静态代码分析只能检查代码是否遵循相关编码标准,代码的功能测试还需要单元测试。IAR本身没有提供单元测试工具,IAR有很多提供单元测试工具的合作伙伴。同时IAR里面的C-RUN动态代码分析可以帮助在单元测试时发现一些潜在的问题。

在IAR Embedded Workbench当中,只需要勾选对应的C-RUN动态代码检查规则:

81f6121a-d8a0-11ef-9310-92fbcf53809c.png

重新构建,编译器会在有可能出现违反的地方自动插入对应的测试代码。

在运行的时候C-RUN会检测是否有对应的违反,比如下面C-RUN Messages提示访问越界:

82145234-d8a0-11ef-9310-92fbcf53809c.png

分析发现对应数组的大小是4,但是错误地引用了[4]( [4]是数组的第5个元素),导致访问越界。修改代码之后重新测试OK (C-RUN Messages窗口没有对应违反):

82291476-d8a0-11ef-9310-92fbcf53809c.png

代码审查 在单元测试完成之后,建议邀请同伴做代码审查(为了提高代码审查的效率,建议在构建、静态代码分析和单元测试完成之后再做代码审查)。

CI/CD

在代码审查完成之后,建议上传代码到服务器进行自动化工作流。

IAR提供了对应的自动化工具IAR Build Tools可以通过命令行的方式进行自动化构建、静态代码分析和下载调试(用于单元测试):

8259201c-d8a0-11ef-9310-92fbcf53809c.png

8273e96a-d8a0-11ef-9310-92fbcf53809c.png

05

总结

在与用户的交流中,我们欣喜地发现越来越多的公司和开发人员意识到代码质量的重要性,但同时也发现了一些问题:

有些公司居然没有对代码进行静态代码分析、单元测试和代码审查,代码的正确性和质量完全依靠最后的产品测试。

有些公司购买了非常好的静态代码分析和单元测试工具,但是遗憾的是这些工具并没有被开发人员在日常开发过程中充分使用,而是等到发布软件版本之后才对整个工程进行静态代码分析和单元测试。

有些公司还没有部署自动化工作流(开发人员的时间非常宝贵,要尽量对代码进行自动化构建、静态代码分析和单元测试,这样开发人员就可以尽快收到反馈,提高代码质量的同时也提升研发效率)。

本文以IAR Embedded Workbench和IAR Build Tools(包含C-STAT静态代码分析和C-RUN动态代码分析)为例介绍了开发人员如何在日常开发过程中提高代码质量。

需要注意的是,文中的IAR Embedded Workbench和IAR Build Tools(包含C-STAT静态代码分析和C-RUN动态代码分析)只是工具示例,文中的策略也适用于其它工具。

选择对应的工具很重要,但是更重要的是:开发人员需要在日常开发过程中充分利用好对应的工具来提高代码质量。因为绝大部分Bug是在日常开发编码阶段引入的,Bug发现的越早,越容易修复,修复成本越低;反之Bug发现的越晚,越难修复,修复成本越高。

更多关于IAR Embedded Workbench和Build Tools(包含C-STAT静态代码分析和C-RUN动态代码分析)的信息,可以参考:

https://www.iar.com/zh/products/architectures/arm/iar-embedded-workbench-for-arm/

https://www.iar.com/zh/products/architectures/arm/iar-build-tools-for-arm/

https://www.iar.com/zh/products/c-stat

https://www.iar.com/zh/products/c-run

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

    关注

    41

    文章

    3690

    浏览量

    131745
  • 代码
    +关注

    关注

    30

    文章

    4907

    浏览量

    71231

原文标题:在日常开发过程中提高代码质量

文章出处:【微信号:IAR爱亚系统,微信公众号:IAR爱亚系统】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    波峰焊机日常开启及注意事项

    波峰焊机作为电子制造行业的关键设备,其稳定运行直接影响产品质量和生产效率。掌握科学的日常开启流程和操作注意事项,是保障设备性能和生产安全的基础。以下从开机准备、开机流程、运行监控、关机操作及日常维护五个方面详细说明。
    的头像 发表于 07-18 16:52 ?3543次阅读

    HarmonyOS实战:Tab顶部滑动悬停功能实现

    日常开发过程中,遇到这种 Scroll 嵌套 List 列表滑动顶部悬停的场景十分常见,在鸿蒙开发时也正好实现了这个功能,本篇文章将带你一步步实现 Tab 顶部悬停的效果,建议点赞收藏!
    的头像 发表于 06-24 17:07 ?156次阅读

    HarmonyOS实战: 城市选择功能的快速实现

    最近在日常开发过程中,需要实现城市选择功能,同时支持模糊搜索。看似简单的功能动手实现起来却有很多难点。本篇文章详细记录开发过程中遇到的问题和对应的解决方法,希望能够帮助你,建议点赞收藏!
    的头像 发表于 06-24 17:07 ?162次阅读

    超声波清洗机如何在清洗过程中减少废液和对环境的影响?

    超声波清洗机如何在清洗过程中减少废液和对环境的影响随着环保意识的增强,清洗过程中的废液处理和环境保护变得越来越重要。超声波清洗机作为一种高效的清洗技术,也在不断发展以减少废液生成和对环境的影响。本文
    的头像 发表于 06-16 17:01 ?278次阅读
    超声波清洗机如<b class='flag-5'>何在</b>清洗<b class='flag-5'>过程中</b>减少废液和对环境的影响?

    HarmonyOS实战:高德地图自定义定位图标展示

    前言 地图定位功能基本上已经成了日常应用程序的必备功能之一,在日常开发地图定位的功能的时候难免会遇到很多意想不到的问题,本篇文章记录日常开发过程中的细节与完整的流程,帮助更多的开发者避
    的头像 发表于 06-09 14:59 ?281次阅读
    HarmonyOS实战:高德地图自定义定位图标展示

    使用CY7C65213开发过程中,应该用哪个interface进行uart通信?

    在使用CY7C65213开发过程中,我想用CyUartRead读数据,但是好像没有接口的deviceType是CY_TYPE_UART,想请问我应该用哪个interface进行uart通信? 是否有相关指导文件,或描述符指导?
    发表于 06-03 07:04

    质量 HarmonyOS 权限管控流程

    质量 HarmonyOS 权限管控流程 在 HarmonyOS 应用开发过程中,往往会涉及到 敏感数据 和 硬件资源 的调动和访问,而这部分的调用就会涉及到管控这部分的知识和内容了。我们需要对它有
    的头像 发表于 04-02 18:29 ?1114次阅读
    高<b class='flag-5'>质量</b> HarmonyOS 权限管控流程

    在linux下开发过程中, DLP4500 GUI无法连接光机怎么解决?

    在linux下开发过程中, DLP4500 GUI 无法连接光机,出现错误提示如下: open device_handle error: Is a directory opening path
    发表于 02-20 08:41

    如何提高锡膏在焊接过程中的爬锡性?

    锡膏的爬锡性对于印刷质量和焊接效果至关重要。要提高锡膏在焊接过程中的爬锡性
    的头像 发表于 02-15 09:21 ?587次阅读

    如何提高嵌入式代码质量

    嵌入式代码质量是至关重要的。本文将探讨如何通过有效的开发方法和工具来提高嵌入式代码质量,以确
    发表于 01-15 10:48

    何在播放视频过程中插入音频

    ZDP14x0是一款基于开源GUI引擎的图像显示专用驱动芯片,可以通过串口或者SPI与其他芯片通信,且能播放视频。本文将介绍如何在播放视频过程中插入音频。
    的头像 发表于 12-26 11:13 ?1254次阅读
    如<b class='flag-5'>何在</b>播放视频<b class='flag-5'>过程中</b>插入音频

    何在Petalinux下Patch u-boot源码

    在软件开发过程中我们经常遇到用 Patch 来传递和更新代码的场景。本文以一个端到端的例子来演示在 Petalinux 使用过程中,如何给 u-boot 的源码生成 Patch 并在 Petalinux 中编译。
    的头像 发表于 12-04 16:26 ?1898次阅读
    如<b class='flag-5'>何在</b>Petalinux下Patch u-boot源码

    自己做的TAS5825板子软件开发过程中怎么接到PPC3上去调试呢?

    我们打算做一个TAS5825的板子,PPC3软件已经申请下来了,有个问题是我们自己做的TAS5825板子软件开发过程中怎么接到PPC3上去调试呢?
    发表于 10-15 08:15

    华为云软件质量保障方案构筑企业值得信赖的护城河

    质量是产品的生命线,质量问题不仅会导致企业财产损失,还可能引发业务中断、客户满意度下降、企业品牌声誉受损等负面影响。如何在软件开发过程中全方位构建产品
    的头像 发表于 08-28 09:35 ?948次阅读

    OPA657在使用过程中如何降噪,如何提高信噪比?

    OPA657在使用过程中如何降噪,如何提高信噪比?有没有通用的一些技巧?谢谢
    发表于 08-26 07:13