40
陈林 数据流分析

陈林 - cs.nju.edu.cn · 简介 软件测试 数据流测试 要进行定义-使用对的计算:某个变量(内存空间) 的定义与使用的关联关系

  • Upload
    vanque

  • View
    253

  • Download
    16

Embed Size (px)

Citation preview

Page 1: 陈林 - cs.nju.edu.cn · 简介 软件测试 数据流测试 要进行定义-使用对的计算:某个变量(内存空间) 的定义与使用的关联关系

陈林

数据流分析

Page 2: 陈林 - cs.nju.edu.cn · 简介 软件测试 数据流测试 要进行定义-使用对的计算:某个变量(内存空间) 的定义与使用的关联关系

提纲 简介

数据流问题

迭代数据流分析

其他种类的数据流分析

DU、UD链

Page 3: 陈林 - cs.nju.edu.cn · 简介 软件测试 数据流测试 要进行定义-使用对的计算:某个变量(内存空间) 的定义与使用的关联关系

简介 编译优化

可用表达式

Page 4: 陈林 - cs.nju.edu.cn · 简介 软件测试 数据流测试 要进行定义-使用对的计算:某个变量(内存空间) 的定义与使用的关联关系

简介 编译优化

常量传播

a = c + 10 (如果c是常量)

需要进行可达定义的计算: c的定义能否到达该表达式

Page 5: 陈林 - cs.nju.edu.cn · 简介 软件测试 数据流测试 要进行定义-使用对的计算:某个变量(内存空间) 的定义与使用的关联关系

简介 软件测试

数据流测试

要进行定义-使用对的计算:某个变量(内存空间)的定义与使用的关联关系

Page 6: 陈林 - cs.nju.edu.cn · 简介 软件测试 数据流测试 要进行定义-使用对的计算:某个变量(内存空间) 的定义与使用的关联关系

简介 软件调试

如果变量a在某个表达式中被赋以错误的值

a = c + y

需要进行数据依赖的计算:哪些变量的值会影响到a?

Page 7: 陈林 - cs.nju.edu.cn · 简介 软件测试 数据流测试 要进行定义-使用对的计算:某个变量(内存空间) 的定义与使用的关联关系

简介 数据流分析

通过计算不同程序点上各种类型数据的流动信息,为不同的软件工程任务提供帮助

结构化程序:数据流分析可以在AST上进行计算,通常,可以在CFG上计算

大部分问题的精确解都是不可判定的 依赖于输入

依赖于条件语句

依赖于循环

一般只计算近似解

Page 8: 陈林 - cs.nju.edu.cn · 简介 软件测试 数据流测试 要进行定义-使用对的计算:某个变量(内存空间) 的定义与使用的关联关系

简介 近似分析

保守的近似分析(overestimate) 结果包含所有真实信息以及一些可疑信息

结果是安全的保守的

激进的近似分析(underestimate) 结果可能不包含所有信息

结果是不安全的

不同的应用需求 优化

软件工程的其它任务,如测试

数据流分析的最大挑战:provide safe but precise (i.e., minimize the spurious information) information in an efficient way

Page 9: 陈林 - cs.nju.edu.cn · 简介 软件测试 数据流测试 要进行定义-使用对的计算:某个变量(内存空间) 的定义与使用的关联关系

简介:实例

数据流计算

语句1中对I的赋值能到达哪些语句?

语句2中被计算的表达式能到达哪些语句?

从基本块B1结尾出发,变量J的使用能到达哪些语句?

语句3之后,变量I的值还是活跃的吗?

关注点:基本块前后的变化

Page 10: 陈林 - cs.nju.edu.cn · 简介 软件测试 数据流测试 要进行定义-使用对的计算:某个变量(内存空间) 的定义与使用的关联关系

可达定义

Page 11: 陈林 - cs.nju.edu.cn · 简介 软件测试 数据流测试 要进行定义-使用对的计算:某个变量(内存空间) 的定义与使用的关联关系
Page 12: 陈林 - cs.nju.edu.cn · 简介 软件测试 数据流测试 要进行定义-使用对的计算:某个变量(内存空间) 的定义与使用的关联关系
Page 13: 陈林 - cs.nju.edu.cn · 简介 软件测试 数据流测试 要进行定义-使用对的计算:某个变量(内存空间) 的定义与使用的关联关系
Page 14: 陈林 - cs.nju.edu.cn · 简介 软件测试 数据流测试 要进行定义-使用对的计算:某个变量(内存空间) 的定义与使用的关联关系
Page 15: 陈林 - cs.nju.edu.cn · 简介 软件测试 数据流测试 要进行定义-使用对的计算:某个变量(内存空间) 的定义与使用的关联关系
Page 16: 陈林 - cs.nju.edu.cn · 简介 软件测试 数据流测试 要进行定义-使用对的计算:某个变量(内存空间) 的定义与使用的关联关系
Page 17: 陈林 - cs.nju.edu.cn · 简介 软件测试 数据流测试 要进行定义-使用对的计算:某个变量(内存空间) 的定义与使用的关联关系
Page 18: 陈林 - cs.nju.edu.cn · 简介 软件测试 数据流测试 要进行定义-使用对的计算:某个变量(内存空间) 的定义与使用的关联关系
Page 19: 陈林 - cs.nju.edu.cn · 简介 软件测试 数据流测试 要进行定义-使用对的计算:某个变量(内存空间) 的定义与使用的关联关系
Page 20: 陈林 - cs.nju.edu.cn · 简介 软件测试 数据流测试 要进行定义-使用对的计算:某个变量(内存空间) 的定义与使用的关联关系

