橡皮鸭程序调试法

http://coolshell.cn/?p=1719

2009年11月10日

1,218 次点击 阅读评论 发表评论

下面,让我来为你介绍一个程序调试大法——“橡皮鸭程序调试法”,这个方法在调试界是很出众的,实施起来相当方便和简易,几乎可以随时随地地实验,几乎不需要借助任何的软件和硬件的支持,你甚至可以把你的程序打印出来,在纸面上进行调试。

那么,为什么这个方法要叫做橡皮鸭呢?因为橡皮鸭子是西方人在泡澡时最喜欢玩的一个小玩具,所以,这个东西应该家家户户都必备的。因为,这个方法由西方人发明,所以,就被取名为“橡皮鸭”了。

好了,话不多说,下面是整个调试方法的流程。

  1. 找一个橡皮鸭子。你可以去借,去偷,去抢,去买,自己制作……反正你要搞到一个橡皮鸭子。
  2. 把这个橡皮鸭子放在你跟前。标准做法是放在你的桌子上,电脑显示器边,或是键盘边,反正是你的跟前,面朝你。
  3. 然后,打开你的源代码。不管是电脑里的还是打印出来的。
  4. 对着那只橡皮鸭子,把你写下的所有代码,一行一行地,精心地,向这只橡皮鸭子解释清楚。记住,这是解释,你需要解释出你的想法,思路,观点。不然,那只能算是表述,而不是解释。
  5. 当你在向这只始终保持沉默的橡皮鸭子解释的过程中,你会发现你的想法,观点,或思路和实际的代码相偏离了,于是你也就找到了代码中的bug。
  6. 找到了BUG,一定要记得感谢一下那个橡皮鸭子哦。

什么?你觉得这个方法太“愚蠢”,太“弱智”了?是的,看上去,会这样做的人脑子好像是有点毛病。不过,我要告诉你的是,这个方法的确有效。因为,这就是“Code Review”的雏形!下面让我来给你解释一下。

Once a problem is described in sufficient detail, its solution is obvious.

上面这句话的意思是

一旦一个问题被充分地描述了他的细节,那么解决方法也是显而易见的。

我相信在座的各位都有过这样的经历,当你死活都找不到问题的原因的时候,当你寻求他人的帮助时,对别人解释整个你的想法和意图或是问题背景的时候,你自己都没有解释完,就已经找到问题的原因了。这样的经历,相信大家一定有过。这就是这个方法的意义所在。

所以,“橡皮鸭”只是一个形式,其主要目的是要你把自己写的代码做“自查”,也就是自己解释给自己听。当然,为了不让你像个“精神分裂”的程序员,引入“橡皮鸭”是很有必要的(虽然这样还是有点精神病,但比起精神分裂来说算是好的了,嘻嘻)。所以,真实的本质是Code Review。关于代码评审,大家可以看一下我的这篇文章《Code Review中的几个提示》,你会明白其中更多的东西的。

最后,我想和大家说一下道具“橡皮鸭”。是的,在我们的身边,你不一定能找得“橡皮鸭”,但你可以找到你你的同事,你的朋友,来做这个“橡皮鸭”,当然,他们并不一定有“橡皮鸭”好使,因为你的那些同事或朋友一定会在你解释的时候,随意地发表意见和看法,相当的令人annoying。《Code Review中的几个提示》和《结对编程的利与弊》也谈到了一些,供你借鉴。

(全文完)

转载于:https://www.cnblogs.com/elanp/archive/2009/11/17/1604696.html

最新文章

  1. CentOS系列启动流程详解
  2. Gradle不匹配报错的终极大招(gradle插件版本和gradle版本对应关系)
  3. BZOJ3160:万径人踪灭
  4. Symbian签名和Uid相关内容的整理(一)
  5. vue watch 第一次不执行_Vue 实现前进刷新,后退不刷新的效果
  6. LINQ学习——JOIN
  7. 中介者模式android,Android[高级教程] 设计模式之六 中介者模式(二)
  8. 如何检查Windows网络通信端口占用
  9. 2022-09-21 虚机安装威联通 QuTScloud
  10. 主成分分析法(PCA)原理和步骤
  11. 同态滤波处理夜间雾霾图像
  12. 浙江大学计算机学院师资队伍,浙江大学计算机科学与技术学院导师教师师资介绍简介-朱建科...
  13. echarts版中国地图
  14. ipv6服务器安装mysql_ipv6安装,教您ipv6安装方法
  15. 创始人李卉:麦客CRM2.0核心逻辑及其背后的思考
  16. [计算几何]Last Stardust
  17. 【论文阅读】ICLR 2022: Scene Transformer: A unified architecture for predicting future trajectories of ...
  18. K-means(K均值)
  19. MyBatis源码的学习(9)---映射器mappers的的XML解析
  20. Echarts地图标记重合问题原因

热门文章

  1. 如何加速播放SWF格式文件——使用Enounce MySpeed轻松实现
  2. 数据加密解决方案有哪些?
  3. 基于python的量化投资基础(Chapter.0)——概述
  4. 加粉啦 - 微信复制加粉统计,竞价加粉统计免费试用
  5. 广和通L610+阿里云平台+钉钉机器人
  6. 程序员做外包压力有多大?外包公司是个什么体验?
  7. 阿里云学生机搭建spark、hadoop集群(踩坑之路)
  8. JavaScript实现抽奖(jQuery)
  9. ubuntu oracle工具下载,Ubuntu Oracle SQL Developer 1.5 下载
  10. FPGA的三个时代,最初三十年的回顾(附原英文资料)