[论文阅读] 人工智能+软件工程 | 软件工程中非代码工作的LLM能力评估

软件工程中非代码工作的LLM能力评估

论文信息

@misc{2506.10833v1,title={Evaluating Large Language Models on Non-Code Software Engineering Tasks},author={Fabian C. Peña and Steffen Herbold},year={2025},eprint={2506.10833},archivePrefix={arXiv},primaryClass={cs.SE}
}

在这里插入图片描述

研究背景:被忽视的"软件工程冰山"

想象一下:一位建筑师花了85%的时间绘制蓝图、协调团队、检查结构安全,却只能用一把生锈的尺子完成这些工作。这或许就是当前软件工程(SE)领域的真实写照——大型语言模型(LLMs)如GitHub Copilot在代码生成领域大放异彩(就像精准的3D建模软件),但在需求分析、质量保证、项目管理等非代码任务中却近乎"裸奔"。

领域痛点直击

  • 时间分配失衡:开发者仅用15%时间写代码,其余时间被需求文档审查、bug分类、团队沟通等非代码任务占据。
  • 工具链断层:现有LLM工具(如Cursor)能自动生成函数,却无法判断"用户登录超时"属于功能性需求还是非功能性需求。
  • 基准缺失之困:主流评估如HumanEval仅关注代码生成,就像只测试汽车的引擎性能,却不检查刹车和方向盘。

生动类比

如果把软件工程比作一座冰山,代码编写只是露出水面的20%,而非代码任务则是水下的80%。当LLM在水面部分乘风破浪时,水下的暗礁(如需求歧义、质量风险)却缺乏探测工具——这正是SELU基准诞生的初衷。

创新点:首个非代码SE任务"度量衡"

1. 构建跨维度任务矩阵

  • 17项任务全覆盖:从"判断issue是否为bug"的二分类,到"估算故事点"的回归任务,甚至包括API文档"气味"检测这样的多标签分类。
  • 数据来源大杂烩:混合代码仓库、开发者论坛、需求规格说明书等多源数据,就像用不同食材熬制一锅SE"浓汤"。

2. 方法论突破

  • 贝叶斯统计加持:用贝叶斯符号秩检验替代传统显著性测试,就像从"非黑即白"的二元判断升级为"概率化"的精准比较。
  • 模型混战实验:让22个开源LLM(含BERT、Llama 3.2)与2个 proprietary模型(GPT-4o、Claude 3.5)同台竞技,甚至拉来传统机器学习模型当"陪练"。

3. 反常识发现

  • “小而美"胜过"大而全”:70亿参数的CodeLlama未必赢过10亿参数的Llama 3.2,中等规模解码器模型反而跨任务表现更稳。
  • 代码预训练"水土不服":专为代码优化的模型(如CodeBERT)在非代码任务中优势微弱,就像让专业赛车手参加马拉松。

研究方法和思路:像拼乐高一样搭基准

第一步:任务筛选"淘宝砍价"

  • 从395篇文献中"淘"出17项非代码任务,剔除重复和数据不可用的,就像在电商平台筛选性价比最高的商品。
  • 典型任务示例:
    • bug issue分类:判断"登录界面卡顿"是否为bug(数据集38,219条)
    • 故事点估算:预测"用户认证模块"的开发工作量(1-96分制)

第二步:数据处理"洗照片"

  • 标准化处理:统一格式、去除Markdown标记,就像给照片调色修图。
  • 敏感信息掩码:将URL、代码块替换为占位符,避免"隐私泄露"。
  • 特殊处理:NER任务直接使用已标注数据,MLM任务通过POS动词掩码构建训练样本。

