如何提高自身编码能力--定位Bug篇

24人阅读 评论(0) 收藏 举报
分类:

如何提高自身编码能力--定位Bug篇

——左手工程师,右手产品经理

学会定位Bug真的很重要

1、定位bug的数量、种类、级别越多, 真的真的真的(重要的事三遍)能快速拉升自身编码水平、对很多原理的理解和对编程的认知。

2、能提高开发效率很多很多, 避免长时间都在解决bug的路上。

3、对app也是相当友好,至少对自己的app稳定性信心大增。

“打怪升级法则”

本人是个游戏迷,对于程序员的成长历程,觉得就像是在玩游戏一样。 只有不断的增加经验,获得新的装备,才能提高自身战斗力, 才能被一些“组织”收纳。游戏中有很多途径可以去增加经验, 同样对于程序员的成长也会有很多方式去提高自己的编程能力,这里闲谈一下定位bug的方式去提升。

开发过程中,会出现各种bug,产生原因不一。 如果对每种类型bug都能透析产生的原因和如何避免。 就会对各个开发知识点都会有更深刻的见解。所以《打怪升级法则》最重要的一就是积累各种bug, 只有见多识广才能应对自如, 建立自己的bug库很重要, 这里会说两点如何建立自己的bug库。

法则一 刷自己的副本

根据自己开发过程中所产生的bug, 包括代码类型bug,策略类型bug,业务类型bug。 每个bug都要寻根问祖找到根源, 如果只在半途解决或者屏蔽bug,那么就领会不了这个bug的精髓(至少前期积累bug库的时候都要寻根问祖,如果后面经验丰富能对bug很熟悉,或者能很优雅的屏蔽后可以忽略)

代码类型bug:产生一般来源于自己的编码不够规范和严谨, 透析此类bug可以提高自己的代码质量和编程能力。

策略类型bug:一般来源于自身的代码设计有缺陷, 透析此类bug有助提高我们的代码局部或者全局构造能力, 可以为后续的封装、组件化、架构设计思维有很大的帮助。

业务类型的bug:很明显来源于自己对业务流程、需求逻辑的理解或业务代码设计不够严谨产生的bug, 此类bug也是相当重要,如果前面两点说的是对于自身编程能力, 那么这点就是切切实实跟业务开发有关,也是最常见的bug。

自身编程能力作为基石,只有自己的代码质量提高了才能编写出优雅高效率的代码。 但如果自己对业务的理解很马虎很随意, 即使编程能力再强, 也只能是一个很普通甚至差劲的程序员。程序员的本职是对一个产品赋予头、手、脚、躯干等等(功能),如果不能制造出健全稳定的功能,那么最终的产品可能就会是一个残废 透析此类bug, 对自己的业务能力, 功能分析,方案制定有很大的帮助; 还能获得部门的认可。 业务能力,也是公司晋升的重要衡量指标。

总之,一个bug就犹如一个副本,自己的副本都不刷掉,那升级就会很慢; 如果对于自己的副本只刷掉门口几个小兵,中途就离开,其实也跟没刷一样。 只有在干掉最终boss, 才会有成就感,才能拿到本副的装备, 才能以更高的战斗力去刷其他副本。 装备越来越多,越来越好,那升级就是分分钟的事情。

法则二:跟同事组队刷副本

上面论述的是针对于自己在开发过程中遇见的bug, 这类bug实际上是很局限的, 如果你处于一个版本迭代流水线式的开发环境, 每天造轮子、造螺丝, 在开发过程中遇见的bug会更有限。除了刷掉自己的副本外, 还要学会如何吃掉别人的经验。

当身边的同事有问题时,这时候一定要伸出援助之手(xx副本求带)。 因为除非是实习生,同等水平左右的同事发出的“求救信号” , 大部分是自己偶尔遇见过但却忘了,或者自己根本不熟悉的bug。 这是一个增加自己bug库的大好机会,即使是自己熟悉的bug,也别放过, 也许你觉得会耽误自己的时间, 但很多时候会重新刷新你对上一次bug的认识(也许会捡到+1的新装备哦),还能促进同事之间的关系。 如果是全新的bug, 之前自己并没有这方面的bug经验, 那么升级的时候就到了, 因为往往这类副本难度偏大,但boss经验多,装备豪华, 如果你能和同事组队干掉,必然会经验大涨。但对于那些难度太大,耗时很长的,也并没有要求你就此一直卡在这副本, 你只有50级的装备却想干掉100级的boss,毕竟那是你同事的bug,他会寻找资料或者更高级别的大神来解决, 此时只需等待同事的心得就好了。 当然如果你有多余的时间可以慢慢研究,收获更多。

