10.1 错误类型
有几种原因会造成程序的缺陷,针对每种原因,我们都有下面一些建议的方法用来查找和纠正。
❑ 功能定义错误:如果程序的功能被错误地定义了,它就肯定不能完成预定的工作。即使是世界上最优秀的程序员,有时也会写出错误的程序。所以,在开始程序设计(或规划)之前,你必须确认自己知道并理解这个程序究竟是用来干什么的。认真分析用户需求并加强和用户之间的沟通,有助于查找和纠正许多(即使不是全部)程序功能定义方面的错误。
❑ 设计规划错误:无论程序规模的大小,在创建它们之前都需要设计规划。在计算机键盘前坐下,直接敲入源代码,然后期望程序能一次通过,这样的情况并不常见。对程序员来说,一定要多花点时间思考:如何构造程序,需要什么样的数据结构,它又应该如何在程序中使用。尽量把这些细节问题提前确定下来,这样将节省今后很多改写代码的时间。
❑ 代码编写错误:当然,每个人都会出现键入错误。根据设计来创建源代码的过程并不是一个不会出错的完美过程,许多程序错误都是在这一阶段悄悄潜入的。在程序中遇到错误时,要重新阅读源代码或与其他人进行探讨,这个办法虽然因为简单而容易被人忽视,但它却非常有效。你肯定会对自己通过与他人探讨程序的具体实现而能够查找并纠正的错误之多感到惊讶。
像C语言这样带有编译器的程序设计语言有一个优点,它的语法错误可以在编译阶段检查出来。而对于解释型的语言,如Linux shell,则只能在程序的运行阶段才能发现语法错误。如果问题出在程序的错误处理代码部分,则即使在程序的测试阶段,也不容易发现它。
❑ 可以试着在纸上执行程序的核心代码,这个过程通常被称为空运行(dry running)。针对那些非常重要的例程,先记下它们的输入值,然后逐步手工计算出输出结果。调试程序并不一定非要用计算机不可,有时,问题可能正是因为计算机本身才出现的。即使是编写函数库、编译器和操作系统的程序员也会犯错误。可话又说回来,也不要一出问题就抱怨工具,新程序出现错误的可能性要比编译器大得多。