导航:首页 > 程序命令 > 程序员最难调的bug

程序员最难调的bug

发布时间:2022-11-26 04:20:32

1. 你们工作中遇到过什么诡异的bug,最后怎么解决的

这让我想起了自己曾经做程序员的苦逼日子,那一次遇见的BUG超级头疼。让我现在都记忆犹新。从发现bug到最终解决耗时一个月,当时项目已经马上要发版本,所以期间每天搞到12点。累计投入1个专职测试,最高峰时期有一个10人的攻关小组,这很菊花厂,其中一半以上的都是seniordeveloper,一个价值上百万的bug。调试的难度可以说是灾难级的,让我来回忆一下自己的经历吧。

总之,遇见问题一定要冷静,仔细分析,询问老前辈。最后祝愿你能解决每一个难题!

2. 程序员遇到百度不出来的bug都是怎么解决的

笔者不同意下面网友的回答。程序员如果解决bug的水平停留在网络,那么本质上只是一个“面向搜索引擎的代码搬运工”,是不合格的程序员。

程序员对面bug,正确的“打开方式”是像福尔摩斯和柯南那样,寻找线索、运用逻辑推理来缩小问题可能的根因范围,最终精准定位。

常用的方法有:

1. 坏境上下文变换法

2. 工具调试法

3. 版本回溯对比法

4. 代码审计法

……

没有编程问题是stack overflow和Google解决不了的,假设你在编程中遇到了问题,你自己解决不了、你周围的的人都解决不了的时候,我觉得stack overflow、Google是你最好、也是最后的帮手。

作为一个程序员,我觉得Google、stack overflow是你必须要学会使用的两个工具,这两个工具本身并没有使用门槛,只不过因为一些众所周知的原因,很多人不能使用Google和stack overflow这两款工具。

Google主要还是方便,而且很多编程问题都需要用到英文搜索,当然现在网络在专业能力上也提升明显,不过跟Google也还是有比较大的差距,因此我还是强烈建议要学会使用Google,这会帮你在工作、学习上事半功倍。假设Google确实因为某些原因没办法很好的使用,我也建议你至少要会使用Bing搜索。

现在可以说stack overflow上没有你找不到的问题了,从IDE环境安装问题,到各类编程语言问题。算法问题,数据结构问题,调试,重构等等,几乎这里就没有你找不到的答案,可以说在stack overflow上你可以找到任何解决方案,并且上面的回答者基本上都是非常有经验,而且都是实际中遇到的问题分享出来的,这个工具一定要会使用。同理,除了stack overflow这个专业的垂直程序员问答社区,你也可以使用Quora这个综合问答社区,这上面也能找到很多问题的答案。

一些比较优秀的文本编辑器: Emacs/Vim,Visual Studio Code,Sublime Text,Atom,Ultraedit,Hbuilder等。

一些比较非常出色的IDE集成开发环境: visual studio,IntelliJ IDEA,PhpStorm,Haskell for Mac ,eclipse,WebStorm,GoLand,CLion,Android Studio,Xcode,QT等。

macOS平台比较好的第三方包管理工具: Fink,Macports,Homebrew等。

一些比较好的终端工具: Zoc7,iTerm2,Cmder,terminus,hyper等。

一些比较好的笔记软件、markdown工具、效率工具: Evernote,有道云笔记,为知笔记,Ulysses,MWeb,FileZilla,Snipaste,Kantu等。

虚拟机软件、容器软件: Parallels Desktop,VMWare Fusion,Virtual Box,Docker等。

我是个程序员,职务是linux底层驱动工程师。平时的主要工作是调试驱动,但产品遇到诸如死机、重启、不开机之类的问题时,也要参与查找原因。一部分问题,确实可以查看相关的log,然后网络这些log的关键字来解决;但更多的问题,牵扯的条件太多,并不是简单的网络就能解决的。

观察了周围同事们的做法,我总结出以下几种解决方法:

网络因为竞价排名的原因,搜索出来的结果有很多广告的成分,所以有时候要翻好几页才能看到一条相关的答案,有些甚至要翻几十页。

因为网络搜索使用的是SEO技术,即普通用户可以通过优化网站内容来提升关键词排名。

