软件测试作为软件工程的关键部分,其测试生成方法各有特点,优劣并存。大模型在单测生成领域展现出一定优势,然而也遭遇了不少难题,这正是我们需深入研究的价值所在。
代码测试生成原理依赖软件分析技术
在测试生成领域,其原理适用于多种语言。但这一过程对软件分析技术有着极高的依赖。每当需要支持一种新的语言,就必须对相应的分析技术进行适配。比如,Java和Python在软件分析技术方面就存在显著差异。这一过程不仅耗费大量人力、物力和时间,而且成本高昂。对于企业来说,若想在开发过程中适配更多语言,就必须正视这一现实。如何有效降低成本,值得我们深思。许多企业在处理多语言适配问题时,通常会投入大量精力,因为这直接影响到产品在不同开发环境下的测试能否顺利展开。
软件开发中,新的生成方式正在兴起。
基于模型的生成技术可以直接解析源代码,无需经过编译过程。这一特点显著降低了生成测试用例的要求。比如,在测试复杂商业软件源码时,它能有效减少因编译流程复杂而产生的麻烦。同时,这种方法还极大地拓宽了适用范围。过去,许多环境无法满足传统测试编译的要求,而现在,基于模型的生成技术却能覆盖这些场景,这对于提高软件开发效率具有重要意义。
软工领域对NLP假设的认可
近年来,关于提高测试效果的工作持续增多。这一现象反映出,在软件工程领域,自然语言处理领域的一些假设是可行的。比如,现有数据中就包含了测试和开发所需的知识。以软件开发为例,历史数据就能为新测试工作提供借鉴。大家对此也进行了尝试,将历史知识的学习应用于新任务,这在软件工程领域已成为共识。在具体项目中,许多团队会建立自己的知识数据仓库,以便更好地利用这些知识来优化测试流程。
智能单测的应用背景也值得关注。
智能单测在开发阶段(IDE)和代码提交后(CI)有着不同的标准。在IDE阶段,重点在于代码的可读性和正确性;而在CI阶段,则更注重正确性和覆盖率。这和产品在生产线上的不同生产与质检标准类似,每个阶段都有其侧重点。这是软件工程流程化的必然需求,从业者必须根据这些要求来调整他们的测试策略。
传统单测仍居主导地位
大模型在单测生成方面发展迅猛。然而,传统单测在正确性和覆盖率方面,其表现优于大模型生成的结果。在持续集成(CI)流程中,传统单测依旧占据着主导地位。现阶段,大模型主要充当辅助角色。特别是在对软件稳定性要求极高的金融系统开发中,传统单测依然是最可靠的选择。而在一些新开发场景或项目周期较短的项目中,大模型则作为补充测试手段。两者各自有着不同的应用领域。
大模型单测生成的目标也很明确。
大模型单测生成技术,属于代码生成和文本生成的领域。它旨在实现从始至终的单测代码自动生成。例如,字节跳动对市场上的开源大模型Bloom进行了深入研究。他们分别对未经训练的裸模型以及经过单测训练数据微调后的模型进行了评估。最终,他们选择了基于微调的模型进行实际应用,这体现了企业根据实际需求所做出的明智选择。
大模型单测的问题及解决思路
大模型在单测生成任务上面临模型幻觉和测试分支覆盖不充分的问题。这就像绘制地图时,有些区域未能完整呈现,甚至出现了错误信息。对此,字节提出了自己的解决方案。他们基于微调后的大模型,引入了以编译器和静态分析结果为奖励的强化学习,这有助于缓解模型幻觉。这是提升大模型单测能力的关键探索方向,未来可能还需要更多此类探索,以进一步提高大模型单测的准确性。
大模型在单测生成中的应用是一个系统工程。
助力单测生成仅是其中一环,实际上,任何大模型与特定领域的应用落地都构成了一个复杂的系统工程。比如,大模型在自然语言处理领域的广泛应用便是如此。目前,我们对大型语言模型(LLM)的应用还处于初级阶段。我们首先需要研究如何挖掘大模型在单测任务上的潜力。目前,我们正探索的方法包括但不限于任务微调等,而未来,我们还需研究如何让模型在特定场景中持续提升其效果。这一过程是一系列既逐步推进又逻辑紧密的发展步骤。
大模型带来的新可能
大模型的出现,为那些过去难以实现自动化的难题,开辟了新的解决途径。以某经典问题为例,它不仅影响了单测生成,还限制了GUI测试及其他操作的实现。如今,情况有了转机。采用副驾驶模式,可能成为一条可行的路径和逐步发展的策略。正如小树苗逐渐长成大树,起初,它在小范围内通过半自动化手段,提高了单测生成等任务的效率。随着模型理解和推理能力的提升,它在任务中的地位也在不断提高,甚至可能达到与人类同等重要的参与度。这或许将引发软件工程测试领域的一场新变革。
你是否曾遭遇过因测试手段的不足导致任务延后的情形?期待大家在评论区分享你们的亲身经历。同时,也欢迎点赞并转发这篇文章。