什么是软件测试中的人工智能?

原创|行业资讯|编辑:郑恭琳|2021-02-23 15:54:35.193|阅读 18 次

概述:人工智能是软件开发行业中最新的流行语之一。但这到底是什么意思?在软件测试自动化的背景下,人工智能与广义定义有何不同?

# 周年庆正版采购有优惠,点击咨询 # # 31款JAVA开发必备控件和工具 #

相关链接:

人工智能是软件开发行业中最新的流行语之一。但这到底是什么意思?在软件测试自动化的背景下,人工智能与广义定义有何不同?

当我们谈论AI及其姊妹术语机器学习时,我们是什么意思?我以为我会清理我们的用法,所以很清楚我们如何使用AI和机器学习来推进最新的API测试。


如何在软件测试中实施人工智能(不仅仅是嗡嗡声)

人工智能是数字市场上最繁琐的流行语之一。AI”让人联想到功能强大的超级计算机之类的图像,这些图像深陷于人类的毁灭之中。通过AlexaSiri的语音控制帮助;电脑象棋的对手;或自动驾驶汽车。

维基百科将AI研究定义为“……对“智能代理”的研究:任何能感知其环境并采取行动以最大程度地成功实现其目标的设备。”但这有点抽象。我喜欢将AI视为计算机程序或机器思考(自身原因)和学习(收集数据并以有益的方式修改未来行为)的能力。在这个定义中,我们开始看到AI在软件开发工具和技术中的意义。

同样重要的是要认识到AI”的范围会随着时间而变化。例如,人们曾经一次将AI中的光学字符识别(OCR)技术视为最新技术。或是SiriAlexa的问答式回答,其中的影响曾经被认为是最先进的,但现在在很大程度上被认为是理所当然的,而不总是被视为AI系统。软件测试工具将发生同样的事情-随着新功能的发展,当今自动化领域的创新将成为人们期待的事情。但是现在,让我们考虑一下2019年软件测试自动化中的AI


2020年实现软件测试自动化中的AI

人工智能在软件开发中的使用仍处于起步阶段,其自主性水平远低于诸如自动驾驶系统或语音辅助控制之类的更先进的工作领域,尽管它仍在朝着方向发展自主测试。AI在软件测试工具中的应用旨在简化软件开发生命周期。通过推理,问题解决以及在某些情况下的机器学习的应用,人工智能可用于帮助自动化和减少开发和测试中平凡而繁琐的任务。

“还没有测试自动化工具吗?”你可能会问。

答案当然是:“是的!他们是这样!”…但是它们有局限性。

人工智能在软件开发中大放异彩的地方就是它被应用来消除那些限制,以使软件测试自动化工具能够为开发人员和测试人员提供更多价值。AI的价值来自减少开发人员或测试人员直接参与最普通的任务。(在应用业务逻辑等方面仍然非常需要人类智能。) 

例如,考虑到大多数(如果不是全部)测试自动化工具为您运行测试并提供结果。大多数人都不知道要运行哪些测试,因此他们会运行所有测试或预定的一组测试。那么,如果启用AI的机器人可以查看测试状态的当前状态,最近的代码更改,代码覆盖率和其他指标,确定要运行的测试,然后再运行它们,该怎么办?引入基于更改数据的决策是应用AI的一个示例(顺便说一下,Parasoft就是这样做的)。该软件可以有效地在决策过程中替代开发人员/测试人员。将其应用于CI/CD管道的好处显而易见。


人工智能和机器学习

那么,关于机器学习呢?机器学习可以通过应用算法来增强AI,算法允许工具通过收集测试产生的大量数据来自动改进。

机器学习研究是整个AI研究的子集,其重点是基于先前观察到的数据进行决策管理。这是整个AI的重要方面,因为随着学习的改善,智能需要修改决策。但是,在软件测试工具中,机器学习并非总是必要的-有时最好手动微调支持AI的工具以适合使用该工具的组织,然后每次都可以应用相同的逻辑和推理,而无论结果。

在其他情况下,数据收集是决策过程的关键,而机器学习可能会非常有价值,首先需要一些数据,然后随着收集更多数据而进行改进或调整。例如,随着时间的流逝,代码覆盖率,静态分析结果,测试结果或其他软件度量标准可以将有关软件项目状态的信息告知AI

深度学习

机器学习有其自己的名为“深度学习”的子集,该子集基于处理大量数据以供学习。在大多数情况下,此类数据由多层分析神经网络表示-它们是受人类神经元网络启发的模型,可帮助计算机获取新知识并高度智能地推理。


深度学习的关键方面是以神经网络为代表的大量信息,以驱动决策过程。如此大量的数据并不总是可用或不适用于软件测试-也许这就是为什么我们在这些领域没有看到很多深度学习案例的原因。一个可能的示例是从数千万行代码中“学习”,以了解不同类型的安全冲突,并基于深度学习模型实现静态分析引擎。


软件测试中AI和机器学习的真实示例

这是Parasoft的重要研发领域。令人兴奋的是,我们当前的产品仅仅是开始,而我们对AIML的持续研究继续为将这些技术集成到我们的产品中带来新的方式。我们已经采用了以下几种方法。

使用人工智能使单元测试生成和参数化自动化

第一个示例在Parasoft Jtest中,这是我们针对Java开发人员的软件测试解决方案,其中包括静态分析、单元测试、覆盖率和可追溯性等。在此应用AI,我们发布了自动测试用例生成,可帮助开发人员填补空白从稀疏的JUnit工具开始。

Parasoft JtestIDE插件通过简单的一键式操作即可创建,扩展和维护单元测试,从而为单元测试实践增加了有用的自动化。通过使用支持AIJtest,用户可以实现更高的代码覆盖率,同时将构建全面而有意义的Junit测试用例套件所需的时间和精力减少一半。

