百科问答小站 logo
百科问答小站 font logo



程序员的bug解决不了怎么办? 第1页

  

user avatar   lokinko 网友的相关建议: 
      

改bug的勇士终将成为写bug的恶龙。

代码屎山的出现,没有一个程序员是无辜的。





年轻人,请学会在bug里躺平~


user avatar   qiongmanong 网友的相关建议: 
      

不是程序员的bug!程序员并不own bug!你写的任何一行程序都属于公司,包括bug!

代码check in之后,出现bug或是新添加的features都会先定优先级的,不是每个bug都会受到平等对待的,先修的肯定说百万级的bug,而且一般都会assign出来,谁负责去修。

然后修bug的过程,那估计能修的bug千篇一律,不能修的bug各有各的奇特之处。修bug估计还得写design doc,然后大家审阅一下才具体开工。

据说修bug就是shi山,尤其是祖传代码,修一个bug,就修漏另外几十个。明知有bug却不能改代码才是最骚的。





user avatar   huangzhe 网友的相关建议: 
      

bug无穷无尽?你的职业生涯也是无穷无尽呢。你的职业生涯多长,你面对bug的时间就多长。除非你不再写代码,不然你还是得debug。所以先放下心理压力,听听我这个码农的一些经验。我做过之前游戏开发,现在做数据挖掘,开发的领域多了,什么奇怪的bug都见过了。

解决bug这个事情无法逃避。bug解决不了时,不妨试试下面几个方法:

个人解决bug的经验

下面是我个人调试的经验,纯记忆,未能列举所有方法,欢迎补充:

  • 复现bug。如果bug很好复现,那就很容易定位。如果bug是概率性出现的,可以考虑是有以下情况:
    • - 内存越界。
    • - 磁盘物理故障。我之前看到知乎上有人遇到一个离谱的bug:当播放青藏高原时,电脑死机,原来是声音频率使得磁盘产生共振。
    • - 是否有多线程访问写入同一变量未加锁。
  • 二分定位法。在程序关键点进行分割,看看还会不会出问题,类似二分查找,逐步缩小问题范围。
  • print大法好。在每一个可能的节点打印数据/变量
  • 使用更好的IDE,然后断点调试。
  • stackoverflow大法。有的bug你觉得搞不懂,其实stackoverflow上可能已经有人解答过了,去看看把。
  • 和API开发者沟通。如果你用的框架是架构师开发的,可以和架构师沟通。我之前当过游戏主程,我写了很多底层框架来降低我们组里其他人的开发难度,方便其更轻松加载资源/发送网络数据等等,但我也跟他们说过,如果你用的时候遇到什么问题,记得告诉我,不一定是你的代码问题,也很可能是我框架写得不够好。
  • 敢于质疑开源框架的bug。如果你用的是开源框架,那么有可能是框架里的问题。不要认为流行开源框架就没bug,你去看看各种开源框架,看看提交了多少issue。比如TensorFlow框架,issue就有3800个。当然并非所有issue都是bug,但TensorFlow确实爆出过bug,搜搜”Keras的Functional API创建的权重可能会丢失“就能看到相关新闻了。

如果说你想更深入的研究怎么调试,解决bug,或者就要一本手册放在桌边激发灵感,那么这本书可以试试。这本书主要讲的是Linux内核调试,但你可以看看目录,看看有没讲到自己开发的领域的:

小黄鸭调试法

就是在程序的调试或测试过程中,操作人耐心地向小黄鸭解释每一行程序的作用,以此来激发灵感与发现矛盾。什么是小黄鸭?

没错,就是这玩意。当然,你不一定用小黄鸭,你可以用任何你觉得可爱的小公仔,甚至对空气解释都行。


结对编程

结对编程是一种敏捷软件开发的方法,两个程序员在一个计算机上共同工作。 一个人输入代码,而另一个人审查他输入的每一行代码。你找 同级/上级/下级 都行,如果你觉得对方能帮到你,就让ta过来帮帮你。

也不用这么哲♂学的方式的。就正经的坐在工位上,让同事辅助一下你,或者让同事来写,你来解释。


预防

防范于未然永远都是上策。这里引入一个概念,叫做技术债务。

技术负债(英语:Technical debt),又译技术债,也称为设计负债(design debt)、代码负债(code debt),是程序设计及软件工程中的一个比喻。指开发人员为了加速软件开发,在应该采用最佳方案时进行了妥协,改用了短期内能加速软件开发的方案,从而在未来给自己带来的额外开发负担。

当然,bug这东西是不可能灭绝的。当通过按照代码规范编码,做做单元测试等方式,来减少bug,以及降低查bug难度。

还有一个预防方法,就是慎用try...catch。并不是说不能用,只是说不能滥用。因为当你用try catch时,你就有了关于输入的预设,如果你这个输入只用一次,那还好,如果你的这个输入会在程序内重复调用,那么就可能会出现你预设之外的用法,尤其是这个输入还被其他程序员用了,那出bug时,找源头就麻烦了。

如果你发现问题难以定位,但用try...catch能掩盖过去,那么你只是留下了一个新的技术债务,问题迟早会在别的地方爆雷的。

交给项目经理协调

既然bug是永远解决不完的,那么安排优先级这个事,就不要揽在自己身上,交给项目经理协调就好。即使这个bug可能是你的代码造成的,也并不一定需要自己解决;当然不是你造成的代码,也可能要你解决。要记得team work,你的代码成果属于整个team,整个公司,当然bug也应该属于整个team的。当然不是让你丢锅的意思,只是想让你放下心理负担,这样才能更好专注手头的事。

所有的bug都提交jira ticket,计划时间,让项目经理来协调。当然,这过程你需要和项目经理沟通你解决第几号bug需要多久。建议你报上去的时间是你预计的时间x2。不是鼓励你偷懒,而是在实际过程中,你需要一定的时间冗余,以预防意料之外的事。


user avatar   morgancheng 网友的相关建议: 
      原题未说明“学习艺术”是作为一个爱好还是作为一种职业,答主们请注意区分这两种情况


  

相关话题

  编程是否存在终极问题? 
  程序员如何穿着才不被别人看出自己是程序员? 
  企业用哪个版本的 Linux? 
  互联网码农工资已经接近金融基层白领了,社会地位却为何仍然原地踏步? 
  如何开始学习 Rust 语言? 
  为什么CPU主频一般都比FPGA快,但是却说FPGA可以帮助CPU加速? 
  计算机图形学领域还有哪些没有啃到肉的问题? 
  如何写好业务代码? 
  Johns Hopkins University的计算机(cs)专业如何,和卡内基梅隆大学的非纯cs如何选? 
  大学有尽力读,却发现找不到工作怎么办? 

前一个讨论
想养猫,哪种猫最蠢?
下一个讨论
在科普百科中,哪一点最重要?





© 2024-11-21 - tinynew.org. All Rights Reserved.
© 2024-11-21 - tinynew.org. 保留所有权利