摘要:单元测试(unit testing)是人为规定的最小的被测功能模块,单元测试的质量会直接影响到软件的后期测试,最终在很大程度上影响到产品的质量。测试过程中应该从可自动化,可重复独立的执行。
单元测试可以说是软件测试的基础单元,单元测试的质量会直接影响到软件的后期测试,最终在很大程度上影响到产品的质量。
测试成本:在单元测试阶段,某些问题是很容易发现的,如果忽略了单元测试,在后期的测试中所花的成本将成倍的上升。图表摘自<<实用软件度量>>(Capers Jones,McGraw-Hill 1991),这些数据显示单元测试的成本效率大约是集成测试的两倍 系统测试的三倍(参见条形图)。
单元测试是直接对最小的模块进行测试的,我们都知道盖房子地基是很重要的,而单元测试是所用测试的基础,将单元测试做好,在做集成测试和系统测试将会变的容易很多。
既然说单元测试如此的重要,那么该如何确保单元测试的质量呢?下面就从几方面进行讲述。
1、自动化
单元测试需要能够自动化的执行。应该包含执行测试自动化和检查结果自动化。
对于单元测试人员,你做的事情将是成天或者日复一日的去执行你所写的单元测试,你要确保你的单元测试是易于调用的。因此要运行单元测试不能比按下按钮或者提示符输入一行的命令来的更复杂。可以将单元测试设置成后台持续的运行,可以用脚本去驱动它运行等等。
对于这个自动化,需要注意的是任何时候不要引入需要手动去执行的步骤而破坏这个自动化的测试过程。比如说数据库,按钮等,当遇到这些时需要让这些也成为自动化组成的一部分。
另一方面,要让测试自己是判断pass or fail。如果说测试专门找出一个人去读取测试的输出,在去验证这个用例是否通过,这是我们不希望看到的,浪费了资源不说,对结果判断的准确度也带提高,而且对于后期的回归测试带来很大的不便。所以说自动的检查结果是必不可少的一个环节。
2、可重复
对于测试,应该能够随机的执行每一个测试,且其产生的结果都应该保持一致。这就要求你的测试系统不依赖任何的外部因素,独立于周围的环境。
在必要的时候,在测试中可以引入桩函数,将测试的外界因素隔离,使测试能够独立于开发环境。比如说系统的时间,在测试的不同时刻获取到的时间是不一样的,这是我们不愿意看到的,这时你可以写个函数代替这个系统的时间。如果说你一定要用到一些外界的因素,比如说数据库,这时你该确保数据库不会受到开发环境的影响,是完全由你控制的。
如果测试结果不具备重复性,你可能对你的测试结果感到惊讶,结果可能是一个随机的值。这时候你无法判断它是不是一个真正的bug,而只是测试本身的问题,这时候会花费大量的时间去追溯测试自身的问题。所以应当确保测试每次执行都有相同的结果。
3、独立的
对于单元测试要举要针对性的,并且独立于环境同时与其他测试独立开来。
在编写单元测试的过程中应该确保一次只测试一个东西,一个测试函数应该专注于产品代码的一个函数、一个类或者合起来实现某一特性/功能的一组函数。
一个测试函数有可能只测试了一个复杂函数中的一小部分,你可能需要多个测试用例才能测低的验证该函数,当一个测试失败时,你可以定位到bug的位置。
独立的还意味着不依赖于任何的其他测试,测试可以在任何时刻运行任何一个测试,而不会因为某一个测试的失败而影响到后面的测试。
综上所述,单元测试是构筑产品质量的基石,我们不要因为节约单元测试的时间不做单元测试或随便做而让我们在后期浪费太多的不值得的时间,我们也不愿意因为由于节约那些时间导致开发出来的整个产品失败或重来!
作者:甘彩凤
来源:51Testing软件测试网原创