1.1.1 手动测试

每一个称职的开发人员都懂得手动测试代码。正如咀嚼食物之后要吞食一样,在编写完源代码之后,下一步理所当然就是去手动测试它。

请想象一下,你正在创建一个注册表单。当你写完代码的时候,你不会直接关闭编辑器,然后告诉你的老板你已经完成了。相反,你会打开浏览器,填写注册表单,然后确保它可以正确地完成注册流程。换句话说,你首先会去手动测试这些代码。

手动测试对小型项目很适用。如果你有一个待办事项清单App,并且可以在两分钟内手动完成检查,那么你就不需要进行自动化测试。但是当你的应用程序增大到一定规模时,依靠手动测试将会成为负担。

在这里,给读者们分享一下我在开发第一个大型JavaScript应用程序时出现的幺蛾子,那个程序简直糟糕透了。不知道你是否听说过面条式代码?这份代码乱得像是意大利面条式、意大利干面条式和意大利扁面条式代码的混合物。理解这些应用程序的代码逻辑非常困难,其中也没有任何自动化测试。不用说,代码中肯定存在bug。为了在版本上线之前发现并消灭这些bug,就需要对应用程序进行手动测试。那会儿,每周三我们都会泡上浓浓的咖啡,打开一堆用户手册,在电脑前蹲上四个小时,执行整套测试指令。这个过程非常痛苦。

定义 用户手册指的是包含一系列步骤的列表,用户可以通过应用程序完成这些步骤,例如打开应用程序、填写表单、点击提交等。

考虑到在开发过程中,10%的时间都花在了手动测试上,读者可能认为我们能够剔除产品中所有的bug。事实并非如此,应用程序中到处都隐藏着bug。其原因是当测试特性太多时(如超过100种),手动测试实在是太困难了,很容易注意力不集中,忘记测试某项功能。

有一次当我按用户手册进行检查的时候,竟意外忘记检查点击可播放音频轨道元数据的某个按键了。由于其他开发人员也忘记检查,这个bug一直存在了好几个月!

虽然有一部分手动测试时间是花在测试新特性上,但是大部分时间还是用来检查之前的特性是否仍正常工作。这种测试被称为回归测试。回归测试对人类来说是非常困难的任务——它们是重复性的,要求投入很多注意力,而且没有创造性的输入。总之,这种测试太枯燥了。幸运的是,计算机特别擅长此类工作,这也是自动化测试可以大展身手的地方!