|
|
![]() |
![]() |
尚学堂首页—新闻公告—常见问题 |
程序员如何去快速定位bug |
www.xasxt.com 发布人:java | 来自:本站 | 发布时间:2019-05-25 17:42:00 | 点击次数:1599 |
![]() |
找 bug(如 Testing)与去 bug(Debugging),这在软件工程里是两个截然不同的任务。发现 bugs,测试并非唯一手段,其他还有 Code Review、Inspection 等等。 找 bugs 通常有几个相对快速的办法。 比如,为 code base 编写/添加更多的自动单元测试,这是一种白盒测试。你 Mentor 让你“先从找 code base 中 bug 开始”,除了让新手阅读、熟悉老代码外,大概也有这层意思。
找到 bugs 后,怎么快速、高效地掐虫(Debugging)就是另一码事了。 Debug 对于新手来说普遍是一大弱项,在这上面常常要耗去大量的调试时间。什么原因?这主要是因为新手编码、读码的量都很少,而且都没经过什么系统性的训练,逻辑推理思维很弱,最关键一点是 —— 你们在大脑里的思考,对于真实的软件结构、软件模型(尤其运行态模型)的理解是混乱的,所以往往很难像经验丰富的老手那样迅速、准确地定位 bug 所在。
0.优先解决那些可重现的
优先解决那些可重现的,可重现的bug特别好找,反复调试测试就好了,先把好解决的干掉,这样最节约时间。
1.抱同事的大腿
对于某些bug没有头绪或者现象古怪不知道从哪里下手,找有经验的同事问一下思路,因为在那种开发多年的大型系统里,经常会反复出现同样原因的bug,原因都类似,改了一处,过一阵子另外一处又冒出来,而且无法根治。
2. 放大现象
有些bug现象不太明显,那么就想办法增大它的破坏性,把现象放大。这只是个思路,具体怎么放大只能根据具体的代码来定。 3. 二分法定位
把程序逻辑一点点注释掉,看看还会不会出问题,类似二分查找的方法,逐步缩小问题范围。
4. 模拟现场
有时候我会问自己,如果我要实现bug描述的现象我要怎么写代码才行?
5. 制作工具
针对某些bug编写一些调试辅助工具。
6. 掩盖问题
虽然这样做有点不厚道,但是有时不得不这么做。有些bug找不到真正的root cause,但是又要在规定时间内解决,那么我们就可以治疗症状而不去找病因。比如用try catch掩盖一些奇怪的崩溃。不到万不得已不要这么干,未来可能会付出更大代价。
结语 debug的经验本身就需要慢慢积累,所以新手要脚踏实地端正态度,及时发现问题并虚心接受和改进,达到目标并非遥不可及。因为写程序可能靠天赋,debug不仅能让你锻炼细心和耐心,还能让你了解开发中出现的各种问题,甚至在与开发人员的沟通中慢慢积累解决方式,这对于你以后写代码是非常大的帮助!
最后再提醒大家一句:预防,比debug更重要。 |
|
官方微信
手机站