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

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

3天内不再提示

代码和bug就是一个此消彼长、相互依赖的过程

GReq_mcu168 来源:硬件攻城狮 作者:硬件攻城狮 2022-03-11 10:01 次阅读

在进行嵌入式软件开发过程中,产生一些bug是难免的,工作年限比较长的朋友应该都会有这样的感受:"有一定规模的软件工程几乎不可能没有bug",软件逻辑不可能那么天衣无缝,软件测试也不会百密没有一疏,代码和bug就是一个此消彼长、相互依赖的过程。 经常听一些朋友说道:"你写的代码没有bug,那你离丢饭碗不远了",又或者代码中故意保留一些bug来增强自己在团队中的存在感,这样就变得无可替代了,怎么说呢,虽然这些观点有些不道德,但也从侧面透露出打工人的辛酸与无奈。 据观察,大部分的工程师都是“七分写,三分调”,当然有些人该反驳了,"我怎么感觉是三分写,七分调吗?",如果你是这样的状态去编写和调试你的代码,我至少会认为你不专业或者编码能力不够,思维逻辑能力不行~ 一个经验老道的软件工程师调试代码的时间都是非常短的,甚至可以一把搞定。 这样看来对于一般工程师们,调试所占据的比例还是比较高的,当然调试过程并不一定全是解决bug,特别是在嵌入式领域,一方面要适配硬件平台,甚至还要协助硬件排查硬件相关的问题;另一方面才是前期编码所导致的一些程序bug。 然而调试结束后,与bug之间的斗争远远没有结束,当把第一个版本提交给测试,就意味着后面会有N个版本,测试过程中、用户使用中、增加新需求时、修护原有bug时等等都可能引入新的bug。 所以bug基本上伴随着你整个产品的迭代过程,这或许也是你作为一个程序员存在的理由。 这样看来,bug一直有,那产品是不是么办法做好了?其实随着bug的消灭,产品的“相对稳定性”是不断增强的,也就意味着以后的bug没那么致命、没那么容易出现、客户的使用也并不会触发等等。 如果这个时候你说这个软件没有bug了,至少我不会相信。 既然大家都一直与bug纠缠,是不是应该有一些经验了呢?知己知彼才能百战百胜。 所以bug菌这里把最近所想到的、非常有意义的部分记录了一下分享给诸位:

1

else不处理

工作这么多年,我算是看过很多人写代码了,经常有同事写if容易丢掉else,其实这是一个非常不好的习惯。

如果在编码的时候else部分不需要处理,倒无伤大雅,但else部分存在一些相关变量需要置位或者释放等,而你没有else处理,便会引入bug。

ab333482-9398-11ec-952b-dac502259ad0.png

所以我的习惯就是即使else不需要处理也会保留下来,并且在其中进行相关注释,以提醒自己这一块是有逻辑处理的。

2

可视化日志

相信很多朋友都有看到过类似的文章。比如什么串口打印日志技巧、easylog等开源日志库、离线日志记录工具等等,这些东西都是围绕着一个主题为程序员提供一个可视化的日志信息展示。

因为大部分人的暂态大容量记忆能力是较弱的,这样会导致我们对于一些逻辑中状态的梳理处于劣势,特别是一些复杂的逻辑处理和梳理,使得最终编写的代码容易引入逻辑问题。

所以通过可视化日志的方式辅助程序员进行程序相关状态的记录,从而便捷的定位问题,解决bug。

ab466728-9398-11ec-952b-dac502259ad0.png

3

bug与代码要匹配

经常客户或者测试反馈一些bug,有些朋友收到就立马一头扎进最新的代码中进行查证,其实这个问题的出现是老版本上,导致自己忙前忙后还找不到问题的根源,所以软件的版本管控是非常重要的,这样才能对症下药。

以前去过一家公司,软件方面没人管控,代码随便改,其中一个代码改了10几遍,版本号什么的一直不变,这样的话一旦有问题,这个真的是一件头疼的事情。

4

常回头看看

这种方式主要是应对一些新增需求导致的软件bug,以前版本运行好几个月都没有问题,而更新到新版本没多久就产生了故障,此时需要做的就是对比之前的代码来进行修改点的查验和评估。

在软件中比较模棱两可的位置,多看看历史版本对其的设计和所考虑的问题,防止修改以后引入新的问题。

ab5ae11c-9398-11ec-952b-dac502259ad0.png

5

不要你认为

以前非常有意思的一句话:"我不要你认为,我要我认为",这句话确实有点狂妄自大之感,但是在"标准"面前就是这么现实。

经常有朋友在解决bug的过程中抱着猜一猜的心态,这样是非常不专业的。

对于软件运行本身是没有bug这一说法的,程序都是按照你写的代码序列在运行着,之所以称软件有bug,无非就是它没有按照你想要的逻辑运行罢了。

那这个问题并不是在软件本身而是你自身的编码能力,如果对于你所写的代码问题都还是猜一猜的方式去解决问题,那这个bug估计会越滚越大。

所以怎么算解决bug呢?一定要分析bug产生的前因后果,而不是“我把下面这行代码屏蔽了问题就不出现”等等不负责任的方式。

当然有时候你有这样的做法,我也能理解,毕竟有时候客户可耗不起你分析的时间,设备停机1个小时10来w,你看着赔偿就好了~

ab717544-9398-11ec-952b-dac502259ad0.png

6

假如XXX会怎样

写软件的朋友,脑袋瓜子相对比较灵活,这都是多年训练的结果。

