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

发布时间:2023年12月29日

关于人工智能以及它如何改变我们做事的方式,人们已经说了很多。当谈到软件测试时,人工智能的地位是什么?这篇文章重点介绍了人工智能如何帮助实现强大的软件测试。

人工智能 (AI) 的出现继续改变着技术格局。它在软件开发的多个方面的应用不断增长。软件测试是人工智能应用可以推进的软件开发领域之一。

Parasoft 产品免费试用icon-default.png?t=N7T8https://www.evget.com/consult/parasoft/#Aps_contact

软件测试对于确保发布的软件产品既满足合规标准又满足用户的质量要求至关重要。然而,由于人工智能的使用存在许多变化,我们将深入探讨人工智能在软件测试中的含义。

  • 软件测试自动化背景下的人工智能与其更广泛的定义有何不同?
  • 当我们谈论人工智能及其姊妹术语机器学习时,我们在谈论什么?
  • 使用人工智能和机器学习来推进最先进的 API 测试有哪些好处?

让我们来看看吧。

什么是人工智能以及它如何改变软件测试的动态?

人工智能是数字市场上最流行的流行语之一。“人工智能”让人联想到诸如全能超级计算机一心要毁灭人类、Alexa 或 Siri 等语音控制辅助、计算机国际象棋对手以及自动驾驶汽车等形象。

维基百科将人工智能研究定义为“ ……对“智能代理”的研究:任何能够感知环境并采取行动以最大程度地成功实现其目标的机会的设备。” 但这有点太抽象了。

我喜欢将人工智能视为计算机程序或机器思考(自身推理)和学习(收集数据并以有益的方式修改未来行为)的能力。

正是在这个定义中,我们开始看到人工智能对软件开发工具和技术意味着什么更有意义的东西。

更多的软件版本意味着更多的软件测试

随着全球开发人员数量持续激增,预计会有更多软件版本进入软件市场。Statista 最近的一份报告证实了这一预期,预测显示全球开发者人数预计将从 2020 年的 2450 万增加到 2024 年的 2870 万。

这预示着我们将在未来几年继续看到更多软件的发布。随着软件版本数量的预期增长,需要自动化软件测试。

软件测试是对软件基础设施进行一系列功能和非功能测试场景的过程。这是一个评估软件的过程,以确保它能够有效地完成其设计目的。当团队测试软件时,他们可以发现并解决运行时缺陷、可扩展性问题、安全漏洞等。

软件测试过程通常很严格,因此需要自动化。然而,要使软件自动化变得超级高效和无缝,就需要结合人工智能。

软件测试自动化中的人工智能

人工智能在软件开发中的应用仍在不断发展,但与自动驾驶系统或语音辅助控制、机器翻译和机器人等更先进的工作领域相比,目前人工智能在软件自动化测试中的使用水平较低。

人工智能在软件测试工具中的应用重点是使软件开发生命周期(SDLC)变得更容易。通过推理、解决问题以及在某些情况下机器学习的应用,人工智能可以帮助自动化并减少开发和测试中平凡而乏味的任务量。

您可能想知道,“测试自动化工具不是已经做到了这一点吗?”?当然,测试自动化工具已经具有人工智能功能,但它们也有局限性。

人工智能在软件开发中的亮点在于它可以消除这些限制,使软件测试自动化工具能够为开发人员和测试人员提供更多价值。人工智能的价值来自于减少开发人员或测试人员直接参与最平凡的任务。我们在应用商业逻辑、战略思维、创意等方面仍然非常需要人类智能。

例如,考虑到大多数(如果不是全部)测试自动化工具都会为您运行测试并交付结果。大多数人不知道要运行哪些测试,因此他们运行所有测试或某些预定的测试集。

如果支持 AI 的机器人可以查看测试状态的当前状态、最近的代码更改、代码覆盖率和其他指标,然后决定运行哪些测试并为您运行它们,会怎么样?

基于不断变化的数据做出决策是应用人工智能的一个例子。好消息!Parasoft 处理此级别的自动化软件测试。

机器学习如何增强人工智能

那么,机器学习呢?

机器学习 (ML) 可以通过应用算法来增强人工智能,这些算法允许工具通过收集测试产生的大量数据来自动改进。

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

在其他情况下,数据收集是决策过程的关键,而机器学习可能非常有价值,它最初需要一些数据,然后随着收集到更多数据而进行改进或适应。例如,代码覆盖率、静态分析结果、测试结果或其他软件指标,随着时间的推移,可以让人工智能了解软件项目的状态。

软件测试中人工智能和机器学习的真实例子

人工智能和机器学习是 Parasoft 持续研发的重要领域。我们的研究结果不断带来令人兴奋的新方法,将这些技术集成到我们的产品中。以下是我们利用它们的几种方法。

使用软件测试 AI 提高静态分析的采用率