法则三:吃别人经验

除了自己的bug和同事的bug外, 还有很多bug是我们不熟悉的。 当自己的bug库有了一定的积累, 定位bug有了一定的经验和心得后,可以去逛逛论坛、交流群、博客等,见识见识别人的疑难杂症和解决方案, 这会有助于提高自己bug定位能力和解决能力。

如果能有上述或类似的一些习惯,我相信用不了多久, 你们代码中的bug会越来越少,定位bug也将会轻车熟路, 个人能力会得到很大的提升。

“开局一堆bug,装备全靠刷。 我是渣渣辉,皇城pk,等你来战”

 

 

定位bug

上面用了大量的篇幅介绍了定位bug的重要性以及如何建立一个自己的bug库,(这里说明一下, bug库并不是用笔记做成的仓库, 而是对各种bug理解认知之后的集合,如果担心被遗忘做笔记也是很好的。) 并没有介绍如何去定位一个bug的根源,与分析bug产生的原因。我相信每一个程序员都有自己的一套定位bug的方式。 这里简单介绍一下以常用思维去分析定位一个bug,当然大神很多,可用以自动化的方式去定位项目中的bug,如使用工具、脚本等方式。

猜测

当发现一个bug时,首先要做的就是分析猜测这个bug会产生的原因。

一般业务类型的bug最容易猜测,如:文案错误,信息空缺,集合元素缺失,等数据不对的情况。此类bug基本上都是数据在最终使用的时候,并不是自己想要的数据。如果能对自己代码比较熟悉,那么就能很快的猜测出数据在获取 - 解析 - 传输 - 转换 - 使用 的哪个环节出了问题。 如果无法猜测数据在哪个环节出了问题, 排查起来也相对简单,数据的传输在代码中还是很清晰可见的。 只要顺藤摸瓜很快就能寻找到出问题的地方。 PS: “数据驱动编程”, 从数据源上规划好数据结构,不仅可以避免掉很多不必要的bug,还能提高开发效率。

其次是策略类型bug,功能映射到的代码设计有缺陷,猜测此类bug难度会大一些。 因为很多时候咋一看以为是业务类型的bug。 猜测此类bug产生的原因,一是需要全局回想下自己的整体设计思路,确认是否有隐患的地方, 二是根据bug发生的场景、时机,推算猜测出可能存在的错误设计思路。 如果发生较大的策略类型bug, 其实是很不好的,这很可能意味着自己之前的大部分设计思路需要调整,相应的很多代码也需要调整。 虽然要调整的地方很多, 但另一方面, 也说明了你正在改变, 你重新设定了一套设计思路,你在追求最优化,而不是去建立补丁。 PS: 拿到需求后去思考最优化方案是很有必要的。

再次是代码类型的bug, 由于自身编码规范不足,埋下一些坑,出现的一些奇葩bug。 要想猜测出此类bug产生的原因也是最难的, 它很可能跟数据关系不大,跟策略设计的影响也不大。 想要猜测出此类bug发生的原因, 需要结合更多的信息, 如 log、场景、时机、数据等, 加上经验和感觉去推理猜测出bug产生的原因。 PS: 提高自己的基础和注意平时的编码习惯,应该是每个猿需要做的事情。

不管是什么类型的bug,当bug发生的时候,很多时候我们并不会知道这个bug是什么问题造成的,所以在猜测的时候,需要对业务类型、策略类型、代码类型的bug结合进行推理猜测。

定位

当我们大概猜测出一个或者多个可能产生这个bug的原因后, 我们需要去定位具体产生bug的代码。由于猜测环节我们已经把范围缩小到了某一区域。 如何在这个范围定位到具体的问题代码? 这里可以提供几种思路可以参考下, 一是直接浏览一下这块代码,排查有隐患的地方。 二是模拟数据、场景、时间,确定有问题的代码。 三是折半注释法,通过折半注释能快速的定位到具体代码。 折半注释法在很多疑难杂症bug中更能见到奇效,通过注释掉一部分代码,让产生bug所处的局部功能运行正常, 再放开被注释掉的一半代码,使运行正常,直至找到最终打开注释就会有问题的那块代码。 或者反注释,一个个打开注释判断是否正常,最后留下的将会是有问题的代码, 此类方法只能做辅助。

验证

验证就很简单了,定位到具体问题代码后,我们需要验证各种数据、场景、时机来完全确定是这里代码产生的问题。