而这就会导致一个问题:你搜索关键词后展现出来的结果是有人想要让你看到的,并不是质量最好的。

也就是说,网络搜索结果被人为干预了。所以网络一直被网民所诟病。

但网络搜索不出结果,未必是网络的原因,也有可能是自己输入的搜索词不准确造成的。所以对于网络,我们要做到如下几点:

除此之外,网络搜索还有点小技巧,粥左罗《万字干货,彻底讲透搜索技巧,10倍提升你的搜索力(免费教程)》这篇文章写得非常好,我整理几点,仅供参考:

01 过滤目标内容

命令:“+”“-”

用法:通过“+”和“-”来对搜索结果进行过滤

比如在关键词后加上“-推广 -推广链接”就可以排除搜索结果中包含相应字样的链接。如果你发现广告还没有排除干净,你也可以再加上“-广告”通常就能彻底的消灭广告。

02 搜索包含某关键词的内容

命令:“intitle”

用法:通过“intitle”命令指定搜索结果中要包含的关键词,注意“intitle”后边连接的冒号是英文状态下的。

03 搜索某一个格式的文件

命令:“filetype”

用法:通过“filetype”命令可以限制我们要搜索文件的类型,注意“filetype”后边接的冒号也是英文状态下的。

04 搜索特定时间范围的内容

命令:“时间..时间”

用法:通过“时间..时间”命令可以限制我们要搜索的文件的时间,注意两个时间的中间顿号没有空格。

相对网络,谷歌、必应对于技术搜索,就相对准确许多,所以当你网络搜索不到时,尝试下别的搜索引擎,说不定会有新发现。

现在程序员使用的机器语言,都是国外的,更准确的说,都是美国的。所以很多论坛、资料等,都是英文。如果你只会用中文来搜索,某些小众的问题,当然搜不到啦。

所以,要学会使用英文关键字来搜索。

有时候甚至要去国外的一些论坛来搜索想要的答案,这就要求要有一定的英语阅读能力,不能一看到英文帖就放弃。

有时候不管你如何搜索,都找不到自己想要的答案,该怎么办呢?这种情况下,就只能硬着头皮尝试自己解决了。

或者,寻求同事或朋友的帮助,寻求大脑风暴,说不定就会有思路。

如果有些问题是因为新器件带来的,还可以找到器件供应商,让他们安排技术支持帮忙查找原因。

除此之外,还可以把问题整理好,写清发生的条件、复现步骤、测试方法、相关的LOG截图等资料,去一些技术论坛发求助帖,寻找大牛的帮助。

做技术时间久了,发现有些问题确实无解,根本没有办法去解决它。

这时候,我一般会尝试把它绕过,就是说,想办法让它无法复现,虽然问题还是存在,但是能把它掩盖过去。

比如有些驱动在开机启动时会加载不正常,那么就让它晚点启动,或者手动加载。这也不失为一种解决问题的方法。

以上就是我的建立,希望对你有帮助。

首先作为一个程序员,一个优秀的程序员最最最重要的能力就是解决问题的能力。这里解决问题的能力当然就包含了解决 bug 能力了

毕竟,程序员这一生,可能会写无数个 bug ,没有说哪个程序员敢保证自己写的程序没有 bug 。 所以,写了 bug ,遇到 bug 并不可怕,可怕的是你没有解决 bug 的能力 。

作为一个程序员,解决 bug 的途径有哪些呢?我们来一起聊一聊!

其实,每个程序员在学习编程的时候,都会使用编程工具,而现在的开发工具,其实功能都很强大。如果你自己合理利用编程工具,都了解和懂得开发工具的一些技巧,其实不仅仅能够提高开发效率,而且还能够帮助你解决很多编程中的实际问题。

debug 调试,大部分你常用的开发工具,都会有调试模式的,简而言之,就是你编程的时候,遇到了不是自己所想的结果的时候,你可以使用 debug 模式,来一步一步的调试,在调试模式下一般每一步都会显示所执行的结果,你可以看看在哪一步出错了,执行的结果与你预想的结果不对,那么你就能够找到问题所在了。