成功采用静态分析工具的障碍之一是管理大量警告并处理结果中的误报(不是真正错误的警告)。分析遗留或现有代码库的软件团队很难通过静态分析获得初步结果,并且会因这种经验而放弃进一步的努力。不知所措的部分原因是现代静态分析工具可能存在的标准、规则(检查器)、建议和指标的数量。

软件开发团队有独特的质量要求。对于检查器或编码标准,没有一刀切的建议。每个团队都有自己对误报的定义,通常意味着“不在乎”而不是“这在技术上是不正确的”。Parasoft 的解决方案是应用人工智能和机器学习来优先考虑静态分析报告的结果,以改善用户体验和此类工具的采用。

Parasoft 使用一种方法来快速将静态分析工具输出中的结果分类为团队想要看到的内容或团队想要抑制的内容,方法是审查少量结果并根据与相关的元数据构建分类器这些发现。

该分类器基于以前对静态分析结果的分类结果,在历史上抑制不相关的警告以及对有意义的结果进行优先优先级排序以在代码库内进行修复。

最终结果分为两种:

  • 团队有兴趣进行调查。
  • 可以压制的物品。

通过引导开发人员注意最有可能应用于其项目的警告,极大地改善了用户体验。我们还实施了一个热点检测引擎以及一个基于人工智能的先进模型,用于将违规行为分配给符合其最佳技能和经验的开发人员,并从他们过去修复的违规行为中学习。通过这些创新,组织可以立即减少采用和使用静态分析的手动工作。

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

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

Parasoft Jtest 的 IDE 插件通过简单的一键操作来创建、扩展和维护单元测试,为单元测试实践添加了有用的自动化功能。通过使用支持 AI 的 Jtest,用户可以实现更高的代码覆盖率,同时显着减少构建全面且有意义的 Junit 测试用例套件所需的时间和精力。

实现此目的的一种方法是更轻松地创建存根和模拟以隔离测试中的代码。底层 AI 使 Jtest 能够观察被测单元以确定其对其他类的依赖关系。当创建这些依赖项的实例时,它建议用户模拟它们以创建更多隔离的测试。

自动创建必要的模拟和存根可以减少测试创建中最耗时的部分之一的工作量。

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

使用 AI 和 ML 自动化 API 测试生成和维护

另一个很好的例子是Parasoft SOAtest的智能 API 测试生成器,它添加了机器学习。它超越了记录和回放测试,利用 AI 和机器学习将 UI 测试转换为完整、自动化的 API 测试场景。

智能 API 测试生成器使用推理来理解在执行 UI 时进行的不同 API 调用中的模式和关系。根据该分析,构建了一系列 API 调用,表示 UI 流程期间进行的底层接口调用。

然后,它通过观察不同 API 资源的情况并将其作为模板存储在专有数据结构中来应用机器学习。通过检查用户库中的其他测试用例来更新此内部结构,以了解练习 API 时的不同类型的行为,例如断言或在正确的位置添加特定标头。

人工智能的目标是创建更高级的测试,而不仅仅是重复用户正在做的事情,就像简单的记录和回放测试一样。智能 API 测试生成器的工作原理如下:

  1. 识别交通内部的模式。
  2. 创建观察参数的综合数据模型。
  3. 生成并启用自动化 API 测试,将学习到的模式应用于其他 API 测试,以增强它们并帮助用户创建更高级的自动化测试场景。

由此产生的自动化 API 测试更加完整、可重用、可扩展且能够适应变化。

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

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

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

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

除此之外,Selenic 还可以自我修复不同类型的“等待条件”,解决与被测系统性能特征相关的不稳定性问题。它还测量与在网页上运行每个测试用例相关的时间,并将其与先前运行捕获的历史平均值进行比较。如果偏差超过特定阈值,则会在报告内标记警报,以通知用户重大变化。

通过测试影响分析优化测试执行

测试影响分析 (TIA) 评估对生产代码所做的更改的影响。它有助于揭示受代码更改影响的测试用例。TIA 的主要好处是,它无需在修改后对整个代码库运行测试。这可以节省时间和成本,同时保持您的开发流程高效运行。

您可以在执行手动测试期间受益于 TIA 技术,也可以利用基于 TIA 的工具与 CI/CD 管道的集成。这可以优化自动化测试的运行,并向开发人员提供有关更改对其项目质量的影响的更快反馈。根据产品的性质和要执行的测试类型,您可以利用 Parasoft 的 AI 增强技术来优化.NET 和 C# 静态分析测试、Java 单元测试、Selenium Web UI 测试和API 测试的执行。

结论

软件市场的爆炸式增长表明,将继续发布更多软件来解决我们日常业务中的问题。然而,为了让软件高效运行并尽快进入市场,软件测试需要自动化和人工智能。这就是 Parasoft 发挥作用的地方。

在 Parasoft,我们提供人工智能驱动、机器学习驱动的软件测试解决方案,将质量集成到软件开发过程中,以在 SDLC 的早期预防、检测和修复缺陷。

文章来源:https://blog.csdn.net/m0_67129275/article/details/135285341
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。