程序切片技术
来源:互联网 发布:手机聊天机器人软件 编辑:程序博客网 时间:2024/05/16 05:56
程序切片技术,是对程序的语句进行计算,将程序语句减少到只包含某个特定计算相关的。
和污点分析不同,程序切片关注代码指令,而污点分析关注于数据。
1. 切片类型
1.1 后向切片和前向切片
程序切片,按照方向可分为后向切片、前向切片、中间切片。
后向分片(Backward slice)
针对程序中某个点p,做后向分片,意识是切分所有影响p的语句。
例子:
int main(){int sum = 0;int i = 1;while (i<11) {sum = sum+i;i = i + 1;}printf(“%d \n”, sum);**printf(“d \n”, i);**}**The program subset that may affect printf(“d \n, i);**
前向分片(Forward slice)
针对程序中某个点p,做前向分片,意思是切分所有被p影响的语句。
例子:
int main(){**int sum = 0;**int i = 1;while (i<11) {sum = sum+i;i = i + 1;}printf(“%d \n”, sum);printf(“d \n”, i);}**The program subset that may be affected by sum = 0;**
1.2 静态切片和动态切片
按照切分对象,可分为静态切片和动态切片
静态切片
静态切片,是对源代码直接进行计算(通过数据和控制依赖)。
在程序P中,一个静态切片S包含所有可能影响某个点的变量v的语句。
比如:
int i;int sum = 0;int product = 1;for(i = 1; i < N; ++i) { sum = sum + i; product = product * i;}write(sum);write(product);
针对write(sum)进行切片后:
int i;int sum = 0;for(i = 1; i < N; ++i) { sum = sum + i;}write(sum);
动态切片
动态切片是对一个执行流进行切片。
在一个执行流中,动态切片包含所有实际影响某个点的变量v的语句。
考虑一个if-else语句,动态切片只包含执行的语句,静态切片包括if下的语句和else下的语句。
1.3 过程间切片和全系统切片
根据切片的范围,程序切片可分为:过程间切片和全系统切片。
过程间切片
过程间切片是在一个过程(函数)的内部进行切片。通常采用控制依赖和数据依赖生成一个PDG(Program Dependency Graph),通过PDG进行切分。
全系统切片
全系统切片是在整个系统中(多个过程)进行切片。每个过程内部都是一个PDG。之后通过给过程间增加边,生成SDG(System Dependency Graph)。过程见增加边的条件如下:
– Connect calls to entries– Connect actual parameters to formal parameters– Connect procedure results to call-site return values
2. 切片方法
切片的算法,可分为控制依赖、数据依赖。
控制依赖:
数据依赖:
两者结合:
使用控制依赖和数据依赖做后向切分:
0 0
- 程序切片技术
- 程序静态切片技术
- 切片程序
- 九切片技术
- 程序动态切片技术研究
- 歌曲时间切片Matlab程序
- 切片
- 切片
- 切片
- 切片
- 切片
- 切片
- 切片
- 切片
- 多线程下载地图切片程序(更新)
- 3D打印技术之切片引擎(1)
- 3D打印技术之切片引擎(2)
- 3D打印技术之切片引擎(3)
- 交换两个变量值的方法
- Java版本:图书管理系统
- Apache http安装
- Leetcode 278. First Bad Version
- windows下安装memcache步骤
- 程序切片技术
- 判断是否是从微信中打开的浏览器
- Graham Scan凸包算法
- Jtag接口定义及含义
- jsp注释和html注释
- session和cookie
- java二维码工具类,中间带LOGO的,很强大
- Perfect smooth scrolling in UITableViews
- 存储到SD卡,获取SD的大小及可用空间 (重点)