生成程序片段(程序依赖图PDG)

news2024/12/29 10:54:58

生成程序片段(程序依赖图PDG)

生成程序片段
标准方法是:
基于依赖性分析的切片。
使用程序依赖图表示依赖。
从中生成切片。
我们将专注于这种方法。但是,还有其他选择。

程序依赖图 The Program Dependence Graph (PDG)
表示数据和控制依赖项:一些元素已经从数据流测试中看到。
它可以作为构建切片的基础。PDG 可能构成其他分析的基础
注意:这是程序内的,如果我们需要扩展它处理多个过程或方法(获取系统依赖关系图)。 我们不会看这个。

PDG 是一个有向图,其中:顶点代表语句(例如赋值和
控制谓词), 有一个唯一的起始节点, 边代表控制和数据依赖
注意:我们假设我们只处理“结构化”语言,我们不会考虑指针。

PDG的控制依赖
每个控制依赖边都有标签 true 或 false。
控制依赖边 n1 -> n2 表示:
如果 n1 被执行并取边上的值(真或假),则 n2 必须在稍后的某个时间被执行。
如果 n1 被执行并且没有取边上的值,n2 可能永远不会执行。
在这里插入图片描述

假设我们有一个 if 语句,其谓词 p 由节点 n1 表示。
假设其 then 和 else 部分分别对应节点 n2 和 n3。
从 n1 到 n2 有一个控制边,标签为 true。
从 n1 到 n3 有一条控制边,标签为 false。

在这里插入图片描述

假设我们有一个 while 循环,其谓词 p 由节点 n1 表示。
从 节点1到节点3存在控制依赖性(标签为true)。

数据依赖Data Dependence
有两种类型的数据依赖边:
流依赖边
无序依赖边def-order dependence edges
对于切片,我们不需要 def-order 边,也不会包括他们。

流依赖边Flow Dependence Edges
如果满足以下条件,则存在从 n1 到 n2 的流依赖边:
n1 表示对变量 x 的一些赋值; n2 引用 x 的值; 对于 x,从 n1 到 n2 有一个明确的路径定义。
注意:如果它们在循环中,定义清晰的路径可能从一个顶点到一个“较早”的顶点。
在这里插入图片描述
在这里插入图片描述
语句3和语句1之间存在依赖关系,语句3和语句2之间也存在依赖关系。

语句 3 对语句 1 的依赖性是因为变量 x 的值在语句 3 中被修改 (x = x - 1),并且该修改后的值被用于语句 1 中 while 循环的条件表达式中 (while (x > 0)). 语句 3 中 x 的更新会影响语句 1 中的循环条件。
同样,语句 3 与语句 2 之间存在依赖关系。语句 3 中 x 的更新值 (x = x - 1) 用于计算语句 2 中的 y (y = y + x)。

examples:
在这里插入图片描述
second example:
在这里插入图片描述
third example:
在这里插入图片描述
让我们分析具有给定初始值的代码片段:
x = 2, y = 5

  1. 输入语句取x和y的初始值。

  2. while 循环检查 x 是否大于 0 (x > 0)。 在这种情况下,因为 x 是 2,所以条件为真,程序继续执行下一条语句。

  3. if 语句比较 x 和 y。 这里,x 为 2,y 为 5。由于 x 不大于 y,程序执行 else 块。

  4. 在 else 块中,y 减 1 (y = y - 1)。 因为 y 最初是 5,所以 y 变成了 4。

  5. if-else 块执行后,x 减 1 (x = x - 1)。 x 最初为 2,因此 x 变为 1。

  6. 程序回到 while 循环并检查 x 是否大于 0。由于 x 仍然大于 0 (x = 1),循环继续。

  7. 再次执行if语句,比较x和y。 在这种情况下,x (1) 不大于 y (4),因此执行 else 块。

  8. 在 else 块中,y 减 1 (y = y - 1)。 因为 y 是 4,所以 y 变成了 3。

  9. x 减 1 (x = x - 1)。 x 为 1,所以 x 变为 0。

  10. 程序回到 while 循环。 这次,x 不大于 0 (x = 0),因此循环终止。

  11. 最后执行输出语句,输出y的值。 在这种情况下,y 为 3。

因此,对于给定的初始值 x = 2 和 y = 5,代码片段的输出将为 3。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/596648.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Servlet的常用Api—HttpServletResponse

Servlet的常用Api—HttpServletResponse 🔎核心方法setContentType && setCharacterEncodingsendRedirect关于Keep-Alive关于状态码 && Body 🔎结尾 🔎核心方法 方法描述(void) setStatus(int sc)为该响应设置状态码(void) s…

2023年4月和5月随笔

1. 回头看 为了不耽误学系列更新,4月随笔合并到5月。 日更坚持了151天,精读完《SQL进阶教程》,学系统集成项目管理工程师(中项)系列更新完成。 4月和5月两月码字114991字,日均码字数1885字,累…

python的AutoGui库(1)获取鼠标实时位置

1.安装AutoGui库,与库的导入 PyAutoGUI是一个纯Python的GUI自动化工具,其目的是可以用程序自动控制鼠标和键盘操作,多平台支持(Windows,OS X,Linux)。可以用pip安装,Github上有源码。 使用命令…

Ceph应用

//存储类型 块存储 一对一,只能被一个主机挂载使用,数据以块为单位进行存储,典型代表: 硬盘 文件存储 一对多,能被多个主机同时挂载使用,数据以文件的形式存储的(元数据和实际数据是分开存储的),并且有…

Python学习笔记 - 探索33个保留关键字