第三步:模型测试"武林大会"

  1. 分组对决
    • 编码器组:BERT、RoBERTa
    • 解码器组:GPT-2、Llama 3.2
    • 编解码器组:T5、CodeT5+
  2. 评估指标"评分标准"
    • 分类任务:F1-macro(避免类别不平衡误导)
    • 回归任务:SMAPE(对称误差百分比,抗极值干扰)
  3. 统计分析"裁判打分"
    • 先用Shapiro-Wilk检验看数据是否正态分布
    • 再用贝叶斯符号秩检验计算模型A优于B的概率

SELU基准包含的17项非代码任务构成表

任务类型具体任务名称实例数量目标数量/范围数据来源
二分类bug issue38,2192[23]
incivility1,5462[24], [25]
requirement type6252[26]
tone bearing6,5972[24], [25]
多分类closed question140,2725[27]
commit intent2,5333[28]
issue type803,4173[29]
question quality60,0003[30]
sentiment13,1443[31]
多标签分类comment type java9,3397[32]
comment type pharo2,2907[32]
comment type python1,5875[32]
review aspect4,52211[33]
smell doc1,0005[34]
回归story points23,313[1-96][35]
命名实体识别(NER)se entities2,71820[36]
掩码语言模型(MLM)requirement completion40**[37]

表格说明:

  1. 任务类型划分:涵盖分类(二分类、多分类、多标签)、回归、NER、MLM四大类,全面覆盖自然语言理解(NLU)任务。
  2. 数据规模:实例数量从40到80万+不等,其中“issue type”任务数据量最大(803,417条),“requirement completion”因数据特性实例数最少(40条)。
  3. 目标范围:多标签任务(如“review aspect”)目标数最多达11类,回归任务“story points”需预测1-96的连续值。
  4. 数据来源:标注文献编号对应论文,数据源自代码仓库、issue跟踪系统、开发者论坛等多场景。

主要贡献:给SE领域递上"精准地图"

1. 基准建设:填补领域空白

  • 提供首个非代码SE任务评估框架SELU,包含17项任务的完整数据集与评估流程,就像为未知海域绘制航海图。
  • 开源所有代码、模型和结果,方便研究者"抄作业"。

2. 模型选型:给出"避坑指南"

  • 首选模型:中等规模解码器模型(如Llama 3.2 3b),平均性能0.754且跨任务方差低。
  • 避雷提示:不要盲目追求"代码优化"模型,其在非代码任务中可能"水土不服"。

3. 研究方向:点亮"未来灯塔"

  • 生成式任务扩展:从"理解需求"到"生成设计文档",如自动生成UML图。
  • 领域适配优化:基于开发者论坛、会议记录等自然文本进行预训练。

关键问题

  1. SELU基准与现有SE基准的核心差异是什么?
    • 答案:SELU是首个聚焦非代码SE任务的综合基准,涵盖17项任务(分类、回归、NER、MLM),数据源自代码仓库、开发者论坛等多源,而现有基准(如HumanEval、MBPP)主要评估代码生成能力,任务类型与数据源单一。
  2. 哪种类型的LLM在非代码任务中表现最优?影响其性能的关键因素是什么?
    • 答案:中等规模纯解码器模型(如Llama 3.2 3b)表现最优,其平均性能达0.754且跨任务方差低。关键因素包括模型架构(解码器优于编码器)、参数规模(十亿级在多标签分类中优势显著),而聚焦代码的领域适应仅带来 modest改进。
  3. 该研究为SE领域LLM应用指出了哪些未来发展方向?
    • 答案:未来需扩展SELU至生成式任务(如设计模式推荐、UML图生成),探索基于SE自然文本(如需求规格、会议记录)的预训练,系统研究模型稳定性与超参数影响。

讨论与未来方向

  1. 实践启示:非代码任务优先选中等规模解码器模型,多标签任务需大模型,领域适应性价比低。
  2. 未来工作:扩展至生成式任务(如UML图生成)、基于SE自然文本的预训练、稳定性研究。

总结:从"代码崇拜"到"全周期赋能"

