在编写程序时,突然发现了一个bug,但是,却不知道bug在哪里,这时,首先确定bug发生的函数。就那个发生bug的那个状态,作为测试用例,对发生bug内的各个可能的函数进行测试。最终找到bug,并解决,同时,添加了测试用例。

  就是,在你怀疑某个函数可能出现问题时,用测试去证明他确实出现问题。当将范围缩小到一定范围后,再进入白盒,阅读代码,或断点调试,最终将问题定格在一行内。

  慢慢发展,对各个函数的功能的正确性越来越有了信心。这样,我们关注点就在新添加的功能,或未进行测试的代码段之间,而不用陷入老旧代码中徘徊。因为我们有足够证据证明那些代码能够正常工作,即使我们对他们进行过修改。

  我们编写代码,就像在无动力上堆叠砖块,而真实运行环境,就像在有着正常重力的地球。在有重力环境下直接堆砖块很费劲,几乎不可能,砖块太重。而在无重力条件下,又无法知道堆好的能不能承受重力的考验,而测试,就像时有时无的重力。我们在每放上一块砖块时,就开启重力,知道有无错误产生。

  编写代码的时候,有时候我们无法考虑太多,而,我们在测试代码的时候,则需要考验我们的每一小块代码,是否具备我们想要的行为。这样慢慢地,将自己从大海捞针搬的寻找错误的生活中解脱出来。

  虽然每一步正确,结果不一定正确,但要知道,有一步不正确,那么,结果肯定不正确,就算他看起来好像正确,可他确实不正确。所以,如果要结果正确,那么每一步必须正确。

  每当你怀疑你代码有错误的时候,首先,写好测试去证明你的怀疑是正确的,当将错误定格在很短的代码后,再通过调试手段,将正真的元凶寻找出来。