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

电子说

1.3w人已加入

描述

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

代码

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

2

可视化日志

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

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

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

代码

3

bug与代码要匹配

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

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

4

常回头看看

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

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

代码

5

不要你认为

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

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

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

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

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

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

代码

6

假如XXX会怎样

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

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

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

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

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

审核编辑 :李倩

 

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分