这篇论文撕开了LLM在SE领域的"偏科"真相——当我们沉迷于代码生成的"华丽表演"时,非代码任务的"实用战场"却缺乏有效的评估工具和模型。SELU基准的价值不仅在于发现解码器模型更适合非代码场景,更重要的是推动LLM研究从"单点突破"转向"全周期赋能"。

就像汽车工业不能只优化发动机,还需精进刹车、悬架和导航系统,SE领域的LLM发展也需要在需求分析、质量保证等"非代码底盘"上持续发力。未来的LLM或许能像全能工程师一样,不仅写出漂亮代码,还能精准评审需求、预测项目风险,真正实现软件工程全生命周期的智能化。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/85273.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/85273.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Data URI Scheme 详解:将数据嵌入 URL 的技术方案

一、Data URI Scheme 是什么? Data URI 是一种特殊的URL格式,允许将数据(如图像、文本、音频等)直接嵌入到URL中,而无需引用外部资源。它由RFC 2397标准定义,常用于前端开发中减少HTTP请求次数&#xff0c…

基于Redis方案的分布式锁的Java实现

前期, 我们介绍了什么是分布式锁及分布式锁应用场景, 今天我们基于Redis方案来实现分布式锁的应用。 1. 基于Redis分布式锁方案介绍 基于Redis实现的分布式锁是分布式系统中控制资源访问的常用方案,利用Redis的原子操作和高性能特性实现跨进…

Kafka源码P2-生产者缓冲区

欢迎来到啾啾的博客🐱。 记录学习点滴。分享工作思考和实用技巧,偶尔也分享一些杂谈💬。 有很多很多不足的地方,欢迎评论交流,感谢您的阅读和评论😄。 目录 1 引言2 缓冲区2.1 消息在Partition内有序2.2 批…

力扣网C语言编程题:三数之和

一. 简介 本文记录力扣网上的逻辑编程题,涉及数组方面的,这里记录一下 C语言实现和Python实现。 二. 力扣网C语言编程题:三数之和 题目:三数之和 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nu…

2.2 Windows MSYS2编译FFmpeg 4.4.1

一、安装编译工具 # 更换pacman源 sed -i "s#mirror.msys2.org/#mirrors.ustc.edu.cn/msys2/#g" /etc/pacman.d/mirrorlist* pacman -Sy# 安装依赖 pacman -S --needed base-devel mingw-w64-x86_64-toolchain pacman -S mingw-w64-x86_64-nasm mingw-w64-x86_64-ya…

驱动开发,队列,环形缓冲区:以GD32 CAN 消息处理为例

对环形缓冲区进行进一步的优化和功能扩展,以应对更复杂的实际应用场景,特别是针对 CAN 总线消息处理的场景。 一、优化点 1:动态配置环形缓冲区大小在原始实现中,我们固定了缓冲区大小为 RINGBUFF_LEN 64。这种方式虽然简单&am…

SQL基础知识,MySQL学习(长期更新)

1、基本操作,增删查改 INSERT INTO 表名 (字段1, 字段2, ...) VALUES (值1, 值2, ...); DELETE FROM 表名 WHERE 条件 SELECT * FROM 表名 WHERE 条件 UPDATE 表名 SET 字段1 值, 字段2 值, ... WHERE 条件; SELECT * INTO 新表 FROM 旧表 WHERE… INSERT INTO 语…

Git(一):初识Git

文章目录 Git(一):初识GitGit简介核心功能分布式特性结构与操作优势与适用场景 创建本地仓库git init配置name与email--global 工作区、暂存区与版本库git addgit commitcommit后.git的变化 Git(一):初识Git Git简介 Git 是一个分布式版本控制系统&…

第19天:初级数据库学习笔记3

分组函数(多行处理函数) 即多个输入对应一个输出。前面讲的数据处理函数是单行处理函数。(在公司中常说单,多行处理函数) 分组函数包括五个: max:最大值min:最小值avg&#xff1a…