Python编程语言中有33个保留关键字,这些关键字在Python语法中有特殊含义,不能用作变量名、函数名或其他标识符。 33个保留字(关键字) 不能冲突的关键词 33 个 来看看都有哪些关键字。 import keyword print(",…

面试专题:java多线程(3)---关于 Atomic 原子类

1.介绍一下Atomic 原子类Atomic 翻译成中文是原子的意思。在化学上,我们知道原子是构成一般物质的最小单位,在化学反应中是不可分割的。在我们这里 Atomic 是指一个操作是不可中断的。即使是在多个线程一起执行的时候,一个操作一旦开…

cpolar内网穿透创建实现远程办公---无需公网IP

文章目录 前言1.本地访问简介2. cpolar内网穿透3. 公网远程访问4. 固定公网地址 转发自cpolar极点云的文章:外网远程访问公司内网用友畅捷通T财务软件 – 远程办公 前言 用友畅捷通T适用于异地多组织、多机构对企业财务汇总的管理需求;全面支持企业对远…

JavaScript 客户端脚本语言 选择器、事件

JavaScript发展史 JavaScript介绍 JavaScript ( 简称 JS): 是一种轻量级客户端脚本语言,通常被直接嵌入 HTML 页面,在浏览器上执 行。 JavaScript 的主要用途 : 使网页具有交互性(如果不去使用js,只是使用html css那么只是…

chatgpt赋能python:Python主网站的SEO优化

Python主网站的SEO优化 作为一名有10年Python编程经验的工程师,我一直非常关注Python官方网站的SEO优化,因为官方网站对于传播Python语言的影响至关重要。在这篇文章中,我将介绍一些Python主网站的SEO优化策略,并总结一些结论&am…

程序切片(定义+用途)

程序切片(定义用途) 介绍 让我们假设我们测试了一个程序 p 并失败了(错误的 输出)。然后我们想找出导致失败(故障)的原因。 现在假设我们要更改程序的一部分。我们可能会问:程序的哪些其他部分受到影响 我们想找到导致…

1728_c语言标准库memcpy函数的简单使用

全部学习汇总: GreyZhang/c_basic: little bits of c. (github.com) 欢迎路过的YUAN类朋友相互交流,以下是我的联系方式: Email:greyzhang126.com 微信:grey0612 静态代码检测遇到了一处memcpy函数使用的错误&#…

如何DIY项目资源私有检测规则

本地资源检测是UWA推出的、面向于静态资源的全量分析。可以全面自动检测项目静态工程内各项资源、代码和设置,能够帮助项目组制定合理的资源与代码标准,及时发现潜在的性能问题和异常错误,建立有效的开发规范。 为了在游戏优化过程中持续与U…

计网之HTTPS的安全机制

文章目录 一. 什么是HTTPS?二. HTTPS中的加密机制(SSL/TLS)1. HTTP的安全问题2. 对称加密3. 非对称加密4. 中间人问题5. 证书 一. 什么是HTTPS? 在网络传输过程中, 存在着运营商劫持和一些黑客入侵这样的危险, 在之前只有HTTP的明文传输数据环境下, 这样的问题是有些泛滥的,…

java 利用poi根据excel模板导出数据(二)

本文是 java 利用poi根据excel模板导出数据(一) 的续篇 经常有poi的开发一定会碰到三个名词: HSSFWorkbook 、 XSSFWorkbook、SXSSFWorkbook; 这三个都是导出excel的形式,具体区别: HSSFworkbook,XSSF…

bert中文文本摘要代码(1)

bert中文文本摘要代码 写在最前面关于BERT使用transformers库进行微调 load_data.py自定义参数collate_fn函数BertDataset类主函数 tokenizer.py创建词汇表encode函数decode函数 写在最前面 熟悉bert+文本摘要的下游任务微调的代码,方便后续增加组件实现…

Vue.js+nodejs高校水电费缴费设备维修管理系统

本大学城水电管理系统管理员功能有个人中心,用户管理,领用设备管理,消耗设备管理,设备申请管理,设备派发管理,状体汇报管理,领用报表管理,消耗报表管理,班组报表管理&…

面向对象编程 实验二 MouseHit--SDUWH

来源网络。仅供参考 面向对象编程技术 实验二实验报告 1.实验要求 熟悉Visual Studio的环境与使用,创建一个新的工程以EasyWin为示例程序完成第一个Windows程序的编写、调试、运行。练习命令行的方式进行程序创建。 在理解Windows按键与鼠标的基础上,开发一个小型的打字…

feat:使用企业微信JS-SDK的onMenuShareAppMessage()实现点击转发自定义分享内容(TypeScript)

背景:企业微信应用使用企业微信JS-SDK的分享接口实现分享样式自定义 原生: 需要实现成: 企业微信JS-SDK 是企业微信面向网页开发者提供的 基于企业微信内 的网页开发工具包。 通过使用企业微信JS-SDK,网页开发者 可借助企业微信…

Python-shellcode免杀分离

#Python-原生态-MSF&CS&生成&执行代码 MSF-payload:msfvenom -p windows/meterpreter/reverse_tcp lhostX.X.X.X lport6688 -f c CS-payload: 攻击--生成后门--payload生成器--选择监听器和输出格式为C语言 python 3.10-32位,注…

如何将完成的报告从 FastReport .NET 导出到 S3

FastReport .NET 报表生成器FastReport .NET是适用于.NET Core 3,ASP.NET,MVC和Windows窗体的全功能报告库。使用FastReport .NET,您可以创建独立于应用程序的.NET报告。 简单存储服务是一种用于存储大量数据的服务。该服务将存储的数据划分…