Improving Readability of Scratch Programs with Search-based Refactoring
像Scratch这样的基于块的程序设计语言作为初学者的入门语言越来越受欢迎。这些语言旨在以“修修补补”的方式使用,允许学习者和教师快速组装工作程序和游戏,但这通常会导致代码质量低下。这样的代码可能很难理解,更改它很容易出错,学习者可能会挣扎并失去兴趣。提高代码质量的一般解决方案是重构代码。然而,Scratch缺乏许多在重构用高级程序设计语言编写的程序时使用的通用抽象机制。为了改善Scratch代码,我们提出了一组原子代码转换,以优化可读性(1)重写控制结构和(2)简化脚本使用Scratch程序固有的并发性质。通过自动化这些转换,可以探索Scratch程序的可能变化空间。在本文中,我们描述了一个多目标的搜索为基础的方法,确定序列的代码转换,提高了可读性的一个给定的Scratch程序,因此形成重构。对1000个Scratch程序的随机样本的评估表明,生成的重构在70.4%的情况下降低了复杂性和熵,并且354个项目在至少一个度量方面得到了改进,而没有使任何其他度量变差。重构后的程序可以帮助新手和他们的老师改进他们的代码。
2021-08-16 cs.SE
Exporting Prolog source code
在本文中,我们提出了一个简单的源代码配置工具。ExLibris在库上运行,可用于从本地库中提取与特定项目相关的所有代码。我们的方法不是为了解决代码生产线中出现的问题,而是为了支持希望交流Prolog程序的个人或小型研究团队的需求。在这个过程中,我们也希望容纳和鼓励编写可重用的代码。此外,我们支持并提出了处理代码开发中出现的问题的方法,这些代码可以在各种志同道合的Prolog系统上运行。考虑到这些目标,我们做出了以下决定:(i)支持基于文件的源代码开发,(ii)需要最小的程序转换,(iii)目标使用的简单性,以及(iv)引入最少数量的新原语。
2002-07-12 cs.SE
RefModel: Detecting Refactorings using Foundation Models
Federal University of Campina Grande(坎皮纳格兰德联邦大学);Federal University of Alagoas(阿拉戈阿斯联邦大学);North Carolina State University(北卡罗来纳州立大学)
针对现有静态重构检测工具扩展性、泛化性不足的问题,提出基于基础模型的重构检测工具RefModel,实验证明其性能媲美甚至优于传统工具,跨语言泛化性良好。
2025-07-15 cs.SE
PIDoc: Wiki style Literate Programming for Prolog
本文档介绍了PlDoc,一个用于Prolog的文学编程系统。PlDoc的出发点是最小化对编程任务的干扰和最大化的即时奖励,试图诱使程序员使用该系统。使用尽可能与常见的Prolog文档实践密切相关的结构化注释来实现最小的干扰。即时奖励是由一个Web界面提供的,该界面由Prolog开发环境提供支持,集成了搜索和浏览应用程序和系统文档。当从localhost访问时,可以从浏览器中显示的文档转到用户选择的编辑器中显示的源代码。
2007-11-05 cs.PL cs.SE
Software Cloning in Extreme Programming Environment
随着时间的推移,软件系统通过添加新功能和修改现有功能而不断发展。随着软件的演化,软件的结构变得越来越复杂,软件系统的可理解性和可维护性也日益恶化。这些不仅重要,而且是软件开发中最昂贵的活动之一。重构经常被应用到软件中来改进它们。重构的目标之一是限制代码克隆,因为它阻碍了软件维护并影响其质量。为了应对不断的变化,重构被视为极限编程的重要组成部分。敏捷方法将重构作为重要的关键实践,是开发无克隆代码的首选。本文总结了我对软件克隆分析的概述。首先讨论了代码克隆的概念、类型、产生原因、后果和分析。重点介绍了极限编程环境下的代码克隆,并指出克隆检测是重构的有效工具。
2014-08-21 cs.SE
The Prolog Debugger and Declarative Programming. Examples
本文包含了一个配套文件的例子“的Prolog调试器和声明式编程”,讨论(中)充分的Prolog调试器声明式编程。逻辑编程是一种声明式编程范式。程序设计语言Prolog使逻辑编程成为可能,至少在很大程度上是这样。然而,Prolog调试器只在操作语义方面工作。因此它与声明式编程不兼容。配套文件试图找到使用它的方法,从陈述的角度来看。在这里,我们提供了应用它们的例子。
2020-04-04 cs.LO cs.PL cs.SE
Code Clone Refactoring in C# with Lambda Expressions
the University of Osaka(大阪大学)
本研究提出了一种基于lambda表达式的C#代码克隆重构方法,评估结果显示35%的克隆对适合重构,其中28.9%成功重构。
2025-12-25 cs.SE
A Prolog-based Environment for Reasoning about Programming Languages (Extended abstract)
ECLAIR是一个基于Prolog的原型系统,旨在为程序设计语言分析和实现工具的研究、开发和评估提供一个功能完整的环境。在本文中,我们勾画了系统的总体结构,概述了其组件的主要方法和技术。我们还讨论了Prolog作为系统实现语言的适当性:除了突出其优点外,我们还指出了一些潜在的弱点,暗示了可能的解决方案。
2007-11-02 cs.PL cs.SE
JExtract: An Eclipse Plug-in for Recommending Automated Extract Method Refactorings
虽然提取方法是提高程序理解的关键重构,但用于此目的的重构工具通常未得到充分利用。为了解决这个缺点,我们提出了JExtract,一个基于结构相似性的推荐系统,它可以识别直接由基于IDE的重构工具自动化的Extract Method重构机会。我们的评估表明,JExtract要有效得多(w.r.t.召回率和精确度)来识别方法中错位的代码,而不是JDeodorant(一种最先进的工具)
2015-06-19 cs.SE
On Preserving the Behavior in Software Refactoring: A Systematic Mapping Study
重构是一种在不改变系统行为的情况下修改系统设计的艺术。这个想法是重新组织变量,类和方法,以促进它们未来的适应和理解。由于行为保持的概念是重构的基础,一些研究,使用形式化验证,语言转换和动态分析,已被提出来监控重构操作的执行和它们对程序语义的影响。然而,没有现有的研究,检查每个重构操作的可用行为保存策略。目的:本文识别研究文献中的行为保存方法。方法:我们进行,在本文中,一个系统的映射研究,以捕获所有现有的行为保存方法,我们分类的基础上,包括他们的方法,适用性和自动化程度的几个标准。结果:结果表明,在文献中已经提出了几种行为保存方法。这些方法在使用形式主义和技术、开发自动重构安全工具以及对源代码执行手动分析之间有所不同。结论:我们的分类法揭示了存在一些类型的重构操作,其行为保持研究不足。我们的分类还表明,几种可能的策略可以结合起来,以更好地检测任何违反程序语义。
2021-07-21 cs.SE
The Prolog debugger and declarative programming
逻辑编程是一种声明式编程范式。程序设计语言Prolog使逻辑编程成为可能,至少在很大程度上是这样。然而,Prolog调试器只在操作语义方面工作。因此它与声明式编程不兼容。本报告讨论了这个问题,并试图从声明的角度找到如何使用调试器。结果并不令人鼓舞。此外,Byrd的盒子模型,调试器使用,解释在SLD分辨率。
2020-03-05 cs.LO cs.PL cs.SE
On the Generation of Test Data for Prolog by Partial Evaluation
在最近的工作中,我们提出了一种方法来测试数据生成(TDG)的命令式字节码的部分评价(PE)的CLP,它包括两个阶段:(1)字节码程序首先转换成一个等价的CLP程序通过解释编译的PE,(2)第二个PE是为了监督生成的测试用例的CLP反编译程序的执行。由PE的TDG的主要优点包括灵活地处理新的覆盖标准,获得测试用例生成器的可能性和它的简单性来实现。该方法原则上可以直接应用于任何命令式语言的TDG。然而,当人们试图将其应用于像Prolog这样的声明性语言时,我们发现作为一个主要困难的测试用例的生成,该测试用例覆盖了Prolog更复杂的控制流。从本质上讲,问题是,PE的一个内在特征是,它只计算非失败的推导,而在TDG的Prolog它是必不可少的,以产生相关的测试用例失败的计算。基本上,我们建议将原来的Prolog程序转化为一个等价的Prolog程序与明确的失败部分评估的Prolog解释器捕获失败的派生w.r.t.输入程序。另一个问题,我们讨论的文件是,虽然在字节码的情况下,基本的约束域只操纵整数,在Prolog中,它应该正确地处理由程序操纵的符号数据。由此产生的方案是感兴趣的,使其固有的优势,在TDG的PE的逻辑编程领域。
2009-03-12 cs.PL cs.SE
On Refactoring Quantum Programs
本文针对量子编程缺乏专门重构技术的问题,提出了一套为量子程序设计的全面重构方法集,并强调工具支持的重要性,该方法适用于多种量子编程语言,以提高量子软件的可维护性和效率。
2023-06-18 cs.PL cs.SE quant-ph
Automated Refactoring of Nested-IF Formulae in Spreadsheets
电子表格是最受欢迎的终端用户编程软件,其中公式就像程序一样,也有气味。电子表格公式的一个公认的共同气味是嵌套IF表达式,其可读性低,用户认知成本高,并且在重用或维护期间容易出错。然而,最终用户通常缺乏必要的程序设计语言知识和技能来解决甚至意识到问题。以前的研究工作在这方面做了非常初步的尝试,而目前还没有有效的自动化方法。本文首先提出了一种基于AST的自动化方法来系统地重构嵌套IF公式。总的想法是双重的。首先,我们检测并删除AST上的逻辑冗余。其次,我们确定了更高层次的语义已经支离破碎,分散,并重新组装语法使用简洁的内置函数。一个全面的评估已经进行了对现实世界的电子表格语料库,这是收集在一家领先的IT公司的研究目的。对68,000多个电子表格和2700万个nest-IF公式的结果表明,我们的方法能够消除超过99%的nest-IF公式的气味。超过50%的重构将嵌套IF的嵌套级别减少了一半以上。此外,一项涉及49名参与者的调查表明,在大多数情况下,参与者更喜欢重构公式,并同意这种自动重构方法是必要的和有用的。
2017-12-28 cs.SE
Prolog Visualization System Using Logichart Diagrams
我们已经开发了一个Prolog可视化系统,旨在支持Prolog编程教育。该系统使用Logichart图来可视化Prolog程序。Logichart图被设计为可视化Prolog执行流程,并使用户能够轻松地将Prolog子句与其部分相关联。该系统具有以下功能。(1)它在Logichart图上可视地跟踪Prolog执行(目标调用、成功和失败)。(2)在Prolog程序中,通过调用逻辑外谓词(如“assertz”和“retract”)实现动态变化的实时的可视化. (3)变量替换过程在文本小部件中实时的显示。
2009-03-12 cs.HC cs.PL cs.SE
Source-to-source optimizing transformations of Prolog programs based on abstract interpretation
在不改变其操作语义的情况下,通过转换源代码使Prolog程序更有效,这不是一个显而易见的任务。它要求用户清楚地了解Prolog编译器是如何工作的,特别是不纯的特性(如cut)的影响。编写Prolog代码的方式-例如,从句的顺序、从句中字面意思的顺序、删减或否定的使用--都会影响其效率。此外,不同的优化技术在一起应用时可能是冗余的或冲突的,这取决于调用过程的方式-例如,插入切口并启用索引。我们提出了一个优化器,基于抽象的解释,自动执行安全的代码转换的Prolog程序的上下文中的一些类的输入调用。如果过程用关于模式、类型、共享、解决方案的数量等的附加信息来注释,则该方法更有效。因此,该方法与Mercury类似。它适用于任何Prolog程序。
2007-10-31 cs.LO cs.PL cs.SE
Fixing Your Own Smells: Adding a Mistake-Based Familiarisation Step When Teaching Code Refactoring
针对传统重构教学用陌生代码导致新手难内化的问题,提出让学生先写带坏味道的代码再重构的教学法,实验证明其能显著提升新手的重构效率与信心。
2024-01-02 cs.SE
ChatGPT for Code Refactoring: Analyzing Topics, Interaction, and Effective Prompts
本文通过文本挖掘 29,778 条 ChatGPT 交互中的 715 条重构相关对话,分析开发者表达重构需求的方式及 ChatGPT 的回应,以理解重构交互并提升提示有效性。
2025-09-09 cs.SE
ACE: Automated Technical Debt Remediation with Validated Large Language Model Refactorings
本文提出ACE工具,利用经过验证的大语言模型输出自动进行代码重构,在保证程序正确性的同时提升代码可理解性,从而有效缓解开发者极少处理的技术债务。
2025-07-04 cs.SE
Toward Refactoring of DMARF and GIPSY Case Studies -- a Team 10 SOEN6471-S14 Project Report
本报告的目的是对两个特定的开放源码软件案例研究系统,即GIPSY和DMARF,进行背景研究。这是一个广泛的研究领域,正在进行不同的研究,以充分利用它。它从正式介绍这两个系统开始,并随着两者的复杂架构而发展。GIPSY(General Intensional Programming System)是一个多内涵编程系统,它作为一个框架,用于编译和执行用Lucid程序设计语言编写的程序。DMARF(分布式模块化音频识别框架)是一个基于Java的研究平台,在应用程序中充当库。由于这些系统正处于发展阶段,并且正在对这些主题进行大量研究,因此我们有动力参与这项研究,以更深入地了解这两个系统的架构。为了评估这两个开源系统的指标质量,我们使用了一个工具,即Logiscope。它是一个通过提供基于软件度量和图形的信息来自动化代码审查的工具。
2014-12-23 cs.SE
ProDebug: An Automated Debugging System for Prolog
Carnegie Mellon University(卡内基梅隆大学)
提出结合大语言模型、频谱和变异技术的Prolog自动调试系统ProDebug,用于识别学生作业中的错误并生成修复方案。
2026-05-26 cs.PL cs.SE
Multidimensional Predicates for Prolog
2014年,Ungar等人提出了Korz,一种用于构建自适应(面向对象)系统的新计算模型。Korz结合了隐式参数和多重分派来构造多维空间中对象的行为。Korz是一个简单而富有表现力的模型,它不需要特殊的编程技术,如访问者或策略模式,以适应新出现的上下文需求的系统。我们展示了如何Korz的想法可以集成在一个Prolog系统,通过扩展其语法和语义与简单的元编程技术。我们开发了一个库,称为mdp(多维谓词),可用于实验多维Prolog系统。我们强调它的好处与众多的场景,如打印调试信息,备忘录,面向对象的编程和自适应GUI。特别是,我们指出,我们可以结构和扩展Prolog程序与其他关注在一个清晰和简洁的方式。我们还演示了如何Prolog的独特的元编程功能,允许快速实验的语法和语义增强的新的,多维的模型。虽然有许多开放的关注,如效率和可理解性的情况下,更大的系统,我们将看到,我们可以使用的杠杆mdp和Prolog探索新的视野,在自适应系统的设计。
2016-03-20 cs.LO cs.PL cs.SE
Source Code Verification for Embedded Systems using Prolog
系统相关的嵌入式软件需要可靠,因此需要经过良好的测试,特别是对于航空航天系统。验证程序的一种常用技术是分析程序的抽象语法树(AST)。树结构可以用逻辑程序设计语言Prolog来优雅地分析。此外,Prolog还为全面分析提供了进一步的优势:一方面,它本身提供了多功能选项来有效地处理树或图数据结构。另一方面,Prolog的非确定性和回溯简化了对程序流的不同变体的测试,而不需要付出很大的努力。一个基于规则的方法与Prolog允许验证目标的特点,在一个简洁和声明的方式。在本文中,我们描述了我们的方法来验证的闪存文件系统的源代码与Prolog的帮助。闪存文件系统是用C++编写的,专门为卫星使用而开发。我们将一个给定的抽象语法树的C++源代码转换成Prolog的事实,并推导出调用图和执行序列(树),然后进一步测试验证目标。由于控制结构的不同程序流分支是通过回溯作为完整执行序列的子树而导出的。最后,这些子树在Prolog中进行了验证。我们说明了我们的方法与案例研究,在那里我们搜索不正确的应用程序中使用的实时操作系统RODOS的嵌入式软件中的信号量。我们依赖于计算树逻辑(CTL),并设计了一个嵌入式领域特定语言(DSL)的Prolog来表达的验证目标。
2017-01-03 cs.LO cs.PL cs.SE
Automating Source Code Refactoring in the Classroom
本文探讨了在课堂中使用 Eclipse 插件 JDeodorant 进行反模式检测与代码重构的教学实践,对 171 名学生的实验结果表明该工具有效提升了学生对重构概念的认知与学习满意度。
2023-11-05 cs.CY cs.SE
Refactoring Delta-Oriented Product Lines to achieve Monotonicity
面向增量的编程(DOP)是一种灵活的转换方法来实现软件产品线。在面向增量的产品线中,变体是通过将包含在增量模块中的操作应用于(可能是空的)基本程序来生成的。这些操作可以添加、移除或修改程序中的命名元素(例如,Java程序中的类、方法和字段)。本文提出了将面向增量的生产线重构为单调形式的算法,即,或者仅包含添加和修改操作(单调递增),或者仅包含删除和修改操作(单调递减)。由于其结构简单,单调增量导向的产品线更容易分析。通过Java程序产品线DOP的核心演算形式化了这些算法,并给出了它们的正确性和复杂性。
2016-04-01 cs.LO cs.PL cs.SE
Automatizing Software Cognitive Complexity Reduction through Integer Linear Programming
本文针对代码认知复杂度降低问题,提出将重构操作序列建模为整数线性规划,利用高效求解器替代穷举枚举,以实现在大规模程序中的最优解。
2024-02-08 cs.CC cs.SE
Refactoring Programs Using Large Language Models with Few-Shot Examples
University of Aizu(会津大学);Tohoku University(东北大学);NTT Communication Science Laboratories(NTT通信科学实验室)
本文提出用GPT-3.5并依据单样本评估为Python程序选择适配的少样本重构示例,实验表明可在保证语义正确的同时显著降低复杂度与代码行数。
2023-11-20 cs.AI cs.CL cs.PL
Mapping Objects to Persistent Predicates
Prolog逻辑程序设计在许多需要存储知识的系统中被广泛用于提供持久性。用于供应持久性的Prolog编程语言的一些实现具有与其他程序设计语言的双向接口,总体上具有面向对象的编程语言。目前,缺少用于系统开发的工具和框架,这些工具和框架以简单和敏捷的形式使用逻辑谓词持久性。更具体地说,目前需要一个面向对象和逻辑持久性提供程序,允许在主存中操作对象,并且该对象的持久性具有逻辑编程谓词方面。目前的工作介绍了一个面向对象和逻辑持久性提供者的支持对象的序言声明性映射的替代。所提出的替代方案包括逻辑编程谓词与面向对象方法的对应关系,其中对于逻辑编程的每个元素,一个面向对象的元素使其相互作用。逻辑程序设计谓词的面向对象表示提供了对组成知识的元素进行操作的便利。
2017-05-01 cs.LO cs.PL cs.SE
Translingual Obfuscation
程序混淆是一种重要的软件保护技术,它可以防止攻击者泄露软件的编程逻辑和设计。我们介绍了一种新的软件混淆方案,使程序模糊的“误用”某些程序设计语言的独特功能。跨语言混淆将程序的一部分从其原始语言翻译成具有不同编程范式和执行模型的另一种语言,从而增加程序复杂性并阻碍逆向工程。本文研究了用逻辑程序设计语言Prolog进行双语混淆的可行性和有效性。我们在一个名为BABEL的工具中实现了双语混淆,该工具可以有选择地将C函数转换为Prolog谓词。通过利用Prolog语言的两个重要特性,即,由于BABEL的统一性和回溯性,它混淆了C程序的数据布局和控制流,使它们更难进行逆向工程。我们的实验表明,BABEL提供了有效的和隐形的软件混淆,而成本只有适度相比,市场上最流行的商业混淆。利用BABEL验证了语义混淆的可行性,认为语义混淆是软件混淆的一个新方向。
2016-01-12 cs.CR cs.SE
Towards Safe Automated Refactoring of Imperative Deep Learning Programs to Graph Execution
本文提出一种基于张量分析的自动化重构方法,帮助开发者将命令式深度学习代码安全、高效地转换为图执行,以兼顾易用性与性能,并已在PyDev Eclipse IDE中实现。
2023-10-10 cs.PL cs.SE
Towards Refactoring DMARF and GIPSY OSS
我们在这里提出了一个探索性和解释性的研究的需求,设计和实现两个开源软件系统:分布式模块化音频识别框架(DMARF),和一般内涵编程系统(GIPSY)。这两个系统的起源、开发和演变在所涉及的开发人员及其应用程序方面都有重叠。DMARF是一个独立于平台的算法集合,用于音频和自然语言文本样本中的模式识别、识别和信号处理,成为研究社区特别是使用、测试和比较模式识别和机器学习广泛领域中各种算法的丰富平台。作为一个内涵编程的平台,GIPSY的成立旨在进一步推动内涵编程领域,克服二十年前可用工具的局限性。在这项研究中,我们目前的背景研究,这两个系统,并阐述了他们的动机和要求,驱动和塑造他们的设计和实施。我们随后更深入地阐述了其架构设计的各个方面,包括一些用例的说明,领域模型,以及主要组件的整体类图。此外,我们调查了现有的设计模式在这两个系统中,并提供了一个详细的视图中所涉及的组件,这样的模式。此外,我们深入研究了这两个系统的内部,识别代码气味并建议可能的重构。选定重构实现的补丁集已被收集到补丁集中,并可以提交到这两个系统的未来版本中,等待DMARF和GIPSY的开发人员和维护人员的审查和批准。
2014-11-25 cs.DC cs.SE
On Feasibility of Declarative Diagnosis
本文探讨Prolog程序调试中声明式诊断方法被忽视的问题,分析其弱点并提出克服方案,论证了声明式诊断在实际编程中的可行性与应用价值。
2023-08-30 cs.LO cs.PL cs.SE
ReGAL: Refactoring Programs to Discover Generalizable Abstractions
UNC Chapel Hill(北卡罗来纳大学教堂山分校)
本文提出无梯度方法 ReGAL,通过代码重构从少量程序中学习可复用函数库,使 LLM 在多个程序合成数据集上的预测准确率显著提升。
2024-06-06 cs.AI cs.CL cs.LG