还有就是,开发工具的控制台,都会提示出报错信息的,现在的开发工具,都会直接告诉你哪一行,报了什么错。其实,很容易定位到错误的。你只需要在编程的过程中积累经验,知道报什么错,用什么方法来解决就行啦。

可是,提示的报错信息,我不知道用什么方法来解决的时候,该怎么办呢?这就是你需要积累的,也是问题中所描述的,就是通过搜索引擎来找答案。

不对,这里不应该是合理使用搜索引擎,应该是学会正确使用搜索引擎。比如:网络,你就不要用了,搜出一堆重复的信息,而且广告也多。作为程序员,建议你使用谷歌搜索。

其实,你在编程中所遇到的几乎所有的问题和 bug ,别人也同样遇到过,因为不管是经验丰富的老程序员,他技术再牛逼,也是初学者过来的,也都踩过你踩的坑。所以,互联网是个好地方,里面包含了你想要的问题的答案。

你只要把报错信息往搜索引擎上一放,回车一下,很多关于这个 bug 的答案就出来很多,你只需要找到跟你一样的 bug ,就能找到答案了。

在这里必须提一下这个网站,所有的程序员有必要学会使用这个网站,其实,你编程中所遇到的问题,这个网站上几乎都是由解答的。

Stack Overflow 可以说是最好的软件程序类问答网站了,给软件开发人员工作和学习提供了非常大的便利,以至于像小白,离了 Stack Overflow 简直都不会写程序了。

所以,建议大家一定要学会使用这个网站,对你编程肯定会有非常大的帮助的。

通过上面的方法,几乎应该能够解决到你所遇到的问题,但是,实在找不到答案的话,你可以问经验比你丰富的老程序员,实在解决不了,那就换种方法吧!

网络,谷歌,debug,断点调试,业务上的bug就需要问下同事或者产品。如果能知道大致范围,哪一部分错了,就换一种方法呗,一般都不会只有一种方法。

1.reload

2.restart

3.rewrite and then goto 2 or 4

4.reboot

5.rm -rf /

6.原谅我编不下去了[捂脸][捂脸][捂脸][捂脸][捂脸][捂脸][捂脸]

找bug跟医生看病的思路是一样的,要对症下药。得先把问题的根源找到,找到根源以后问题就容易处理了。搜索引擎找不到的问题,说明这个问题不是一个常见的问题,具有独特性,那么从bug出现的路径上一步一步去排查。必要时可以用排除法,尽可能的缩小排查范围。另外,当软件的业务逻辑比较繁多复杂的时候,一个结构清晰的架构能为你节省不少找bug的时间。还有,充分的单元测试能够帮你减少出bug的机会。以上均为个人看法,欢迎讨论!

一般程序员能碰到的bug无外乎其他上游程序员写库时手抖留下些不匹配或者容易溢出的问题,搜一下差不多能解决问题。如果是自己写的,那无非就是时序错误类型错误之类的,用break point一行行的调就好了。

再复杂点的bug就是程序员拿高薪的根本了,只可意会,不可言传~

仅仅靠搜索引擎、其他网站那必然无法解决大量问题,因为很多问题是跟业务逻辑相关的,是没有直接答案的。比如 游戏 开发有个界面一直无法显示,这个问题就不是网络可以解决的。问题需要调试分析,这和破案非常像,但在开发过程中更有利的是问题有机会可以重现。破案是逆向工程,需要反推。解决代码问题不仅仅可以反推,也可以通过阅读代码正向分析。下面说说如何debug一个业务逻辑问题。回到刚刚的例子,有个界面一直出不来,我们如何快速去定位:

1.思考这个问题发生的可能性。比如 游戏 内大量界面都是正常的,那么可以对比正常界面代码和异常界面代码的区别,这是对比法。

2.假设创建正常界面和这个异常界面的逻辑代码是一样的,那么问题就落到了这两个界面内部,继续在内部重复上面的对比法进行判断,直到锁定最终位置。

上面说的方法基本上可以杜绝卡在一个简单问题上,这是摆脱新手的一个过程。选择使用对比法或者其他方法的前提都是基于观察和对项目的认识,所以,搜集“案发现场”是最关键的。

