1.4 测试和调试
"你从三百六十五中去掉一,还余多少?"
"当然是三百六十四。"
矮胖子好像有点不相信,说:"我倒要看看在纸上是怎么算的。"
刘易斯·卡洛尔,《爱丽丝镜中奇遇记》
程序中的错误通常称为bug,消除错误的过程称为除错或调试(debug)。这个术语的来历非常有趣。在计算机发展早期,计算机硬件是相当容易损坏的,而且动辄占据整个屋子。Grace Murray Hopper(1906-1992)是"全球第一台大规模数字计算机的第三名程序员"。 一天,Hopper正在哈佛大学教授Howard H. Aiken的指导下操作Harvard Mark I计算机。突然,一只倒霉的蛾子导致一个继电器失灵。Hopper和其他程序员将这只死掉的蛾子粘到工作日志上,并添加了这样一行批注:"First actual case of bug being found."(发现bug的第一个实际案例)。这个日志目前陈列于弗吉尼亚Dahlgren的中心博物馆。这是第一个被编入文档的计算机bug。发生这个事件后,每当有人询问为什么还没有计算出结果,Aiken教授的人都会说正在为计算机debug(除虫)。如果想进一步了解Hopper和其他计算机历史人物,请阅读Robert Salter的Portraits in Silicon一书(MIT Press 1987年出版)。今天,bug被广泛地用于指代程序中的错误。本节将描述三种编程(www.cppentry.com)错误,并提供了对其进行纠正的一些建议。