一种方法是通过简化存根和模拟来隔离被测代码。底层的AI使Jtest能够观察被测单元以确定其对其他类的依赖关系,并且在创建这些依赖关系的实例时,建议将其模拟给用户以创建更多隔离的测试。自动创建必要的模拟和存根可以减少测试创建中最耗时的部分之一的工作量。

Parasoft Jtest还可以自动检测现有测试套件未涵盖的代码,并遍历源代码的控制路径,以找出需要将哪些参数传递给被测方法,以及需要如何初始化sub/mocks才能到达该代码。通过启用此AIJtest可以自动生成新的单元测试,并应用修改后的参数来增加整个项目的总体代码覆盖率。

使用AI和机器学习自动执行API测试的生成和维护 

另一个很好的例子是Parasoft SOAtestSmart API Test Generator,它增加了机器学习功能,它超越了记录和回放测试的范围,利用AI和机器学习将手动UI测试转换为完整的自动化API测试方案。

智能API测试生成器使用推理来理解在执行UI时进行的不同API调用中的模式和关系。通过该分析,构造了一系列API调用,这些API调用表示在UI流期间进行的基础接口调用。然后,它通过观察有关不同API资源的内容并将其作为模板存储在专有数据结构中,来应用机器学习。通过检查用户库中的其他测试用例,以学习使用API时的不同类型的行为(例如,断言或在正确的位置添加特定的标头)来更新内部结构。

此处AI的目标是创建更高级的测试(不仅仅是重复用户所做的事情,就像通过简单的记录和播放测试一样)。该工具可以识别流量内部的模式,创建观察参数的全面数据模型,生成自动化的API测试,并可以将学习的模式应用于其他API测试以增强它们,并帮助用户创建更高级的自动化测试场景。由此产生的自动化API测试具有更完整的可重用性,可伸缩性和更改弹性。

使用机器学习自我修复硒测试的执行

自动验证UI层是测试策略的另一个关键组成部分,以确保产品在投入生产之前已得到完全验证。Selenium框架已被广泛用于UI测试,这是用户的明确选择,但用户仍无法摆脱常见的Selenium测试在可维护性和稳定性方面的挑战。AI技术(尤其是机器学习)可以在此提供帮助,在运行时提供自我修复功能,以解决与UI测试执行相关的常见可维护性问题。

我们通过Parasoft Selenic提供此功能,它可以在定期执行Selenium测试期间“了解”内部数据结构。Selenic引擎监视每次运行,并捕获有关被测应用程序的Web UI内容的详细信息。它提取DOM元素,它们的属性,定位符等,并将它们与UI驱动的测试所执行的操作相关联。Selenic采用Parasoft专有的数据建模方法,将该信息存储在其AI引擎中,并且该模型会不断更新,分析所有测试的历史执行以继续变得“更智能”。

如果网页的UI元素被显着移动或修改而导致测试失败,则这是至关重要的时间节省。借助Selenic,引擎使用的AI启发式算法可以将那些已更改的元素与模型表示的历史数据“匹配”,并自动生成可抵抗更改的“智能定位器”,以在运行时恢复Selenium测试的执行。有关这些更改的信息会自动通过模型传播,并且会根据这些更改来调整未来的新定位器。

使用软件测试人工智能提高静态分析的采用率

成功采用静态分析工具的障碍之一是管理大量警告并处理结果中的误报(警告不是真正的错误)。对遗留或现有代码库进行分析的软件团队将无法获得通过静态分析获得的初始结果,并且由于这种经验而被关闭,以至于无法继续努力。不堪重负的部分原因是现代静态分析工具可能会提供的标准,规则(检查程序),建议和度量标准的数量。

软件开发团队具有独特的质量要求,并且没有针对检验工具或编码标准的所有建议。每个团队都有自己的误报定义,通常是“不在乎”而不是“从技术上讲是不正确的”。为此,Parasoft的解决方案是应用AI和机器学习对静态分析报告的结果进行优先级排序,以改善用户体验并采用此类工具。

Parasoft使用一种方法将静态分析工具的输出中的发现快速分类为团队希望看到的结果或团队希望通过查看少量发现并基于与之关联的元数据构造分类器来抑制的结果。这些发现。该分类器是基于先前对静态分析结果的手动分类的结果,该结果是在不相关警告的历史抑制和有意义的发现的优先级确定要优先解决的情况下进行修复的。

最终结果以两种方式分类:

  • 供团队研究的兴趣

  • 可以抑制的项目

通过将开发人员引导至最有可能应用于其项目的警告,从而极大地改善了用户体验。通过这些创新,组织可以立即减少采用和使用静态分析的人工。


人工智能和机器学习的未来

那么接下来呢?我们正在这一领域积极进行研发,继续搜索人工智能和机器学习的更多应用,以增强我们的软件测试工具套件。有很多研究途径,但最终目标很明确:帮助团队更有效地开发和测试代码,快速创建更高质量的软件。



标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,尊重他人劳动成果

登录 慧都网发表评论


暂无评论...

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
相关厂商
相关产品
Parasoft Jtest

专业针对Java语言的开发测试方案,可无缝集成Parasoft SOAtest

Parasoft SOAtest

业内最全面的API、云服务和SOA测试平台,提供优秀的负载与性能测试、API安全测试等功能

Parasoft SOAtest with Load Test

通过使用现有的功能测试来解锁早期的负载和性能测试

在线
客服
咨询
电话
400-700-1020
在线
QQ
购物车 反馈 返回
顶部
在线客服系统
live chat