单元测试,或称为模块测试,是对程序单元进行正确性校验的一种测试方法。程序单元可以是单个程序、函数、过程等,具体取决于所使用的编程语言。在过程化编程中,一个单元就是一个独立的程序;而在面向对象编程中,最小的单元就是方法。通常情况下,每当程序员修改一次程序时,都需要至少进行一次单元测试。在编写程序的过程中,可能还需要进行多次单元测试,以确保程序满足需求。
那么为什么需要进行单元测试呢?我们可以从Android程序员常见的自测方式来看这个问题。
当实现某个功能后,程序员会在手机上执行整个应用,然后在手机上操作应用,通过多次点击和进入使用该功能的场景来测试该功能。通常情况下,只会测试功能执行的主路径。也就是说,如果功能具有多分支结构(如if-else语句),那么在自测过程中,只会测试一条主路径,其他分支结构则由测试人员进行人工测试。
然而,这种自测方式存在一些问题。首先,我们无法保证每次实现功能时都能确保没有问题。实际上,在每次实现功能时,都可能会遇到一些问题。为了验证逻辑是否正常,我们需要反复修改代码并进行测试。按照上述流程,每次修改完代码后,我们需要编译生成apk文件,连接手机并将应用安装至手机。这个过程通常需要2分钟左右。接下来,我们还需要在手机上操作进入使用功能场景的地方,测试功能场景,并观察结果。这个过程通常需要1分钟左右。因此,每次写完代码后,我们需要3分钟的时间来进行验证。
假设我们需要修改5次代码,每次定位问题并修改逻辑的时间为2分钟。那么,为了确保该功能主逻辑没有问题,我们需要花费5 * (2+3)=25分钟的时间。其中,60%的时间(15分钟)用于验证问题,40%的时间(10分钟)用于解决问题本身。
从这个角度看,这种自测方式非常低效。它要求程序员不断地在电脑上的编程IDE和手机的应用之间切换,并且还需要在手机上反复执行重复操作。对于程序员来说,这确实是一件很痛苦的事情,而且容易出现误操作。此外,等待手机连接到电脑的过程可能耗费较长时间,尤其是在安装驱动和解决adb冲突等问题时。有时候,公司还会要求程序员归还开发用的手机,换一部新的开发机。对于新开发的手机不熟悉的程序员来说,打开调试模式可能也需要半天时间。这些都是非常浪费时间和降低工作效率的事情,给程序员带来了很大的困扰。
在进行软件测试时,通常只会关注功能执行的主流程,而忽略了很多分支流程。这是因为测试人员通常只进行黑盒测试,对内部逻辑了解有限,很容易遗漏某些分支的测试。此外,这些分支的准备条件对于测试人员来说也不容易掌握,因此即使知道存在这些分支,也会忽略它们的测试。然而,如果这些分支存在问题,到了用户侧就会暴露出来。因此,这种测试方式无法保证功能的非主分支也能正常执行。
另外,即使让功能的初次实现没有问题,后续迭代过程中会不断修改它的逻辑或依赖的逻辑。这时问题就出现了,因为修改了它依赖的逻辑后,并不会再让测试同学测试这个功能。我们可能都遇到过这样的场景:将某个Bug修改好了之后,过了一段时间又发现另外一个Bug需要修改。当我们修改这个Bug时,通常只会专注于解决这个问题,而忽略了可能引入的其他问题的逻辑调整。例如,如果函数A调用函数C,希望它返回"Hello",函数B调用函数C,希望它返回"Hello2",某一天函数A希望函数C返回"HelloC"了,于是修改了函数C的逻辑。结果函数A调用函数C确实返回了"HelloC",但函数B调用函数C也返回了"HelloC",这就有问题了。而我们可能并不会注意到这个问题,直接发布了版本,导致大量用户抱怨。如果每次发布版本时都要将所有曾出现过的Bug以及所有的功能都测试一遍,那么需要非常长的时间,严重耽误项目进度。
为了解决上述问题,我们需要使用单元测试。通过使用JUnit等单元测试框架,可以脱离手机进行代码逻辑正确性的验证,无需在手机上操作。执行测试用例后,直接输出测试结果是否正常:如果正常就是绿色的执行结果,如果失败就是红色的执行结果。这样可以将验证操作的时间缩短到30秒以内。当然,我们需要花费一定的时间编写测试用例,但这只是一个一次性的工作。
总结:
感谢每一个认真阅读我文章的人!
作为一名有经验的人,我希望能够帮助大家避免一些学习过程中的弯路。如果你不想再次体验寻找资料无果、无人解答问题的挫败感,以及在坚持几天后选择放弃的痛苦,那么在这里,我将与你分享一些自动化测试的学习资源,希望能为你的成长之路提供帮助。
首先,我们要明确学习的目的是为了找到一份高薪的工作。为了更好地实现这个目标,我为你准备了一些来自阿里、腾讯、字节等一线互联网大厂最新的面试题目。这些题目都是字节跳动的大佬们亲自给出的权威解答,相信通过完成这一套面试资料,你一定能够找到满意的工作。
要获取这份视频文档,你只需点击下方的小卡片,即可轻松领取。
这份文档和视频资料对于想要从事软件测试的朋友来说,应该是最全面、最完整的备考资料。这个仓库也陪伴着我度过了学习过程中最艰难的时光,我相信它也能帮助到你!
最后,如果你觉得这些资源对你有所帮助,请不要犹豫,分享给更多的朋友吧!让我们一起成为更好的自己。