“大多数开发人员只是想写新的功能,他们不想使用维护和修补漏洞”。这也是大多数开发人员是错过的乐趣和好处就是发现和修复bug。java
每一个错误均可以教你一些东西。程序员
反馈是一个关键,它是敏捷开发的主要原则之一。单元测试和迭代开发技术更快地提供反馈。与单元测试你的代码是否有效的问题上获得反馈,和每一个交付版本你能够听听客户认为的新特性。错误报告是另外一种形式的反馈您的代码。一个错误的能够有许多不一样的缘由。一些可能性是:一个简单的编码错误(好比一个嵌套的if语句,你最终在错误的分支),或者一个错误的假设你(也许传入的消息并不老是有某些字段,因此你有一个空指针异常),或有缺失的要求(你应该回答消息以不一样的方式,若是一个给定的参数存在),或客户使用软件在一个意外的(但正确),致使错误。编程
在这些状况下,您能够学习如何代码,它是关于你的产品或系统的做用。例如,当我在Tilgin VoIP开发产品,有一个状况咱们收到了一个错误的信息,致使咱们的软件循环下去。消息所包含元素使用tag-length-value编码(电磁阀)参数,长度值元素的总长度。这样你能够跳过未使用或未知元素向前跳“长度”的字节数。在这种状况下,长度值是零,因此跳过咱们指向相同的元素后,指出在跳以前,致使无限循环。这个bug前,仔细检查个人代码长度值太大值会致使阅读过去的消息缓冲区。不过,在那以前,我历来没有想到,一个零长度多是一样糟糕。单元测试
本身的代码变得更容易调试。
当你花时间故障问题和修复bug,它不会花很长时间,直到你想让本身的代码尽量容易调试。这是使人沮丧的不全部可用的信息。一个很是常见的问题是不包括动态信息的异常。例如,假设有代码,预计值范围在0 – 20。有多少次你看到一个异常,只是说“非法价值”?不告诉你若是你想找到一个bug。若是例如21日收到,应该说“非法值:21日不在范围0 – 20”。它有助于包括容许范围,确定有助于包括当前值。当前值多是21日或-128年或65535年。全部这些可能给你一个线索是什么致使了它,你不从一个普通的“非法价值”。甚至Steve McConnell打破这个规则在某些地方的优秀做品代码完成。例如,在第15章中有一个例子,一个意想不到的发现类型的字符,但错误消息不包括字符的问题。每次你找到并修复一个错误,你须要问问本身:我应该作有什么在个人代码不一样,以消除错误避免将来再次出错吗?有什么我应该作,使这种错误更容易避免发生在将来吗?学习
你和客户会很高兴。
正如我所提到的,为何我爱编码、编程的乐趣之一就是作对别人有用的东西。你获得一样的踢修复一个缺陷,但在不一样的时间尺度。提供新功能一般须要一段时间,但一个bug修复能够在一个小时内完成。每一个固定的错误让你感受你是完成一些东西,这是一个伟大的感受。有点矛盾,修复一个缺陷会使客户满意。若是没有一个错误首先,不会有须要修复它,那么为何他们应该快乐吗?然而,个人经验是,他们乐于接受一个bug修复,尤为是若是它是快速解决。每一个人都知道老是会有缺陷。重要的是,有人准备修复它们很快被发现时。测试
解决问题是有趣的。
许多程序员喜欢解决问题,像数学难题,编程挑战,数独或填字游戏。甚至谋杀谜团饲料解读:你看看线索,试着找出它的发生而笑。调试和修复bug是相同的。每一个错误都是一个新的谜题找出。常常看到一个新的错误报告的时候你的第一反应是:这是不可能的吗?怎么能这样呢?这是当你开始寻找线索。日志怎么说?从系统错误报告吗?此时系统中发生了什么?最近任何改变——新软件,配置更改,交通干扰?让找出开始!这些都是四个缘由我喜欢调试和修补漏洞太多。你的经验是什么?编码
后记:月小升认为,正确的策略是没次编写一小段代码,就多加测试,把bug消除在集成以前,越在前期检测,越容易查到bug,并且后期调用无bug的模块,团队做业效率会高出不少。不过bug总会有的,面包也总会有的。spa