lsekfe 发表于 2021-5-13 10:10:42

解析AI测试的三重含义,千万别产生歧义

 随着AI影响力的日益扩大,AI与软件测试的交叉领域,即AI测试,成为热门方向。然而,这里存在一个陷阱:对于AI测试来说,如果不结合上下文,是很容易产生歧义的。
  换句话说,AI测试是个多义词。今天,我们就来说文解字,解析AI测试背后的三重含义。对于每一种含义,我们从what(是什么),why(为什么)和how(怎么做)这三个角度进行解析。
  AI测试的第一种含义是AI驱动的测试(AI-driven testing),即testing by AI。
  顾名思义,AI驱动的测试,就是运用AI技术来赋能软件测试。这里,赋能的含义既可以是替代人工,也可以是辅助人工。与传统测试相比,测试的对象仍然是常规软件,但是由于AI的运用,测试的方法和技术发生了改变。
  为什么需要AI驱动的软件测试呢?有两方面原因。
  一方面,AI的能力十分强大。AI已经在机器翻译,语音识别,图像理解,疾病诊断,智能助手等众多领域有优秀的表现。AI之所以应用广,能力强,其背后是有数学原理支撑的,例如万能近似定理。从理论上说,AI能承担任何工作,软件测试也不例外。
  另一方面,软件测试存在巨大痛点。一直以来,测试都是软件研发过程中耗时长,成本高,又不得不做的工作。人们曾经寄希望于自动化测试来改善这一状况。然而,自动化测试不仅带来额外的开发和维护成本,而且已有的自动化技术基本只能让局部测试工作自动化,大量测试工作仍然是人工的。
  既然AI有能力,测试也有需求,那么"一拍即合",AI驱动的测试也就应运而生。然而,如何实现AI驱动的测试呢?
  面向AI驱动测试的创业公司。调研发现,目前大部分AI测试创业公司聚焦于系统级UI测试这一领域。它们致力于打造智能化的测试机器人,使之完成对UI的学习,建模,测试和错误定位。
  这些创业公司提供的典型服务包括:1) 基于强化学习技术,让测试机器人与UI进行交互,引导机器人发现链接失效,页面响应慢等问题。2) 基于图像识别技术,定位UI中功能异常或影响用户体验的元素。3) 基于自然语言处理技术,根据测试意图或产品需求文本,自动生成测试用例,并执行。
  在软件测试的部分环节和局部领域,一批AI落地并辅助测试工作的案例。
  这些案例包括:1) 根据用例内容和历史执行记录,动态估计用例失败概率,并依此来编排用例执行顺序。2) 根据持续测试失败日志,自动对失败原因进行分类。3) 根据缺陷描述,自动将其分配给对应的开发组。
  从这两份调研报告可以发现,AI驱动的测试是个大领域,既涉及强化学习,自然语言处理,图像识别等多种AI技术,也涉及用例生成,用例执行,缺陷管理等多方面测试工作。总的来看,AI驱动的测试仍然处于前期发展阶段,距离产生成熟的通用智能测试工具还有很长一段路要走。
  AI测试的第二种含义是面向AI的测试,即testing for AI。相对来说,测试AI比AI测试更能表达这种含义。注意到,此时的测试对象不再是常规软件,而是具有AI能力的软件。
  那么,为什么需要测试AI呢?在我看来,也有两方面原因。
  首先,任何应用软件都是为了满足需求而产生的,AI软件也不例外。检验软件的实际行为是否符合需求描述的过程,就是测试的过程。针对AI应用的测试,也就不可避免。随着具有AI能力的智能化软件越来越普及,测试AI软件也就成为普遍需求。
  其次,测试AI与测试常规软件存在一个根本不同,即测试预言(test oracle,软件的期望输出)无从知晓,因此我们难以运用传统测试长期积累的(依赖于测试预言的)经验与技术来测试AI,需要新的测试理论和测试技术。
  基于这两方面原因,如何测试AI成为一个重要的新课题,逐渐引起软件测试界的关注。那么,究竟应该如何测试AI呢?这个领域正在开拓之中,已经浮现出来的方法包括:
  1) 单元测试。AI软件内部有许多功能性模块,例如数据集加载,数据清洗,特征变换等。这部分模块与传统软件是类似的,即期望输出可知。因此传统的单元测试框架,以及代码覆盖率度量工具,在面向这部分模块时仍然适用。
  2) 数据测试。对于基于监督学习的AI应用来说,AI的准确性很大程度上取决于训练数据的质量。因此,我们需要对训练数据进行测试,以保障数据质量。数据测试的内容包括标记的正确性,样本数量的充分性,样本结构的合理性等。
  3) 模型测试。对于训练得到的模型,我们需要在新的数据集上测试它的性能。很多时候,新的数据集是没有标记的,这给模型测试带来巨大挑战,已知的针对性技术有蜕变测试,覆盖引导的模糊测试等。
  4) 集成测试。AI模块往往不是孤立存在的,而是与一些非AI模块存在交互。此时,我们需要对AI模块与非AI模块之间的接口进行测试,以保障AI模块能够正确处理接口可能出现的各种边缘和异常情况。
  事实上,除此之外,训练模型的过程,也是一个不断进行测试的过程。对于AI工程师来说,模型训练和参数调整往往是其主要的工作内容。因此,从广义上说,每个AI工程师同时也是测试工程师。
  然而,鉴于传统软件由开发工程师自己保证质量往往不够,AI软件仅靠AI工程师自己来保证质量可能也只是权宜之计。随着AI逐渐应用于金融和安全等关键领域,用户对AI软件质量的要求会越来越高,可能会对独立的AI测试工程师提出要求。
  AI测试的第三种含义是AI自测试,即self-testing of AI。
  对于一部分AI软件(例如,基于强化学习的游戏机器人)来说,它们有个重要特点是能够动态自适应环境变化。那么,如何在运行时(runtime)检验AI软件的自动适配是否正确或符合预期呢?这就需要AI自测试。
  目前,对于AI自测试主要有两种思路。一是异地自测试,即在另外一台机器上复制当前应用,并在副本上测试适配效果;二是原地自测试,即在当前机器之上,运用事件溯源(event sourcing)等技术对应用适配进行测试。当然,AI自测试还是一个很新的方向,暂无工业界落地案例。
  以上就是AI测试的三种不同含义,即AI驱动的测试,面向AI的测试和AI自测试。鉴于AI测试的多义词性质,大家在谈论AI测试时,应当限定具体语境,以避免产生歧义。
页: [1]
查看完整版本: 解析AI测试的三重含义,千万别产生歧义