【从零开始学习计算机科学】软件测试(七)自动化测试
自动化测试
概述
自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。通常,在设计了测试用例并通过评审之后,由测试人员根据测试用例中描述的规程一步步执行测试,得到实际结果与期望结果的比较。在此过程中,为了节省人力、时间或硬件资源,提高测试效率,便引入了自动化测试的概念。
手工测试的优劣
优点
手工测试的测试用例的设计比较完整,含有界面和用户体验测试,并且拥有逻辑判断的正确性检查。
局限性
通过手工测试无法做到覆盖所有代码路径;许多与时序、死锁、资源冲突、多线程等有关的错误通过手工测试很难捕捉到;在系统负载、性能测试时,需要模拟大量数据、或大量并发用户等各种应用场合时,也很难通过手工测试来进行;在进行系统可靠性时,需要模拟系统运行十年、几十年,以验证系统能否稳定运行,也是手工测试无法模拟的。
那么如果有大量(几千)的测试用例,需要在短时间内完成,手工测试又怎么办呢?那么,就用到了自动化测试。
自动化测试的优点
- 能执行更多更频繁的测试,使某些测试任务的执行比人工测试更高效,缩短软件开发测试周期,可以更快地将软件推向市场;
- 更好地利用资源,利用整夜或周末空闲的设备执行自动化测试;
- 测试效率高,可以充分利用硬件资源;
- 可以对程序的新版本自动执行回归测试;
- 可以执行一些人工测试有困难或不可能进行的测试如负载、性能测试;
- 自动测试具有一致性和可重复性的特点,而且测试更客观,提高了软件的信任度;
- 增强测试的稳定性和可靠性;
- 提高软件测试的准确度和精确度,增加软件信任度;
- 将任务自动化,让测试人员投入更多的精力设计出更多更好的测试用例,提高测试准确性和测试人员的积极性。
自动化测试的缺点
- 自动化测试不能完全代替人工测试;
- 不能立即降低测试投入,提高测试效率;
- 不能保证100%的测试覆盖率;
- 需要更长的时间去分析和隔离所发现的缺陷;
- 一种测试工具不完全适用于所有测试;
- 自动测试不一定减轻工作量;
- 测试进度可能不一定缩短;
- 自动化测试的普遍应用存在局限;
- 工具本身并没有想象力和灵活性,根据报道,自动化测试只能发现部分的缺陷,而人工测试可以发现更多的缺陷;
- 自动化测试工具在进行功能测试时,其准确的含义是回归测试工具,这时工具不能发现更多的新问题,但可以保证对已经测试过部分的准确性和客观性;
- 自动化测试不能提高测试的有效性, 只是用于提高测试的效率,即减少人工测试的时间;
- 自动化测试不具有想象力,自动化测试是通过测试软件进行,自动测试工具本身不具有想象力,测试过程只是按照运行命令执行。而人工测试时可以直接判断测试结果的正确性,而自动测试许多情况下测试结果还需要人工干预判断;
- 人工测试可以处理意外事件,如网络连接中断,此时必须重新建立连接。手工测试时可以及时处理该意外,而自动化测试时该意外事件一般都会导致测试的中止;
- 自动化测试不利于测试人员积累测试经验,自动测试对测试质量的依赖性较大,在确保测试质量的前提下,实施自动化测试才有意义;
- 自动测试在刚开始执行时,工作效率并不一定高于手动测试,只有当整个自动测试系统成熟,且测试工程师熟练掌握测试工具后,工作效率才会随着测试执行次数的增加而提高;
- 自动测试的成本可能高于人工测试。
自动测试的成本大致有以下几个部分组成:自动测试开发成本;自动测试运行成本;自动测试维护成本和其他相关任务带来的成本;软件的修改带来测试脚本部分或全部修改,就会增加测试维护的开销;新技术带来的成本。
有的人说,“从管理的角度来说,100%的自动化目标只是一个从理论上可能达到的,但是实际上达到100%的自动化的代价是十分昂贵的。”
对测试自动化的误解
- 希望将所有测试活动自动化;
- 购买一个测试工具,满足所有自动化测试需求;
- 马上减轻测试工作负担;
- 在缩短进度上立竿见影;
- 期望自动产生测试计划;
- 达到 100% 的测试覆盖率。
测试自动化的适用范围
不适合自动化测试情况主要有:
- 定制型项目(一次性的);
- 项目周期很短的项目;
- 业务规则复杂的对象;
- 美观、声音、易用性测试;
- 测试很少运行,如:一个月只运行一次;
- 软件不稳定;
- 涉及物理交互;
适合自动化测试情况:
- 产品型项目;
- 增量式开发、持续集成项目;
- 能够自动编译、自动发布的系统。
自动化测试常用于回归测试。因为回归测试需要多次重复、机械性动作,而且需要频繁运行测试。
自动化测试的前提
实施自动化测试之前需要对软件开发过程进行分析,以观察其是否适合使用自动化测试。通常需要同时满足以下条件:
- 产品本身特征具有长期可维护性;
- 软件需求变动不频繁;
- 项目中的某些模块相对稳定,而某些模块需求变动性很大,我们便可对相对稳定的模块进行自动化测试,而变动较大的仍是用手工测试;
- 项目周期足够长,由于自动化测试需求的确定、自动化测试框架的设计、测试脚本的编写与调试均需要较长的时间来完