Static Program Slicing Using Language Models With Dataflow-Aware Pretraining and Constrained Decoding
Department of Computer Science, University of Manitoba(曼尼托巴大学计算机科学系);School of Engineering and Computer Science, Concordia University(Concordia大学工程与计算机科学学院);School of Computer Science, University of Windsor(温莎大学计算机科学学院)
本文提出Sliceformer,通过数据流感知预训练和约束解码改进静态程序切片,提升依赖建模精度和减少生成幻觉,实验显示在Java和Python基准上精确匹配提升22%。
2026-05-10 cs.AI cs.PL cs.SE
On the computational complexity of dynamic slicing problems for program schemas
给定一个程序,可以通过删除零个或多个语句来获得商。程序切片领域关注的是计算程序的商,该商保留原始程序的部分行为。所有的程序切片算法都考虑了程序的结构属性,如控制依赖和数据依赖,而不是其函数和谓词的语义,因此实际上与程序模式一起工作。Korel和Laski的动态切片标准只要求程序行为是保留在原程序遵循特定路径的情况下,并且切片/商遵循此Path. In本文中,我们正式Korel和Laski的定义的动态切片适用于线性schemas,也制定了一个限制性较小的定义,其中通过原程序的路径不需要保留的切片。限制较少的定义具有导致较小切片的好处。对于这两个定义,我们计算复杂性界限的问题,建立一个给定的片的线性模式是否是一个动态片,是否线性模式有一个非平凡的动态片,并证明后一个问题是NP-困难的在这两种情况下。我们还给出了一个例子来证明最小动态切片(无论它们是否保持原始路径)不需要是唯一的。
2017-05-22 cs.PL
On Synergy of Metal, Slicing, and Symbolic Execution
我们介绍了一种新的技术,发现真正的错误程序。该技术基于三种著名方法的协同作用:元编译、切片和符号执行。更准确地说,我们用一段代码来检测一个给定的程序,该代码跟踪代表各种错误的状态机的运行。接下来,我们对程序进行切片以减小其大小,而不影响状态机的运行。然后我们象征性地执行切片程序。根据符号执行的类型,该技术可以作为独立的bug查找技术应用,或者从另一个bug查找工具的输出中清除一些误报。我们提供了几个例子证明我们的技术的实际适用性。
2012-01-23 cs.PL
Verified Self-Explaining Computation
常见的编程工具,如编译器,调试器和IDE,主要依赖于分析程序代码的能力,以推断其行为和属性。在验证编译器和静态分析方面已经做了大量的工作,但是在验证诸如程序切片之类的动态分析方面的工作却少得多。最近,一个新的数学框架切片介绍,其中向前和向后切片是双重的意义上说,他们构成了伽罗瓦连接。本文形式化了一种简单命令式程序设计语言的前向和后向动态切片算法,并使用Coq证明助手形式化地验证了它们的对偶性。
2019-07-12 cs.PL
Sliced Slices: Separating Data and Control Influences
后向切片在程序理解、调试和程序分析的扩展中得到了广泛的应用。对于大型程序,常规向后切片的大小约为程序大小的25%。这可能太大而没有用处。我们的调查表明,在一般情况下,切片的大小的影响更多的控制流达到切片标准的计算,而不是由管理的值相关的切片标准的计算。我们通过定义数据切片和控制切片来区分两者,这两者都小于通过组合两者可以获得的常规切片。这很有用,因为对于许多应用程序来说,单独的数据或控制片就足够了。我们的实验表明,超过50%的情况下,数据切片小于10%的程序大小。此外,计算数据或控制切片的时间与计算传统切片的时间相当。
2014-07-18 cs.PL cs.SE
Data-Flow Guided Slicing
我们提出了一个流不敏感的分析,修剪出部分的代码是不相关的一组指定的数据流路径。我们的方法快速且可扩展,此外还能够生成证书作为计算结果的审计。我们已经在一个名为DSlicer的工具中实现了我们的技术,并将其应用于一组10600个真实的Android应用程序。结果是结论性的,我们发现,相对于一组指定的数据泄漏路径,程序代码平均可以显著减少36%。
2018-08-03 cs.PL cs.SE
Slicing of Probabilistic Programs based on Specifications
本文提出了第一个基于规格说明的概率程序切片方法。我们表明,当概率程序伴随着他们的规格的形式的前和后条件,我们可以利用这种语义信息,以产生规范保护片严格更精确的比传统技术的基础上产生的切片数据/控制依赖。为了实现这一目标,我们的技术是基于后向传播的条件通过最大的预期望Transformer-Dijkstra最弱的前提条件Transformer的概率对应。该技术是终止敏感的,允许保留的部分以及总的正确性的概率程序w.r.t.他们的规格。它是模块化的,具有局部推理原则,并被正式证明是正确的。作为我们的技术的基本技术成分,我们设计并证明了健全的验证条件生成器,用于建立概率程序的部分和全部正确性,这些程序本身就很有趣,可以在其他地方用于其他目的。在实践方面,我们证明了我们的方法的适用性,通过一些说明性的例子和案例研究,从概率建模领域。我们还描述了一个算法,用于计算最少的切片之间的空间,我们的技术。
2022-05-07 cs.PL
Enhancing the performance of Decoupled Software Pipeline through Backward Slicing
多核处理器中可用内核数量的快速增加并不一定直接导致性能的相应提高:用传统语言(如C)编写的程序需要仔细重构,最好是自动重构,然后才能在改进的运行时间中观察到好处。即使这样,也很大程度上取决于原始程序的并发执行的内在能力。本文的主题是去耦软件管道(DSWP)和(向后)切片的互补技术的综合效果带来的性能提升。DSWP从循环体中提取线程级并行性,方法是将循环体分解为多个阶段,然后以流水线方式执行:实际上是跨越控制链。另一方面,切片沿着控制链切割程序,梳理出依赖于不同变量(或位置)的更精细的线程。取决于不同变量的部分。本文的主要贡献是证明DSWP的应用,其次是切片提供了显着的改进DSWP单独,特别是当有一个循环进行的依赖,防止应用程序的简单DOALL优化。实验结果表明,一个因素的改善?1.6对于DSWP +切片超过DSWP单独和一个因素?2.4对于原始顺序代码的DSWP +切片。
2015-01-27 cs.PL
Bidirectional Type Slicing
University of Cambridge(剑桥大学);University of Michigan(密歇根大学)
研究开发能解释表达式为何具有特定类型的理论,核心方法是提出双向类型切片,主要贡献为适用于特定双向系统,能证明查询有最小切片并给出计算方法,还可结合错误标记理论解释各类代码中的类型及错误。
2026-07-15 cs.PL
Error Localization, Certificates, and Hints for Probabilistic Program Verification via Slicing (Extended Version)
本文提出通过切片技术提升概率程序验证的诊断能力,通过Brutus实现高效错误定位与验证提示。
2025-12-24 cs.PL
A Typed Slicing Compilation of the Polymorphic RPC Calculus
多态RPC演算允许程序员使用多态位置构造编写简洁的多层程序。然而,到目前为止,它缺乏执行。我们开发了一个实验性的程序设计语言的多态RPC演算的基础上。我们引入了一个多态的客户端-服务器(CS)演算与客户端和服务器部分分离。与现有的无类型CS演算相比,我们的演算不仅能够静态地解决多态位置,而且还能够动态地这样做。我们设计了一个基于类型的切片编译的多态RPC演算到这个CS演算,证明类型和语义的正确性。我们提出了一种方法,删除不必要的类型执行,但保留在运行时的位置,通过翻译的多态CS演算成一个无类型的CS演算,证明语义的正确性。
2021-07-27 cs.PL
Imperative Functional Programs that Explain their Work
程序切片提供了说明如何从输入生成程序输出的解释。我们建立在Perera等人在先前工作中引入的方法上,其中动态切片被定义为纯高阶函数程序作为部分输入和部分输出的格之间的伽罗瓦连接。我们将这种方法扩展到结合高阶编程与引用和异常的命令式函数程序。我们提出了我们的方法的正确性和最优性的证明和概念验证的实施和实验评估。
2017-05-22 cs.PL
An approach to find dynamic slice for C++ Program
面向对象程序设计被认为是程序开发和维护中最有前途的方法。面向对象程序的一个重要特征是其可重用性,可重用性可以通过类或可重用组件的继承来实现,动态程序切片是一种在调试时将错误缩小到程序相关部分的有效技术。给定一个切片标准,动态切片只包含那些真正影响切片标准中变量的语句。提出了一种基于依赖分析的面向对象程序动态切片方法。它利用目标程序的控制依赖图和其它静态信息来减少程序执行过程中需要跟踪的信息。在本文中,我们提出了一种方法来找到面向对象程序的动态切片,我们正在寻找对象的切片和函数重载的情况下。
2010-06-14 cs.PL
A Theory of Slicing for Probabilistic Control-Flow Graphs
我们提出了一个理论切片概率命令式程序-包含随机分配,和“的”语句(条件)-表示为概率控制流图(pCFGs),其节点修改概率分布。我们表明,这样的表示允许直接适应的标准机械,如数据和控制依赖,postdominators,相关变量等的概率设置。我们分离的规范切片从其实现:首先,我们开发的句法条件,切片必须满足;其次,我们证明,任何这样的切片是语义正确的;最后,我们给出了一个算法来计算最少的切片。为了生成更小的切片,我们还可以利用某些循环将(几乎)总是终止的知识。我们的句法条件的一个关键特征是,它们涉及两个不相交的切片,使得一个切片的变量在概率上独立于另一个切片的变量。这直接导致了概率切片的正确性证明。在同伴的文章中,我们充分的pCFGs的语义相对于标准的结构化概率程序的语义。
2017-11-07 cs.PL
Slicing Concurrent Constraint Programs
并发约束编程(CCP)是一个声明式的并发模型,其中代理通过告诉和询问共享存储中的约束(信息片段)进行交互。以前的一些作品已经开发了(近似)CCP语言的声明式调试器。然而,调试并发程序的任务仍然很困难。在本文中,我们定义了一个动态切片CCP,我们表明它是一个有用的伴侣工具,现有的调试技术。我们的技术首先考虑一个部分计算(跟踪),显示存在的错误。通常,这种跟踪中的信息量是压倒性的,用户很容易迷失方向,因为她不能专注于bug的来源。我们的切片器允许标记计算状态的一部分,并帮助用户消除大部分冗余信息,以突出错误。我们表明,这种技术可以定制CCP的定时变量。我们还开发了一个原型实现免费提供实验。
2017-02-10 cs.LO cs.PL
TypePro: Boosting LLM-Based Type Inference via Inter-Procedural Slicing
Xiamen University(厦门大学)
本文提出TypePro方法,通过跨过程代码切片补充上下文信息,提升动态语言类型推断的准确性和鲁棒性,实验结果显示在ManyTypes4Py和ManyTypes4TypeScript数据集上分别达到88.9%和86.6%的Top-1精确匹配率。
2026-04-03 cs.PL cs.SE
A Polymorphic RPC Calculus
RPC演算是多层程序设计语言(如Links)的简单语义基础,在Links中可以为客户端-服务器模型编写定位函数。随后,类型化RPC演算被设计成按类型捕获函数的位置信息,并驱动位置类型导向的切片编译。然而,位置的使用目前仅限于单态的,这是要克服的差距之一,将RPC演算的客户端-服务器模型的理论付诸实践。本文提出了一种多态RPC演算,允许程序员编写简洁的多层程序使用多态位置结构。然后,多态多层程序可以自动转换成程序只包含位置常数服从现有的切片编译方法。我们制定了多态RPC演算的类型系统,并证明其类型可靠性。此外,我们还设计了一个单态化翻译,并证明了翻译的类型和语义正确性。
2020-05-25 cs.PL
Semantics and Algorithms for Parametric Monitoring
执行轨迹分析在许多程序分析方法中起着基础性的作用,如运行时验证、测试、监控和规范挖掘。执行跟踪通常是参数化的,即,它们包含带有参数绑定的事件。每个参数跟踪通常由许多合并在一起的有意义的跟踪切片组成,每个切片对应于一个参数绑定。这为参数跟踪分析提供了一种基于语义的解决方案。介绍了一种通用的参数化轨迹切片技术,该技术将参数化轨迹中的每个事件分配到相应的轨迹切片中。通过在每个迹线切片上应用常规的非参数迹线分析技术,该参数迹线切片技术可以与任何常规的非参数迹线分析技术结合使用。作为一个实例,然后提出了一个参数化的性能监测技术。所提出的参数跟踪切片和监测技术已经实施和广泛的评估。运行时开销的测量确认,所讨论的技术的一般性不来在性能上的代价相比,现有的参数跟踪监视系统。
2012-02-21 cs.LO cs.PL cs.SE
Programming Requests/Responses with GreatFree in the Cloud Environment
GreatFree编程请求是一种在云计算环境下实现分布式轮询的高效编程技术。GreatFree是一个分布式编程环境,通过它可以通过编程而不是配置或脚本来建立各种分布式系统。GreatFree强调编程的重要性,因为它为开发人员提供了利用其分布式知识和编程技能的机会。此外,编程是构造创造性的、自适应的和灵活的系统以适应各种分布式计算环境的唯一方式。在GreatFree代码级分布式基础架构模式、分布式操作模式和API的支持下,以可编程、快速和高度模式化的方式完成了困难的过程,即,编程行为被简化为复制-粘贴-替换的可重复操作。由于分布式轮询是构建分布式系统的基本技术之一,GreatFree为开发人员提供了相关的API和模式,以在新的编程环境中编写请求/响应。
2018-02-09 cs.DC cs.PL cs.SE
Meerkat: A Distributed Reactive Programming Language with Live Updates
本研究提出支持实时更新的分布式类型安全响应式编程语言Meerkat,通过类型系统纳入依赖集保障前后端交互安全,依托现有分布式响应式传播框架确保多用户提交更新的强一致性。
2024-07-09 cs.PL
Generating Distributed Programs from Event-B Models
分布式算法在检查它们是否满足其规范方面提出了挑战。验证技术可以扩展到处理分布式算法的安全属性的验证。在本文中,我们提出了一种方法,结合正确的建设方法和转换的形式模型(事件B)到程序(DistAlgo),以解决设计验证分布式程序。我们定义了一个子集LB(本地事件B)的事件B建模语言的事件建模的经典动作的分布式程序作为内部或本地计算,发送消息和接收消息。然后我们定义LB语言的各种元素到DistAlgo程序的转换。一般的方法包括从问题的陈述开始编程,然后逐步产生初始LB模型经过几个细化步骤后得到的LB模型。LB模型的推导在当前的文件中没有描述,已经在其他作品中得到了解决。通过一个简单的例子说明LB模型到DistAlgo程序的转换。改进过程和转换的可靠性允许人们产生正确的构造分布式程序。
2020-08-07 cs.LO cs.PL