Windows11下搭建Raspberry Pi Pico编译环境

1. 系统与工具要求 PC平台: Windows 11 专业版 Windows GCC: gcc-15.1.0-64.exe GNU Make: 4.3 Git: 2.49.0 cmake: 4.0.2 python:3.12.11 Arm GNU Toolchain Downloads – Arm Developer 2. 工具安装与验证 2.1 工具安装 winget安装依赖工具(Windows …

【C语言极简自学笔记】重讲运算符

一、算术操作符 算术操作符描述把两个操作数相加-第一个操作数减去第二个操作数*把两个操作数相乘/分子除以分母%取模运算符,整除后的余数 注意:1.除号的两端都是整数的时候执行的是整数的除法,两端只要有一个浮点数,就执行浮点…

持续集成 CI/CD-Jenkins持续集成GitLab项目打包docker镜像推送k8s集群并部署至rancher

Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 之前是通过jar包在shell服务器上进行手动部署,麻烦且耗时。现通过Jenkins进行持续集成实现CI/CD。以test分支为例 提交即部署。 由于是根据自己实际使用过程 具体使用到了 gitlabjenkinsdockerharborra…

Apache Iceberg与Hive集成:非分区表篇

引言 在大数据处理领域,Apache Iceberg凭借其先进的表格式设计,为大规模数据分析带来了新的可能。当Iceberg与Hive集成时,这种强强联合为数据管理与分析流程提供了更高的灵活性和效率。本文将聚焦于Iceberg与Hive集成中的非分区表场景&#…

webpack 如何区分开发环境和生产环境

第一种方法: 方法出处:命令行接口(CLI) | webpack 中文文档 1.利用webpack.config.js 返回的是个函数,利用函数的参数,来区分环境 具体步骤 1) package.json文件:在npm scripts 命令后面追加 …

React组件通信——context(提供者/消费者)

Context 是 React 提供的一种组件间通信方式,主要用于解决跨层级组件 props 传递的问题。它允许数据在组件树中"跨级"传递,无需显式地通过每一层 props 向下传递。 一、Context 核心概念 1. 基本组成 React.createContext:创建 C…

“微信短剧小程序开发指南:从架构设计到上线“

1. 引言:短剧市场的机遇与挑战 近年来,短视频和微短剧市场呈现爆发式增长,用户碎片化娱乐需求激增。短剧小程序凭借轻量化、社交传播快、变现能力强等特点,成为内容创业的新风口。然而,开发一个稳定、流畅且具备商业价…

RPC与RESTful对比:两种API设计风格的核心差异与实践选择

# RPC与RESTful对比:两种API设计风格的核心差异与实践选择 ## 一、架构哲学与设计目标差异 1. **RPC(Remote Procedure Call)** - **核心思想**:将远程服务调用伪装成本地方法调用(方法导向) - 典型行为…

【pytest进阶】pytest之钩子函数

什么是 hook (钩子)函数 经常会听到钩子函数(hook function)这个概念,最近在看目标检测开源框架mmdetection,里面也出现大量Hook的编程方式,那到底什么是hook?hook的作用是什么? what is hook ?钩子hook,顾名思义,可以理解是一个挂钩,作用是有需要的时候挂一个东西…

深度学习计算——动手学深度学习5

环境:PyCharm python3.8 1. 层和块 块(block)可以描述 单个层、由多个层组成的组件或整个模型本身。 使用块进行抽象的好处: 可将块组合成更大的组件(这一过程通常是递归) 如 图5.1.1所示。通过定义代码来按需生成任意复杂度…

NodeJS的fs模块的readFile和createReadStream区别以及常见方法

Node.js 本身没有像 Java 那样严格区分字符流和字节流,区别主要靠编码(encoding)来控制数据是以 Buffer(二进制字节)形式还是字符串(字符)形式处理。 详细解释: 方面JavaNode.js字节…