1 代码和bug就是一个此消彼长、相互依赖的过程-德赢Vwin官网 网
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会怎样

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

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

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

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

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

审核编辑 :李倩

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

    关注

    30

    文章

    4779

    浏览量

    68518
  • BUG
    BUG
    +关注

    关注

    0

    文章

    155

    浏览量

    15665

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

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

收藏 人收藏

    评论

    相关推荐

    隐秘的串口中断BUG案例分享

    本文分享STM32L4平台串口驱动比较隐秘的BUG,分享的目的不在结论本身,而在于问题的分析过程,和如何形成标准,形成checklist,避免类似问题,以及在嵌入式开发中的思想。
    的头像 发表于 09-19 14:05 2169次阅读
    <b class='flag-5'>一</b><b class='flag-5'>个</b>隐秘的串口中断<b class='flag-5'>BUG</b>案例分享

    开发者应该知道的代码查询工具,杜绝代码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

    STM32的BUG代码的错误吗

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

    如何解决JVM中极小概率发生的bug

    编者按:笔者遇到非常典型 JVM 架构相关问题,在 x86 正常运行的应用,在 aarch64 环境上低概率偶现 JVM 崩溃。这是典型的 JVM 内部
    的头像 发表于 08-23 17:35 3401次阅读

    Bug定位的过程

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

    使用podman-compose部署wordpress的示例

    我们对于docker-compose并不陌生,它是用于编排多个可能相互依赖的容器的工具。
    的头像 发表于 10-17 10:59 2716次阅读

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

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

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

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

    冗余电路导致的BUG

      昨天解了BUG低级错误导致的BUG
    的头像 发表于 05-14 15:28 887次阅读
    <b class='flag-5'>一</b><b class='flag-5'>个</b>冗余电路导致的<b class='flag-5'>BUG</b>

    Research和Develop相互依赖过程

      "Research"(研究)和"Develop"(开发)是两紧密相关的概念,它们在创新、知识产出和产品/服务的生命周期中扮演不同的角色。以下是它们之间的关系: Research(研究
    的头像 发表于 06-19 14:49 690次阅读

    req-ack接口引发的问题分析

    最近定位了bug代码是以前的同事留下的,没有经过太多充分的测试,且没有仿真平台,定位的过程是相当的痛苦,前后花了差不多
    的头像 发表于 09-06 17:36 716次阅读
    <b class='flag-5'>一</b><b class='flag-5'>个</b>req-ack接口引发的问题分析

    半导体行业的创新案例

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

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

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