TICA 2019 基于人工智能的模型驱动测试设计

阿里QA导读:面对被测系统发生重大的变化,过去的资产如何维护?如何通过人工智能驱动,设计测试自动化解决方案?本次分享将从模型驱动设计,AI如何优化测试用例等维度,介绍一种AI在软件测试领域的实践方案。

大家好,我是靳超,我今天给大家汇报的主题是,基于AI的模型驱动软件测试设计。

我们这个团队是从上个世纪一直做软件测试,今天上午也有老师聊到过在上个世纪有很多不同的软件,我们做这个行业的时候,当时有杀毒软件王江民,KV2000。当年做过一两年的MIS系统,从1999年开始我们一直做软件测试,从嵌入式系统测试,白盒测试,到代码安全测试,最近四年来我们一直关注于黑盒测试。我们专注于把国外最新的,成熟的产品和技术引入到国内来,服务于国内的软件开发组织。

在黑盒测试技术领域,我们目前关注于以上四个方面。

第一个方面,如何通过模块化去提高测试资产的可复用性。关于这个问题,实际上,对于有一段测试自动化历史,或者有些测试资产的用户,会有体验。在软件自动化测试当中有一个很大的挑战,就是当我们的被测系统发生变更时,我们对已有的测试自动化资产如何维护和复用。测试自动化资产维护的难度,会导致很多公司放弃自动化测试,回归到手动测试。我们一直带着这个问题去看目前黑盒测试领域的各项领先技术。目前来看,整个业界对于这个问题,没有一个按钮的解决方案,基本上各个厂家都是通过模块化,框架化,做到更好的测试资产维护。而在这个方向上,我们提供了一种无需脚本的,自带框架的模块化解决方案,更易于黑盒测试自动化的实现,提高可维护性和复用性。

第二个方面,完全基于图像识别,实现测试执行自动化。过去二十年当中,黑盒测试多采用对象识别作为基础,实现测试行为的自动化,脚本化。但是在这个过程当中,有很多的对象识别的方面的困难,或者对被测系统底层实现技术的相关性,造成自动化测试实现过程中的困难。后来,我们发现,在国外,早已有成熟的,完全基于图像识别,驱动整个测试流程自动化的平台。所以我们把这项技术引入到国内来,在过去的三年,我们的一批客户,使用我们的这项技术,将之前有赖于人工测试的繁琐的测试工作,实现了自动化。

第三个方面,是关于人工智能在测试领域中的应用。 这也是今天我们所专注的话题。我们都知道,以前的测试自动化,更多关注与测试执行的自动化。实际上,整个测试实现,前面有测试的设计工作,后面有测试数据的分析。我们今天汇报的,是基于人工智能的算法,如何服务于测试设计的自动化,关注于前面这个部分的工作,即怎样用人工智能的算法,结合模型驱动测试设计技术,帮助大家自动测试用例的设计和生成,更好的提升测试覆盖率,高效的发现缺陷。这个话题会展开讲,是今天主要的话题。

第四个方面,通过搭建DevOps环境中,不同专业领域工具间的数据总线,实现敏捷沟通。如果大家有印象的话,若干年前,IBM Rational团队曾经推出Jazz平台,希望完成类似的工作,帮助软件组织在整个软件生命周期中,帮助各个不同的专业团队,例如需求、设计、运维等不同团队之间使用的不同工具之间,实现的数据互联互通,达成高效敏捷的团队协作。而上述这个技术方向,就是我们离开IBM之后,发现的一个成熟的技术平台,实现这一需求,就引入国内,提供本地的技术服务工作。我们目前主要关注和提供以上四个方向的技术平台和服务,并将不断将国外最新的一些相关技术,引入到国内,来服务于各位。

今天,我们重点介绍的,是AI在软件测试设计领域的实践。主要是来自于英国的Eggplant。

近年来,Eggplant已经成为功能测试领域的头部企业,并获得了相关第三方评估机构的认可。作为最新的SIIA CODiE科迪奖的获得者,Eggplant被誉为最佳DevOps工具。在Gartner和Forrester的功能测试年度评估报告中,Eggplant也名列前茅。

其实我们回顾一下过去的十年,功能测试领域真的发生巨大的变化。传统上面的顶级玩家,现在慢慢地转向了一些更好的,有更加丰厚利润的市场方向。而在功能测试技术的演变和革新中,一些全新的公司,更加专注的投入到这个领域,站在业界的第一排。之前的一些问题和体现,在新的技术能力下,值得大家重新关注一下新的这些能力和技术。

我们可以看到,将AI技术应用于测试实践,是Eggplant获得第三方评估机构和市场关注和认可的原因之一。可见,近年来,整个业界,对如何使用人工智能的技术来变革软件测试的方式方法,非常的关注。