猜测 - 定位

有些时候从猜想 - 定位 - 验证, 最后可能会发现并不是这里的产生的问题, 这时候需要重新去猜想和定位其他case。

其他方式

定位bug的方式有很多,也根据具体情况而定,只要积累的够多, 不管用什么方式去定位都将会很快, 很多时候也许一个感觉就对了。 不管是建立bug库,还是学会如何定位bug, 都是一个持续的积累过程,也是一种不可言传的编程思维,这里只是简单的描述大家都懂的道理,只有自己去体会实践才能收获。

 

查看评论

如何提高自身编码能力--定位bug篇

原文地址:https://www.jianshu.com/p/0b64bb4d2c78 学会定位bug真的很重要 1、定位bug的数量、种类、级别越多, 真的真的真的(重要的事三遍)能快速拉...
  • Tramp_liang
  • Tramp_liang
  • 2018-04-10 12:01:30
  • 22

如何提升自己的编码水平

 论编程技能的提升   建议多看看别人的代码,特别是行业内比较流行的框架或大牛写的开源项目,其中的逻辑思维和写码风格都很值得去学习。 “多阅读高质量的代码可以做好笔记,时常看...
  • sinat_33641737
  • sinat_33641737
  • 2016-07-31 22:43:50
  • 345

如何提高自身编码能力-定位Bug篇

1、定位bug的数量、种类、级别越多, 真的真的真的(重要的事三遍)能快速拉升自身编码水平、对很多原理的理解和对编程的认知。3、对app也是相当友好,至少对自己的app稳定性信心大增。本人是个游戏迷,...
  • bwf_shwangzhanbu
  • bwf_shwangzhanbu
  • 2018-04-12 14:17:01
  • 4

如何提高自己编码的能力

  最近一直在愁,如何才能提高自己的编码能力呢?本人在写东西的时候,感觉很吃力,半天弄不出两句。只在上网上搜搜看有没有类似的代码,然后参考一下,再修改下。总是找不到感觉。有那种想什么就写什么的感觉。目...
  • zuuzhang
  • zuuzhang
  • 2007-12-21 17:18:00
  • 1278

提升自己的编码能力

一、  1. 扎实的基础。数据结构、离散数学、编译原理,这些是所有计算机科学的基础,如果不掌握他们,很难写出高水平的程序。据我的观察,学计算机专业的人比学其他专业的人更能写出高质量的软件。程序人人都...
  • weilaidewo687
  • weilaidewo687
  • 2015-12-18 15:11:25
  • 312

如何提高数学分析水平(转载)

(转载自:http://blog.sina.com.cn/s/blog_5e638d950100dsvs.html~type=v5_one&label=rela_prevarticle )   ...
  • RobertChenGuangzhi
  • RobertChenGuangzhi
  • 2014-10-11 01:16:34
  • 1471

如何提升你的能力?给年轻程序猿的几条建议

一转眼工作已有8年,前两天公司一位初入职场的同事希望我给一些建议与经验。我觉得这个话题很有价值,这里以个人的想法与经历写成此文,希望给年轻的开发者们一些启发。 我工作过的公司有4家,...
  • DSLZTX
  • DSLZTX
  • 2015-06-23 11:54:18
  • 2525

程序员自我修练-提高写代码的能力

首先让我们看一看刚入软件公司会出现的情况: 1. 你可能会常常发现,写了一段代码后,编译程序时是一大堆的出错 (原因:语法不熟) ──别担心,这是每个程序员必须经历的事,这时候你就需要更大...
  • jcw_275240222
  • jcw_275240222
  • 2016-06-11 17:44:56
  • 3707

bug的定位比修改重要1000倍

bug的定位比修改重要1000倍 砍倒一棵树,当然也有技巧,一斧子一斧子劈得要在正确的位置上,还要喊好顺山倒,别砸到别人和自己。不过,在一片林子里找到你想要的那一棵,才是更重要的事,也更困难。修改一...
  • younggift
  • younggift
  • 2013-11-30 00:38:57
  • 3691

学会利用差异对照法快速定位bug所在的模块

在软件开发中, 遇到bug时, 不同模块的开发人员经常相互扯皮, 我门说是你们的问题, 你们说是我们的问题, 结果呢,两方人都不愿意花精力去仔细定位, 两方都希望对方先分析一下, 然后确定bug所在位...
  • stpeace
  • stpeace
  • 2014-11-26 00:05:30
  • 3382
    个人资料
    等级:
    访问量: 443
    积分: 48
    排名: 168万+
    文章存档