向后切片,正向切片和其他形式的切片

这篇具有很好参考价值的文章主要介绍了向后切片,正向切片和其他形式的切片。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

向后切片,正向切片和其他形式的切片

向后切片Backward Slices
假设我们希望确定哪些语句影响节点 n。
这是由 n 和在 n 处引用的变量。
我们只是:
从 n 回溯控制和流依赖边。
我们保留由此到达的节点。
向后切片,正向切片和其他形式的切片
一般后向切片
通常,我们的切片标准是一个节点和一个变量集 V。
PDG 可能不包含表示此切片标准的节点。
对于后向切片,我们可以:
在 n 之前添加一个新节点 n’; 让新节点 n’ 引用 V 中的变量
然后我们生成 PDG 并从中追溯依赖关系节点 n’。

正向切片Forward Slices
假设我们希望确定哪些语句受到影响由节点 n。
这是由 n 和分配给 n 的变量形成的标准的前向切片。
我们只是:
从 n 向前追踪控制和流依赖边。
我们保留由此到达的节点。
向后切片,正向切片和其他形式的切片
通用前向切片
通常,我们的切片标准是一个节点和一个变量集 V。
和以前一样,PDG 可能不包含代表这个切片标准。
对于前向切片,我们可以:
在n之前添加一个新节点n’;将新节点n’分配给V中的变量
然后我们生成 PDG 并从 n’ 向前跟踪依赖关系。

Backward PDG 和 Forward PDG 相同的原因:
在这个特定的程序中,后向 PDG 和前向 PDG 是相同的。 这是因为该程序不包含任何可以创建不同执行路径的循环或条件。 因此,无论分析方向如何,语句之间的数据和控制依赖关系都保持不变。

PDG 将显示以下依赖项:

  • 输入语句 (1) 取决于 x 和 y 的值。
  • 赋值语句 (2) 取决于 x 和 y 的值。
  • if 语句 (3) 取决于 x 和 y 的值。
  • if 和 else 块(4 和 5)内的赋值语句取决于 z、x 和 y 的值。
  • 递增语句 (6) 取决于 x 的值。
  • 输出语句 (7) 取决于 z 的值。
    由于无论分析方向如何,语句之间的依赖关系都保持不变,因此在这种情况下,后向 PDG 和前向 PDG 将是等价的。

因此,对于给定的程序,由于没有复杂的控制流结构,后向 PDG 和前向 PDG 是相同的。

切片标准
在程序切片中,切片标准指的是计算切片的特定程序点或感兴趣的变量。 它定义程序中切片分析的起点,并确定生成的切片中包含哪些语句。

切片标准可以根据所需的结果和分析目标以不同的方式定义。 以下是一些常见的切片标准:

  1. 程序点准则:切片准则是代码中的特定语句或程序点。 切片包括所有直接或间接影响程序点执行或受其影响的语句。

  2. 变量准则:切片准则是代码中的特定变量。 切片包括所有直接或间接影响变量值计算或受变量值影响的语句。

  3. 控制流准则:切片准则是代码中特定的控制流条件,例如if语句或循环条件。 切片包括直接或间接影响控制流条件的评估或受其影响的所有语句。

  4. 数据流准则:切片准则是代码中特定的数据流依赖关系,例如变量的赋值或使用。 切片包括所有直接或间接影响变量数据流或受其影响的语句。

切片标准的选择取决于具体的分析目标和感兴趣的信息。 通过定义切片标准,分析可以集中在与该标准相关的相关语句和依赖项上。 生成的切片提供了原始程序的一个子集,该子集捕获与切片标准相关的依赖关系和行为,有助于各种软件工程任务,例如调试、程序理解和代码优化。

其他形式的切片

动态切片Dynamic Slicing
在动态切片中,我们将输入作为切片的一部分标准。
我们可能会问:
什么语句影响节点 n 处 V 中变量的值,假设输入是 s(一些已知的 s)?
在动态(向后)切片中,我们可以删除不影响该输入的切片标准的语句。

当我们说某些语句不影响动态(向后)切片中特定输入的切片标准时,这意味着从程序中删除或删除这些语句不会改变导致满足切片标准的计算或行为或 为该输入触发。
通过删除不影响切片标准的语句,生成的动态切片变得更小,并且更专注于直接有助于观察到的行为的程序的基本部分。 这有助于代码的调试、优化和理解,因为不相关的语句被消除,开发人员可以专注于与切片标准相关的关键部分。
值得注意的是,确定哪些语句不影响切片标准可能是一项非常重要的任务,尤其是在不同部分之间具有依赖性和交互的复杂程序中。 各种技术,如数据流分析和程序依赖分析,被用来识别这些语句并有效地执行动态切片。

动态切片的好处:
据观察:
静态切片通常非常大。对于某些问题(例如调试),我们有实际的输入。通过包含此输入,我们可以获得更小的切片。

虽然使用输入信息进行动态切片可能是有益的,但请务必注意,在捕获和分析输入数据方面可能需要额外的开销。 此外,动态切片依赖于程序执行期间使用的实际输入的可用性,这可能并不总是可行或实用的。 因此,静态切片和动态切片之间的选择取决于具体场景和可用资源。

