陈林 - cs.nju.edu.cn · 简介 软件测试 数据流测试...
TRANSCRIPT
陈林
数据流分析
提纲 简介
数据流问题
迭代数据流分析
其他种类的数据流分析
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)
活跃变量
可达定义
可用表达式
支配节点
支配节点