【专业技术】编程老手如何化解棘手难题

依然记得上一节编程课的时候,老师说过一句让我一直到现在都还记得的话“只要是软件,就一定有bug;只要是软件,他的功能就是有限的;功能越强大的软件,他的问题就越多,你所不知道问题与隐患就越多”;

当我真正开始写第一条程序,写第一个项目,伴随我的就像老师跟我说过的话的那样,有着各种各样的问题;想必所有做程序员的各位朋友们,也有这样的感觉,只要涉及到编程那么伴随着他的就是各种想不到的bug,不管是大的,小的,有头绪的,没有头绪的不管什么问题吧,只要是问题我们都是要去解决!

那么问题来了,碰到了我们会解决的有头绪的bug我们就感觉很轻松没有压力,但是碰到我们没有头绪的bug怎么去解决呢?不知道朋友们是不是都尝试过被不知道怎么解决的bug弄到头大,弄到感觉世界没有明天了,弄到忘记了自己的吃饭的时间,下班的时间,甚至是睡觉的时间,但是就是解决不了 一天 两天 三天,甚至一个星期都过去了,问题还是一点进展都没有;这其中的滋味相信是程序员的多少都经历过,只不过有一部分程序员经常有,但有的程序员可能就比较少,这个跟各自的岗位有关;

废话不多说下面就跟各位朋友分享一下小编碰到这种bug是怎么一步一步的解决的;

第一步:bug复现

通常来说测试人员测试出一个bug,报给你解决的时候,你一看bug的描述,如果说你在脑袋里知道是怎么回事了,那么就不能算是没有头绪。怎么算是没有头绪,就是完全不知道为什么会出现这样的问题;那么第一步就是在自己的电脑复现出已经出现的bug,如果自己用测试人员的方法,可以在自己的电脑上复现出bug的现象,那么就可以很直观的看到什么样的操作会走什么样的代码,什么样的交互会走什么样的代码逻辑,这样第一个解决问题的小小的头绪就很快就出现了;

第二步:广撒网,多测试

在第一步的时候我们已经在本地复现出bug的现象了,也简单的了解了一下,出现的bug可能涉及到的代码逻辑;那么下一步就是在自己的写的程序或是别人写的程序中定位bug的地点,具体的要怎么去定位呢?

小编的方法通常就是两种办法不过屡试不爽,我想大多数人也是这样,第一个方法就是打断点看堆栈,另一个方法就是打印log(这些方法可以让你更好的确定问题出现的位置,已经更好熟悉代码逻辑)做好了这些之后,就是一系列的定位过程,这个过程就是看一个程序员的能力,经验,等等多方面的综合表现吧,能力越强的可能速度越短;做过这步之后,顺利的话就可以知道出现问题的具体位置了;好的话可能已经知道怎么解决了,但是不好的时候也有,发现出现问题的源码自己看不懂,运用的知识也不是自己的能力范围之内那么怎么办?

第三步:知识定位,择优选择

知道代码出问题的位置后,如果知道怎么修改来解决这个问题,那么就要想想要怎么很好的修改这个代码可以让自己的程序更加的健全,也要想想修改这个代码后会不会影响其他已经正常运行的代码;那么问题就可以圆满的交公关闭bug了;如果不知道怎么来修改这个代码,那么情况可能更复杂一点了,首先看看能不能知道这个代码用的是什么知识点,如果知道就要好好分析代码的上下文,如果不知道知识点那么就要先弄懂是什么知识点了,可以自己弄懂最好如果自己弄不懂就要问了;这个过程可能还是有点煎熬但是经过这一次之后,以后再碰到这个知识点你就不会再这样了,这就是成长,这就是经验,在通俗的说这就是钱呀;

以上就是小编碰到不会的bug分析的过程,这个流程在小编这用的很成熟了,一般再难的bug,比如内核级别的bug,代码根本就不是自己写的,甚至根本就看不懂写的什么,我用这个方法最慢也就三天的时间,当然说是出现问题这一块说是一清二楚也不可能,不过应付比较着急的项目没有问题的;好了就说这些朋友如果有什么好的解决bug的流程也可以留言分享一下,感谢各位的阅读

原文发布于微信公众号 - 程序员互动联盟(coder_online)

原文发表时间:2015-06-27

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏何俊林

关于直播,所有的技术细节都在这里了(四)

上篇《关于直播,所有的技术细节都在这里了(三)》我们讲述了直播后端系统的原理及优化,那么直播推流、播放端是否就没有可以优化的点呢? 答案是否定的。客户端的优化对...

1877
来自专栏草根专栏

TDD in .NET Core - 简介

最好有一些预备知识,例如xUnit,Moq,如何编写易于测试的代码,这些内容我都写了文章:https://www.cnblogs.com/cgzl/p/9178...

671
来自专栏Python爬虫与算法进阶

爬虫学到什么程度可以去找工作

随便看看知乎上的教程就可以入门了,就Python而言,会requests当然是不够的,还需要了解scrapy和pyspider这两个框架,scrapy_redi...

1820
来自专栏phodal

RePractise: 从真实世界到前后端的设计

RePractise终于又迎来了新的一篇,要知道上一篇可是在半年前呢——《Repractise前端篇: 前端演进史》。照RePractise惯例,这又是一篇超长...

1807
来自专栏腾讯云技术沙龙

杨春文:小程序在直播产品中的技术应用

我是腾讯的杨春文,老东家在百度,目前在深圳腾讯,做的主要产品是web相关。我本身做NOW直播,所以会讲基于腾讯云的直播小程序,然后是小程序终端开发,总结一些经验...

81913
来自专栏非著名程序员

程序员在代码审查时,遇到这样的领导是好是坏?

今天在浏览网站的时候,看到别人发的这么一个帖子,刚刚入职一个新公司,代码审查的时候,leader 对他的代码进行了一些修改,而这个程序员感觉很多地方没有必要,你...

924
来自专栏服务端思维

非功能性需求,不要成为项目的坑

顾名思义,用户在使用过程中易理解,易操作等。页面描述要清晰,最高境界就是“零手册”,不能让用户理解有歧义,此外,一致性也是很重要的,比如输入内容校验规则,页面展...

873
来自专栏大数据挖掘DT机器学习

Python实现抓取城市的PM2.5浓度和排名

本文给大家介绍的是一则使用Python实现抓取城市的PM2.5数据和排名, 主机环境:(Python2.7.9 / Win8_64 / bs4) 利用Beaut...

28311
来自专栏Java架构师进阶

如何成为高级java程序员

给一个刚出社会的程序员新生一个建议,想成为一个优秀的程序员,高级程序员,不能眼高手低,不能认为开发新项目,技术研发才学到东西,不能看不起维护系统,不要以为自己懂...

612
来自专栏程序你好

程序的腐化原因及建议

773

扫码关注云+社区