练习:程序切片

news2025/2/26 22:06:30

练习:程序切片

1 简介
注:问题3提到了conditioned slicing。 我们没有给出计算条件切片的算法,但你不应该要求这样的算法。
2 问题 1
对于以下每个代码片段,绘制程序依赖图(没有定义顺序边)。 基于这些,生成变量 x 的静态后端切片和 x 初始值的前向切片。

a)
1. y=z+1;
2. if (y>0)
3.  x=x+1;
   else
4.  x=x+2;

b)
1. if (x>0)
2.    x=x+1;
   else
3.    x=x+2;
4. if (y>0)
5.    x=y;
   else
6.    x=-y;
7. z=x+1;

c)
1. while (y>0){
2.   y=y-1;
3.   x=x+1;}

4. z=x+y;
d)
1. while (x>0)
{
2.   x=x+y;
3.   y=y-1;
}

注意:在这些示例解决方案中,添加了一个节点以指示要对其应用末端切片的变量。 此外,不包括自环(从节点到自身的边)——这不会影响生成的切片。
For backward slice (a)

在这里插入图片描述

For forward slice (a)
在这里插入图片描述
For backward slice (b)
在这里插入图片描述

For forward slice (b)

在这里插入图片描述

For backward slice ©
在这里插入图片描述

For forward slice ©

在这里插入图片描述

For backward slice (d)
For forward slice (d)

在这里插入图片描述

程序的正向切片是指在程序的特定点直接或间接影响特定变量值的语句和变量的集合。 它有助于识别代码不同部分之间的依赖关系和关系。

在给定的代码片段中,前向切片仅包含语句“x = x + y”。 这意味着该语句是唯一直接影响程序中特定点处变量“x”值的语句。

让我们分析代码来理解为什么只有这条语句被包含在前向切片中:

  1. 代码以一个 while 循环开始,它的条件是变量 ‘x’ 大于 0。
  2. 在 while 循环内,执行语句“x = x + y”。 此语句通过向其添加“y”的值来修改“x”的值。
  3. 更新“x”后,使用语句“y = y - 1”将“y”的值减 1。
  4. 循环继续,直到条件“x > 0”不再为真。

由于直接影响“x”值的唯一语句是“x = x + y”,因此它是前向切片中包含的唯一语句。 循环中的其他语句,例如“y”的递减,不直接影响“x”的值,因此在这个特定上下文中不是前向切片的一部分。

3 问题 2
为变量 x 生成以下动态反向切片:
a) 上面的片段 a) 输入 x=1, y=5, z=2

在这里我们可以观察到,当我们到达 if 语句时,我们有 y=3,因此我们采用了“then”的情况。 因此,“else case”是无关紧要的,因此可以删除。 我们可能会产生如下一段代码:
y=z+1;
x=x+1;
b) 上面的片段 b) 输入 x=1, y=-1
这里当我们到达第一个 if 语句时 x 为正,当我们到达第二个 if 语句时 y 为负。 此外,最后一条语句 (z=x+1) 对 x 的值没有影响,因此可以删除。 因此,我们可能会得到以下动态切片:
x=x+1;
x=-y;
但是,我们现在可以从中删除第一条语句,因为它不会影响 x 的最终值(此处分配的值将被下一条语句分配的值覆盖)。 最后我们得到:
x=-y

c) 上面的片段 c) 输入 x=1, y=-2, z=3
因为当我们到达循环时 y 是负数,所以我们没有进入它的主体。 我们可能因此删除循环和它的主体给我们留下一个空程序:我们可以
删除片段的每个部分。

4 问题 3
给定下面的代码,为变量 x 生成以下条件切片:
a) x初值小于0条件下的end backward slice
b) y初值为0 while (x>0)条件下的end backward slice


1. while (x>0)
{
2.   y=x*y;
3.   x=x-1-y;
}

a) 当 x 最初为负时,我们不进入循环体,因此可以将其移除。 这导致空程序。
在这里插入图片描述

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

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

相关文章

什么是 Vue.js 中的 v-if 和 v-show 指令?

什么是 Vue.js 中的 v-if 和 v-show 指令? Vue.js 是一种用于构建交互式用户界面的渐进式框架。它采用了响应式的数据绑定机制和组件化的开发模式,让开发者能够更加高效地构建复杂的 Web 应用。在 Vue.js 中,v-if 和 v-show 是两个常用的指令…

STM32开发——电动车报警装置

1.项目简介 1.1项目需求 点击遥控器 A 按键,系统进入警戒模式,一旦检测到震动(小偷偷车),则喇叭发出声响报警, 吓退小偷。 点击遥控器 B 按键,系统退出警戒模式,再怎么摇晃系统都不…

通过项目驱动的学习方法快速掌握Java编程

摘要 Java作为一种广泛应用于软件开发领域的编程语言,对于零基础的学习者来说,学习Java编程可能存在一定的难度。本文将介绍如何通过项目驱动的学习方法,帮助零起点的学习者快速掌握Java编程。通过以项目为核心的学习路径、结合实践和理论的…

【Pytorch】自定义模型、自定义损失函数及模型删除修改层的常用操作

