在上下文(不)敏感分析中,“上下文”究竟是什么意思?

5
这个问题之前已经被问过了,但答案都很笼统。我想知道在静态代码分析的上下文中,特别是在Java中使用与术语上下文(不)敏感分析相结合时,上下文是什么意思。
例如,这篇论文在这个背景下广泛使用“上下文”。事实上,我还没有找到一个体面的上下文定义。

我不确定它是否有明确定义的含义。上下文敏感的静态分析可能会考虑当前分析函数的调用发生情况(或调用堆栈的某些抽象)。 - Basile Starynkevitch
1
“上下文(context)”一词的含义高度依赖于其所处的语境。例如,在数据流分析的维基百科条目中可以找到一个类似的含义。 - Marko Topolnik
1个回答

20
在你提供的链接中,“context”这个词似乎并没有用来描述静态分析,所以你的确提出了另一个问题。我认为那个问题的答案并不是“通用”的。但它们绝对不是你要找的具体答案。 上下文敏感分析是一种跨程序分析,当分析函数调用的目标时,它会考虑调用上下文。
以下是上下文敏感分析的示例:
int a,b;

int *x;

void f(void)
{
  ++*x;
}

int main(){
  x = &a;
  f();

  x = &b;
  f();
}

这不是Java,但您的问题主要涉及数据流分析中的上下文敏感性,所以我希望它不会太扰乱。此程序中的上下文敏感分析器至少对f()进行了两次分析,因为它从调用站点调用。这使得它很精确,因为f()的影响每次都相当不同。上下文敏感分析可以推断出在第一次调用后a==1b未更改,并且在第二次调用后ab均为1。上下文敏感性也使分析变得昂贵。上下文不敏感分析仅会对f()进行一次分析,并且通常只产生“f()修改了ab,因此在调用f()之后,这些变量的内容均未知”的信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接