条件切片Conditioned Slicing
我们没有向切片标准添加输入,而是添加了输入条件。
例如,我们可能会问:
如果输入满足属性 x > 0?
更通用,但通常需要更复杂的工具才能生成。

非晶切片Amorphous Slicing
在无定形切片中,我们可以应用任何保留感兴趣的语义的简化步骤。
不只是语句删除。这可以允许更大的简化。
对于某些问题领域很有用,例如理解。

非晶切片示例:
向后切片,正向切片和其他形式的切片文章来源地址https://www.toymoban.com/news/detail-467388.html

到了这里,关于向后切片,正向切片和其他形式的切片的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • qt实现不定数量的按钮向前向后移动展示

    此文主要记录用qt实现按钮的移动,具体效果如下: 模拟按钮移动效果 本文记录了三种实现方式。 思路 用动态数组vector存放创建的按钮QPushButton的指针,使用两个同类型的二级指针QPushButton来指向数组中的元素,初始状态下,首尾指针都指向数组中第一个元素,随着界面初始

    2024年04月27日
    浏览(32)
  • 前端向后端传入json 后台怎么接收(params呢)

    目录 一、使用POJO若前端传递过来的数据刚好和我们的bean实体对象属性一致,则可以使用对象的形式接收。后端实体类 二、使用Map接收后台Controller 三、使用@RequestParams 1,params传参 2.地址拼接传参 当前端传来json数据时,后端有多种方式接收 前端json数据: 后端Controller 前端

    2024年02月11日
    浏览(40)
  • vue+axios 向后端SpringBoot传递List 后端使用List接收

    困扰了一天的问题第二天终于解决了! 一开始是这样向后端传的:(主要看后面的seats) 结果报错了: 在网上找了好多解决方法,有说参数太长,超过了Tomcat的限制了怎么的,反正是没有解决。 直接上解决方法吧。 前端代码:  后端代码: 最后附上我自己的: 前端代码:

    2024年02月03日
    浏览(48)
  • 使用PostMan使用post请求向后端发送json对象时报错

     报错信息:Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize instance of com.itheima.domain.Book out of START_ARRAY token; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of com.itheima.domain.Book out of START_ARRAY token  at

    2024年02月03日
    浏览(45)
  • NCCoE发布“向后量子密码学迁移”项目进展情况说明书

    近日,NIST下属的国家网络安全中心(NCCoE)发布了一份向后量子密码学迁移(Migration to Post-Quantum Cryptography)项目情况说明书。该文档简要概述了向后量子密码学迁移项目的背景、目标、挑战、好处和工作流程,此外NCCoE还列出了参与该项目的最新28家技术供应商名单。 NCCoE成

    2024年02月10日
    浏览(34)
  • 【若依】框架搭建,前端向后端如何发送请求,验证码的实现,开启注册功能

    若依框架(Ruoyi)是一款基于Spring Boot和Spring Cloud的开源快速开发平台。它提供了一系列的基础功能和通用组件,能够帮助开发者快速构建企业级应用。若依框架采用了模块化的设计理念,用户可以选择需要的功能模块进行集成,也可以根据自己的业务需求进行扩展。若依框架

    2024年02月12日
    浏览(57)
  • vue3+elementPlus登录向后端服务器发起数据请求Ajax

    后端的url登录接口 先修改main.js文件 login.vue 此时前端有跨域问题 先配置跨域 vue.config.js  项目中如果没有这个文件 请自行创建。 此时可以看到跳转到登录到home页面  完整的后端登录方法  消息提示使用elementPlus 的Elmessage 

    2024年01月18日
    浏览(43)
  • 正向代理和反向代理有什么区别?什么是正向代理?什么是反向代理?正向代理和反向代理详解。

     一、正向代理:         当用户想访问某一网址时,用户先访问代理服务器,然后由代理服务器向目标网址发送请求最终将数据返回代理服务器,最后代理服务器将数据返回给用户这一过程我们称之为正向代理。 正向代理它代理了客户端,相当于代理服务器去访问目标

    2024年02月08日
    浏览(42)
  • uni-app -- - - - 小程序如何向后端发送Form Data格式的数据

    接口请 求方式 传参方式 ,肯定不是一成不变的,当遇到如题需求的时候,要知道, 小程序是没有FormData对象 的,那么该怎么操作呢??? 直接上代码: 效果如图: 如上所示,这样写起来功能实现了,但是看起来这代码太不美观了 效果如图: 参考文章: 使用wx.request发送

    2024年02月08日
    浏览(44)
  • 前端向后端发起请求时,报Uncaught (in promise) ReferenceError: ***** is not defined的错

     前端调用后端的接口,显示的Uncaught (in promise) ReferenceError: getGoods is not defined。但是我们在后端中配置了该接口的请求地址的。同时在前端的axios中也进行了相关接口的封装的。 报错的截图:   原因是没有在页面中引入getGoods这个封装好的接口。 解决方法:只需在需要使用的

    2024年02月08日
    浏览(67)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包