当前位置: 首页 > 科技观察

测试是浪费时间,我的程序肯定没问题

时间:2023-03-17 10:07:48 科技观察

尽管关于测试驱动开发(TDD)的书籍和文章成百上千,但仍然有很多人从未感受到测试的力量。之所以不想写测试程序,无外乎以下几个原因:太费时间了。不值得。我很懒惰。我不知道该怎么做。我知道我的程序有效,我运行了一次就成功了。我是超人,我从不犯错。除非你的答案是6。(如果是,我很羡慕你),否则,你应该继续读下去。让我们从一个简单的例子开始。假设您想编写一个电子邮件地址验证程序。您可以使用正则表达式或手动执行每个字符比较来完成此任务。现在您想要验证您的代码是否有效。你会怎么做?您可以手动输入不同的值来验证它是否按照您的要求进行操作,您最终会测试类似:foofoo@barfoo@bar.baz...如果您更改/调整验证算法会发生什么?你需要重复前面所有的过程,重新输入每一个值,然后才能看到验证的结果。让电脑自动帮你检查这些不是更好吗?通过自动化测试过程,您可以随时测试您的程序任意次数。这不仅会在以后为你节省很多时间,还会增加你的自信心,因为每次你觉得程序可能出错的时候,就运行你的测试程序,看看测试结果。现在假设您正在编写一个更复杂的程序,例如XML解析器。你不能不测试就写一个解析器,问题是,你如何测试它?通常,您创建一个XML样板,将其提供给解析器,然后手动检查解析的结果。当您看到解析器输出了您期望的结果时,您确定您已经完成了任务并且解析器没有问题。问题是如果你发现一个错误。然后你需要修改你的代码并验证它是否再次工作。但是我们程序员是一群懒惰的人,我们只会测试遇到的bug,几乎从不测试解析器的其他部分。这会造成什么问题?你能确保没有东西坏掉吗?当您编写单元测试时,此工作流程有何变化?首先,您已经测试了该程序。以前,您必须手动测试每个功能并手动检查输出。如果这种事情你只需要做一次,那很好,但当出现问题时,你不想一遍又一遍地做。没有人喜欢一遍又一遍地做同样的事情,尤其是在无聊的时候。在另一种情况下,您为解析器中的每个函数编写自动化测试。在这个例子中,您已经测试了您的程序并且您对这个过程并不陌生。您需要做的是将手动检查更改为断言,它将自动为您测试程序。当错误出现时,发生了巨大的变化。如果没有自动化测试,您必须手动检查所有内容,以确保在修复错误时不会引入其他错误。当出现几个bug时,你会变得极度不耐烦,你会停止检查代码的其他部分,只关注你的bug。但是如果你已经为程序编写了自动化测试,那么你最后要做的就是点击一个按钮让所有的测试程序运行起来,你可以立即看到测试结果,而你不需要做任何其他的事情。有测试程序时,如何修改bug?首先,您需要重现错误。无论如何,在你修改它之前,你必须确定这个bug是否真的存在。这个怎么做?您必须编写一个测试用例来重现错误,这必须在您进行任何修复错误的工作之前完成。如果无法重现错误,则问题可能出在其他地方。如果无法通过自动化测试重现错误,则可能是您在错误的地方修改了错误,可能会破坏您的程序。编写测试程序时,必须先运行它以确保它不会失败。如果测试没有失败,则可能出现了问题,您无法正确重现它。当你修改bug的时候,你也有一个针对它的测试程序,你可以马上发现这个bug是否还会出现。这时再发现一个bug怎么办?照着做。编写一个测试程序来重现这个错误。即使您没有时间立即修复错误或者它不是致命错误,您也应该有一个重现它的测试程序,这样当您稍后回来修复问题时,您就会知道该怎么做。