ScratchEval : A Multimodal Evaluation Framework for LLMs in Block-Based Programming
University of Waterloo(滑铁卢大学);Stanford University(斯坦福大学)
ScratchEval是首个用于评估LLM在Scratch块式编程中修复能力的可执行基准,通过多层协议测量功能正确性、修复质量和解释质量,支持领域微调和泛化研究。
2026-01-31 cs.SE
Data-driven Analysis of Gender Differences and Similarities in Scratch Programs
基于块的编程环境(如Scratch)是计算机科学的一个重要切入点。为了创造一个有效的学习环境,有可能解决计算机科学中的性别不平衡问题,必须更好地了解儿童在使用这种编程环境方面的性别差异。在本文中,我们沿着两个维度探索Scratch程序中的性别差异和相似性:为了了解是什么促使女孩和男孩使用Scratch,我们首次使用无监督机器学习对Scratch程序进行主题分析,使用了由8-10年的女孩和男孩创建的317个程序的数据集。为了了解他们是如何为这些主题编程的,我们对这些项目中实现的代码应用了自动化的程序分析。我们发现,与常见的刻板印象一致,女孩更喜欢围绕独角兽、庆祝、舞蹈和音乐的话题,而男孩倾向于喜欢蝙蝠和食尸鬼的阴郁话题,或者足球或篮球等竞争性话题。女孩更喜欢动画和故事,从而产生更简单的控制结构,而男孩创建更多循环和条件语句的游戏,从而产生更复杂的程序。考虑这些差异有助于提高学习成果和由此产生的与计算相关的自我概念,这是培养对计算机科学长期兴趣的先决条件。
2021-08-16 cs.SE
Guiding Next-Step Hint Generation Using Automated Tests
使用Scratch学习基本编程对于新手和导师来说都很难:学生可能不知道如何在解决任务时取得进展,教师可能一次面对许多举手的教室,当新手独自在在线或虚拟课程中时,问题会加剧。因此,期望自动生成下一步提示以向被卡住的学生提供个人反馈,但是当前的方法依赖于多个手工制作或手工选择的样本解决方案的可用性,从这些样本解决方案中提取有效提示,并且尚未适应Scratch。自动化测试提供了一个机会,自动选择合适的候选解决方案的提示生成,甚至从学生的解决方案池使用不同的解决方案的方法和不同的质量。在本文中,我们提出了猫薄荷,第一个下一步提示生成方法的Scratch,它扩展了现有的数据驱动的提示生成方法与自动化测试。在学生Scratch程序的数据集上对Catnip进行的评估表明,生成的提示指向功能改进,并且使用自动化测试可以使提示更好地针对所选择的解决方案路径进行个性化。
2021-05-12 cs.SE
Finding Anomalies in Scratch Assignments
在编程教育中,教师需要通过调查学生编写的代码来监控和评估学生的进度。用传统程序设计语言编写的程序的代码质量可以通过自动化测试、验证工具或链接器进行自动评估。在许多情况下,这些方法依赖于某种形式的手动编写的正式规范来分析给定的程序。然而,编写这样的规范对教师来说很难,因为他们往往没有接受过这项任务的充分培训。此外,缺乏对流行的基于块的介绍性程序设计语言(如Scratch)的自动化工具支持。异常检测是一种自动识别数据集中常见行为偏差的方法,而无需编写规范。在本文中,我们使用异常检测来自动查找课堂环境中Scratch代码的偏差,其中异常可以代表错误代码、替代解决方案或杰出作品。不同的编程任务的解决方案的评估表明,异常检测可以成功地应用于严格规定以及开放式的编程任务。
2021-02-15 cs.SE
Enhancing NeuroEvolution-Based Game Testing: A Branch Coverage Approach for Scratch Programs
本文针对Scratch游戏测试提出基于分支覆盖的适应度函数扩展NEATEST框架,引导神经进化最大化分支探索,实验表明其比语句覆盖方法具有更高的分支覆盖率和更低的故障误报率。
2025-07-12 cs.SE
LitterBox+: An Extensible Framework for LLM-enhanced Scratch Static Code Analysis
University of Passau(帕绍大学)
LitterBox+通过将Scratch块式代码转换为文本形式,利用LLM生成能力提升静态代码分析,提供API和界面扩展,支持代码查询与修复,提升学习者编程体验。
2025-10-02 cs.SE
LitterBox: A Linter for Scratch Programs
使用基于块的程序设计语言(如Scratch)创建程序既简单又有趣。然而,基于块的程序可能包含错误,特别是当学习者对编程有误解时。即使没有,Scratch代码通常质量很低,并且包含代码气味,进一步抑制了理解,重用和乐趣。为了解决这个问题,在本文中,我们介绍了LitterBox,一个用于Scratch程序的Linter。给定一个程序或其公共项目ID,LitterBox会根据已知错误和代码气味的模式检查程序。对于每一个发现的问题,LitterBox不仅提供了代码中的位置,还提供了潜在原因和可能的误解的有用解释。学习者可以通过一个易于使用的Web界面访问LitterBox,其中包含有关块代码中错误的可视信息,而对于研究人员来说,LitterBox为Scratch程序的静态分析提供了一个通用的,开源的和可扩展的框架。
2021-02-15 cs.PL cs.SE
NuzzleBug: Debugging Block-Based Programs in Scratch
本文提出 Scratch 扩展 NuzzleBug,通过断点、单步、反向执行和执行问答支持儿童调试,并经师生评估验证其有效性。
2023-09-25 cs.SE
Anomaly Detection in Scratch Assignments
对于教师来说,用于调试和评估学生编程作业的自动化工具支持在他们的日常业务中有很大的帮助。对于通常用于向年轻学习者介绍编程的基于块的程序设计语言,存在测试框架和其他软件分析工具,但需要手动工作,例如编写测试套件或正式规范。然而,大多数使用Scratch等语言的教师都没有接受过此类任务的培训或经验。Linter不需要手工操作,但仅限于一般的错误,因此在学生解决方案中错过了潜在的特定于任务的错误。在以前的工作中,我们提出了使用异常检测来自动查找学生编程作业中的特定于项目的错误,而不需要教师方面的任何额外的手工劳动。对典型编程作业的学生解决方案的评估表明,异常检测是一种可靠的方法来定位错误的数据集的学生程序。在本文中,我们通过降低抽象级别来增强我们的初始方法。结果表明,较低的抽象级别可以集中异常检测的相关部分的程序。
2021-03-15 cs.SE
EmbeddedKittens: An Evaluation of Code Embeddings for Scratch
University of Passau(帕绍大学)
研究探讨哪种代码嵌入方法适用于Scratch编程教育。实例化四个LLMs和五种嵌入方法,创建任务及数据集进行评估,结果表明在开放Scratch数据集上训练的嵌入模型可捕获代码信息用于学习分析,无需特定任务微调。
2026-07-22 cs.SE
ViScratch: Using Large Language Models and Gameplay Videos for Automated Feedback in Scratch
ViScratch 是首个面向 Scratch 的多模态反馈生成系统,利用项目积木代码和游戏视频,通过视觉语言模型对齐视觉症状与代码结构,提出并验证 AST 级修复,在错误识别和修复质量上显著优于现有工具。
2025-09-14 cs.PL cs.SE
ScratchLens: Lens-Parametric Behavioral Equivalence for Scratch Programs
University of Waterloo(滑铁卢大学)
针对块编程语言中程序等价性判定问题,提出透镜参数化等价框架SPECTRA,通过因果IR、规范化和Mazurkiewicz迹商等技术,实现高精度行为等价判定。
2026-06-17 cs.PL cs.SE
A Scratch-like visual programming system for Microsoft Windows Phone 8
Pocket Code是Catrobat语言的免费开源移动可视化编程系统。它允许用户从8岁开始使用智能手机开发游戏和动画。孩子们可以用他们的Android手机、iPhone、Windows Phone或其他带有HTML5浏览器的智能手机创建程序。不需要笔记本或台式计算机。Pocket Code的灵感来自于麻省理工学院媒体实验室终身幼儿园小组开发的Scratch编程系统,但又与之不同。此工具演示描述了使用Pocket Code的实际体验,这是Catrobat语言的Windows Phone IDE。
2013-10-06 cs.CY cs.HC cs.SE
The Invisible Scheduler: Dragging a Sprite Can Change What a Scratch Program Does
University of Waterloo(滑铁卢大学)
本研究揭示Scratch中精灵堆叠顺序这一隐形调度器可改变程序行为,提出StackSwap工具检测此类并发问题,并在真实程序中证实其普遍性。
2026-09-30 cs.SE
Effects of Hints on Debugging Scratch Programs: An Empirical Study with Primary School Teachers in Training
学习者程序中的错误通常是基本误解的结果。教师经常面临的挑战是,首先必须了解这些错误,然后提出修复它们的方法。为了使教师能够有效和高效地这样做,最好支持他们识别和修复错误。误解通常会导致类似错误的重复模式,从而使自动化工具能够在常见错误模式出现时提供提示。在本文中,我们调查在何种程度上的提示提高了教师在调试学习者的程序使用一个队列的163名小学教师的培训,任务是纠正错误的Scratch程序的有效性和效率,有和没有提示的错误模式。我们的实验表明,自动生成的提示可以将查找和修复错误的时间从8.66分钟减少到5.24分钟,同时将正确解决方案的有效性提高34%。虽然这种改进是令人信服的,但可以说,培训中的教师可能首先需要学习调试“艰难的方式”,以免错过依靠工具学习的机会。因此,我们调查是否在训练过程中使用提示影响他们的能力,以识别和修复错误没有提示。我们的实验没有提供任何重要的证据表明,无论是学习调试与提示或学习调试“困难的方式”导致更好的学习效果。总的来说,这表明,错误模式可能是一个有用的概念,包括在课程中的教师培训,而工具支持,以认识到这些模式是可取的教师在实践中。
2021-08-16 cs.SE
Stitch: Step-by-step LLM Guided Tutoring for Scratch
针对Scratch等积木式编程新手语义错误难解决、现有直接给答案的调试方式不利于能力培养的问题,提出交互式分步辅导系统Stitch,经实证验证其学习效果优于直接答案模式和现有自动反馈工具。
2025-10-30 cs.SE
A Block-Based Testing Framework for Scratch
针对 Scratch 缺乏自动化测试阻碍教师反馈的问题,提出基于积木的测试框架及配套界面,使师生能直接在 Scratch 中创建自动化测试,实验证明该框架准确率达 0.93 且获教师认可。
2024-10-11 cs.CY cs.SE
Code Perfumes: Reporting Good Code to Encourage Learners
像Scratch这样的基于块的程序设计语言使孩子们在学习编程的同时能够发挥创造力。尽管基于块的方法简化了程序的创建,但学习编程仍然具有挑战性。因此,自动化工具(如linter)通过提供有关程序中潜在错误或代码气味的反馈来支持学习者。即使这种反馈是精心设计和建设性的,它仍然代表纯粹的负面批评,并通过建设忽略了学习者在他们的计划中做得正确。在本文中,我们介绍了一个正交的方法来linting:我们补充的批评产生的linter与正反馈。我们引入代码香味的概念,作为代码气味的对应物,表明正确应用被认为是好的编程实践。通过分析学习者做错了什么,以及他们做对了什么,我们希望鼓励学习者,让教师和学生更好地了解学习者的进步,并支持采用自动反馈工具。使用一个目录的25个代码香水的Scratch,我们凭经验证明,这些代表频繁的做法在Scratch,我们发现,更好的程序确实包含更多的代码香水。
2021-08-13 cs.SE
RePurr: Automated Repair of Block-Based Learners' Programs
针对基于块的学习者程序存在的语义错误修复问题,提出RePurr方法,通过改进故障定位、恢复整形手术假设及优化适应度评估,实现自动化修复,为生成学习提示提供基础。
2025-04-16 cs.SE
A CEFR-Inspired Classification Framework with Fuzzy C-Means To Automate Assessment of Programming Skills in Scratch
Universidad Rey Juan Carlos(雷昂卡洛斯大学)
提出一种基于CEFR的Scratch项目评估框架,使用模糊C均值聚类对200万+项目分级,识别B2瓶颈并引入分类确定性指标以平衡自动反馈与人工审核。
2026-06-18 cs.AI cs.CY cs.LG
SpecFirst: Behavioral Specification Elicitation as a First-Class Step in Agent-Based Program Synthesis from Scratch
Queen's University(女王大学);University of Manitoba(曼尼托巴大学);Concordia University(康考迪亚大学)
SpecFirst是将行为规范提取设为独立前置阶段的两阶段框架,在ProgramBench上显著提升了从零开始的程序合成的测试通过率与二进制探索覆盖率。
2026-07-30 cs.CL cs.SE
Finding Failure Causes through Automated Testing
程序失败。在什么情况下会发生这种故障?一个单一的算法,增量调试算法,足以确定这些故障诱导的情况。增量调试系统地和自动地测试程序,以隔离导致失败的环境,例如程序输入,程序代码的更改或执行的语句。
2000-12-14 cs.SE
RESTORE: Retrospective Fault Localization Enhancing Automated Program Repair
本文提出回顾式故障定位技术,通过复用失败补丁验证结果进行基于变异的动态分析,并在RESTORE工具中实现,在Defects4J基准上以更高效率修复了41个缺陷,显著优于现有Java自动修复工具。
2020-03-31 cs.SE
E-APR: Mapping the Effectiveness of Automated Program Repair
自动程序修复(APR)是一个快速发展的领域,许多新技术正在开发,以解决最具挑战性的软件工程问题之一。APR技术已经显示出有希望的结果,给了我们希望,有一天软件可以自我修复。本文主要研究APR技术的客观性能评估问题。我们介绍了一种新的方法,解释自动程序修复(E-APR),它确定的缺陷程序,解释为什么一个特定的实例是很难的APR技术的功能。E-APR用于检查大多数研究人员使用的错误程序的多样性和质量,并分析现有APR技术的优点和缺点。E-APR可视化了有缺陷程序的实例空间,每个有缺陷的程序都表示为空间中的一个点。实例空间的构造,以揭示领域的困难和容易的bug程序,并使APR技术的优点和缺点被确定。
2021-06-08 cs.SE
On the Applicability of Language Models to Block-Based Programs
本文探究语言模型对基于块的编程语言(如Scratch)的适用性,通过n-gram模型和transformers建模,在代码补全和错误发现任务上验证可行性,为改进相关工具和分析奠定基础。
2023-02-08 cs.PL cs.SE
Mining Software Repair Models for Reasoning on the Search Space of Automated Program Fixing
本文通过分析软件仓库中数以千计的错误修复事务来理解错误修复的本质。然后,它将这些学习到的知识放在自动程序修复的上下文中。我们给出了大量的经验结果,在大规模和细粒度的抽象语法树差异的性质,人类的错误修复。我们建立了数学推理的搜索空间的自动修复和时间,通过应用我们的方法对14个存储库的Java软件和89,993版本事务,我们表明,并非所有的概率修复模型是等价的。
2013-11-14 cs.SE
The Impact of Program Reduction on Automated Program Repair
本文提出利用程序切片缩减无关代码以提升自动程序修复的可扩展性,并在Defects4J上验证其可将TBar的中位修复时间从80分钟降至18分钟以内,同时保持修复质量。
2024-08-02 cs.SE
Heuristic Approach of Automated Test Data Generation for Program having Array of Different Dimensions and Loops with Variable Number of Iteration
通常,程序执行的大部分时间都花在循环上。自动化的测试数据生成特别关注循环以获得更好的覆盖率。对于具有可变迭代次数和可变长度数组的循环的程序,自动生成测试数据是一个具有挑战性的问题。这是因为对于某些编程结构(如归并排序),路径的数量可能会随着数组大小的增加而呈指数级增加。我们提出了一种方法,发现启发式不同类型的编程结构与循环和数组。线性搜索、冒泡排序、合并排序和矩阵乘法程序都包含在其中,试图突出单循环、可变长度数组和一维和二维的数组嵌套循环之间的执行差异。我们已经使用了两个参数/算法来预测生成自动化测试数据所需的最小迭代次数。它们是最长路径电平(kL)和饱和电平(kS)。我们的工作程序包括在初级水平的源代码的仪器,其次是应用程序的随机输入,直到所有可行的路径或所有路径具有最长的路径被收集。但是,通过使用过滤器可以避免重复路径。我们的测试数据是覆盖每个可行路径的随机数。
2010-11-02 cs.SE
Towards More Reliable Automated Program Repair by Integrating Static Analysis Techniques
自动程序修复的一个长期存在的公开挑战是过拟合问题,这是由于没有足够或不完整的规范来验证生成的补丁是否正确而引起的。大多数可用的修复系统依赖于弱规范(即,从测试用例合成的规范),这限制了生成的修复的质量。为了加强规范和提高修复的质量,我们建议更紧密地结合静态错误检测技术与自动程序修复。该集成将自动程序修复与静态分析技术相结合,使得错误检测模式可以合成为修复系统可以使用的规范。我们探索这种集成使用两种类型的错误的可行性:算术错误,如整数溢出,和逻辑错误,如终止错误。作为我们分析的一部分,我们提出了一些意见,有助于提高这些类别的错误补丁生成。此外,这些观察有助于缩小候选块搜索空间,并推断有效的搜索顺序。
2021-11-10 cs.SE
DroidBugs: An Android Benchmark for Automated Program Repair
自动程序修复是一个新兴的研究领域。针对不同的程序设计语言和平台,已经提出了许多APR技术,并在几个基准上进行了评估。然而,据我们所知,目前还没有一个基于移动项目的定义良好的基准,因此,利用APR方法进行移动开发存在差距。因此,关于全球Android应用程序的数量,我们介绍了DroidBugs,这是一个基于对360个Android开放项目的分析的介绍性基准,每个项目的下载量都超过5,000次。从五个应用程序中,DroidBugs包含13个单一的bug,这些bug根据暴露它们的测试类型进行分类。通过使用一个名为Astor 4Android的APR工具和两个常见的故障定位策略,我们观察到发现和修复移动错误是多么具有挑战性。
2018-10-12 cs.SE
Automated Patch Assessment for Program Repair at Scale
在本文中,我们做的程序修复系统生成的补丁的自动正确性评估。我们将人类书写的补丁视为地面真实预言,并基于它随机生成测试,这是Shamshiri等人提出的一种技术,随机地面真值测试(RGT)。我们建立了一个由14个最先进的修复系统生成的638个Defects 4J补丁的策展数据集,我们在这个数据集上评估了自动补丁评估。本研究的结果是新颖的和有意义的:第一,我们提高了最先进的性能与RGT的自动补丁评估的190%,通过改进的预言;第二,我们表明,RGT是足够可靠的,以帮助科学家做过拟合分析,当他们评估程序修复系统;第三,我们提高了程序修复知识的外部效度与最大的研究。
2021-05-07 cs.SE
Galapagos: Automated N-Version Programming with LLMs
KTH Royal Institute of Technology(皇家理工学院)
Galapagos利用大语言模型自动化生成功能等价的N版本编程变体,有效提升容错系统开发效率。
2025-10-28 cs.SE
Voice-Controlled Scratch for Children with (Motor) Disabilities
University of Passau(帕绍大学);Technical University of Darmstadt(达姆施塔特工业大学)
本文提出MeowCrophone,通过语音控制实现Scratch编程环境的无障碍编辑,采用多模态语音界面提升残障儿童的交互体验。
2026-03-30 cs.SE
SchedCheck: Schedule-Robustness Analysis for Event-Driven Block Programs
University of Waterloo(滑铁卢大学)
针对Scratch等块语言中并发程序的调度敏感行为,提出基于偏序探索的调度鲁棒性分析方法SchedCheck,在真实学生项目中发现至少21%的并发程序存在调度敏感问题。
2026-07-02 cs.SE
A Comprehensive Study of Code-removal Patches in Automated Program Repair
自动程序修复(APR)技术有望帮助降低调试成本。许多相关的APR技术遵循生成和验证的方法,即错误的程序迭代地修改不同的更改操作符,然后验证测试套件,直到一个合理的补丁生成。特别是,Kali是一种生成和验证技术,用于研究仅通过删除代码生成合理补丁的可能性。以前的研究表明,卡利确实成功地解决了几个错误。本文讨论了在自动程序修复中代码删除补丁的情况,调查的原因和场景,使他们的创建成为可能,以及与补丁的关系,由开发人员实现。我们的研究表明,代码删除补丁往往不足以修复错误,并提出了一个全面的分类代码删除补丁,提供的问题,可能会影响测试套件的证据,打开新的机会,研究人员在自动程序修复领域。
2021-12-15 cs.SE
Common Patterns in Block-Based Robot Programs
可编程机器人具有吸引力,玩起来很有趣,与现实世界互动,因此非常适合向年轻学习者介绍编程。介绍性的机器人程序设计语言通常扩展现有的基于块的语言,如Scratch。虽然用这些语言进行编程教学已经很成熟,但机器人程序中与现实世界的交互会带来特定的挑战,学习者和教育者可能需要帮助和反馈。提供这种反馈的一种实用方法是识别并指出代码中指示好或坏解决方案的模式。虽然这种模式已经被定义为常规的基于块的程序,机器人特定的编程方面还没有考虑到目前为止。因此,本文的目的是确定特定的模式,机器人编程的基于Sockerch的mBlock程序设计语言,这是用于流行的mBot和科迪洛基机器人。我们确定:(1)26种错误模式,表示错误的代码;(2)3种代码气味,表示可能工作但以令人困惑或难以理解的方式编写的代码;(3)18种代码气味,表示代码可能很好的方面。我们扩展了LitterBox分析框架,以自动识别mBlock程序中的这些模式。在3,540个mBlock程序的数据集上进行评估,我们总共发现了6,129个错误模式,592个代码气味和14,495个代码气味。这证明了我们的方法为学习者和教育者提供反馈和帮助的潜力。
2022-08-29 cs.SE
Automated Assessment in Mobile Programming Courses: Leveraging GitHub Classroom and Flutter for Enhanced Student Outcomes
本文探讨了结合GitHub Classroom与Flutter框架实现移动编程作业自动化评估的方法,利用GitHub Actions持续集成与测试自动化提供低成本自动评分方案,实验与调查表明该方法可行且受学生好评。
2025-04-05 cs.SE
Applying CodeBERT for Automated Program Repair of Java Simple Bugs
软件调试和程序修复是软件工程中最耗时和劳动密集型的任务之一,自动化将使其受益匪浅。在本文中,我们提出了一种基于CodeBERT的新型自动程序修复方法,CodeBERT是一种基于变换器的神经架构,在大型源代码语料库上进行了预训练。我们在ManySStuBs 4J小型和大型数据集上微调我们的模型,以自动生成修复代码。结果表明,我们的技术在19-72%的情况下准确地预测了开发人员实现的固定代码,具体取决于数据集的类型,每个错误不到一秒。我们还观察到,我们的方法可以生成不同长度的修复(短和长),并可以修复不同类型的错误,即使在训练数据集中只存在这些类型的错误的几个实例。
2021-03-30 cs.SE
HEJ-Robust: A Robustness Benchmark for LLM-Based Automated Program Repair
Concordia University(康科迪亚大学)
本文提出HEJ-Robust基准,通过八种语义保持的代码转换生成1450个实例,评估五种微调LLM,在多种转换下模型性能下降超50%,揭示当前LLM修复模型缺乏对细微语法变化的鲁棒性。
2026-05-08 cs.SE
Towards Extending the Range of Bugs That Automated Program Repair Can Handle
现代自动程序修复(APR)被很好地调整为发现和修复将可观察到的错误行为引入程序的错误。然而,一类重要的错误不会导致这种可观察到的行为(例如,活跃/终止错误、非功能性错误和信息流错误)。这样的错误通常不能用当前的APR方法来处理,因此,作为一个社区,我们需要开发补充技术。为了刺激替代APR方法和混合APR组合的系统研究,我们设计了一种新的错误分类系统,使他们的错误检测能力和错误修复能力的有条不紊的分析。为了证明的好处,我们分析了顺序和并发程序中的终止错误的修复。研究表明,将动态APR与形式化分析技术(如终止证明器和软件模型检查器)相结合,降低了复杂性,提高了这些修复的整体可靠性。
2022-11-07 cs.SE
Exception-Driven Fault Localization for Automated Program Repair
自动程序修复(APR)技术通常利用基于频谱的故障定位(SBFL)来识别应当被修补的程序位置,使得APR技术的有效性取决于故障定位的有效性。事实上,结果表明,SBFL往往不本地化故障准确,阻碍了有效性的APR。在本文中,我们提出了EXCEPT,一种技术,解决本地化问题,专注于语义的失败,而不是执行语句和失败的测试之间的相关性,SBFL。我们专注于故障由于异常,我们利用他们的类型和来源定位和猜测故障。对Defects4J基准测试中的43个异常引发错误的实验表明,EXCEPT的性能优于Ochiai和ssFix。
2022-01-03 cs.SE
Automated Program Analysis for Novice Programmers
本文介绍了如何调整静态代码分析器,以帮助新手程序员。当前的分析器是为了向构建新应用程序或系统的有经验的程序员提供反馈而构建的。这些工具的反馈类型和分析类型侧重于与该上下文相关的错误,并有助于调试系统。在教新手程序员时,这种建议通常不是特别有用。相反,使用这些技术来发现学生对重要编程概念的理解中的问题会更有用。本文首先探讨了静态分析器在哪些方面支持程序设计的学习和教学,并在现有的静态分析技术的基础上加以实现。它对静态分析器PMD进行了扩展,以便出现反馈消息,这对于新手程序员来说更容易理解。为了回答这个问题,如果这些技术能够找到的概念错误,是新手程序员的特点,我们运行了一些学生的项目,并比较这些结果与公开的成熟软件项目。
2017-09-30 cs.SE
On The Effectiveness of Dynamic Reduction Techniques in Automated Program Repair
针对自动化程序修复处理大规模工业级缺陷程序耗时耗资源的问题,提出集成ORBS观测切片的修复框架,通过程序约简优化修复全流程,在Defects4J数据集上实现性能提升且不降低修复质量。
2024-06-23 cs.SE
Self-Boosted Automated Program Repair
程序修复是每个软件系统生命周期中不可或缺的一部分,但可能极具挑战性。到目前为止,研究人员已经提出了各种自动程序修复(APR)技术,以减少手工调试的努力。然而,给定一个真实世界的bug程序,一个典型的APR技术通常会产生大量的补丁,其中每个补丁都需要对原始测试套件进行验证,这会产生极高的计算成本。尽管现有的APR技术已经利用各种静态和/或动态信息来更快地找到期望的补丁,但是它们仍然相当昂贵。在最近的工作中,研究人员提出了统一调试,以利用APR期间的补丁执行信息来帮助提升故障定位;这样,APR技术的应用范围可以扩展到所有可能的错误,例如,APR期间的补丁执行信息可以帮助手动修复不能自动修复的错误。受统一调试的启发,这项工作提出了SeAPR(自增强自动程序修复),第一个技术,利用早期的补丁执行信息在APR期间,以帮助提高自动修复本身的飞行。我们的基本直觉是,补丁类似于早期的高质量/低质量的补丁应该被提升/降级,以加快检测所需的补丁。这项对12个最先进的APR系统的实验研究表明,总的来说,SeAPR可以大大减少补丁执行的数量,而开销可以忽略不计。我们的研究还调查了各种配置对SeAPR的影响。最后,我们的研究表明,SeAPR甚至可以利用来自同一错误程序的其他APR工具的补丁执行信息来进一步提高APR。
2021-04-09 cs.SE
Can Automated Program Repair Refine Fault Localization?
软件缺陷在现代软件系统中普遍存在,并且众所周知难以手动调试。因此,大量的研究工作一直致力于自动化软件调试,包括自动故障定位和程序修复。然而,现有的故障定位技术通常是无效的,即使是最先进的程序修复技术,也只能修复一小部分真实世界的错误。虽然故障定位和程序修复是内在联系的,但我们观察到,在文献中,它们唯一的联系是程序修复技术通常使用现成的故障定位技术(例如,Ochiai)来确定用于修补的潜在候选语句/元素。在这项工作中,我们探索他们在另一个方向的联系,即,程序修复是否反过来有助于故障定位?通过这种方式,我们不仅为更强大的故障定位开辟了一个新的维度,而且将程序修复的应用范围扩展到所有可能的错误(而不仅仅是可以直接自动修复的错误)。我们设计了ProFL,一种简单的方法,使用补丁执行结果(来自程序修复)作为故障定位的反馈信息。在广泛使用的Defects 4J基准上的实验结果表明,基本的ProFL已经可以在Top-1内定位395个研究错误中的161个,而最先进的基于频谱和突变的故障定位技术最多在Top-1内定位117个。我们还证明了ProFL在不同设置下的有效性。最后,我们表明,ProFL可以通过无监督和监督学习进一步提高最先进的故障定位。
2019-10-03 cs.SE
Neuroevolution-Based Generation of Tests and Oracles for Games
类游戏程序在许多软件工程领域(如移动应用程序、Web应用程序或编程教育)中越来越受欢迎。然而,为具有挑战人类玩家的目的的程序创建测试对于自动测试生成器来说是一项艰巨的任务。即使测试生成成功地找到了一个相关的事件序列来执行程序,游戏的随机性意味着它既不可能重现这个序列下的确切程序行为,也不可能创建测试断言来检查观察到的随机游戏行为是否正确。为了克服这些问题,我们提出Neatest,一种新的测试生成器的基础上的神经进化增强拓扑(NEAT)算法。Neatest系统地探索程序的语句,并创建操作程序的神经网络,以可靠地到达每个语句-也就是说,Neatest学习以可靠地覆盖代码的不同部分的方式玩游戏。当网络学习实际的游戏行为时,它们也可以作为测试神谕,通过评估被测程序的观察行为与程序的假定正确版本相比有多令人惊讶。我们在Scratch,一个教育编程环境的背景下评估这种方法。我们对25个非平凡的Scratch游戏的实证研究表明,我们的方法可以成功地训练神经网络,不仅比传统的静态输入序列组成的测试套件更有弹性的随机影响,但也是非常有效的平均突变得分超过65%。
2022-08-29 cs.SE
Automated Test Generation from Program Documentation Encoded in Code Comments
本文提出一种利用代码注释文档的测试生成技术,将注释中的行为作为测试目标进行搜索,实验表明该方法能测试覆盖率驱动方法遗漏的行为并发现未知故障。
2025-04-29 cs.SE
Hybrid Automated Program Repair by Combining Large Language Models and Program Analysis
本文提出GIANTREPAIR方法,通过结合LLM生成补丁骨架与程序分析技术进行上下文感知的补丁实例化,有效提升了自动化程序修复在真实场景下的缺陷修复数量与性能。
2024-06-04 cs.SE
Automated Repair of Programs from Large Language Models
像Codex这样的大语言模型已经显示出为许多编程任务生成代码的能力。然而,现有模型的成功率很低,特别是对于复杂的编程任务。原因之一是语言模型缺乏对程序语义的认识,导致程序不正确,甚至不能编译。在本文中,我们系统地研究了自动程序修复(APR)技术是否可以修复LeetCode竞赛中由语言模型产生的错误解决方案。我们的目标是研究APR技术是否可以提高可靠性的代码产生的大语言模型。我们的研究显示:(1)自动生成的代码与人工制作的解决方案共享常见的编程错误,这表明APR技术可能具有修复自动生成的代码的潜力;(2)给定由统计错误定位方法提供的错误位置信息,新发布的Codex编辑模式(支持编辑代码)在修复错误解决方案方面类似于或优于现有的Java修复工具TBar和Codder。通过分析这些工具产生的实验结果,我们提供了几个建议:(1)增强APR工具,以超越补丁空间的限制(例如,引入更灵活的错误定位)是期望的;(2)由于大语言模型可以通过在更多数据上训练来导出更多修复模式,未来的APR工具可以将焦点从添加更多修复模式转移到基于合成/语义的方法,(3)语言模型与APR的组合以策展补丁成分是值得研究的。
2023-01-02 cs.SE
Program Repair: Automated vs. Manual
在过去的十年中,已经提出了各种自动程序修复(APR)技术来自动修复错误。虽然最近的研究在有效性和效率方面取得了重大进展,但在真实的调试场景中,APR技术在人工干预下的表现仍然不清楚。为了弥补这一差距,我们进行了广泛的研究,比较三个国家的最先进的APR工具与手动程序修复,并进一步调查是否协助APR工具(即,修复报告)可以改进手动程序修复。为此,我们招募了20名参与者进行对照实验,共产生了160个手动修复任务和问卷调查。实验结果表明:(1)人工修复程序有时会受到修复操作频率的影响;(2)APR工具在调试时间方面更有效,而人工修复程序往往会以更少的尝试生成正确的补丁;(3)APR工具可以进一步提高手工修复程序的错误修复率,但对补丁的正确性有负面影响;(4)参与者习惯于花费更多的时间来识别错误的补丁,但仍然容易被误导;(5)参与者对工具的修复性能持肯定态度,但对实际使用中的可用性普遍缺乏信心。此外,我们还提供了一些提高APR工具可用性的指南(例如,报告中的误导性信息和对反馈意见的观察)。
2022-03-10 cs.SE
BUGSPHP: A dataset for Automated Program Repair in PHP
本文提出面向 PHP 的自动化程序修复基准数据集 BUGSPHP,包含超60万条训练提交和513条经人工验证并附带测试用例的测试提交,以填补 PHP 缺陷修复研究的数据空白。
2024-01-21 cs.SE
Towards Automated Boundary Value Testing with Program Derivatives and Search
在测试软件时,一种自然且经常使用的策略是在边界处使用输入值,即预期行为变化最大的地方,这种方法通常称为边界值测试或分析(BVA)。尽管这一直是一个关键的测试思想,但很难明确定义和形式化。因此,它也很难自动化。在本研究报告中,我们提出了一个这样的形式化的BVA,以类似的方式如何在数学中定义函数的导数,考虑(软件)程序的衍生物。我们定义的关键是输入和输出之间的距离的概念,我们可以形式化,然后根据信息论的思想进行量化。然而,对于我们的(黑盒)方法是实用的,必须搜索具有特定属性的测试输入。耦合它与搜索为基础的软件工程,因此需要,我们讨论了如何程序衍生物可以被用来作为和健身功能。这个简短的说明不允许更深入的经验调查,但我们使用一个简单的说明性例子来介绍主要思想。通过结合程序的衍生物与搜索,我们因此提出了一个实用的,以及理论上有趣的技术自动边界值(分析和)测试。
2019-05-27 cs.SE
On the Efficiency of Test Suite based Program Repair: A Systematic Assessment of 16 Automated Repair Systems for Java Programs
基于测试的自动程序修复是近十年来软件工程领域的一个研究热点。确实已经提出了许多方法,这些方法利用测试套件作为对程序规范的弱但可负担的近似。尽管文献经常在可以修复的基准测试错误的数量上创造新的记录,但一些研究越来越多地提出了对最先进方法的局限性和偏见的担忧。例如,生成的补丁的正确性已在一些研究中受到质疑,而其他研究人员指出,评估方案可能会误导故障定位结果的处理。然而,有很少的工作解决补丁生成的效率,关于程序修复的实用性。在本文中,我们填补了这一空白,在文献中,通过提供一个广泛的审查测试套件的程序修复的效率。我们的目标是评估生成的补丁候选者的数量,因为这些信息与(1)有效地遍历搜索空间以选择有意义的修复尝试的策略相关,(2)最小化识别合理补丁的测试工作的策略,(3)以及优先生成正确补丁的策略。为此,我们进行了大规模的实证研究的效率,在数量上产生的补丁候选人的16个开源修复工具的Java程序。在相同的故障定位配置下仔细地进行实验以限制偏差。
2020-08-03 cs.SE
Automated Repair of C Programs Using Large Language Models
本研究提出整合基于频谱的故障定位、运行时反馈与思维链提示的C程序自动修复框架,结合统计程序分析与LLM推理,在Codeflaws基准上实现44.93%修复准确率,优于现有先进APR基线。
2025-09-02 cs.SE