可达使用

Page 21: 陈林 - cs.nju.edu.cn · 简介 软件测试 数据流测试 要进行定义-使用对的计算:某个变量(内存空间) 的定义与使用的关联关系
Page 22: 陈林 - cs.nju.edu.cn · 简介 软件测试 数据流测试 要进行定义-使用对的计算:某个变量(内存空间) 的定义与使用的关联关系
Page 23: 陈林 - cs.nju.edu.cn · 简介 软件测试 数据流测试 要进行定义-使用对的计算:某个变量(内存空间) 的定义与使用的关联关系
Page 24: 陈林 - cs.nju.edu.cn · 简介 软件测试 数据流测试 要进行定义-使用对的计算:某个变量(内存空间) 的定义与使用的关联关系
Page 25: 陈林 - cs.nju.edu.cn · 简介 软件测试 数据流测试 要进行定义-使用对的计算:某个变量(内存空间) 的定义与使用的关联关系
Page 26: 陈林 - cs.nju.edu.cn · 简介 软件测试 数据流测试 要进行定义-使用对的计算:某个变量(内存空间) 的定义与使用的关联关系

可达定义、可达使用 变量v的定义是?

变量v的使用是?

定义D可到达某个程序点P,当……

U的使用从程序点P可达……

Page 27: 陈林 - cs.nju.edu.cn · 简介 软件测试 数据流测试 要进行定义-使用对的计算:某个变量(内存空间) 的定义与使用的关联关系

数据依赖图

数据依赖图:每个变量(基本块)有一个节点,每条边表示两个节点之间的数据流

称DU-pair的流向为数据依赖

Page 28: 陈林 - cs.nju.edu.cn · 简介 软件测试 数据流测试 要进行定义-使用对的计算:某个变量(内存空间) 的定义与使用的关联关系
Page 29: 陈林 - cs.nju.edu.cn · 简介 软件测试 数据流测试 要进行定义-使用对的计算:某个变量(内存空间) 的定义与使用的关联关系
Page 30: 陈林 - cs.nju.edu.cn · 简介 软件测试 数据流测试 要进行定义-使用对的计算:某个变量(内存空间) 的定义与使用的关联关系

DU-Pairs, DU-Chains, UD-Chains

定义-使用链(DU-chain):连接变量v的定义D和所有D能到达的v的使用

使用-定义链(UD-chain):连接变量的使用U和所有U能到达的v的定义

Page 31: 陈林 - cs.nju.edu.cn · 简介 软件测试 数据流测试 要进行定义-使用对的计算:某个变量(内存空间) 的定义与使用的关联关系
Page 32: 陈林 - cs.nju.edu.cn · 简介 软件测试 数据流测试 要进行定义-使用对的计算:某个变量(内存空间) 的定义与使用的关联关系
Page 33: 陈林 - cs.nju.edu.cn · 简介 软件测试 数据流测试 要进行定义-使用对的计算:某个变量(内存空间) 的定义与使用的关联关系

其他数据流问题 活跃变量 (live variable)

可达定义 (reachable definition)

可用表达式 (available expression)

支配节点 (dominator)

Page 34: 陈林 - cs.nju.edu.cn · 简介 软件测试 数据流测试 要进行定义-使用对的计算:某个变量(内存空间) 的定义与使用的关联关系

活跃变量

Page 35: 陈林 - cs.nju.edu.cn · 简介 软件测试 数据流测试 要进行定义-使用对的计算:某个变量(内存空间) 的定义与使用的关联关系

可达定义

Page 36: 陈林 - cs.nju.edu.cn · 简介 软件测试 数据流测试 要进行定义-使用对的计算:某个变量(内存空间) 的定义与使用的关联关系

可用表达式

Page 37: 陈林 - cs.nju.edu.cn · 简介 软件测试 数据流测试 要进行定义-使用对的计算:某个变量(内存空间) 的定义与使用的关联关系

支配节点

Page 38: 陈林 - cs.nju.edu.cn · 简介 软件测试 数据流测试 要进行定义-使用对的计算:某个变量(内存空间) 的定义与使用的关联关系

支配节点

Page 39: 陈林 - cs.nju.edu.cn · 简介 软件测试 数据流测试 要进行定义-使用对的计算:某个变量(内存空间) 的定义与使用的关联关系
Page 40: 陈林 - cs.nju.edu.cn · 简介 软件测试 数据流测试 要进行定义-使用对的计算:某个变量(内存空间) 的定义与使用的关联关系