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

依然记得上一节编程课的时候,老师说过一句让我一直到现在都还记得的话“只要是软件,就一定有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 条评论
登录 后参与评论

相关文章

来自专栏marsggbo

DeepLearning.ai学习笔记(一)神经网络和深度学习--Week3浅层神经网络

介绍 DeepLearning课程总共五大章节,该系列笔记将按照课程安排进行记录。 另外第一章的前两周的课程在之前的Andrew Ng机器学习课程笔记(博...

2009
来自专栏量子位

探索LSTM:基本概念到内部结构

安妮 若朴 编译整理 量子位 出品 | 公众号 QbitAI 作者简介:Edwin Chen,在MIT研究数学/语言学,在微软研究院研究语音识别,在Clariu...

3384
来自专栏程序生活

CS224n 笔记2-词向量表示:Word2vec1. 单词含义的表示2. Word2Vec的主要思路3. 更多Word2Vec细节4 .梯度的推导5. 损失/目标函数相关推荐阅读

1. 单词含义的表示 我们如何表示一个单词的意思 下面是意思的定义: 用词语,语句表示的想法或观点 人们使用词汇,符号来表达的想法 在一篇文章和艺术品表达的观点...

3898
来自专栏人工智能LeadAI

TensorFlow从0到1丨第4篇:第一个机器学习问题

上一篇机器人类学习的启示借鉴人类学习的模式,描绘了数据驱动的机器学习方法论:通过大量数据来确定模型,从而让模型具有预测价值。本篇提出第一个机器学习问题,进一步看...

3837
来自专栏人工智能

如何使用Python基线预测进行时间序列预测

建立基线对于任何时间序列预测问题都是至关重要的。

49310
来自专栏AI科技评论

独家 | 光流与行为识别的结合研究

AI 科技评论按:本文为上海交通大学林天威为 AI 科技评论撰写的独家稿件,未经许可不得转载。 在视频行为识别(action recognition)方向,目前...

4087
来自专栏大数据文摘

识辨 | 什么是分类?什么是聚类?

1374
来自专栏大数据文摘

暑期追剧学AI (4) | 人工智能关键概念“神经网络”是什么?不信看完这个视频你还不懂!

1676
来自专栏算法channel

机器学习期望最大算法:实例解析

交流思想,注重分析,更注重通过实例让您通俗易懂。包含但不限于:经典算法,机器学习,深度学习,LeetCode 题解,Kaggle 实战。期待您的到来! 01 —...

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

分类-回归树模型(CART)在R语言中的实现

CART模型 ,即Classification And Regression Trees。它和一般回归分析类似,是用来对变量进行解释和预测的工具,也是数据挖掘中...

4194

扫描关注云+社区