• 0
  • 0
分享
  • 人工智能时代的软件测试
  • 恬恬圈 2019-10-17 10:50:55 字数 2581 阅读 2039 收藏 0

1.人工智能与机器学习

人工智能(AI, Artificial Intelligence)与机器学习(ML, Machine Learning)是时下最火热的技术方向之一。准确地讲,人工智能不等同于机器学习,机器学习只是人工智能的一个子集。由于媒体的误用,本文遵循媒体的叫法,文中提到的人工智能,一般泛指机器学习。

人工智能,顾名思义,就是希望创造出拥有像人类那样智能的机器,这是人类的终极梦想之一。该词早在1956年就提出了,当时的科学家曾乐观地估计,二十年左右人类就可以将其实现。然而科学家也很快就发现其难度远大于预估。在此之后的很长一段时间里,人工智能的研究陷入低谷。

通常我们将人工智能分为弱人工智能和强人工智能,前者只专注于完成某个特定的任务,例如2016年战胜围棋世界冠军李世石的Alpha Go,而强人工智能,目前只存在于科幻电影之中。虽然强人工智能仍然道路漫长,但是弱人工智能却有希望取得突破,至少从表现行为来看,它已经拥有了一些"智能"。那么它是如何实现的呢?这主要归功于一种实现人工智能的方法--机器学习。

说到机器学习,我们先来回顾一下计算机程序解决问题的传统模式:根据一套确定的规则编写出计算机程序,接受收入然后获得输出:

1.png 

图1 - [1]

然而现实中,有很多问题无法用确定的规则来定义算法,例如把手写的数字图片用计算机程序识别出来。因为每个人写的都不一样。但是,假如我们有大量的手写数字图片和实际结果数据的话,就可以通过这些数据的学习(训练),使得计算机程序能够自己找到其内在的方法,就好像是计算机程序学习了知识经验一样。这样,下次再遇到手写数字的时候,计算机程序就能够自动识别了。这个过程就是机器学习。其解决问题的模式如下:

2.png

图2 - [2]

机器学习的关键点在是找到训练模型,利用大量的数据进行训练,获得最优模型,以用于对未来的问题进行预测与解决。机器学习当前在很多领域都有了迅速的发展,也有人将其引入软件测试领域。


2.软件测试

软件测试的目的是为了发现软件工程中存在的bug,从而提高软件的质量。

早期软件的规模小,复杂度低,那个时候基本没有什么软件测试,软件测试基本等同于开发人员的软件调试。随着软件规模的扩大和软件复杂度的提升,软件测试变得越来越重要,软件项目中也有了测试人员。

软件测试发展到如今,基本可以分成两类:

手工测试:

通过手工方式完成软件的测试。这种方式费时费力,重复性的工作让测试人员身心倍感疲倦。但是目前来讲,软件测试还不能完全杜绝手工测试,其原因主要在于有些手工测试转换成自动化测试难度太大或者成本太高。

自动化测试:

借助自动化测试工具或者测试人员自己编写测试脚本完成软件的测试。自动化测试极大的提高了软件测试的效率,减轻了测试人员的负担。理论上来说,重复性的测试工作都应该做到自动化。在有些人力资源不充足的团队当中,开发人员本身就要负责单元测试(UT)的开发,这虽然违背软件测试的某些原则,但是却能实实在在地提高软件开发的质量。

不管哪种测试,软件测试的根本是利用预测的结果和实际测试时的结果进行比较来完成测试功能,所以软件测试用例的预期结果在测试前就确定了。

随着软件规模的扩大,这种传统的测试方法越来越难以应对日益增长的测试对测试人员的挑战。

3.png

图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软件测试网及相关内容提供者拥有内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   购物车页面用例设计  一、购物车页面  二、购物车页面测试范围列表  三、购物车页面功能点需求分析  四、部分功能点的测试用例设计  购物车页面  1、验证添加商品到购物车页面合法,添加成功  ·步骤描述  选择不大于20种商品点击加入购物车,再进入我的购物车页面对比选中的商品结果。  ·测试数据  商品种类:1种、19种、20种  ·预期结果  1)购物车页面显示的商品与添加的商品一致  2)公共头部购物车角标+1、+19、+20  3)数据库表tp_cart新增1条/19条/20条记录  2、验证添加商品到购物车页面种类数非法,添加失败  ·步骤描述  选择大于20种商品加入购物车,再...
            10 10 2266
            分享
          • UI自动化是自动化测试中不可分割的一部分,是黑盒测试的一种重要手段。在UI自动化测试过程中,我们不可避免会遇到各种各样的问题,现将自己在测试过程中遇到的问题进行汇总,希望可以为大家提供帮助。1、启动浏览器报错报错信息:Exception in thread "main" org.openqa.selenium.WebDriverException: unknown error: call function result missing 'value'...
            0 2 2236
            分享
          • 1、基于webdriver的分层自动化框架及平台搭建,目前刚好在做这一块的工作,对于分层次和平台搭建,想问下大神有什么好的建议?我们拿数据驱动框架来举个例子。下面是我做的一个简单的框架样式:这样一个结构,分为base层(公共用例),element(元素层),properties(UI map层--properties文件),resource(资源层),task(存储suite的testng文件),testcase(case层),util(底层,方法层)。用这样一个结构来更容易理解,更便于维护我们的框架。当然,这是一个基本demo哈,可以根据自己的实际情况扩展。总之,没有最好的,只有最适合的,哈...
            0 1 2302
            分享
          • 都说“工欲善其事,必先利其器”。做软件测试行业,怎么能缺少好用的软件测试工具呢?对于很多小伙伴,尤其是新手来说,刚入行时,由于接触的工具比较少,会的工具可能也就那么几个,如果工作中再涉及不到使用新工具,那么后期想要能力上、职位上有所提升,肯定会是一件非常难的事情。为了避免这种情况的发生,最好的办法就是提前了解其他工具,利用业余时间开始学习接触新工具,才能有自己的发展之地。那么,时下IT行业里,主流的软件测试工具有哪些呢?笔者以为,主要有以下10类。具体大类如下:白盒测试工具、web测试工具、持续集成工具、C/S自动化工具、app自动化工具、代码扫描工具、测试管理工具、接口测试工具、性能测试工具...
            0 0 1636
            分享
          • 一、Java集合框架概述集合可以看作是一种容器,用来存储对象信息。所有集合类都位于java.util包下,但支持多线程的集合类位于java.util.concurrent包下。Java集合类主要由两个根接口Collection和Map派生出来的,Collection派生出了三个子接口:List、Set、Queue,因此Java集合大致也可分成List、Set、Queue、Map四种接口体系,(注意:Map不是Collection的子接口)。其中List代表了有序可重复集合,可直接根据元素的索引来访问;Set代表无序不可重复集合,只能根据元素本身来访问;Queue是队列集合;Map代表的是存储k...
            0 0 1276
            分享
      • 51testing软件测试圈微信