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

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

3天内不再提示

代码中藏几个bug,让自己无法替代?

嵌入式情报局 来源:最后一个bug 2023-06-07 10:34 次阅读

正文

在进行嵌入式软件开发过程中,产生一些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。

7eef0a6a-04d8-11ee-90ce-dac502259ad0.png

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

2

可视化日志

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

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

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

7efaccba-04d8-11ee-90ce-dac502259ad0.png

3

bug与代码要匹配

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

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

4

常回头看看

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

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

7f03e0de-04d8-11ee-90ce-dac502259ad0.png

5

不要你认为

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

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

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

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

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

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

7f0cd4be-04d8-11ee-90ce-dac502259ad0.png

6

假如XXX会怎样

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

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

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

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

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




审核编辑:刘清

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

    关注

    41

    文章

    3361

    浏览量

    131555
  • 嵌入式软件
    +关注

    关注

    4

    文章

    228

    浏览量

    26384

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

文章出处:【微信号:嵌入式情报局,微信公众号:嵌入式情报局】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

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

    ,以编程规范来打造程序的外观。Bug已经在高手面前无所遁形。所以Bug只是高手们用来愉悦的玩物。用来享受那一刻的征服感。为了菜鸟也能享受其中的快乐,我分享一下自己的经验,
    发表于 11-05 17:09

    labview 前面板全屏后按键不能正常, 是labview的BUG还是代码有问题?

    用选项卡装一个chart 图,Chart图自己适应屏幕后,在同一选项卡里的按键按下后就不显示。不知道是Labview本身的BUG,还是自己编写的程序有问题,现符上图片和
    发表于 11-27 10:00

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

    编程规范来打造程序的外观。Bug已经在高手面前无所遁形。所以Bug只是高手们用来愉悦的玩物。用来享受那一刻的征服感。为了菜鸟也能享受其中的快乐,我分享一下自己的经验,
    发表于 12-20 17:15

    程序员最难忘的Bug调试经历

    无计可施的时候,唯一能做的是对代码进行分而治之,不断地去排查错误,消灭错误,直到最后剩下非常小的一块,再去慢慢研究问题所在,可不幸往往就这样,在排除了许多错误以后,该Bug还是会出现。在这个过程
    发表于 01-21 15:08

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

    就得你的老板付费了。他们也有一些知名的客户,如Adobe、甲骨文、惠普、美国银行等等。IDE的重量级作品JetBrains推出了Upsource,这是一种多语言代码审查工具。为什么通晓多国语言?下面
    发表于 07-25 15:04

    STM32的BUG代码的错误吗

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

    单片机开发应掌握的几个基本技巧

    在单片机应用开发代码的使用效率问题、单片机抗干扰性和可靠性等问题仍困扰着。现归纳出单片机开发应掌握的几个基本技巧。如何减少程序
    发表于 11-19 08:25

    单片机开发应掌握的几个基本技巧

    在单片机应用开发代码的使用效率问题、单片机抗干扰性和可靠性等问题仍困扰着。现归纳出单片机开发应掌握的几个基本技巧。1、如何减少程序
    发表于 11-22 07:16

    iPhone 7再出新BUG 频繁睡死无法重启!

    最近苹果比较闹心,先是接连出现iPhone 6电池爆炸、iPhone 6S异常关机以及iPhone通话死机的情况。如今,iPhone 7又曝出频繁睡死且无法重启的新BUG
    发表于 12-19 10:16 3.7w次阅读

    为什么你觉得旧代码异常混乱?因为读代码更难

    但是,认为新代码比旧代码好简直就是荒谬。旧代码是已经运行过的,测试过的。无数的bug在被发现前都上线运行过,发现之后程序员们可能在花了好些日子才修复了这些
    的头像 发表于 05-23 11:07 4635次阅读

    如何解决智能合约中的Bug

    智能合约在运行过程中发现Bug或者代码需要改进,这会影响整个系统的健壮性,如果发现无法解决的Bug,那就可能会造成严重的经济损失。
    发表于 10-25 10:55 1560次阅读

    微信突发BUG无法接收消息

    1月18日消息,话题“微信bug”登上微博热搜。
    的头像 发表于 01-18 15:22 2049次阅读

    STM32F4系列芯片几个无法启动的原因

    最近一年多开始使用STM32F4系列芯片,在使用开发板、评估板的时候一切正常,但当自己做板子的时候事故频发,最典型的就是无法启动、无法刷机,现将遇到的几个
    的头像 发表于 02-16 14:08 7339次阅读
    STM32F4系列芯片<b class='flag-5'>几个</b><b class='flag-5'>无法</b>启动的原因

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

    经常听一些朋友说道:"你写的代码没有bug,那你离丢饭碗不远了",又或者代码中故意保留一些bug来增强自己在团队中的存在感,这样就变得无可
    的头像 发表于 03-11 10:01 957次阅读

    自己编写函数示例代码很难吗?分享几个示例!

    Q A 问: Arduino Uno的函数示例 我决定自己编写函数示例代码,因为这应该是Arduino中的基本示例。网络上确实有关于使用函数的文档,但是,如果要尝试使用代码环境,则必须得访问
    的头像 发表于 11-16 16:05 222次阅读
    <b class='flag-5'>自己</b>编写函数示例<b class='flag-5'>代码</b>很难吗?分享<b class='flag-5'>几个</b>示例!