技术应用 | 大模型时代软件测试技术方向与趋势

B站影视 2025-01-07 09:33 2

摘要:随着大语言模型(LLM)的发展,软件测试正经历着深刻变革,从传统的自动化测试向智能化方向演进。本文探讨了大模型时代软件测试的新范式、技术方向、实践应用及未来展望。首先,大模型可以认知物理世界,从而能够突破一直困扰智能化测试的障碍。其次,企业需要在一些技术方向(

随着大语言模型(LLM)的发展,软件测试正经历着深刻变革,从传统的自动化测试向智能化方向演进。本文探讨了大模型时代软件测试的新范式、技术方向、实践应用及未来展望。首先,大模型可以认知物理世界,从而能够突破一直困扰智能化测试的障碍。其次,企业需要在一些技术方向(如测试领域模型、提示工程等)上构建自己的核心能力。此外,结合实际案例,介绍了大模型在软件测试全生命周期中的实践应用。最后,对软件测试的未来发展提出了挑战和展望,包括实现准确的生成结果、高覆盖率、精准评估性能等方面的挑战,以及多智能体协作完成测试等未来发展趋势。

同济大学特聘教授 朱少民

在数字化时代,软件研发正经历着一场革命性的变革。这场变革的核心是大型语言模型(Large Language Models,简称LLM),它正在以前所未有的方式改变着软件研发的范式。软件测试属于软件研发的一部分,也不例外,大模型技术给软件测试同样带来了新的机遇和挑战。借助LLM强大的语言理解和生成能力,我们能够为软件测试提供更智能、高效的解决方案。本文将深入探讨大模型时代软件测试的技术方向与趋势,旨在为软件测试领域的发展提供有益的参考。

谈到大模型、人工智能(AI),我们可以追溯到上个世纪50年代,艾伦·图灵提出了“图灵测试”,旨在评估机器是否能够思考,即机器能发展出与人类不可区分的智能行为。这个与我们测试人紧密相关的主题,开启了AI之后70多年的历史(虽然许多人乐意将1956年定为AI元年)。从“图灵测试”的提出到现代AI技术的飞速发展,我们见证了AI的不断进步,而LLM正是这一进步的集大成者。

LLM之所以强大,这得益于Transformer架构,能够将海量的知识压缩在一个高维的模型中,并具有很高的自然语言文字的理解水平,同时也具有良好的内容生成能力。可以说,LLM已经开始认知现实世界,它们不仅能够生成需求文档、生成代码、生成测试用例、生成测试报告等,还能够评审需求、评审代码,全程参与到软件研发生命周期中。笔者曾于2023年4月写过一篇文章,提出了“像GPT-4这样的大模型相继发布,将我们带进‘软件工程3.0’时代”,如图1所示。

图1 软件工程三个时代划分示意图

软件工程3.0会是怎样的一番景象呢?我们可以回顾一下GitHub CEO Thomas Dohmke的一次演示,他没有写一行代码,完全通过自然语言交流,只用了不到15分钟时间,就完成了小游戏程序的开发,并成功上线部署。他在台上演讲的同时,全球网友就体验到了这个刚发布的小游戏。

这个演示展示了大模型在软件开发中的强大力量,也预示着软件工程领域发生了革命性变化——软件开发的新范式诞生了,即在软件开发之前,我们先要训练出软件研发大模型(也可能包括业务大模型、代码大模型等),并部署这个研发大模型,然后基于大模型去做需求分析、设计、编程和测试,即借助大模型来理解需求、自动生成UI、自动生成产品代码、自动生成测试脚本等。软件开发的这种新范式,我们将其定义为“模型驱动开发、模型驱动运维”,如图2所示。在软件工程3.0时代,研发大模型将在生成和评审需求文档、自动生成高质量的代码、生成全面的测试用例等一系列工作中产生巨大价值,从而显著提高软件开发的效率和质量。

图2 软件工程3.0开发范式示意图

回到软件测试领域,软件测试的新范式就是大模型驱动测试,就是基于人机交互智能,生成测试件。测试人员通过和大模型的持续交互,不断引导大模型从需求开始生成验收标准,再进一步生成测试用例、测试脚本。所以,从今天开始,人机结合对测试将成为常态。在测试的每一项工作,测试人员都有一位得力助手在和他们一起完成测试需求分析、测试设计、测试自动化脚本开发等工作。经过实践(第4部分会有详细介绍),笔者相信LLM在测试工作的各个环节都将发挥核心价值,极大地帮助我们提升测试的效率和价值。

对于技术方向,学术界和工业界关注的角度会不同。例如学术界会更关注单元测试代码生成、测试输入数据生成、缺陷定位和修复等,也会侧重研究LLM在模糊测试、变异测试上的应用;而工业界更关心测试用例生成、移动App测试或GUI测试生成上。

在工业界,LLM的应用更加注重实际效益和操作性。例如,企业更关注基于基础大模型进行微调,注入自己的业务数据、测试数据(如测试用例、测试脚本等)和领域知识,构建测试大模型,也可以借助RAG(检索增强生成)技术和智能体开发框架(如LangChain),通过Embedding测试知识库,开发出知识增强型和检索增强型LLM,从而进一步增强LLM的测试能力,使其在测试需求分析、测试设计等方面表现出更高的能力和准确性。

在大模型时代,提示工程成为了软件测试人员需要掌握的新技能。通过精心设计的提示,可以引导LLM更准确地理解和执行测试任务。提示工程要求测试人员循序渐进地引导LLM,及时纠正错误,并优化输出结果。这种工程化的提示设计,是提高LLM在软件测试中应用效果的关键。提示工程也需要融入到之前测试平台中,我们可以看一个测试领域的典型案例TestPilot,展示了如何构建和应用测试领域的大模型,如图3所示。它通过API explorer识别被测函数,文档挖掘器提取文档元数据,以及提示生成器、测试验证器和提示细化器的协同工作,构建用于生成测试的提示。这些组件共同作用,从LLM的响应中集成完整的测试,并运行测试以检验其是否通过,从而构建更好的提示以生成更多的测试。在实际应用中,提示工程可以通过多种方式实现。例如,通过嵌入代码片段(shot),可以提高测试执行的成功率。这种实践不仅能够再现更多的Bug(Fail In the Buggy,FIB),还能够提高测试的准确性和可靠性。

图3 TestPilot工作原理示意图

总之,工业界在应用大模型进行软件测试时,关注的技术方向包括模型工程能力(如SFT)、提示工程、RAG技术、智能体开发与应用、知识库或知识图谱等,其目的是能够使大模型更好地适应不同的测试场景,并提高大模型的性能和输出质量。

在软件测试的全生命周期中引入LLM,能够实现各阶段的提效,不同的行业、不同的产品、不同的团队,提效的幅度差别还很大,在15%~90%之间,而中位数是43.5%,在整个软件研发生命周期,LLM在测试领域提效是最显著的,如图4所示。

图4 LLM在测试应用中的效果 (来源:中国信通院)

从测试需求分析到测试设计、测试结果分析、测试报告生成及测试管理,LLM都能够提供很好的支持。例如,在测试计划阶段,LLM可以按照我们实现设定的格式或模板生成测试计划;而且针对测试计划中的内容可以引导大模型进行细化和优化,最终可以生成完整的测试计划。目前有大模型可以支持一万字长文章的生成,基本能满足测试计划生成的需求。由于篇幅所限,在这里就不展示了。

利用大模型进行测试分析、挖掘测试场景是测试人员更为关注的环节。一方面,每个测试人员的思维都是有局限的,往往估计一边则忽视了另外一边,容易造成漏测、覆盖不全,这方面工作就适合人机交互智能——人和大模型之间进行交流、头脑风暴,提升测试覆盖率。另一方面,这项工作的文字工作量也比较大,让大模型生成结果,不仅整齐、清晰,也不容易出错,质量更高,可以做得又快又好。

类似的,利用大模型生成测试用例、测试脚本,也能让我们做得又快又好。例如,腾讯会议的云端存储功能,大模型能够设计详细的测试用例。包括上传文件测试、下载文件测试等,并且可以进一步细化测试用例,如正常上传测试、文件类型测试、边界值测试等。我们还可以提示测试大模型,采用不同的测试方法(如边界值分析方法、决策表方法等),能够设计出更全面的测试用例,提高测试的覆盖率。

基于测试用例,大模型可以帮助我们生成测试脚本,如Selenium、Appium Java或Python自动化测试脚本。在生成测试脚本的过程中,也是逐步细化的过程,开始生成的是脚本框架,然后再给出具体需求和上下文信息,生成@Test内含的代码,可以将运行脚本的信息再反馈给大模型,确保测试脚本的准确性和可执行性。

大模型时代的到来为软件测试带来了前所未有的机遇和挑战。通过引入大模型技术,软件测试能够实现更智能、高效的测试过程,提高软件的质量和可靠性。然而,同时也需要面对一系列的挑战,如实现准确的生成结果、高覆盖率、精准评估性能等。未来,随着技术的不断发展,我们期待看到更多基于LLM的测试工具和方法的出现,以及多智能体协作在软件测试中的广泛应用,推动软件测试领域向更加智能化的方向发展。软件测试人员需要不断学习和适应新的技术,以更好地应对大模型时代的挑战,使自己立于不败之地。

1.挑战

实现准确的生成结果:大模型在生成测试用例、测试脚本等方面需要提高准确性,确保生成的结果符合实际的测试需求。

实现高覆盖率的挑战:软件测试需要覆盖各种场景和边界条件,大模型需要不断学习和优化,以提高测试的覆盖率。

测试预言(Test Oracle)的挑战:准确地预测软件在各种情况下的行为和可能出现的问题是软件测试的重要挑战,大模型需要在这方面提供更可靠的支持。

精准评估性能的挑战:对软件的性能进行精准评估是确保软件质量的关键,大模型需要在性能测试和分析方面发挥更大的作用。

用于现实业务项目的挑战:将大模型应用于实际的业务项目中,需要解决与业务流程的融合、数据安全等问题,确保大模型能够真正为业务带来价值。

2.未来发展

更多基于LLM的测试助理开源:未来将会有更多的基于LLM的测试助理开源项目,为软件测试提供更多的工具和资源。

多智能体协作完成测试:多智能体协作将成为软件测试的重要趋势,通过覆盖测试生命周期,推出检索增强或知识增强的测试大模型,提高生成的测试用例和脚本的采纳率,具备自动规划和多模态能力、自学习能力等,实现更高效、智能的软件测试。

来源:金融电子化

相关推荐