陈林 - cs.nju.edu.cn · 简介 软件测试 数据流测试...

Preview:

Citation preview

陈林

数据流分析

提纲 简介

数据流问题

迭代数据流分析

其他种类的数据流分析

DU、UD链

简介 编译优化

可用表达式

简介 编译优化

常量传播

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

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

简介 软件测试

数据流测试

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

简介 软件调试

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

a = c + y

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

简介 数据流分析

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

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

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

依赖于条件语句

依赖于循环

一般只计算近似解

简介 近似分析

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

结果是安全的保守的

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

结果是不安全的

不同的应用需求 优化

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

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

简介:实例

数据流计算

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

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

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

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

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

可达定义

可达使用

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

变量v的使用是?

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

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

数据依赖图

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

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

DU-Pairs, DU-Chains, UD-Chains

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

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

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

可达定义 (reachable definition)

可用表达式 (available expression)

支配节点 (dominator)

活跃变量

可达定义

可用表达式

支配节点

支配节点

Recommended