【背景】
最近有同事在面试的时候被问及一个问题,其实也是近些时候,网络上讨论也比较多
的一个话题,自动化测试的意义到底在哪里?
【你问】
自动化测试的意义到底在哪里?
【我答】
每样事物的产生都是因为需求的产生,我个人对于自动化测试的产生原因的理解,跟
工厂里的质检应该类似,当软件测试工程师这个职业刚刚产生的时候,就像工厂里的质检
员,都是通过手工和感官去检查产品的质量,慢慢地,随着产品的生产规模扩大和速度的
加快,这种纯手工的测试和质检就暴露出来一些问题:
●人力成本的增加,因为需要更多的质检员和测试工程师
●效率的瓶颈,因为生产速度远远超过手工质检和测试的速度
●人为错误率的上升,因为工作量的增加和持续时间的增加,导致人员疲劳或惯性思
维,也包括投机取巧的一些行为
而自动化测试,也就像工厂里的自动化质检一样,在这个时候应运而生了,它们的产
生就是为了解决上述三个主要问题的:
●当检测任务增加的时候,人力不可能一直连轴转,所以就需要增加人力来三班倒,
但自动化系统却可以不停地运行
●自动化系统的执行效率远超手工效率
●系统不会因为连续地运行而疲劳,所以也就不会疲劳而犯错,更不会有什么惯性思
维和偷懒的行为
现如今,自动化测试工具和框架多的让你都能挑花了眼,测试开发工程师或自动化测
试工程师的岗位需求也比前些年多了很多,不管你是在做什么类型的产品测试,如果没用
过几种自动化测试框架或工具,是不是感觉都不好意思开口?那为什么现在反而越来越多
的人又开始讨论自动化存在的意义了呢?
我的理解是虽然自动化测试这个概念被热炒了很多年,可是真正能把自动化测试真正
融合到软件研发体系里的公司,并没有太多,我觉得导致这种结果的原因其实可以说就一
个:投入产出比太低。
我大概从 2005 年开始第一次接触到自动化测试的概念,那时候还是 Selenium 1.0,
虽然我没有主攻自动化测试这个方向,但是因为很多原因,也参与了自动化测试在项目中
的试点,在公司的实施和推行,一直以来也不断地在看项目里和项目外的人将很多新的自
动化测试工具带进来又带出去。
有的是管理层看不到最终会带来多大的效率提升和回报,所以前期就不想投入相应的
人力和物力。
有的是管理层其实也支持,但迫于项目工期或产品发布等更为重要的目标,导致不能
投入百分之百的人力去开发,所以导致迟迟不能落地,最终也就不了了之。
还有部分公司就是为了自动化而自动化,并不清楚自己到底需不需要自动化,或者什
么地方最需要自动化,就是觉得,既然其他公司都搞自动化了,那我们也必须要启动自动
化计划。
我还见过因为自动化测试框架因为版本的升级,导致几千个脚本被废弃,导致几十个
测试工程师半年多的辛勤劳动成果被浪费,导致公司的测试工程师一度极其抵触自动化测
试的任何任务。
还有很多其他的场景,日积月累地,让很多公司和很多人慢慢地对自动化产生了疲劳
感,自然也就有了质疑的声音和迷惑的问题。
我个人的观点是,要想明白自动化测试的意义,你得先把测试两个字拿掉,再来看自
动化的意义在哪里?
我们要将自动化的应用领域扩展到我们整个产品研发流程,或者说发散到你的整个工
作范围,将其中手工重复度较高的、人为容易犯错的、较为机械化的工作事项,都给自动
化了,将执行这类工作的人力释放出来,去做有创造性的、复杂度高的、有成长性的工
作。这就是我认为的自动化的意义。
就拿我们接触较多的互联网产品的团队,不要再局限于什么 Android 自动化测试、
iOS 自动化测试、接口自动化测试这些范畴了,而应该多去研究一下,开发过程中哪些环
节可以被自动化,比如单元测试、构建版本包、发布包部署、错误日志检查、异常预警、
现网运营配置的检查、运维数据的纠错等等,这些都是可以用自动化工具、脚本或框架来
解决的,这些都是有意义的研究范围。
最近有同事在面试的时候被问及一个问题,其实也是近些时候,网络上讨论也比较多
的一个话题,自动化测试的意义到底在哪里?
【你问】
自动化测试的意义到底在哪里?
【我答】
每样事物的产生都是因为需求的产生,我个人对于自动化测试的产生原因的理解,跟
工厂里的质检应该类似,当软件测试工程师这个职业刚刚产生的时候,就像工厂里的质检
员,都是通过手工和感官去检查产品的质量,慢慢地,随着产品的生产规模扩大和速度的
加快,这种纯手工的测试和质检就暴露出来一些问题:
●人力成本的增加,因为需要更多的质检员和测试工程师
●效率的瓶颈,因为生产速度远远超过手工质检和测试的速度
●人为错误率的上升,因为工作量的增加和持续时间的增加,导致人员疲劳或惯性思
维,也包括投机取巧的一些行为
而自动化测试,也就像工厂里的自动化质检一样,在这个时候应运而生了,它们的产
生就是为了解决上述三个主要问题的:
●当检测任务增加的时候,人力不可能一直连轴转,所以就需要增加人力来三班倒,
但自动化系统却可以不停地运行
●自动化系统的执行效率远超手工效率
●系统不会因为连续地运行而疲劳,所以也就不会疲劳而犯错,更不会有什么惯性思
维和偷懒的行为
现如今,自动化测试工具和框架多的让你都能挑花了眼,测试开发工程师或自动化测
试工程师的岗位需求也比前些年多了很多,不管你是在做什么类型的产品测试,如果没用
过几种自动化测试框架或工具,是不是感觉都不好意思开口?那为什么现在反而越来越多
的人又开始讨论自动化存在的意义了呢?
我的理解是虽然自动化测试这个概念被热炒了很多年,可是真正能把自动化测试真正
融合到软件研发体系里的公司,并没有太多,我觉得导致这种结果的原因其实可以说就一
个:投入产出比太低。
我大概从 2005 年开始第一次接触到自动化测试的概念,那时候还是 Selenium 1.0,
虽然我没有主攻自动化测试这个方向,但是因为很多原因,也参与了自动化测试在项目中
的试点,在公司的实施和推行,一直以来也不断地在看项目里和项目外的人将很多新的自
动化测试工具带进来又带出去。
有的是管理层看不到最终会带来多大的效率提升和回报,所以前期就不想投入相应的
人力和物力。
有的是管理层其实也支持,但迫于项目工期或产品发布等更为重要的目标,导致不能
投入百分之百的人力去开发,所以导致迟迟不能落地,最终也就不了了之。
还有部分公司就是为了自动化而自动化,并不清楚自己到底需不需要自动化,或者什
么地方最需要自动化,就是觉得,既然其他公司都搞自动化了,那我们也必须要启动自动
化计划。
我还见过因为自动化测试框架因为版本的升级,导致几千个脚本被废弃,导致几十个
测试工程师半年多的辛勤劳动成果被浪费,导致公司的测试工程师一度极其抵触自动化测
试的任何任务。
还有很多其他的场景,日积月累地,让很多公司和很多人慢慢地对自动化产生了疲劳
感,自然也就有了质疑的声音和迷惑的问题。
我个人的观点是,要想明白自动化测试的意义,你得先把测试两个字拿掉,再来看自
动化的意义在哪里?
我们要将自动化的应用领域扩展到我们整个产品研发流程,或者说发散到你的整个工
作范围,将其中手工重复度较高的、人为容易犯错的、较为机械化的工作事项,都给自动
化了,将执行这类工作的人力释放出来,去做有创造性的、复杂度高的、有成长性的工
作。这就是我认为的自动化的意义。
就拿我们接触较多的互联网产品的团队,不要再局限于什么 Android 自动化测试、
iOS 自动化测试、接口自动化测试这些范畴了,而应该多去研究一下,开发过程中哪些环
节可以被自动化,比如单元测试、构建版本包、发布包部署、错误日志检查、异常预警、
现网运营配置的检查、运维数据的纠错等等,这些都是可以用自动化工具、脚本或框架来
解决的,这些都是有意义的研究范围。