On the Bug-proneness of Structures Inspired by Functional Programming in JavaScript Projects
受函数式编程启发的语言构造已经进入了大多数主流程序设计语言。许多研究人员和开发人员认为,这些结构导致程序更简洁,可重用,更容易理解。然而,很少有研究调查在主流程序设计语言中使用它们的影响。本文量化了JavaScript中与函数式编程相关的四个概念:递归、不变性、惰性求值和函数作为值。我们专注于JavaScript程序,因为这些概念中的一些在语言中的可用性,因为它的灵感来自函数式程序设计语言,以及它的流行。我们挖掘了91个GitHub存储库(2200多万个),其中大部分是用JavaScript编写的(超过50%的代码),从静态和时间角度衡量这些概念的使用情况。我们还测量了错误修复提交删除这些概念的可能性(这将暗示错误倾向)以及它们与代码注释的存在(这将暗示代码难以理解)的关联。我们发现,这些概念被广泛使用(每46.65个,43.59%的人)。此外,高阶函数、不变性和惰性求值相关结构的使用在这些年来一直在增长,而递归、回调和承诺的使用却在减少。我们还发现统计证据表明,除了与不变性相关的结构之外,删除这些结构在bug修复提交中比在其他提交中更不常见。此外,它们的存在与评论大小无关。我们的研究结果表明,函数式编程的概念是很重要的开发人员使用多范式语言,他们的使用不会使程序更难理解。
2022-06-17 cs.PL cs.SE
Control and Data Flow Execution of Java Programs
十年来,对程序的理解已经成为学生以及参与软件开发过程和为开放问题提供解决方案的其他人的必修任务。在这方面,以最好的方式显示在一个图形表示的问题是一个关键的优势,以更好地理解it.We提供的模型和结构,Java程序理解的控制和数据流分析的执行。特别是它有助于理解Java程序的静态分析,这是软件维护的一个极其重要的阶段。我们提供了Java程序可视化的信息和模型,可以帮助更好地理解程序的学习和分析目的。为构建可视化工具提供的思想是从Java程序的执行中提取数据和控制分析。通过实例分析,证明了本文的思想对理解Java程序的静态分析、软件调试和软件维护具有重要意义。
2017-07-27 cs.SE
A Framework for Debugging Java Programs in a Bytecode
在软件工程领域,程序分析和理解一直被认为是一个非常具有挑战性的任务,因为它需要专门的时间和精力。由于其静态特性,对源代码的分析有时可能相对容易,然而,后端代码(字节码),特别是在Java编程方面,分析起来很复杂。在本文中,我们提出了一种方法论的方法来理解Java程序的字节码。提出了一个Java字节码调试过程的框架。此外,我们讨论了调试过程中的字节码理解从简单的多语句方面的数据流分析。最后,我们提出了一个比较分析的字节码随着模拟的建议框架的调试过程
2019-04-29 cs.FL cs.PL cs.SE
Compiler Testing using Template Java Programs
我们提出了JAttack,一个框架,使基于模板的测试编译器。使用JAttack,开发人员编写一个模板程序,该程序描述了一组要生成的程序,并作为编译器的测试输入。这样的框架使开发人员能够将他们的领域知识结合在测试编译器上,给出了一个基本的程序结构,允许探索可以触发复杂编译器优化的复杂程序。开发人员用宿主语言(Java)编写一个模板程序,其中包含需要JAttack填补的漏洞。每一个使用领域特定语言编写的洞都在扩展抽象语法树(eAST)中构造一个节点。eAST节点定义孔的搜索空间,即,一组表达式和值。JAttack通过执行模板生成程序,并通过随机选择表达式和值(在由漏洞定义的搜索空间内可用)来填充每个漏洞。此外,我们引入了几个优化,以减少JAttack的生成成本。虽然JAttack可用于测试各种编译器功能,但我们展示了它在帮助测试即时(JIT)Java编译器方面的功能,这些编译器在执行足够数量的执行后会在运行时进行优化。使用JAttack,我们发现了六个关键的bug,这些bug已经被Oracle开发人员确认。其中四个是以前未知的,包括两个未知的CVE(常见漏洞和暴露)。JAttack展示了将开发人员的领域知识(通过模板)与随机测试相结合以检测JIT编译器中的错误的强大功能。
2022-09-09 cs.PL cs.SE
ClassSpy: Java Object Pattern Visualization Tool
现代的java程序由大量的类和在程序执行过程中实例化的大量对象组成。软件开发人员总是渴望知道为每个类创建的对象的数量。这些信息有助于开发人员理解程序的包/类并优化其代码。然而,理解如此大量的信息并不是一项微不足道的任务。可视化有助于在单个屏幕上描述这些信息并有效地理解它。本文提出了一种可视化的方法,描述了在程序执行过程中实例化的所有对象的信息。所提出的技术具有更高的空间效率和可扩展性,可以处理大量数据集,同时有助于识别关键程序组件。这个易于使用的界面为用户提供了一个环境,在一个屏幕上浏览整个对象。所提出的方法允许在类、线程和方法级别对对象进行排序。所提出的方法的有效性和可用性,通过案例研究。
2014-06-09 cs.PL cs.SE
Obfuscating Java Programs by Translating Selected Portions of Bytecode to Native Libraries
代码混淆是一种流行的方法,可以使程序理解和分析变得更加困难,其目的是减轻与恶意逆向工程和代码篡改相关的威胁。然而,编译成高级字节码的程序设计语言(例如,Java)只能在有限的程度上进行模糊处理。事实上,高级字节码仍然包含攻击者可能利用的高级相关信息。为了实现更有弹性的混淆,这些程序的一部分可以用程序设计语言来实现(例如,C)编译为低级机器相关代码。事实上,机器码包含和泄漏更少的高级信息,并且它能够实现更有弹性的混淆。在本文中,我们提出了一种方法来自动翻译的关键部分的高级Java字节码到C代码,以便更有效的混淆可以诉诸。此外,开发人员仍然可以使用单个程序设计语言工作,即,Java.
2019-01-15 cs.SE
Comparison between CPBPV, ESC/Java, CBMC, Blast, EUREKA and Why for Bounded Program Verification
Université de Nice–Sophia Antipolis(尼斯-索菲亚安提波利斯大学);Brown University(布朗大学)
本报告描述了一组基准程序验证的实验结果。它比较了CPBVP“有界程序验证的约束编程框架”[4]与以下框架的能力:ESC/Java,CBMC,Blast,EUREKA和Why。
2008-08-11 cs.AI cs.LO cs.SE
The Influence of the Java Collection Framework on Overall Energy Consumption
本文提出了一个详细的研究不同的Java集合框架(JFC)实现的能源消耗。对于该框架中的每种实现方法,我们在处理不同数量的数据时呈现其能耗。了解每个实现的最绿色的方法,我们提出了一个Java程序的能源优化方法:基于调用JFC方法的程序的源代码,我们选择最绿色的实现。最后,我们提出了优化一组Java程序,我们获得了6.2%的节能的初步结果。
2016-02-02 cs.SE
Refactoring Composite to Visitor and Inverse Transformation in Java
我们描述了如何使用重构工具将符合Composite设计模式的Java程序转换为符合Visitor设计模式且具有相同外部行为的程序。我们还描述了逆变换。我们使用IntelliJ IDEA提供的重构工具。
2013-07-01 cs.SE
A Formal Model of the Safety-Critical Java Level 2 Paradigm
安全关键Java(SCJ)为必须经过认证的应用程序引入了一种新的编程范式。SCJ规范(JSR 302)是一个开放组标准,但它不包括验证技术。以前的工作已经解决了SCJ Level~1程序的验证问题。我们支持更复杂的SCJ Level~2程序,它允许使用Java线程、等待和通知机制编写高并发多处理器应用程序。我们提出了一个正式的模型SCJ水平~2,捕获的状态和行为的SCJ程序和SCJ API。这是SCJ Level~2范式的第一个形式化语义,也是SCJ Level~2程序基于精化推理技术发展的一个重要组成部分。我们展示了如何我们的模型可以用来证明SCJ API和应用程序的属性。
2018-05-27 cs.SE
Acknowledging Good Java Code with Code Perfumes
针对现有Java编程自动化反馈偏负面的问题,提出类似代码检查的code perfumes技术,通过20种面向初中级学习者的代码特征表彰良好实践,实验证实其与代码质量、学生成绩正相关,可辅助教学反馈。
2024-06-24 cs.SE
Automatic Inference of Symbolic Permissions for Sequential Java Programs
在主流程序设计语言(如Java)中,启用并发性的常见方法是手动引入显式并发性构造(如多线程)。在多线程程序中,由于线程交错和堆冲突等问题的存在,线程间的同步管理是一项复杂而具有挑战性的任务。考虑到这些因素,基于访问权限的依赖关系已被调查作为一种替代方法来验证多线程程序的正确性,并利用隐式并发存在于顺序程序中,而不使用显式并发约束。然而,在源程序中手动添加基于权限的规范会产生显著的注释开销,从而降低了现有基于权限的方法的有效性。在本文中,我们提出了一个框架,Sip4J,自动提取访问权限为基础的隐式依赖从顺序Java程序,通过执行程序间的源代码的静态分析。此外,我们集成和扩展现有的基于权限的验证工具,脉冲,自动验证推断规范的正确性,并对他们的并发行为的原因。我们对一些广泛使用的基准测试的评估给出了强有力的证据,推断的注释的正确性和它们的有效性,使并发顺序程序。
2019-07-31 cs.SE
Understanding and Analyzing Java Reflection
Java反射已经越来越多地用于各种软件中。它允许软件系统在运行时检查和/或修改其类、接口、方法和字段的行为,使软件能够适应动态变化的运行时环境。然而,这种动态语言特性对静态分析提出了重大挑战,因为反射丰富的软件的行为在逻辑上是复杂的,并且在静态上难以预测,特别是当频繁地被静态未知的字符串值操纵时。结果,现有的静态分析工具或者忽略反射或者部分地处理反射,从而导致错过重要行为,即,不健全的结果。因此,改进甚至实现(静态)反射分析(静态地推断反射代码的行为的分析)的可靠性将为许多分析客户端提供显着的好处,例如错误检测器,安全分析器和程序验证器。本文做了两个贡献:我们提供了一个全面的了解Java反射通过检查其基本概念,API和现实世界的使用,并在此基础上,我们介绍了一种新的静态方法来解决Java反射有效地在实践中。我们已经实现了我们的反射分析在一个开源工具,称为太阳能,并评估其有效性广泛与大型Java程序和库。我们的实验结果表明,SOLAR是能够(1)解决反射更健全比国家的最先进的反射分析;(2)自动和准确地识别部分的反射是解决不健全或不准确的程序;和(3)引导用户迭代细化分析结果使用轻量级注释,直到他们的特定需求得到满足。
2017-06-14 cs.PL cs.SE
JavaBERT: Training a transformer-based model for the Java programming language
Kiel University(基尔大学)
在开发新的软件代码时,代码质量是并将是一个关键因素,需要适当的工具来确保代码的功能和可靠性。机器学习技术仍然很少用于软件工程工具,错过了其应用的潜在好处。自然语言处理已经显示出处理关于各种任务的文本数据的潜力。我们认为,这样的模型也可以显示类似的好处,软件代码处理。在本文中,我们研究了如何用于自然语言处理的模型可以在软件代码上进行训练。我们介绍了一个数据检索管道的软件代码和训练模型上的Java软件代码。由此产生的模型,JavaBERT,显示了高精度的掩蔽语言建模任务显示其潜在的软件工程工具。
2021-10-20 cs.LG cs.SE
How the deprecation of Java applets affected online visualization frameworks -- a case study
JavaView可视化框架是在20世纪90年代末设计的,作为一种软件,它提供了在网页上简单、交互式的几何可视化。我们讨论了如何实现这一目标和其他设计目标,并提出了几个应用程序,以突出该框架的当代用例。然而,由于JavaView的简单Web导出是基于Java Applet的,因此该技术的弃用禁用了该软件的一个主要功能。本文的其余部分将以JavaView为例,重点介绍底层程序设计语言的更改对可视化工具包的影响。我们讨论了软件可能的反应,这样的挑战,JavaView框架作为一个例子来说明开发决策。这些讨论是由一个更广泛的、潜在的问题引导的,即维护一个软件多长时间是明智的。
2020-04-30 cs.GR cs.SE
Parichayana: An Eclipse Plugin for Detecting Exception Handling Anti-Patterns and Code Smells in Java Programs
反模式和代码气味是源代码中的标志,它们不是缺陷(不会阻止程序运行,也不会导致编译错误),而是更深层次和更大问题的指标。异常处理是一种编程构造,设计用于处理异常或异常条件(改变程序执行的正常流程)的发生。在本文中,我们提出了一个Eclipse插件(称为Parichayana),用于检测Java程序中的异常处理反模式和代码气味。Parichayana能够自动检测几个常见的例外处理编程错误。我们扩展了Eclipse IDE,并通过Parichayana插件(托管在GitHub上的免费开源)创建了新的菜单项和相关操作。我们比较和对比Parichayana与几个代码气味检测工具,并证明我们的工具提供了独特的能力,在现有的工具。我们已经创建了一个更新站点,开发人员可以使用Eclipse更新管理器从我们的站点安装Parichayana。我们在几个基于Java的大型开源项目中使用了Parichyana,并检测到异常处理反模式的存在
2016-12-31 cs.SE
OpenJML: Software verification for Java 7 using JML, OpenJDK, and Eclipse
OpenJML是一个检查Java程序的代码和规范的工具。我们描述了我们的经验,建立在JML,OpenJDK和Eclipse的基础上的工具,以及在基于规范的软件验证的许多进步。该实现展示了直接在软件开发IDE中集成规范工具的价值,以及尽可能多地自动化任务的价值。该工具,虽然仍在进行中,现在已被用于几个大学水平的课程,软件规范和验证,并对现有的Java程序的小规模研究。
2014-04-26 cs.LO cs.PL cs.SE
Clone Removal in Java Programs as a Process of Stepwise Unification
克隆代码是软件一致性维护和演化的重要障碍之一。虽然今天的克隆检测工具发现了各种各样的克隆,但它们没有提供任何如何删除这些克隆的建议。我们解释了在寻找一个序列的克隆删除的变化所涉及的问题,并建议把这个问题看作是一个逐步统一的克隆实例的过程。因此,这个问题可以通过回溯可能的统一步骤来解决。
2013-01-11 cs.SE
Towards Hybrid Intensional Programming with JLucid, Objective Lucid, and General Imperative Compiler Framework in the GIPSY
纯Lucid程序是并发的,粒度非常细。顺序线程(ST)是为了扩大粒度而引入的函数;它们通过通用内涵编程系统(GIPSY)中的通信过程(CP)从服务器传递到工作器。JLucid程序将用于ST的Java代码与用于并行控制的Lucid代码相结合。因此,首先,在这篇论文中,我们描述了新的JLucid编译器生成ST和CP的方式。JLucid还引入了数组支持。进一步的探索经历了Lucid语言家族所经历的额外的转换,以支持在通用内涵程序设计语言(GIPL)和索引Lucid中使用Java对象及其成员:首先,以JLucid的形式允许使用伪对象,然后通过专门设计的Objective Lucid语言。通过讨论和实例,给出了ObjectiveLucid的语法和语义定义以及Java对象在内涵程序中的含义。最后,有许多有用的科学和实用程序是用Java以外的命令式程序设计语言编写的,例如C、C++、Fortran、Perl等。因此,提供一个框架来促进将这些语言包含到GIPSY中并由Lucid程序使用是明智的。为解决这一问题,提出了一个总的强制性框架及其具体实施。
2009-12-21 cs.PL cs.SE
A Journey Among Java Neutral Program Variants
中性程序变体在功能上与原始程序相似,但实现的行为略有不同。诸如近似计算或遗传改进之类的技术共享这样的直觉,即增强的潜力在于这些可接受的行为差异(例如,增强的性能或可靠性)。然而,通过推测性转换自动合成中性程序变体仍然是一个关键挑战。这项工作旨在描述Java程序中的塑料代码区域,即,容易合成中性程序变体的区域。我们的实证研究依赖于6个真实世界的Java程序的自动变化。首先,我们用三种最先进的推测转换来转换这些程序:添加、替换和删除语句。我们得到了23445个中性变体,从中我们收集了以下新颖的见解:开发人员自然地编写支持细粒度行为更改的代码;语句删除是一种令人惊讶的有效推测转换;高级设计决策,例如数据结构的选择,是可以在保持功能的同时进化的自然点。其次,我们设计了3个新的投机转换,针对特定的塑料区域。新的实验表明,分别有60%、58%和73%的合成变体(总共175688个)是中性的,并且表现出与原始变体不同的执行轨迹。
2019-06-22 cs.SE
An Empirical Study on Failed Error Propagation in Java Programs with Real Faults
在测试过程中,开发人员可以在方法的外部或内部放置Oracle。给定错误的执行状态,即,一个与预期的错误不同的错误,如果它被放置在不能访问不正确的程序状态或程序状态不再被破坏的程序点处,则Oracle可能无法暴露该错误。在这种情况下,oracle会受到失败的错误传播的影响。我们进行了一项实证研究,以衡量失败的错误传播缺陷4J,参考基准的Java程序与真正的故障,考虑所有6个项目(386个真正的错误和459个固定的方法)。我们的研究结果表明,失败的错误传播的流行是可以忽略不计的测试时,在单元级。然而,当提供系统级输入时,失败的错误传播的发生率大幅增加。这表明,方法后置条件仅根据外部可观察状态/数据进行预测就足够了,并且在系统级测试时应检查中间步骤。
2020-11-21 cs.SE
An approach for Test Impact Analysis on the Integration Level in Java programs
测试影响分析是一种获取受代码更改影响的测试子集的方法。这种方法主要应用于单元测试,在这种测试中,代码和相关测试之间的联系很容易获得。然而,在集成级别上,通过编程找到这样的链接并不简单,特别是当集成测试保存在单独的存储库中时。我们提出了一种基于代码变化的运行时分析来选择集成测试的方法,以减少测试执行开销。我们提供了一组工具和框架,可以插入现有的CI/CD管道。我们已经评估了一系列的开源Java程序的方法,发现$\approx$ 50\%的测试减少,并在少数情况下超过80\%。我们还将该方法应用于生产中的大规模商业系统,并发现了类似的结果。
2022-11-14 cs.SE
JBMC: A Bounded Model Checking Tool for Java Bytecode
JBMC是一个开源的基于SAT和SMT的有界模型检验工具,用于验证Java字节码。JBMC依赖于Java库的操作模型,它保守地近似于它们的语义,以验证断言违规,数组越界,意外的算术溢出以及Java字节码中的其他类型的功能和运行时错误。如果状态空间的深度上界是已知的,则JBMC可以用于伪造属性或证明程序正确性。JBMC的实际应用包括但不限于错误发现、属性检查、测试输入生成、安全漏洞检测和程序合成。在这里,我们提供了一个详细的描述JBMC的架构和它的功能,包括深入讨论其背景理论和底层技术,包括一个国家的最先进的字符串求解器,以确保Java字节码的安全性和安全性。
2023-02-05 cs.LO cs.PL cs.SE
Translating PL/I Macro Procedures into Java Using Automatic Templatization and Large Language Models
IBM Research(IBM 研究院)
本文提出了一种基于模板化和大语言模型的方法,用于将PL/I宏过程翻译成Java,以生成能复现原始行为的代码。
2025-12-06 cs.SE
Fault Localization for Java Programs using Probabilistic Program Dependence Graph
故障定位是一个寻找故障位置的过程。它确定故障的根本原因。它识别出错误程序的异常行为的原因。它能准确地识别出虫子在哪里。现有的故障定位技术主要有基于切片的技术、基于程序谱的技术、基于统计的技术、基于程序状态的技术、基于机器学习的技术和基于相似性的技术。在所提出的方法中,使用基于模型的故障定位技术,它被称为概率程序依赖图。ProbabilityProgram Dependence Graph(PPDG)是一个创新的模型,它可以扫描项目的内部行为。程序依赖图(PDG)增强了PPDG的构造。PDG是通过控制流图(CFG)来实现的。PPDG构造增强了由程序依赖图表示的结构依赖,其中节点状态之间的统计依赖的估计是从测试集计算的。PPDG是建立在概率图形模型框架的基础上的。这项工作提出了构建PPDG和应用故障定位的算法。
2012-01-19 cs.SE
Timestamp Based Execution Control for C and Java Programs
许多程序员不得不处理一个被覆盖的变量,例如由于别名问题。罪魁祸首显然是在bug出现之前对该内存位置的最后一次写访问。移除这些bug的常用技术是从调试器开始,通过(1)找到最后一次写入,(2)通过从头开始重新执行程序,将执行的控制点移回该时间。我们希望将其自动化。如果我们能以某种方式标记在步骤(1)中发现的最后一次写入并控制执行点将其移回此时,则步骤(2)很容易。在本文中,我们提出了一个新的概念,位置,即程序执行轨迹中的一个点,需要上述步骤(2)。该职位使调试器能够自动控制程序执行,以支持常见的调试活动。我们在C中通过修改GCC实现了位置,在Java中通过字节码Transformer实现了位置。测量结果表明,该位置可以提供可接受的开销量。
2003-09-17 cs.SE
ARJA: Automated Repair of Java Programs via Multi-Objective Genetic Programming
最近的实证研究表明,GenProg的性能并不令人满意,特别是对于Java。在本文中,我们提出了ARJA,一个新的GP为基础的修复方法自动修复的Java程序。具体来说,我们提出了一种新的低粒度补丁表示,适当的搜索子空间的可能错误的位置,操作类型和潜在的修复成分,使GP探索搜索空间更有效。基于这种新的表示,我们制定自动程序修复作为一个多目标的搜索问题,并使用NSGA-II寻找更简单的修复。为了减少计算量和搜索空间,我们引入了一个测试过滤过程,可以加快适应度评估的GP和三种类型的规则,可以应用到避免不必要的操作的代码。此外,我们还提出了一种类型匹配策略,可以通过利用现有语句的语法模式来创建新的潜在修复成分。我们进行了一个大规模的实证评估ARJA及其变种的种子错误和现实世界的错误相比,几个国家的最先进的修复方法。我们的研究结果验证了ARJA中所采用的搜索机制的有效性和效率,也显示了其优于其他方法。特别是,与jGenProg(GenProg for Java的实现)相比,完全遵循冗余假设的ARJA版本可以为两倍以上的bug数量(从27到59)生成测试套件足够的补丁,并为近四倍的数量(从5到18)生成正确的补丁,在Defects 4J中考虑了224个真实世界的bug。此外,ARJA是能够正确地修复几个真正的多位置的错误,很难被修复的大多数现有的修复方法。
2017-12-21 cs.SE
Shadow Symbolic Execution with Java PathFinder
回归测试确保软件系统在发展时仍然正确执行,并且更改不会引入意外的副作用。然而,创建显示不同行为的回归测试用例需要大量的工作。一个解决方案是影子符号执行的想法,最初基于KLEE为C编写的程序实现,它采用新旧程序的统一版本,并执行由具体值指导的符号执行,以探索改变的行为。在这项工作中,我们将影子符号执行的想法应用到Java程序中,因此,提供了一个扩展的Java Path(JPF)项目执行影子符号执行Java字节码。该扩展已应用于JPF测试类中的几个主题,在这些主题中,它成功地生成了暴露回归测试相关分歧的测试输入。
2018-02-05 cs.SE
CoderUJB: An Executable and Unified Java Benchmark for Practical Programming Scenarios
本文提出包含 2,239 道题、源自 17 个真实开源 Java 项目的可执行统一基准 CoderUJB,用于评估 LLMs 的实际编程能力,并发现持续预训练和指令微调可能损害某些任务性能。
2024-03-28 cs.SE
Symmaries: Automatic Inference of Formal Security Summaries for Java Programs
Newcastle University(纽卡斯尔大学);OcamlPro;University of Liverpool(利物浦大学)
Symmaries通过自动化生成Java程序的安全摘要,提升静态分析工具的精度和可扩展性。
2025-12-23 cs.CR cs.FL cs.PL
Applying CodeBERT for Automated Program Repair of Java Simple Bugs
软件调试和程序修复是软件工程中最耗时和劳动密集型的任务之一,自动化将使其受益匪浅。在本文中,我们提出了一种基于CodeBERT的新型自动程序修复方法,CodeBERT是一种基于变换器的神经架构,在大型源代码语料库上进行了预训练。我们在ManySStuBs 4J小型和大型数据集上微调我们的模型,以自动生成修复代码。结果表明,我们的技术在19-72%的情况下准确地预测了开发人员实现的固定代码,具体取决于数据集的类型,每个错误不到一秒。我们还观察到,我们的方法可以生成不同长度的修复(短和长),并可以修复不同类型的错误,即使在训练数据集中只存在这些类型的错误的几个实例。
2021-03-30 cs.SE
AVATAR: A Parallel Corpus for Java-Python Program Translation
University of California, Los Angeles(加州大学洛杉矶分校);Columbia University(哥伦比亚大学)
针对程序翻译平行语料缺失的问题,研究者构建了含9515组Java-Python对应代码及250组单元测试的AVATAR平行语料库,基准测试显示现有预训练语言模型生成功能准确代码的能力仍有欠缺。
2023-05-04 cs.CL cs.SE
Why did developers migrate Android applications from Java to Kotlin?
目前,大多数在移动设备上运行的应用程序都是用Java开发的Android应用程序。然而,开发人员现在可以使用一种新的程序设计语言编写Android应用程序:Kotlin,谷歌在2017年将其作为开发Android应用程序的官方程序设计语言。从那时起,Android开发人员已经能够:a)使用Kotlin从头开始编写Android应用程序,b)通过添加Kotlin代码(可能归功于两种语言之间的互操作性)来改进现有的Java Android应用程序,或者c)将其Android应用程序从Java迁移到Kotlin。本文旨在研究这最后一种情况。我们进行了一项定性研究,以了解Android开发人员将Java代码迁移到Kotlin的原因,并将他们在此过程中的经验汇总在一起,以确定他们面临的主要困难。为了执行这项研究,我们首先确定了来自开源Android项目的提交,这些项目已经将Java代码迁移到Kotlin。然后,我们给编写这些迁移的开发人员发了电子邮件。因此,我们从98名将代码从Java迁移到Kotlin的开发人员那里获得了信息。本文介绍了研究确定的进行迁移的主要原因。我们发现开发人员将Java代码迁移到Kotlin是为了访问程序设计语言功能(例如,扩展函数,扩展函数,智能转换),这些功能在Java for Android开发中不可用,并获得更安全的代码(即,避免空指针异常)。我们还确定了研究…
2021-11-22 cs.SE
Automatic Assessment of the Design Quality of Student Python and Java Programs
程序是计算机和人之间的一种通信方式,因此当学生接受编写程序的训练时,他们需要学会编写设计良好、可读的代码,而不是简单地正确运行的代码。教授提高可读性的好的设计实践的困难在于评估学生程序的劳动强度。通常评估设计质量涉及仔细阅读学生程序,以便提供个性化的反馈,这对教师来说自然是耗时的。我们提出了一个基于规则的系统,评估学生课程的设计质量,并提供个性化的,准确的反馈,如何提高他们的工作。为了研究其有效性,我们通过在线部署将该系统提供给学生,允许学生在提交作业之前接收反馈并进行修改。学生们从该系统中受益,与之前2到3年的学生提交相比,4个不同的作业(2个Python和2个Java)的设计质量缺陷率平均下降了47.84%。
2022-11-05 cs.CY cs.SE
What Java Developers Know About Compatibility, And Why This Matters
真实世界的程序既不是单一的,也不是静态的--它们是使用平台和第三方库构建的,程序和库都在不断地发展以应对变化的压力。在Java语言的情况下,Java语言和Java虚拟机规范中定义的规则定义了何时库演化是安全的。这些规则区分了三种类型的兼容性-二进制,源代码和行为。我们声称,其中一些规则是违反直觉的,许多开发人员并没有很好地理解。我们提出了一项调查的结果,我们询问开发人员对各种类型的兼容性的理解。414名开发人员回应了我们的调查。我们发现,虽然大多数程序员都熟悉源代码兼容性的规则,但他们通常缺乏有关二进制和行为兼容性规则的知识。当组织从集成构建切换到需要动态链接的技术(如OSGi)时,这可能会产生问题。我们通过研究问题跟踪系统中与链接相关的问题被引用的频率来评估问题的严重性,并发现它们很常见。
2014-08-12 cs.SE
The significance of user-defined identifiers in Java source code authorship identification
在编写源代码时,程序员在创建和使用标识符方面有不同程度的自由。他们是否习惯性地使用相同的标识符,与其他人使用的名称不同?那么,是否有可能通过检查这些标识符来判断一段代码的作者是谁呢?如果是这样,我们是否可以使用标识符的存在或不存在来帮助正确地将程序分类给作者?有没有可能通过重命名标识符来隐藏程序的出处?在这项研究中,我们评估了三种类型的标识符在源代码作者分类两个不同的Java程序数据集的重要性。我们通过一系列实验来做到这一点,在这些实验中,我们每次伪装一种类型的标识符。这些实验使用源代码作者配置文件(SCAP)方法作为工具进行。结果表明,虽然标识符作为一个整体进行检查时,似乎并不反映这些数据集的程序作者,当单独检查有证据表明,类名信号的程序的作者。相比之下,Java程序中使用的简单变量和方法名似乎并不反映程序的作者身份。相反,我们的分析表明,这种标识符是如此普遍,以掩盖作者。我们认为,这些结果具有适用性的鲁棒性的代码剽窃分析和潜在的方法可能是有价值的诉讼程序作者的纠纷所产生的情况下。
2021-01-29 cs.SE
Dynamic Taint Tracking using Partial Instrumentation for Java Applications
针对Java应用动态污点跟踪的运行时开销问题,提出方法级部分插桩策略,通过PetaBlox静态分析确定源汇范围内方法,结合修改的Phosphor实现插桩,在Dacapo基准测试中较完全插桩版本性能显著提升。
2024-11-28 cs.CR cs.PL cs.SE
Megadiff: A Dataset of 600k Java Source Code Changes Categorized by Diff Size
本文介绍了Megadiff,源代码差异的数据集。它专注于Java,具有严格的基于提交消息和diff大小的包含标准。Megadiff包含663 029个Java差异,可用于研究提交理解、故障定位、自动程序修复和代码更改的机器学习。
2021-08-10 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
Petrify: Petri-net Based Analysis of Concurrency Properties in Java Bytecode
Software Institute, USI Università della Svizzera italiana(瑞士意大利语大学软件研究所)
提出Petrify技术,将Java字节码语义编码为Petri网,利用模型检测工具LoLA分析并发性质,在表达力和实用性间取得独特平衡,支持死锁等基本性质分析。
2026-09-23 cs.SE
Empirical Review of Java Program Repair Tools: A Large-Scale Experiment on 2,141 Bugs and 23,551 Repair Attempts
在过去的十年中,基于测试套件的自动程序修复的研究有了显着增长。每年,新的方法和实现都会出现在主要的软件工程场所。然而,大多数这些方法都是在单一的bug基准上进行评估的,其他研究人员也很少复制这些bug。在本文中,我们提出了一个大规模的实验,使用11个Java测试套件为基础的修复工具和5个基准的错误。我们的目标是更好地了解自动程序修复工具在大量基准测试中的现状。我们的调查是指导的假设,修复工具的可修复性可能不会在不同的基准程序错误的一般化。我们发现,这11个工具1)能够为5个基准测试中21%的bug生成补丁,2)与其他基准测试相比,在Defects 4J上具有更好的性能,通过为Defects 4J中47%的bug生成补丁,而其他基准测试中的bug只有10-30%。我们的实验总共包括23,551次修复尝试,我们用来找到非补丁生成的原因。本文对这些原因进行了分析,有助于维修工具设计人员改进技术和工具。
2019-05-28 cs.SE
Bears: An Extensible Java Bug Benchmark for Automatic Program Repair Studies
错误基准测试对于经验性地评估自动程序修复工具是必不可少的。在本文中,我们提出了熊,一个项目收集和存储错误到一个可扩展的错误基准自动修复研究在Java中。bug的收集依赖于持续集成(CI)的提交构建状态,以从GitHub上托管的开源项目中找到潜在的bug和补丁程序版本对。每一对程序版本都通过一个管道,在管道中尝试复制一个错误及其补丁。再现流水线的核心步骤是在两个程序版本上执行程序的测试套件。如果在有缺陷的程序版本候选中发现测试失败,并且在其修补程序版本候选中没有发现测试失败,则错误及其修补程序成功再现。Bears的独特之处在于使用CI(构建)来识别有缺陷和打补丁的程序版本候选者,这在过去几年中已被广泛采用在开源项目中。这种方法允许我们从各种各样的项目中收集bug,而不仅仅是使用bug跟踪系统的成熟项目。此外,Bears被设计为公开可用,并通过在给定的GitHub存储库中自动创建带有bug的分支来轻松扩展研究社区,这些分支可用于Bears存储库中的拉取请求。我们在本文中介绍的方法所采用的熊,我们提供了版本1.0的熊,其中包含251个可重复的错误收集72个项目,使用特拉维斯CI和Maven构建环境。
2019-01-17 cs.SE
Java JIT Testing with Template Extraction
本文提出基于模板的 Java JIT 编译器测试框架 LeJit,可从现有 Java 代码自动提取可执行模板并生成测试程序,实验在 HotSpot、OpenJ9 和 GraalVM 中发现多个已确认缺陷。
2024-07-07 cs.SE
How do annotations affect Java code readability?
本文通过332人调查和15对Java代码片段,研究了代码注解对可读性的影响,发现开发者对注解提升可读性的看法存在分歧但无共识,为API设计提供了参考。
2024-04-26 cs.SE
Enhanced Bug Prediction in JavaScript Programs with Hybrid Call-Graph Based Invocation Metrics
针对 JavaScript 静态分析不精确导致函数级缺陷预测受限的问题,提出融合静态特征与混合调用图 HNII/HNOI 度量的模型,并在 BugsJS 的 ESLint 数据上验证性能提升 2–10%。
2024-05-12 cs.SE
BugsInPy: A Database of Existing Bugs in Python Programs to Enable Controlled Testing and Debugging Studies
受Java缺陷基准Defects4J启发,本研究构建了包含17个真实Python项目493个真实缺陷的BugsInPy基准数据库及工具,以填补Python测试调试基准的不足,推动相关工具研究发展。
2024-01-27 cs.SE
From Retrieved Evidence to Security Outcomes: A Data-Driven Analysis of Java Security API Misuse in LLM-Generated Code
School of Computer Science University of Auckland Auckland, New Zealand
本研究复制并扩展了Mousavi等人的工作,评估GPT-5.5和Llama-3.3-70B-Instruct在Java安全API(JCA和JSSE)使用中的误用情况,发现外部安全知识能显著改善但效果依赖模型,且误用问题仍未消除。
2026-10-04 cs.CR cs.SE
Java Source-code Clustering: Unifying Syntactic and Semantic Features
这是第19届逆向工程工作会议(WCRE 2012)论文集“软件集群:统一语法和语义规则”的配套草案。它详细地讨论了聚类过程,这出现在一个简略的形式的文件。它还包含了世界计算机考试组织文件中没有涉及的某些额外的过程步骤。聚类过程中描述的Java源代码的应用程序。然而,正如WCRE论文中所指出的,它可以无缝地适应许多其他编程范式。
2018-06-28 cs.SE
Technical Report: A Formal Semantics for Java Symbolic Evaluation using Large-Block Encoding
Faculty of Computer and Information Sciences, Ain Shams University(艾因夏姆斯大学计算机与信息科学学院);Faculty of Computing and Information Sciences, Egypt University of Informatics(埃及信息大学计算机与信息科学学院);Faculty of Computer Science and Engineering, University of Minnesota(明尼苏达大学计算机科学与工程学院);Luddy School of Informatics, Computing, and Engineering, Indiana University(印第安纳大学卢迪信息、计算与工程学院);Amazon Web Services(亚马逊网络服务);Zoox, Inc.(Zoox公司)
本文针对符号执行工具自身正确性缺乏形式审查的问题,对带路径合并的符号执行进行形式化处理,以Java Ranger为对象证明其转换的健全性,确立其路径合并过程可保留程序语义。
2026-08-06 cs.SC cs.SE
Demonstrating ARG-V's Generation of Realistic Java Benchmarks for SV-COMP
University of Nebraska–Lincoln(内布拉斯加大学林肯分校);Boise State University(博伊西州立大学)
ARG-V工具通过生成真实Java基准,揭示了现有验证器在新基准上的性能下降,提升了验证工具评估的全面性和现实性。
2026-02-04 cs.SE
Watermarking Java Programs using Dummy Methods with Dynamically Opaque Predicates
软件盗版,即非法使用、复制和转售应用程序,是任何软件开发人员都要关注的一个主要问题。软件开发人员还担心他们的应用程序被逆向工程,从应用程序中提取数据结构和算法,并将其并入竞争对手的代码中。防止软件盗版的一种方法是水印,即在封面软件中嵌入秘密消息的过程。水印是一种不旨在阻止盗版复制的方法,而是为了证明软件的所有权,甚至可能是软件中使用的数据结构和算法。Java语言被设计为编译成平台无关的字节码格式。源代码中包含的大部分信息都保留在字节码中,这意味着反编译比传统的本机代码更容易。在这篇论文中,我们提出了一种通过使用从不执行的虚拟方法(Monden et.al.,2000)结合不透明谓词(Collberg等人,1998; Arboit,2002),并通过动态不透明谓词进行改进(Palsberg等人,2000年)。本文提出了一种通过将两个或多个不透明谓词按预定义规则分组来构造动态不透明谓词的方法。任何软件水印技术都会在弹性、数据率、成本和隐蔽性之间表现出权衡。为了评估水印方案的质量,我们还必须知道它对不同类型的攻击的抵抗能力。理想情况下,我们希望我们的水印能够在翻译(编译,反编译和二进制翻译),优化和模糊处理中幸存下来。添加一个水印将增加源代码约3.854字节,其中虚拟方法覆盖多达15个字符,两个动态数据结构,两个线程和两个不透明谓词。应用程序加载时间增加约6108毫秒。
2010-04-19 cs.CR cs.SE
DifFuzz: Differential Fuzzing for Side-Channel Analysis
侧信道攻击允许攻击者通过观察程序相对于资源的行为(例如执行时间、消耗的内存或响应大小)来发现秘密程序数据。侧通道漏洞很难推理,因为它们涉及分析多个程序路径上资源使用之间的相关性。我们提出了DifFuzz,一种基于模糊的方法,用于检测与时间和空间相关的侧通道漏洞。DifFuzz通过分析程序的两个版本并使用资源引导的搜索来找到最大化秘密依赖路径之间的资源消耗差异的输入,从而自动检测这些漏洞。DifFuzz的方法是通用的,可以应用于任何语言编写的程序。在本文中,我们提出了一种实现,目标分析的Java程序,并使用和扩展的Kelinci和AFL模糊。我们评估了大量的Java程序的DifFuzz,并证明它可以揭示流行的应用程序中的未知的侧通道漏洞。我们还表明,DifFuzz比较有利的Blazer和Themis,两个国家的最先进的分析工具,在Java程序中找到侧通道。
2019-02-26 cs.CR cs.SE
Software Security analysis, static and dynamic testing in java and C environment, a comparative study
本文的主要工作是针对各种程序设计语言设计的主要源代码中出现的缓冲区溢出异常进行分析。它描述了如何改进代码并增加其强度,以抵御代码中易受攻击区域发生的安全盗窃。使用的主要语言是JAVA,被认为是最面向对象的语言之一,仍然会产生很多错误,如堆栈溢出,非法/不适当的方法重写。我使用局限于JAVA的工具来测试如何在编译之前纠正代码中的弱点。字节码盗窃是很难被征服的,所以最好是在纯java代码本身中摆脱它。研究中使用的工具是PMD(编程错误检测器),它有助于检测在不久的将来会弹出错误的代码行,例如hashcode(内存映射)重写中的缺陷,由于这些缺陷,Java代码将无法正常运行。另一个工具是FindBUGS,它提供了代码的测试器来分析代码中的弱点,如无限循环,非同步等待,死锁情况,空引用和解引用。为上述工具提供基础的另一个工具是JaCoCo代码覆盖分析,用于检测代码的不可达部分和未使用条件,这改善了空间复杂度并有助于容易地澄清错误。通过本文,我们设计了一种防止数据丢失的算法。主要受众是白盒测试人员,他们可能会在主要的源程序中遗漏基本的代码行,如索引变量、无限循环和不适当的散列代码。该算法用于减少缓冲区溢出情况下的损坏
2012-08-15 cs.CR cs.SE
Automated Validation of COBOL to Java Transformation
IBM Research - India(IBM印度研究院);IBM Research - Tokyo(IBM东京研究院);IBM Software(IBM软件公司)
针对基于大语言模型的COBOL到Java代码转换结果可信度不足的问题,提出含工具的验证框架,通过基于符号执行生成带模拟外部调用的等价单元测试,校验语义等价性,还可辅助修复代码、反馈优化模型。
2025-04-14 cs.AI cs.SE