谈到人工智能,我们会想起,上世纪60年代,有一部电影,叫2001太空漫游,其中描述了人工智能机器为完成任务威胁到宇航员的生命。你就知道,人工智能不是一个新鲜的话题,只不过在过去的几十年中,对这项技术的关注,有几个波峰波谷而已。那时人们描述的人工智能,充满幻想,是兼具感情和逻辑的一种实现。事实上,当前我们应用中的人工智能,更直接的说,其包含的机器学习,例如神经网络算法等这类技术,更多实现了逻辑层面的一些工作,暂时还没有确定能产生类似人类情感的机制。而逻辑的实现,可以是使用机器学习算法,也可以使用更传统的,基于规则的系统实现,甚至有业界人士会聊到,机器学习算法的本质,依然是基于规则。

机器学习算法实质,是实现了一种模式匹配。算法可以根据各种各样的输入,通过算法中参数的自我调整,拟合出一种有时连人类都无法察觉的,辨识输入和特定输出之间的关联关系。这种模式匹配的能力,应用到各个行业,包括我们熟知的图像识别,自动驾驶,垃圾邮件分类等。

这种方法,同样适用于我们来优选测试中的不同的测试步骤组合,这就形成了不同的测试用例。这些不同的测试步骤的特征,作为算法的输入,和期望的特定的输出,例如在软件测试领域,我们将组织预期的功能测试覆盖率和尽可能多的发现缺陷作为期望达到的输出,我们去拟合出这种输入和输出之间的关联关系,实现机器帮助人类设计和优化测试用例组合,自动探索高价值的测试场景系列。今天我们汇报的重点,将放在技术达成的效果和为组织带来的价值上。

当我们接触一项新的技术时,总是希望,能了解这项技术是如何实现的?最近看了一篇TED的演讲,关于人工智能算法用于识别狼和狗的照片。演讲者描述,当时人工智能的专家们发现,算法识别的效果并不理想,并不像人们期望中的,像识别猫和狗的照片那样敏感。其实整个过程中,更糟糕的问题是,算法工程师,实际上也搞不清楚算法是如何具体实现这一识别过程的。以至于,他们最后发现,造成识别偏差的原因,和算法过于关注图片的局部,例如图片中背景中雪的图像,导致将背景中的雪,和认为图片中的动物更象是一只狼发生了倾向性的关联。这是一个算法缺陷。而且在发现这种倾向之前,算法工程师和编码人员,没有人知道两者之间的作用机制!人工智能算法的复杂性,带来了某些不可预知性,甚至对人工智能技术的某种担忧。

好吧,所以,今天,我作为一个普通的测试自动化人员,我的重点将不是探究工具算法的细节,例如,“利用Adam算法优化动量和指数加权移动平均法计算值, 使算法可以避免过于关注局部特征。”Eggplant是使用了怎样的算法来优化测试用例设计的?而是更关注于作为我们普通的测试人员,帮助我们做真正的软件测试设计,给企业带来更多的投资回报

所以,大概分成这么几个部分,第一个是模型驱动测试设计的由来的必要性;第二是在模型驱动过程当中,AI优化测试用例是怎么起到帮助,最后是应用实践,我们结合客户的实际应用的情况,介绍工具使用中一些相关的问题。

我们简单的回顾一下功能测试自动化发展的历史。

最早的自动化测试,我们使用捕捉回放,实现了一个测试行为线性的自动化脚本。很快我们发现这种线性脚本书写的效率,更关键的,是可维护性,都有很大的问题,自然而然我们追求脚本模块化,提高可维护性。后来我们发现仅仅做脚本的模块化也不理想,因为在我们测试过程中,有很多专业的,业务背景的测试人员,我们不是来自于IT专业,不喜欢直接使用代码和脚本,进而我们封装脚本,实现关键字驱动测试,将测试逻辑和测试数据分离,测试开发和测试执行分离,支持具有专业业务能力的人员,方便的设计测试场景,避免了编码的困扰。

但是,即使在这种方式下,大家发现仍然有一个问题。很多客户问我们,这样的包含若干测试步骤的用例依然由人来定的,我们如何保证人的思维能覆盖尽可能多的业务场景,包括异常操作,是不是有更好的方法。正是基于以上的提问,我们才引入了所谓的基于模型的这种测试用例生成方法,以满足用户提出的问题。

比如说,在一个类似于携程的旅行辅助软件中,如果我们采用我们推荐的建模方式之一,基于界面建模,我们使用模型,描述界面,即上图中蓝色的方框,我们称之为状态,和界面中所具有的各种功能,即上图中蓝色的方框中的灰色方框,我们称之为活动,以及活动和状态之间的关系,即上图中棕色的连接线。我们也可以采用基于行为的建模方式,我们回头再看。基于界面建模时,简单易用是最直观的感受。我们几乎不需要太多训练,就可以开始建模工作。工具随后将基于AI算法去覆盖各种各样的操作的可能性,包括测试人员能够想到的,同时也包括测试人员没有想到,但软件的最终用户可能使用软件的某种方式,也就是通常功能测试当中,测试设计人员设想的正向的路径,还有更多的异常的路径,缺陷就包含在这些测试路径中。这些路径,按照不同的,业务允许的方式,组合测试步骤,实现测试用例。

在这样一个环境下面,AI起到一个什么样的作用呢,这张图很好地解释了AI是怎么样参与这个工作。