其他的问题,不属于逻辑的,像其他网友说的那样,有些通过到github、stackoverflow等地方解决的。这些问题也不是直接就去查找的,它通常也有个分析过程。比如你使用了一个库,但是目前它不支持你的模块。对于新手,就是直接网络或者google了。实际上这样的问题也是有“案发现场”的。对于作者提供的api接口的统一性和便捷程度去推断作者在相关支持模块的位置以及命名以及拓展,再尝试在文件夹中搜索。如果都找不到,再去Google上获取更多的信息。重复推断、分析,决定如何拓展或者绕过。

综合上面的几种问题,可以看到的是都离不开对现场的观察和推理分析。这种能力也被称为经验。但是一般情况下你看不到它们这个分析过程,你能做的就是在实际环境中反复逼迫自己去思考,去训练。这个推理的培养,不仅仅是对事情,也是对人。

我在入行 游戏 开发的前期,也是类似的情况。卡在不同种类的问题上,有些在简单逻辑,有些在别人的代码支持上。后面解决的问题多了,就会发现里面共通的思维方式。常用的一些方法如下:

1.对比法,比较正常与异常代码区别

2.二分查找法。分段注释找问题,也会用在很多方面。比如最近版本突然出了一个奇怪bug,可以通过svn还原来定位。这个还原不是一个一个版本还原,而是用二分法去还原。

3.增加信息。在怀疑的位置或者过程添加日志或者打断点辅助自己更好的推理。

4.相似推理。比如一个引擎在api、性能使用程度上都非常友好,那么它在别的地方也有可能相对表现比较好。这时候如果有个功能我们的实现需要很复杂才能完成,那么就有可能是我们用错了。相似推理不一定都能正确,但会提供一些帮助。

以上。

3. 各位程序员都有过哪些令人哭笑不得的改bug经历

其实程序员确实也遇到过很多的这个因素,比如说他们要把一些软件改的好用一点,要不然时间长了人多了以后就出现卡顿,不改的话就会让这个用户流失,所以说这些bug我觉得挺有趣的

4. 互联网前辈总是说“bug是改不完的”,新入职的程序员该怎样应对bug

互联网前辈总是说“bug是改不完的”,新入职的程序员应对bug:

5. 为什么总有无数的Bug困扰着程序员 – 码农网

下面就是为什么我们的软件之所以依然充满漏洞的5大原因:
1.人的天性
大多数——当然不是全部——软件bug源于我们自己犯的错误。虽然有些是因为软件编码工具和编译器发生了意外,但是大部分的错误得归咎于我们自己。
无论我们受到的SDL培训和安全工具有多么强大,只要我们还是人,我们就会犯错。如果你想问为什么电脑软件会有这么多的漏洞,归根到底是因为,人的天性就是容易犯错。
也就是说,我们在减少人为错误方面做得还不够。有很多程序员因为没有受到足够的SDL培训(有的甚至干脆就没有培训),所以根本就没有安全编程的理念。有时候我特别奇怪:有那么多的程序员以写安全软件为生,却居然不懂如何安全地编程。别不信,我敢打赌,你正在运行的银行安全软件中的bug不会比它能提供的保护措施少,搞不好甚至更多。
但是即使是那些经过严格训练的程序员还是不可避免出现bug。举个例子,前不久有个自鸣得意的家伙发明的使用HTML标记字段确定颜色的缓冲区在浏览器中溢出了。不像以前还要输入FFFFFh之类的东西,黑客甚至可以直接执行颜色域的代码,从而导致浏览器过度消耗资源、缓冲区溢出。看到没有,这就是漏洞!而且很少会有人能预料到这种情况。
2.不断增加的软件复杂性
就其本质而言,软件越复杂,就意味着代码行数越多。只要你在编程,那么即使你有多擅长写代码,也一定会有错误和bug出现。有人曾说,如果你能做到每50行代码中只出现一个错误,那你就已经做得相当好了。大多数程序员差不多每隔5至15行就会犯错。想象一下,这么说吧,一般性的Linux内核拥有超过1500万行的代码,有多少bug你自己算吧!
即使没有编码错误,互联网时代应用程序的整体互动性也是漏洞被攻击的途径。大多数程序员不得不和其他API协作,保存和检索文件,在多种设备上正常工作。所有这些过程都会增加被成功击破的概率。
而要防守的话,则需要写更多的代码,因为得抵御各种不同的攻击渠道。这么说吧,如果有一个只有30条汇编语言指令的恶意程序,那么针对相应的防守,你可能至少得写50000条汇编语言指令!
3.Fuzzers也是人写出来的
新近冒出来的Fuzzers软件主要用于扫描软件漏洞。Fuzzers——以及其他用于寻找编码错误和漏洞的任何程序——都是人写出来的,还是这句话,是人就会犯错误。例如Fuzzers是不会发现颜色属性的缓冲区溢出这种情况的,这是因为我们在写Fuzzers的时候没有考虑这一方面。不过当我们意识到这一点并对Fuzzers进行更新之后,就能做到去查找各种类似的缓冲区溢出条件的字段。简而言之,我们要Fuzzers做什么,它才会去做什么。
4.缺乏对供应商的问责
许多安全专家抱怨,只要我们不能找到证据起诉供应商的软件缺陷,我们就永远不会变得更安全。我赞同这一点,增加对供应商的问责有助于降低安全风险,但是同时却有可能会减缓进度。不过如果软件公司比现在更能担当起责任来,那么我想我们能在手机上、电脑上能自由自在冲浪的感觉会更爽。
但是成功源于功能和速度,而非安全。社会现状决定了我们必须牺牲一部分安全和保障去换取新鲜感。这不一定是坏事——因为能让我们成功得更快。但是这样一来我们就不得不承担这样做的后果。不过到目前为止,我们还是心甘情愿为了添加更酷的新鲜玩意儿而面对更多的风险。

