1.人工智能与机器学习
人工智能(AI, Artificial Intelligence)与机器学习(ML, Machine Learning)是时下最火热的技术方向之一。准确地讲,人工智能不等同于机器学习,机器学习只是人工智能的一个子集。由于媒体的误用,本文遵循媒体的叫法,文中提到的人工智能,一般泛指机器学习。
人工智能,顾名思义,就是希望创造出拥有像人类那样智能的机器,这是人类的终极梦想之一。该词早在1956年就提出了,当时的科学家曾乐观地估计,二十年左右人类就可以将其实现。然而科学家也很快就发现其难度远大于预估。在此之后的很长一段时间里,人工智能的研究陷入低谷。
通常我们将人工智能分为弱人工智能和强人工智能,前者只专注于完成某个特定的任务,例如2016年战胜围棋世界冠军李世石的Alpha Go,而强人工智能,目前只存在于科幻电影之中。虽然强人工智能仍然道路漫长,但是弱人工智能却有希望取得突破,至少从表现行为来看,它已经拥有了一些"智能"。那么它是如何实现的呢?这主要归功于一种实现人工智能的方法--机器学习。
说到机器学习,我们先来回顾一下计算机程序解决问题的传统模式:根据一套确定的规则编写出计算机程序,接受收入然后获得输出:
图1 - [1]
然而现实中,有很多问题无法用确定的规则来定义算法,例如把手写的数字图片用计算机程序识别出来。因为每个人写的都不一样。但是,假如我们有大量的手写数字图片和实际结果数据的话,就可以通过这些数据的学习(训练),使得计算机程序能够自己找到其内在的方法,就好像是计算机程序学习了知识经验一样。这样,下次再遇到手写数字的时候,计算机程序就能够自动识别了。这个过程就是机器学习。其解决问题的模式如下:
图2 - [2]
机器学习的关键点在是找到训练模型,利用大量的数据进行训练,获得最优模型,以用于对未来的问题进行预测与解决。机器学习当前在很多领域都有了迅速的发展,也有人将其引入软件测试领域。
2.软件测试
软件测试的目的是为了发现软件工程中存在的bug,从而提高软件的质量。
早期软件的规模小,复杂度低,那个时候基本没有什么软件测试,软件测试基本等同于开发人员的软件调试。随着软件规模的扩大和软件复杂度的提升,软件测试变得越来越重要,软件项目中也有了测试人员。
软件测试发展到如今,基本可以分成两类:
手工测试:
通过手工方式完成软件的测试。这种方式费时费力,重复性的工作让测试人员身心倍感疲倦。但是目前来讲,软件测试还不能完全杜绝手工测试,其原因主要在于有些手工测试转换成自动化测试难度太大或者成本太高。
自动化测试:
借助自动化测试工具或者测试人员自己编写测试脚本完成软件的测试。自动化测试极大的提高了软件测试的效率,减轻了测试人员的负担。理论上来说,重复性的测试工作都应该做到自动化。在有些人力资源不充足的团队当中,开发人员本身就要负责单元测试(UT)的开发,这虽然违背软件测试的某些原则,但是却能实实在在地提高软件开发的质量。
不管哪种测试,软件测试的根本是利用预测的结果和实际测试时的结果进行比较来完成测试功能,所以软件测试用例的预期结果在测试前就确定了。
随着软件规模的扩大,这种传统的测试方法越来越难以应对日益增长的测试对测试人员的挑战。
图3- [3]
如上图所示,随着软件开发时间的增长,功能点可能会按指数级增长,因为新的功能和状态与现有的功能进行交互,而测试却只能一次增加一个,只能线性增长,这中间存在测试无法覆盖的空白。同时,因为确定的测试预期结果,当软件功能发生变化的时候,测试用例也得做出修改,维护自动化测试用例也是软件测试隐藏的成本。
3.人工智能可能将给软件测试带来哪些变化?
人工智能时代,软件测试可能会发生巨大变化。
首先,测试变得更简单了。机器学习擅长的就是通过数据训练来完成新的情形的处理,这意味着测试人员将不需要再大量手工编写自动化测试用例和执行测试,而是利用AI自动创建测试用例并执行!
测试人员的主要工作不再是执行测试,甚至也不是设计自动化测试用例,而是提供输入输出数据来训练AI,最终可以让AI自动生成测试用例并执行。对于某些通用测试,只需要一个被验证过的模型,甚至连数据也无需提供。
这种能够自动生成测试用例的系统叫bot,可以一次生成大量的组合测试用例,有效解决功能点和测试点的覆盖空白问题。大约80%的测试工作到时候将由bot自动完成,而测试人员的主要精力将会被解放出来以放在更有创造性和探索性的测试任务上。
这不是幻想,而是已经变为现实,比如Appdiff是一个基于AI的移动app 自动化测试平台,能够完成一个典型移动app 90%的界面测试,而且它比人手工测试做得更好。
其次,AI bot可以发现更多的软件bug。AI bot一边测试一边时刻不停地新增数据输入,测试能力会越来越好,因而能够发现更多的bug。与此同时,对于迭代频繁的软件开发而言,当一个regression bug发现后,测试人员常常需要确定这个bug是什么时候引入的,这往往需要耗费大量的精力和时间,而AI bot能够持续地跟踪软件开发过程,找出其中bug被引入的时间,从而为开发人员提供有效信息。
最后,基于AI的测试也会让测试人员感到困惑。测试人员可能会怀疑AI测试的有效性,要消除这种不信任,测试人员需要掌握不同于传统测试人员所需的技能,他们需要更多聚焦在数据科学技能上,还需要了解一些机器学习的原理。
说到这里,也许有人会问,测试人员的工作会被AI抢走吗?
笔者总觉得答案是,也不是。说是,因为AI bot比较适合那些重复性较强的测试任务,如果测试人员的工作内容重复性较高,无创造性,那么迟早会被AI取代。然而对于那些需要一些创造性和比较困难的测试任务,AI目前还无能为力。
"AI is the new electricity",这是Stanford教授Andrew.Ng对于AI的一个很好的观点,对于软件测试来说,AI是一个工具,一个聪明的助手。而对于测试人员来说,需要拥抱变化,提升能力,这样才能更好地利用AI带来的能量!
版权声明:本文出自51Testing原创,51Testing软件测试网及相关内容提供者拥有内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。