August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
当你的程序能够初步运行时,你应该做的第一件事情就是打破它,也就是给它各种输入,期望它表现出错误的行为。“期望”的意思是,在这个阶段,我们所面临的挑战是要发现尽可能多的程序错误,以便最终交付用户之前将其修正。如果你做这项工作时的态度是“我的程序已经正常运行了,我是不会犯错误的!”,那么你将不会发现很多错误,而一旦真的发现错误时,你又会非常沮丧。你应该调整自己的心态,进行程序测试时的正确态度应该是:“我能打败它!我比任何程序都聪明,即使是我自己编写的程序!”我们可以使用一些正确的和不正确的表达式混合在一起的输入来测试计算器程序,例如:
试一试
尝试用一些不同的“问题表达式”来测试计算器程序,看看你能使它表现出多少种不同的错误行为。你能使程序崩溃吗——使程序跳过错误处理机制而直接输出平台级的出错信息?我们认为你做不到。你能让程序异常退出而不输出任何错误信息吗?我想你是可以做到的。
这种技术称为测试(testing),有些人专门从事这项工作,负责找出程序中的错误。测试是软件开发中很重要的一个环节,而且并非想象的那样枯燥,实际上是可以很有趣的,我们将在第26章中详细讨论程序测试的一些细节问题。关于程序测试的一个重要问题是:“能否对程序进行系统测试从而发现所有的错误?”这个问题没有一个普适的答案,也就是说,没有任何一个答案对所有程序都成立。不过,对于大多数程序而言,严格的测试通常都会获得很好的效果。程序测试最重要的环节之一是系统性地设计测试用例,为了防止测试设计不全面的情况,你可以用一些“不合理”的输入来测试程序。例如,对计算器程序输入: ...