目录 问题一:更改模型最后一层,删除最后一层问题二:自定义模型及参数冻结问题三:自定义损失函数及广播机制 问题1:更改模型最后一层,删除最后一层,添加层。 改变模型最后一层 # Load the mo…

Jmter自动化

一、接口测试流程 1、拿到api接口文档,熟悉接口业务。 2、编写测试用例。 正例:正常参数,是否接口正常 反例:鉴权异常情况、参数异常、兼容性、黑名单、调用次数异常 3、使用接口测试用具(Jmeter) 4、…

chatgpt赋能python:Python安装gym:入门指南

Python安装gym: 入门指南 如果您是一位正在学习强化学习的学生,或者是一位研究者、开发人员,那么您一定会对OpenAI出品的gym库感兴趣。该库为编写和比较强化学习算法提供了一组标准环境。但是,在使用gym之前,您需要将其安装到您的…

ThinkPad无法进系统的解决方案(实测)

ThinkPad无法进系统如何解决? 不一样的笔记本进到BIOS的方法是不太一样的,下面就和大伙儿具体解读电脑上进到thinkpad的bios设置启动项的方法吧。 在开机或重启的Lenovo画面自检处,快速、连续多次按键盘的“F1”按键,即可进入BI…

基于html+css的图展示112

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

PHP实现文件上传

上传文件的必备三个条件: 1、上传到后台的文件 2、method "post";(不可以为get方法) 3、enctype "multipart/form-data";(注意哦,是data,不是date) 三者缺一不可 后台…

抛弃传统网络?SDN协议、标准、接口对比分析!

概要: 随着网络规模的不断扩大和复杂性的增加,传统的网络架构已经难以满足日益增长的网络需求。SDN(Software Defined Networking)技术的出现,为网络的管理和控制带来了革命性的变化。SDN的核心思想是将网络的控制和管…

chatgpt赋能python:Python如何访问文件

Python如何访问文件 Python是一种优秀的编程语言,被广泛应用于各种领域,包括文件处理。在Python中,我们可以使用内置的文件处理功能访问文件。 什么是文件? 文件是计算机系统中的一种数据存储形式。它们可以包含任何类型的信息…

u盘视频丢失怎么找回?居然还得靠它

u盘视频丢失怎么找回?U盘作为一款常用的存储数据的工具,因为其自身的小巧便携,方便我们随身携带,深受广大用户的喜爱。在使用U盘的过程中,我们也会遇到一些文件丢失的麻烦,比如误删除里面的视频文件。当遇到…

浅谈 Tarjan 算法

在了解 Tarjan 算法之前,我们先来了解 dfs 搜索树。 1 dfs 生成树 定义: dfs 遍历整张图,按照 dfs 序构成一棵树。 1.1 有向图的 dfs 生成树 有向图的 dfs 生成树包括四种边: 树边(tree edge)&#xff…

CDC是什么?有没有合适的技术方案?

CDC 是 Change Data Capture(变更数据获取)的简称。核心思想是,监测并捕获数据库的 变动(包括数据或数据表的插入、更新以及删除等),将这些变更按发生的顺序完整记录下 来,写入到消息中间件中以供其他服务进行订阅及…

阿里、百度、值得买齐发声,电商的“AIGC式”进化

配图来自Canva可画 一年一度618要来了,和往年一样折扣力度、明星直播等话题被炒得火热,不同的是今年618的科技属性更强。 究其原因,过去半年AIGC技术被电商平台应用到实际运营中,“AIGC选品”、“虚拟货场”、“智能客服”成为电商…

《MySQL(六):基础篇- 事务》

文章目录 6. 事务6.1 事务简介6.2 事务操作6.2.1 未控制事务6.2.2 控制事务一6.2.3 控制事务二 6.3 事务四大特性6.4 并发事务问题6.5 事务隔离级别 6. 事务 6.1 事务简介 事务 是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一…

【机器学习】神经网络入门

神经网络 非线性假设 如果对于下图使用Logistics回归算法,如果只有x1和x2两个特征的时候,Logistics回归还是可以较好地处理的。它可以将x1和x2包含到多项式中 但是有很多问题所具有的特征远不止两个,甚至是上万个,如果我们想要…

MySQL数据库给表添加索引

说明:当数据库中的记录数过多时,查询速度会显著变慢。此时可以给表创建索引,提高查询速度。 一、创建索引前 我现在有一张表,有1000万条记录,根据username值,查询一条记录,测试下查询时间&…

赛宁网安助力智能网联汽车发展 | “饶派杯”XCTF车联网安全挑战赛圆满收官

​​ 2023年5月31日,“饶派杯”XCTF车联网安全挑战赛在江西省上饶市圆满落幕。本次大赛特邀国内21支精英战队参与比拼,参赛选手覆盖全国知名高校、自动驾驶汽车和科研院所等车联网安全人才。最终,经过9个小时激烈角逐,来自南京邮电…

chatgpt赋能python:Python自动更新技术的应用

Python自动更新技术的应用 Python是一款高效的编程语言,广泛应用于各种软件开发、数据分析及人工智能等领域。随着大数据和人工智能的快速发展,Python语言的应用也日益普及,更多的企业和个人开始使用Python编写自己的程序。而随着程序的使用…