作者:skisky 2007年5月16日
简单地说,“自动化测试”就是自动执行手工测试。自动化测试就是希望能够通过自动化测试工具或其他手段,按照测试工程师的预定计划进行自动的测试,目的是减轻手工测试的劳动量,从而达到提高软件质量的目的。自动化测试的目的在于发现老缺陷。而手工测试的目的在于发现新缺陷。
一、自动化测试的好处
1.对新版本执行回归测试——测试每个特征
对于产品型的软件,每发布一个新的版本,其中大部分功能和界面都和上一个版本相似或完全相同,这部分功能特别适合于自动化测试,从而可以让测试达到测试每个特征的目的。
2.更多更频繁的测试——沉闷、耗时
对于产品型软件或需求不断更新的系统,每一版产品发布或系统更新的周期就只有短短的几个月,这就意味着开发周期也只有短短的数月,而在测试期间是每天或每几天要发布一个版本供测试人员测试,一个系统的功能点少则上百多则上千上万,使用手工测试是非常耗时和繁琐的,这样频繁的重复劳动必然会导致测试人员产生厌倦心理、工作效率低下。
3.弥补手工测试难实现的不足
压力测试、并发测试、大数据量测试、崩溃性测试等,都需要成百上千的用户同时对系统加压才能实现其效果,用人来测试是不可能达到的,也是不现实的。在没有引入自动化测试工具之前,为了测试并发,组织几十号人在测试经理的口令:1-、2-、3!下,同时按下同一个按钮,但如果需要更大的并发量,就很难实现了。
4.具有一致性和可重复性
由于每次自动化测试运行的脚本是相同的,所以每次执行的测试具有一致性,而这一点手工测试是很难做到的。由于自动化测试的一致性,很容易发现被测软件的任何改变。
5.更好的利用资源——周未 / 晚上
理想的自动化测试能够按计划完全自动的运行,测试人员可以设置自动化测试程序在周末和晚上执行测试,白天上班的时候测试人员就可以收集测试所发现的缺陷,并交给开发人员修改,同时测试人员可以在白天开发新增功能的自动化测试脚本,或对已有的脚本不适合的地方进行修改。这样充分的利用了公司的资源,也避免了开发和测试之间的等待。
6.解决测试与开发之间的矛盾
通常在开发的末期,进入集成测试阶段,由于每发布一个版本的初期,测试系统的错误比较少,这时开发人员有等待测试人员测试出错误的时间。事实上在叠代周期很短的开发模式中,存在更多的矛盾,但自动化测试可以解决其中的主要矛盾。
7.增加软件信任度
总之,自动化测试的好处和收益是很明显的,但也只有顺利实施了自动化测试才能从中获得它的益处。
二、使用自动化测试的误区
自动化测试好处很多,但也有很多的局限,正因为一些人只认识到了自动化测试的优点,导致对它的期望太高,所以产生了很多执行自动化测试失败的例子。
1.期望自动化测试能取代手工测试
某些情况下自动化测试并不适用(本文下面的内容中会提到),所以不能期望在所有的情况下都使用自动化测试来取代手工测试,测试主要还是要靠人工的。
2.期望自动测试发现大量新缺陷
自动化测试只能发现已知的问题,所以不能期望自动化测试去发现更多新的缺陷,事实证明新缺陷越多,自动化测试失败的几率就越大。发现更多的新缺陷应该是手工测试的主要目的。
3.工具本身不具有想象力
对于一些界面美观和易用性方面的测试,自动化测试工具无能为力。
4.只要使用自动化测试,就能缩短测试时间、提供测试效率
自动化测试的前期实现要花费更多的时间,相比创建和执行一个手工测试用例,要花费3~10倍的时间来开发、验证和文档化一个自动化测试用例。
5.自动化测试工具使用了图形化界面,很容易上手,对人员的要求不高
简单的“录制 / 回放”方法并不能实现有效的、长期的自动化测试,测试人员还需要对脚本进行优化,这就需要测试人员具有设计、开发、测试、调试和编写代码的能力,最理想的候选人是既有编程经验,又有测试经验。测试过程中还需要安排专业人员对测试脚本库中的脚本进行维护。
三、不适合自动化测试的情况
自动化测试不是适合所有公司、所有项目的。
1.定制型项目(一次性的)
为客户定制的项目,维护期由客户方承担的,甚至采用的开发语言、运行环境也是客户特别要求的,即公司在这方面的测试积累就少,这样的项目不适合作自动化测试。
2.项目周期很短的项目
项目周期很短,测试周期很短,就不值得花精力去投资自动化测试,好不容易建立起的测试脚本,不能得到重复的利用是不现实的。
3.业务规则复杂的对象
业务规则复杂的对象,有很多的逻辑关系、运算关系,工具就很难测试。
4.美观、声音、易用性测试
人的感观方面的:界面的美观、声音的体验、易用性的测试,也只有人来测试。
5.测试很少运行
测试很少运行,对自动化测试就是一种浪费。自动化测试就是让它不厌其烦的、反反复复的运行才有效率。
6.软件不稳定
软件不稳定,则会由于这些不稳定因素导致自动化测试失败。只有当软件达到相对的稳定,没有界面性严重错误和中断错误才能开始自动化测试。
7.涉及物理交互
工具很难完成与物理设备的交互,比如刷卡的测试等。
四、什么样的情况适合自动化测试
自动化测试之所以能在很多大公司实施起来,就是有它适合自动化测试的特点和高的投资回报率。
1.产品型项目
产品型的项目,每个项目只改进少量的功能,但每个项目必须反反复复的测试那些没有改动过的功能。这部分测试完全可以让自动化测试来承担,同时可以把新加入的功能的测试也慢慢地加入到自动化测试当中。
2.增量式开发、持续集成项目
由于这种开发模式是频繁的发布新版本进行测试,也就需要频繁的自动化测试,以便把人从中解脱出来测试新的功能。
3.能够自动编译、自动发布的系统
要能够完全实现自动化测试,必须具有能够自动化编译,自动化发布系统进行测试的功能。当然,不能达到这个要求也可以在手工干预的情况下进行自动化测试。
4.回归测试
回归测试是自动化测试的强项,它能够很好的验证你是否引入了新的缺陷,老的缺陷是否修改过来了。在某种程度上可以把自动化测试工具叫做回归测试工具。
5.多次重复、机械性动作,将烦琐的任务转化为自动化测试
自动化测试最适用于多次重复、机械性动作,这样的测试对它来说从不会失败。比如要向系统输入大量的相似数据来测试压力和报表。
6.需要频繁运行测试
在一个项目中需要频繁的运行测试,测试周期按天算,就能最大限度的利用测试脚本,提高工作效率。
清晰、合理的判断哪些测试可以采用自动化是提高测试效率和质量的关键。
一、自动化测试的好处
1.对新版本执行回归测试——测试每个特征
对于产品型的软件,每发布一个新的版本,其中大部分功能和界面都和上一个版本相似或完全相同,这部分功能特别适合于自动化测试,从而可以让测试达到测试每个特征的目的。
2.更多更频繁的测试——沉闷、耗时
对于产品型软件或需求不断更新的系统,每一版产品发布或系统更新的周期就只有短短的几个月,这就意味着开发周期也只有短短的数月,而在测试期间是每天或每几天要发布一个版本供测试人员测试,一个系统的功能点少则上百多则上千上万,使用手工测试是非常耗时和繁琐的,这样频繁的重复劳动必然会导致测试人员产生厌倦心理、工作效率低下。
3.弥补手工测试难实现的不足
压力测试、并发测试、大数据量测试、崩溃性测试等,都需要成百上千的用户同时对系统加压才能实现其效果,用人来测试是不可能达到的,也是不现实的。在没有引入自动化测试工具之前,为了测试并发,组织几十号人在测试经理的口令:1-、2-、3!下,同时按下同一个按钮,但如果需要更大的并发量,就很难实现了。
4.具有一致性和可重复性
由于每次自动化测试运行的脚本是相同的,所以每次执行的测试具有一致性,而这一点手工测试是很难做到的。由于自动化测试的一致性,很容易发现被测软件的任何改变。
5.更好的利用资源——周未 / 晚上
理想的自动化测试能够按计划完全自动的运行,测试人员可以设置自动化测试程序在周末和晚上执行测试,白天上班的时候测试人员就可以收集测试所发现的缺陷,并交给开发人员修改,同时测试人员可以在白天开发新增功能的自动化测试脚本,或对已有的脚本不适合的地方进行修改。这样充分的利用了公司的资源,也避免了开发和测试之间的等待。
6.解决测试与开发之间的矛盾
通常在开发的末期,进入集成测试阶段,由于每发布一个版本的初期,测试系统的错误比较少,这时开发人员有等待测试人员测试出错误的时间。事实上在叠代周期很短的开发模式中,存在更多的矛盾,但自动化测试可以解决其中的主要矛盾。
7.增加软件信任度
总之,自动化测试的好处和收益是很明显的,但也只有顺利实施了自动化测试才能从中获得它的益处。
二、使用自动化测试的误区
自动化测试好处很多,但也有很多的局限,正因为一些人只认识到了自动化测试的优点,导致对它的期望太高,所以产生了很多执行自动化测试失败的例子。
1.期望自动化测试能取代手工测试
某些情况下自动化测试并不适用(本文下面的内容中会提到),所以不能期望在所有的情况下都使用自动化测试来取代手工测试,测试主要还是要靠人工的。
2.期望自动测试发现大量新缺陷
自动化测试只能发现已知的问题,所以不能期望自动化测试去发现更多新的缺陷,事实证明新缺陷越多,自动化测试失败的几率就越大。发现更多的新缺陷应该是手工测试的主要目的。
3.工具本身不具有想象力
对于一些界面美观和易用性方面的测试,自动化测试工具无能为力。
4.只要使用自动化测试,就能缩短测试时间、提供测试效率
自动化测试的前期实现要花费更多的时间,相比创建和执行一个手工测试用例,要花费3~10倍的时间来开发、验证和文档化一个自动化测试用例。
5.自动化测试工具使用了图形化界面,很容易上手,对人员的要求不高
简单的“录制 / 回放”方法并不能实现有效的、长期的自动化测试,测试人员还需要对脚本进行优化,这就需要测试人员具有设计、开发、测试、调试和编写代码的能力,最理想的候选人是既有编程经验,又有测试经验。测试过程中还需要安排专业人员对测试脚本库中的脚本进行维护。
三、不适合自动化测试的情况
自动化测试不是适合所有公司、所有项目的。
1.定制型项目(一次性的)
为客户定制的项目,维护期由客户方承担的,甚至采用的开发语言、运行环境也是客户特别要求的,即公司在这方面的测试积累就少,这样的项目不适合作自动化测试。
2.项目周期很短的项目
项目周期很短,测试周期很短,就不值得花精力去投资自动化测试,好不容易建立起的测试脚本,不能得到重复的利用是不现实的。
3.业务规则复杂的对象
业务规则复杂的对象,有很多的逻辑关系、运算关系,工具就很难测试。
4.美观、声音、易用性测试
人的感观方面的:界面的美观、声音的体验、易用性的测试,也只有人来测试。
5.测试很少运行
测试很少运行,对自动化测试就是一种浪费。自动化测试就是让它不厌其烦的、反反复复的运行才有效率。
6.软件不稳定
软件不稳定,则会由于这些不稳定因素导致自动化测试失败。只有当软件达到相对的稳定,没有界面性严重错误和中断错误才能开始自动化测试。
7.涉及物理交互
工具很难完成与物理设备的交互,比如刷卡的测试等。
四、什么样的情况适合自动化测试
自动化测试之所以能在很多大公司实施起来,就是有它适合自动化测试的特点和高的投资回报率。
1.产品型项目
产品型的项目,每个项目只改进少量的功能,但每个项目必须反反复复的测试那些没有改动过的功能。这部分测试完全可以让自动化测试来承担,同时可以把新加入的功能的测试也慢慢地加入到自动化测试当中。
2.增量式开发、持续集成项目
由于这种开发模式是频繁的发布新版本进行测试,也就需要频繁的自动化测试,以便把人从中解脱出来测试新的功能。
3.能够自动编译、自动发布的系统
要能够完全实现自动化测试,必须具有能够自动化编译,自动化发布系统进行测试的功能。当然,不能达到这个要求也可以在手工干预的情况下进行自动化测试。
4.回归测试
回归测试是自动化测试的强项,它能够很好的验证你是否引入了新的缺陷,老的缺陷是否修改过来了。在某种程度上可以把自动化测试工具叫做回归测试工具。
5.多次重复、机械性动作,将烦琐的任务转化为自动化测试
自动化测试最适用于多次重复、机械性动作,这样的测试对它来说从不会失败。比如要向系统输入大量的相似数据来测试压力和报表。
6.需要频繁运行测试
在一个项目中需要频繁的运行测试,测试周期按天算,就能最大限度的利用测试脚本,提高工作效率。
清晰、合理的判断哪些测试可以采用自动化是提高测试效率和质量的关键。