通过模型,工具可以帮助我们产品大量的,具有业务逻辑的测试步骤组合,即测试用例。AI的作用,通过算法对潜在的,海量的测试用例系列进行优选,优先去执行高价值的测试用例。优选的依据,主要是两个目标,覆盖率和缺陷发现。人工智能的算法帮助大家分析这个模型,看看怎么样在有效的时间里。去优先执行哪些测试路径,能够更好帮助大家快速地提升覆盖率和发现缺陷。

实践中,我们感受到,这种新的方法,也改变了我们传统的,对功能测试自动化的理解。这种方式下面的功能测试变成动态的测试,之前基于脚本的测试是静态的。基于脚本的自动化功能测试,无论测试脚本执行多少次,脚本所验证的测试点,运行的路径,都是完全一样的。但是,在基于人工智能优化下的模型驱动测试,每次的测试都的测试的路径都是根据上一次测试的数据结果决定的。

我们刚才谈到算法所需要考虑的输入项,大概分成五个类别。

  • 业务权重

  • 回归测试用例

  • 特征值

  • 覆盖率

  • 已发现缺陷

这些输入项,会影响不同可选的测试步骤的权重,进而影响测试中,下一步测试步骤的选择的可能性。其中,业务权重和回归测试用例是容易为大家理解的。就是,重要的业务步骤,和我们人为确定需要执行的测试用例集合,这些输入项,都将影响模型驱动的测试,增加执行这些业务和路径的倾向。

从下面后台算法权重的展示界面中,大家也可以看到,已经执行的路径改变的覆盖率指标,和已经发现的缺陷,这些因素,都将影响测试路径选择时,每一步测试步骤最新的权重值得变化,进而及时调整测试的路径。

例如,根据之前做过的测试,曾经发现过缺陷的模块,或已经覆盖到的模块,它们的颜色被标示。相应的你会发现,在当前的测试步骤的选择时,算法将计算出下一步几个可能的测试步骤的相对权重,系统会选择权重最高的步骤去执行,这样会导致更多命中你从来没有测试过的模块或者是路径,或者去优先执行更有可能发现缺陷的测试用例。

除了基于界面和功能的这种直观,易于使用的建模方式之外,工具的模型可以提供其他的建模思路。例如面向行为的建模,可以给大家提供另外一种业务描述的可能性。

我们给大家总结了一下,人工智能给大家带来的好处,对于测试设计人员,工具帮助我们快速增加功能测试的覆盖率,帮助我们构建更多可能发现缺陷的测试场景,自动化生成测试用例。与此同时,使整个自动化测试更加易于维护,我们不会直接维护脚本,而是在模型层次上实现更加直观方便的维护。同时,脚本的编写量也极大的下降。因为模型实现测试逻辑,所需编写的代码只完成原子性测试步骤中和界面交互的部分。同时,基于模型的方式,对于覆盖率的提升和度量也非常有帮助。

下面是一个实际的用户应用测试场景。在这个案例中,客户最初期望我们完成两个测试用例。

  • 购物结算,核算商品金额。

  • 修改操作员头像。

实际通过模型构建的测试场景,通过自动化探索,可以覆盖各种潜在的,用户操作的可能性。实践中,这个模型在运行过程当中发现了另外一个客户没有要求的测试用例中,退出到登录界面时,上一个用户登录密码保持在密码输入框中的意外问题。这个工具构造的测试场景,可以帮助用户发现这个异常现象,进而需要用户分析是否是一个软件缺陷,是否需要修正。

上图有我的联系方式,如果大家对我刚才的介绍的内容,有哪些疑问,可以加微信,进一步讨论。

前面,我们介绍了讲的是测试设计自动化,但是在设计自动化的背后,我们依然需要有跟界面交互的手段。模型可以直接集成自带的,基于图像的自动化交互脚本语言。同时,通过这个脚本语言,模型可以集成几乎所有测试自动化交互方式和语言,包括Selenium、Java、Python、C#等。

Eggplant基于图像识别,不需要依赖任何对象识别,就可以实现的功能测试自动化,其跨平台,容易使用,无需开发背景的特点,在国内的用户实践中,广为客户赞誉。

工具具有专利的核心技术,图像识别技术,实现了可靠性和鲁棒性的平衡,在过去十几年中,服务于近700家用户,所以说,仅这一技术,值得大家关注和研究。

简单来说,这种基于图像识别的功能测试平台,他帮助大家实现了一个软件功能测试的万能钥匙,Eggplant的用户,从来不用担心您的应用是如何实现的,测试技术和被测对象的底层实现技术无关。它是您手里面的万能钥匙,可以使用单一技术,测试从移动平台,到PC平台,从B/S结构,到C/S结构,从Windows/Mac/Linux/Unix/System Z等等各类平台上的软件。

这就是我今天想要跟大家汇报的内容,大家有任何有兴趣讨论的话题,可以随时和我们联系。

谢谢大家。

原文地址:https://www.cnblogs.com/finer/p/12423014.html