5.缺乏对黑客的问责
现实是上面没有一条能很快解决。但是软件出现漏洞就其本身而言,真不是什么大问题。说它脆弱是因为这些软件在面对恶意攻击的时候毫无抵挡之力。除非我们能制止黑客的猖獗行径,否则恶意软件将会一直困扰着我们。
但是我依然深信,将来有一天我们的互联网会有更好的普遍标准出台,我们能在现实中及时地将那些损害大家利益的家伙绳之以法。不过在此之前,我们还是得不断地写补丁,在黑客的狂轰滥炸下苟延残喘。

6. 程序员改bug 问题是怎么改好的

其实程序员改bug也是有学问的。程序员改bug跟医生治病是一样一样的,无非一个是给机器看病,一个是给人看病。首先,一定要准确的定位引起bug的真正原因。定位问题,需要程序员去读代码,了解流程,弄明白来龙去脉。其次,定位bug源头之后,就需要去分析解决问题的方法。分析问题,需要综合相关知识,熟悉它所用到的一些机制,找到最佳解决方案。拿Android来说吧,比如修改wifi的bug,就需要弄清楚wifi的流程,stateMachine机制,消息机制,当然最基本的四大组建及其机制是必不可少的,哪里都有用到。然后,才是去coding。当然coding,也应该注意一些问题,比如,风格尽量和源码保持一致。Google那批程序员功底还是可以的。注释一定要清晰,包括作者,改动时间,以及原因。最后,要强调一点,改bug一定要彻底。不能改一个bug一起另外一个或者一堆bug。一定要避免这样的情况发生。我们公司就一个刚毕业没多久的程序员,改bug不彻底,只改了界面显示,弄的实际功能废掉。对于这样的代码,我只想说两个字:垃圾。另外,改bug要和相关模块的工程师讨论,因为他们或许就是这方面的专家,这样才能写出优秀的代码。

有的人改bug改了几个月,就会分开发的任务,或者层次更深一点的任务。有的人从进公司就一直改bug。不能否认公司方面有一定问题。但程序员也应该从自身方面找找问题。你写的代码是最高效的吗?你写的代码让别人很容易看懂吗?你写的bug让别人呲之以鼻还是赞叹不已?如果你做的不够好,就不要整天抱怨:“又让老子改bug,老子从进公司到现在都一直在改bug!”

7. 面试中被问到你遇到的java编程中的bug你如何解决的

