coding感想(三)

11 Jan 2018 coding感想(三)

最近的主要工作就是bug fix,所以借此机会总结下,都是bug fix的相关内容,其实是我工作中遇到的一些小问题,有些道理很简单,但没经历过,也就未必明白。本次主要分享以下5点:

  • 代码有bug是常态
  • bug fix一定要找到root cause
  • 提交的代码一定要测试通过
  • 提交代码一定要有commit信息
  • bug fix时能删除的代码就不要注释

1) 代码有bug是常态

我们经常需要去维护别人写的代码,有时候看见一些自己认为写得很烂的代码时,总是控制不住自己,忍不住想,写这代码的人得多不负责,才写出这种代码,不排除存在一些不负责的程序员敷衍了事,但是编程经常都是受到时间、业务场景和技术水平等各种因素影响,有可能我们看到的烂代码是人家一天时间写出来的,估计给自己一天时间,也未必赶得上这水平。在维护别人代码时,不要老是抱怨有那么多bug,多些理解,少些抱怨,要想写出没有bug的代码,只有一个办法,就是不写代码。额,那位站起来的同学,把你手中的砖头放下,我开个玩笑而已。

2) bug fix一定要找到root cause

在fix bug时, 一定要找到导致bug的真正原因,例如,某bug产生现象A,但是现象A是由B引起,B又是由于C导致。那么在fix时,如果不真正解决C,那么该bug的fix就治标不治本,达不到fix bug的目的,真正的原因未找到,那么该bug有可能在fix后还会出现,导致bug fix失败,然后就会 reopen += 1。

3) bug fix提交的代码一定要测试通过

提交到版本库的代码,如果是bug fix阶段,一定要确保代码经过测试,也许你觉得一点小改动不会有什么影响,修改完就直接提交,但是往往等待你的是编译失败,或者编译成功了,产品却不能正常运行。到了bug fix阶段,要确保版本库中的代码处于可用状态,随时可以编译成功,不影响QA测试,也不影响其他同事使用。试想,如果因为你的一个改动,导致整个项目编译失败或者编译完不能正常使用,这是很不负责任的做法。所以,bug fix完后,往版本库提交代码时,一定要测试通过,至少要测试下引起bug的相关case。

4) 提交代码一定要有commit信息

在工作中,不管是产品的开发阶段,还是发布后的维护阶段,经常需要往代码库提交代码,在提交代码时,一定要写清楚本次提交的目的,有时候查看公司代码库的提交日志时,发现很多人提交代码竟然没有任何commit信息,或者简单的写了一个单词update,对于这种人,我就等着看他们回滚代码的那天。为什么要有commit信息?因为大家是在一个代码库工作,如果某天有很多次代码提交,第二天build的产品出现各种bug,那么有时候根据commit信息就能很快找到原因,因为bug往往在被修改的代码周围。另外,如果有时候需要回滚代码,如果没有commit信息,需要去仔细查看每次提交的diff才能确定回滚版本,实在是太浪费时间了。

我个人的commit信息一般会有以下4类:

  • bug fix:表示本次提交是一次bug fix,并附上bug相关信息
  • code format:表示本次提交是格式化代码,仅修改代码的格式
  • code refactor:表示本次提交是一次代码重构
  • daily commit:日常开发提交,附上本次提交的主要内容

5) bug fix时能删除的代码就不要注释

有时候看代码,会发现大片被注释的代码,然后在被注释代码旁边,又写了和被注释代码功能类似的代码,让人一头雾水。最后猜测估计是bug fix时,将以前的错误代码全部注释掉,然后将正确代码写在旁边。对于此类人,我想问下你,难道你不知道版本管理器的存在吗?每次bug fix都将错误代码注释掉,以后代码库怎么维护?既然是不需要的代码,就应该直接删除,下次如果想查找本次删除的代码,通过版本管理器,查看本次提交的code diff就可以找到。

本次分享就到这里,下次再继续~

LEo at 15:51

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ThoughtWorks

大型项目程序配置管理演化之路|TW洞见

今日洞见 文章作者、图片来自ThoughtWorks:窦衍森。封面图片来自网络。 本文所有内容,包括文字、图片和音视频资料,版权均属ThoughtWorks公司...

3376
来自专栏FreeBuf

看我如何利用开发人员所犯的小错误来盗取各种tokens

实际上,在日常的开发过程中,开发人员很有可能会犯各种各样貌似“无伤大雅”的小错误,单独一个这样的小错误可能并不能搞什么事情,但如果将这些错误串起来形成一个漏洞链...

2705
来自专栏java思维导图

缓存在高并发场景下的常见问题

当数据时效性要求很高时,需要保证缓存中的数据与数据库中的保持一致,而且需要保证缓存节点和副本中的数据也保持一致,不能出现差异现象。这就比较依赖缓存的过期和更新策...

1283
来自专栏JavaEdge

Tomcat架构解析之1 架构简介1 核心架构模块说明2 分层建模3 作用域

3065
来自专栏大魏分享(微信公众号:david-share)

厉害了:全数据中心密码管理系统的建设--构建数据中心一体化运维平台第三篇

前言:本文中所引用的文档均为Redhat 技术专家杨金锋所提供。此方案,大卫也多次请教红帽技术专家陈镇。 密码管理系统的必要性 在大多数客户数据中心内部,密...

5457
来自专栏狮乐园

30 分钟理解 CORB 是什么

我当前的 chrome 版本是 v68,如果是 v66 或更低版本可能提示的警告信息略有不同。印象中只对 CORS 比较熟悉,CORB 是个什么鬼?好奇心迫使我...

3323
来自专栏逸鹏说道

亿级Web系统搭建:单机到分布式集群

当一个Web系统从日访问量10万逐步增长到1000万,甚至超过1亿的过程中,Web系统承受的压力会越来越大,在这个过程中,我们会遇到很多的问题。为了解决这些性能...

4647
来自专栏CSDN技术头条

亿级Web系统搭建:单机到分布式集群

当一个Web系统从日访问量10万逐步增长到1000万,甚至超过1亿的过程中,Web系统承受的压力会越来越大,在这个过程中,我们会遇到很多的问题。为了解决这些性能...

3006
来自专栏北京马哥教育

MySQL/MariaDB基于MMM实现读写分离及高可用

前言 MMM(Master-Master replication managerfor Mysql,Mysql主主复制管理器)是一套灵活的脚本程序,基于perl...

40410
来自专栏IT技术精选文摘

聊聊C10K问题及解决方案

1 C10K问题 大家都知道互联网的基础就是网络通信,早期的互联网可以说是一个小群体的集合。互联网还不够普及,用户也不多。一台服务器同时在线100个用户估计在当...

6029

扫码关注云+社区

领取腾讯云代金券