Fundamentos de
Análise Estática
O que é?
• Análise automática feita em código sem
execução
Objetivo (Para que serve?)
• Verificação de propriedades
• Entendimento de código
Foco desta aula
Objetivo (Para que serve?)
• Verificação de propriedades
• Entendimento de código
Foco desta aula
Entendimento de código
pode facilitar verificação!
Várias formas (Como?)
• Sistemas de tipos
• Verificação de restrições
• Análise de dataflow
Foco desta aula
Conceitos Básicos
Aproximação de soluções
• Propriedades complexas
– Análise é indecidível ou alto custo
Aproximação de soluções
• Propriedades complexas
– Análise é indecidível ou alto custo
Maioria das propriedades
interessantes são complexas!
Aproximação de soluções
• Propriedades complexas
– Análise é indecidível ou alto custo
• Abordagem: aproximar espaço de solução
– super-aproximação: falso positivos
– sub-aproximação: falso negativos
comum
Aproximação de soluções
• Propriedades complexas
– Análise é indecidível ou alto custo
• Abordagem: aproximar espaço de solução
comum
– super-aproximação: falso positivos
sub-aproximação:
falsoquando
negativos
Uma–análise
é conservadora
resultado inclui
necessariamente
todas as soluções. Por exemplo,
• Prática:
uma–análise
para
encontrar
erros dee tipo
é
Balanço
entre
falso positivos
negativos
e
conservadora
quandopotencializa
não permite
escapar
escalabilidade
utilidade
danenhum
análise
erro. Por outro lado, geralmente, reporta erros
espúrios (i.e., alarmes falso).
Frequentemente balanço entre falso
positivos, negativos, e escalabilidade é
mais importante (i.e., útil) que garantias
fortes de correção (0% falso negativos) e
completude (0% falso positivos).
Um pouco de teoria...
Teoria dos Reticulados (Lattice)
• O que estes grafos tem em comum?
– Obs. vértice denota relação de ordem
Ordem Parcial
• Ordem parcial é uma relação binária:
– reflexiva, transitiva e anti-simétrica
• Conceitos associados
– Upper Bound
– Least Upper Bound (LUB)
– Lower Bound
– Greatest Lower Bound (GLB)
LUB
LUB para este
subconjunto?
LUB
LUB para este
subconjunto?
GLB
GLB para este
subconjunto?
GLB
GLB para este
subconjunto?
Top e Bottom
Top
Bottom
Lattice
• Reticulado
– Ordem parcial onde qualquer subconjunto de
elementos da relação possui LUB e GLB
associado
• Esta ordem parcial é um lattice?
Exemplos: Lattices
Exemplo: relação de inclusão
de inteiros {0,1,2,3}
Função monotônica e Ponto Fixo
• Função f: L → L
– Monotônica
• Não decresce. Conceitualmente, acumula
informação
Função monotônica e Ponto Fixo
• Função f: L → L
– Monotônica
• Não decresce. Conceitualmente, acumula
informação
• Ponto fixo fix(f), f(fix(f)) = fix(f)
• Teorema do ponto fixo (Tarski):
– Toda função monotônica f admite ponto fixo
em um reticulado L de altura finita.
Ilustração
• Iterações sucessivas de
uma função
– Acumula informação
(f é monotônica)
– Para em ponto fixo quando
“não há mais informação
para se descobrir”
Relação com nosso problema
O domínio e contra-domínio de f representam
alguma informação de nosso interesse no
programa. Por exemplo, definições alcançáveis
em um ponto do programa. Tipicamente, f opera
em uma representação abstrata do programa.
Por exemplo, o control-flow graph (CFG) ou o
inter. flow graph (IFG). Uma iteração de f
propaga informação nesta estrututura. Por
exemplo, propaga informação armazenada nos
nós pelos vértices de um CFG.
Um pouco de prática...
Perspectiva
• Análise estática propaga informação
usando estrutura do programa
– Intra-procedural: fluxo de controle de um
método/função (CFG)
– Inter-procedural: fluxo de chamadas entre
métodos/funções (IFG)
Perspectiva
• Análise estática propaga informação
usando estrutura do programa
– Intra-procedural: fluxo de controle de um
método/função (CFG)
– Inter-procedural: fluxo de chamadas entre
métodos/funções (IFG)
CFG
Quiz
• Quais as definições de f
alcançáveis no nó return
f? (assuma que uma def.
consiste de um nome de
variável + id. do bloco
básico)
Como mecanizar análise
mental?
• Associado a cada nó i:
– Informação acumulada: xi
• No exemplo anterior xi armazena conjunto de
definições
– Função (monotônica) de transferência: Fi
Chaotic Iteration
Simplificação: na prática,
Fi lê apenas conteúdo em
nós vizinhos a i!
Framework
• Em geral, 4 funções descrevem uma
análise intra-procedural: in, out, kill e gen
• Ilustração
in
out
gen
kill
Exemplo: Reachable Definitions
•
•
•
•
in[b] = U OUT[k], for all k ∈ pred[b]
out[b] = (IN[b] – kill[b]) + gen[b]
kill[b] = “definições mortas em b”
gen[b] = “novas definições (não mortas) em b”
Existem vários frameworks de análise que
permitem escrever basicamente estas 4
funções e obter sua análise intra-proc. E.g.,
SOOT (http://www.sable.mcgill.ca/soot)
Outros Detalhes
• Generalização
– May/Must
– Forward/Backward
• Reachable Defintions é uma análise
– May e Forward
Perspectiva
• Análise estática propaga informação
usando estrutura do programa
– Intra-procedural: fluxo de controle de um
método/função (CFG)
– Inter-procedural: fluxo de chamadas entre
métodos/funções (IFG)
Similaridades entre Inter e Intra
• Informação se propaga em um grafo
– Informação e função de transferência
associada a cada nó
Grafo inclui informação de
chamador e chamado
Diferenças
• Representação do grafo é diferente
• Context insensitivity: alguns caminhos
(de chamadas) são explorados, mas não
são possíveis!
f() calls g()
Caixinha é
um CFG
returns from g() back to f()
h() calls g()
g()
returns from g() back to h()
Diferenças
• Representação do grafo é diferente
• Context insensitivity: alguns caminhos
(de chamadas) são explorados, mas não
propagada
informação
são possíveis!
acumulada no contexto
f() calls g()
de chamada de h() para
o retorno da chamada
de g() em f()!
h() calls g()
g()
returns from g() back to f()
returns from g() back to h()
Inlining
• Uma tentativa é representar um CFG do
programa fazendo inlining de função
• Problemas
– Como tratar recursão?
– Não escala (vários contextos de chamada)
Existe uma variedade de representações de
interprocedural flow graphs (IFGs). Por
exemplo, IFG proposto por Harrold e Soffa
em “Efficient Computation of Interprocedural
Definition-Use Chains”, TOPLAS 1994.
Considerações Finais
• Representação do programa pode facilitar
muito a análise do programa
– 3-address
– SSA
O framework SOOT oferece 4
representações (formatos) do
programa de entrada.
Leitura adicional
• Michael Shwartzbach’s Lecture Notes on
Static Analysis:
http://www.brics.dk/~mis/static.pdf
Download

Fundamentos de Análise Estática