首先,要认识 bug。
如果一个程序做了它不应该做的事,或者没有做它应该做的事,那就是 bug。bug 很难避免,尤其在规模化的编程过程中。
我们知道从面向过程的角度来说,一个程序是由数据结构和算法构成的,从面向对象的角度来说,程序可以是由类和对象组成的。因此 bug 我这里分成两类:

在一个 Java 程序中,类和对象的关系可能会造成 bug。这是设计时的问题,例如多实例的同步问题、线程冲突和死锁问题,这是常见的两个潜在的 bug。要尽量避免这类 bug,只能在设计时下功夫。思路一定要清晰,一定要清楚每个类要做些什么,什么时候该做些什么。这类 bug 比较容易发现,但是不易修补,因为牵扯到程序的不同部分,有时候相当麻烦,因此最好一开始就不要让它出现。

然后一些细节上的 bug,属于逻辑漏洞,可能是算法上的漏洞。Java 其实这方面要比 C/C++ 安全,因为后者的某些漏洞是致命的,例如内存泄露、指针冲突、野指针等一系列问题,可能直接导致程序崩溃,但是 Java 绝对不会出现指针问题,内存相对安全。但是 Java 也可能导致内存不断消耗,最终崩溃的情况也是有的。这个问题我也碰到过几次了,如何解决?需要你对你大量使用的类非常熟悉,最好事先仔细看看文档,有的类需要你最后 dispose 的,有的类 add 过后需要 remove 的,有的类的某些方法会间接地创造一些对象。这种 bug 不大容易发现,尤其是我们有时候对 JVM 的绝对信任而忽略了这些细节,甚至造成了不好的习惯。要么不碍事,要么很严重,一但出现问题可能会发现同样的问题几乎出现在所有的地方。所以避免这类 bug 只有谨慎,并且要养长良好的习惯。
顺便说一句,Java 内存溢出后程序就直接退出,可能会导致数据丢失之类的,这个责任担当不起的。
然后逻辑漏洞还没讲完,还有一些和内存无关,但是也是逻辑上的疏忽造成的,例如数组越界、空栈、格式不兼容等等。这些相当难发现,有时候是正常的,有时候就报错了。这个可以说是最普遍的漏洞,也是最难发现的漏洞。这类漏洞要看程序员的水平,经验丰富、思维清晰、反应敏捷、习惯良好的程序员会好一点,但是不是所有的程序员都是这样的,再说人无完人,再怎么水平高也难免犯点小错嘛。这种漏洞基本都是在后期测试(传说中的内测)和已发布的测试版中逐渐被发现。为了尽量早发现,内部的测试要做的好,不过首先负责各个部分的程序员之间要定下默契,程序要符合规范,类和方法尽量简单化,不要一个方法出现 4 个以上的参数,因为那样会巨大的增加测试的麻烦。要写好注释,变量名写完整,等等规范就不一一列举了。然后对测试人员的要求也是比较高的,测试人员必须熟练掌握测试技巧,有的团队这些小 bug 的修复也是测试人员做的,那测试人员也要良好掌握调试技巧,团队内人员要保持良好的沟通。

8. 程序员必看:哪种编程语言最容易出bug

函数式语言优于过程语言,不允许隐式类型转换要比允许更好;静态类型优于动态类型。而且,管理内存使用比未管理好。此外,一般而言,语言的缺陷倾向与软件领域没有关联。此外,与总体bug相比,语言更与单个的bug类别相关。

9. 我是it程序员,刚进公司让我调试bug但是总是调不好很是郁闷,我该怎么办是不是有很多人都有这样的困惑

一般代码不是很多,可以一步一步跟踪,这样在找Bug的过程也学习到人家撰写的编码的知识;如果很长又没耐心去看,你就根据报异常的信息去瞭解,哪裏有错了,打个断点,F5调到那个断点,如果能跑到那个断点,就说明前面没问题,如果没跑到那个断点,就说明前面有异常,要在重新调整。其实就是要会拆分找问题。
做IT,没熬得住寂寞,谨慎仔细,品质如何保证呢。

10. 程序员遇到解决不了的bug怎么办