在设计软件的时候应该多做一些假设,比如程序中等待两个信号到来便会进行相应的处理,此时此刻你就需要考虑其中有一个信号迟迟没有到来超时了程序会怎么样?

或者两个信号接收的顺序是否会对程序造成影响之类的问题?

解析一些通信数据,不可能每次都那么稳定的传输,如果存在粘包、断包、错误包该如何处理等等?

当你在写代码的过程中面面俱到,这样写出来的程序才会相对更加稳定,当然要做到这种境界也得一日之寒,需要不断的积累和理解。

审核编辑 :李倩

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

    关注

    30

    文章

    4596

    浏览量

    67331
  • BUG
    BUG
    +关注

    关注

    0

    文章

    154

    浏览量

    15605

原文标题:代码中藏几个bug,让自己无法替代?

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    与单片机Bug战斗的那些经历

    函数A了哦!\n”);#endif写程序是很短的时间,调试程序是漫长的过程。只有做好前期的准备后面依靠自己的调试技巧,就能玩弄Bug于鼓掌之中,而不是被
    发表于 11-05 17:09

    开发者应该知道的代码查询工具,杜绝代码bug

    组件。接下来是Review Board,“开源的、基于web的代码和文档审查工具,用于帮助公司、开源项目和其他组织保持代码的高质量,而且bug
    发表于 07-25 15:04

    FPGA如何避免代码混乱

    。这些混乱的根源是什么?又该如何解决呢?好的FPGA项目的设计作品,不仅依赖于架构设计,优秀的代码也是必不可少的关键因素。而好的代码最基
    发表于 08-30 14:40

    怎样导入相互依赖的.vhd文件(CLIP)到 Labview FPGA?

    各位大佬,我想导入CLIP进Labview FPGA的项目中。CLIP由组.vhd文件(VHDL代码)组成,其中些文件
    发表于 04-03 21:50

    代码混乱的根源及解决方法

    。这些混乱的根源是什么?又该如何解决呢?好的FPGA项目的设计作品,不仅依赖于架构设计,优秀的代码也是必不可少的关键因素。而好的代码最基
    发表于 05-09 04:17

    FPGA设计干净的代码是程序员的核心技能

    考虑到阵重新思考回去修改第一个always的代码写完后,得了,不检查代码了,仿真再说吧。仿真过程:每个时钟上升沿
    发表于 07-25 09:40

    FPGA设计干净的代码是程序员的核心技能

    离不开“混乱”两个字。这些混乱的根源是什么?又该如何解决呢?好的FPGA项目的设计作品,不仅依赖于架构设计,优秀的代码也是必不可少的关键因素。而好的
    发表于 07-29 08:41

    STM32的BUG代码的错误吗

    2010-4-8 1: 45 下面的函数中有BUG, 也就是SR2不能用WHILE来轮询,而应直接读出.如下面代码段, 因此,在这里说的
    发表于 08-11 07:42

    Bug定位的过程

    身为测试工程师,总有一道绕不过去的坎就是定位bug,这其实是非常花费时间的。
    的头像 发表于 08-08 16:11 695次阅读

    为离线开关电源选择最佳MOSFET

    了解 MOSFET 的结构及其相互依赖的参数如何影响电源的性能
    发表于 08-22 14:25 657次阅读
    为离线开关电源选择最佳MOSFET

    数字隔离器三个关键元件的性质和相互依赖性的重要性

    多年来,工业、医疗和其他隔离系统的设计人员在实施安全隔离时选择有限:唯一合理的选择是光耦合器。如今,数字隔离器在性能、尺寸、成本、能效和集成度方面具有优势。了解数字隔离器三个关键元件的性质和相互依赖性对于选择合适的数字隔离器非常重要。这些元素是绝缘材料,其结构和数据传输方法。
    的头像 发表于 01-29 10:53 753次阅读
    数字隔离器三个关键元件的性质和<b class='flag-5'>相互依赖</b>性的重要性

    量子纠缠与爱情的类比分析

    在量子力学中,如果两个粒子之间有相互作用,它们就会产生一种称为“纠缠”的状态,即它们的状态变得相互依赖。同样地,在爱情中,两个人之间也可能存在这种相互依赖的状态。
    的头像 发表于 02-27 17:57 3212次阅读

    Research和Develop相互依赖过程

      "Research"(研究)和"Develop"(开发)是两个紧密相关的概念,它们在创新、知识产出和产品/服务的生命周期中扮演不同的角色。以下是它们之间的关系: Research(研究): Research指的是系统性的探索和调查,旨在增加对特定领域的知识和理解。它通常包括问题的定义、数据收集、分析和解释,以及对结果的推理和总结。 研究的目标是扩展知识边界、发现新的观点和原理,并为进一步的发展和创新提供理论和实证依据。研究常常采用科学方法、实验设计
    的头像 发表于 06-19 14:49 468次阅读

    半导体行业的创新案例

    当技术优化的整体方法包括芯片设计、封装和产品级相互依赖性时,产品、设计、封装、工艺和器件相互依赖性的整体方法,以提高研发效率和价值创造
    的头像 发表于 10-07 10:57 548次阅读
    半导体行业的创新案例

    具有相互依赖的双热插拔电源控制器TPS2310和TPS2311数据表

    电子发烧友网站提供《具有相互依赖的双热插拔电源控制器TPS2310和TPS2311数据表.pdf》资料免费下载
    发表于 03-15 10:44 0次下载
    具有<b class='flag-5'>相互依赖</b>的双热插拔电源控制器TPS2310和TPS2311数据表