但大部分程序员都有一个问题就是不太愿意测试自己的代码。他们草草的调式完成以后就认为工作结束,测试那是测试人员的工作。
1. 影响了程序员自己的声誉
2. 影响了产品的质量
3. 影响了客户的信任度
4. 这个时候再 DEBUG 难度增大了许多。
大的不说,就说多自己声誉的影响吧。如果你的程序总会有这样那样的 BUG ,你得到收益会减少,即使你写了很多代码。
程序员必须克服一些自身的致命缺点才能够从根本上解决这个问题。那么这个问题是什么?前面我们已经提到,程序员对自己的代码都非常宽容,认为那是正确的没有问题。实际上这种想法比较正常,程序是通过程序员思考和设计之后才写出来,程序员不会将自己认为不正确的东西写到代码里,而到这个时候都一直假设程序是正确的;但人非圣贤,怎么可能不犯错误来。实际上程序员在对待其他程序员时候的态度就很好,带着一种挑剔和学习的态度;但一旦对待自己的代码就很难这么做;这就是最致命的。程序员也必须对自己的代码带着挑剔和学习的态度;这个基础是假设自己的代码是错误的,然后需要做的是怎么样证明自己的代码是正确的。程序员自身可以在程序生成的每个阶段做这些工作:仔细的设计(这个时候画点时间是值得的,必须保证我们对自己的程序有清晰的轮廓后才能开始动手写)、编写代码时、单元测试(单元测试的重要性就不在赘婿了)、功能测试。
仔细的设计:这个的仔细是说在程序员编写代码之前,其必须对代码的整个结构以及逻辑结构有明确的清晰的了解,只有这个时候才可以去写代码。这里没有谈到文档,但我说到了一定要清晰的思路,但清晰的思路不是每个人都可以在脑袋中直接形成的,很多人都是普通人,没有办法在脑袋瓜中把所有问题都想清楚,那么就记下来,特别对于复杂的逻辑。
编写代码:对于没有把握的代码,例如:新设计的算法,最好保证其正确性。可以单独将这部分测试,这可以让代码模块化的同时又保证了代码的正确性。一句话:少量的代码保证质量还是比较简单的。
单元测试:单元测试的重要性不在赘叙了,现在也有许多工具可以帮助程序员并减少工作量。
功能测试:程序员保证自己代码质量的最后一关;为了做这样的工作我们可能必须写一些代码来测试,甚至是测试工作。使用大量的 CASE 来测试,以及错误的 CASE 。这里和测试人员的测试不同之处在于:仍然让程序员的注意力放在其自己的代码范围内,减小了排错的难度。
如果你通过了以上的步骤都找不出你程序中有任何问题的话,那么我想你的程序应该足够健壮了。其实还有一点必须说明的就是:代码 REVIEW 。
前面说道了程序员对待别人代码的态度是挑剔和学习的态度,所以让其他程序员来 REVIEW 你的代码也是检查程序有没有逻辑错误的很好的办法。团队中应该交叉 REVIEW 代码,这是实践的经验。
作为一个好的程序员必须有以上的习惯,以及对待自己代码象孩子一样,我们要爱惜我们的代码,同时也要让代码走正确的路。

阅读全文

与程序员最难调的bug相关的资料

热点内容
特斯拉app超级充电桩如何使用 浏览:422
男人怀孕电影袋鼠男人 浏览:507
如何删去应用加密 浏览:468
服从命令听指挥陌千依小说 浏览:761
《赤足惊魂》电影介绍 浏览:359
ic卡内数据如何传到服务器 浏览:21
安卓系统如何更改托盘 浏览:403
许志安演的电影有哪些 浏览:824
odbc文件夹是什么 浏览:391
男主用铁链囚禁女主的小说 浏览:914
sift算法harris算法 浏览:241
python命令行模式 浏览:459
新妈妈韩国电影中的辅导老师是谁 浏览:389
php邮箱验证代码 浏览:404
光猫伪装命令 浏览:175
安卓高端机为什么都用曲屏 浏览:419
老电影大全 战争片 浏览:971
有没有小电影得网址网站 浏览:378
奥特曼电影排行榜前十名 浏览:580
安卓光遇账号过期怎么找回 浏览:476