A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Fundamentos de Análise Estática

Apresentações semelhantes


Apresentação em tema: "Fundamentos de Análise Estática"— Transcrição da apresentação:

1 Fundamentos de Análise Estática

2 O que é? Análise automática feita em código sem execução

3 Objetivo (Para que serve?)
Verificação de propriedades Entendimento de código Foco desta aula

4 Objetivo (Para que serve?)
Verificação de propriedades Entendimento de código Foco desta aula Entendimento de código pode facilitar verificação!

5 Várias formas (Como?) Sistemas de tipos Verificação de restrições
Análise de dataflow Foco desta aula

6 Conceitos Básicos

7 Aproximação de soluções
Propriedades complexas Análise é indecidível ou alto custo

8 Aproximação de soluções
Propriedades complexas Análise é indecidível ou alto custo Maioria das propriedades interessantes são complexas!

9 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

10 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 Prática: Balanço entre falso positivos e negativos e escalabilidade potencializa utilidade da análise comum Uma análise é conservadora quando resultado inclui necessariamente todas as soluções. Por exemplo, uma análise para encontrar erros de tipo é conservadora quando não permite escapar nenhum erro. Por outro lado, geralmente, reporta erros espúrios (i.e., alarmes falso).

11 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).

12 Um pouco de teoria...

13 Teoria dos Reticulados (Lattice)
O que estes grafos tem em comum? Obs. vértice denota relação de ordem

14 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)

15 LUB LUB para este subconjunto?

16 LUB LUB para este subconjunto?

17 GLB GLB para este subconjunto?

18 GLB GLB para este subconjunto?

19 Top e Bottom Top Bottom

20 Lattice Reticulado Esta ordem parcial é um lattice?
Ordem parcial onde qualquer subconjunto de elementos da relação possui LUB e GLB associado Esta ordem parcial é um lattice?

21 Exemplos: Lattices

22 Exemplo: relação de inclusão de inteiros {0,1,2,3}

23 Função monotônica e Ponto Fixo
Função f: L → L Monotônica Não decresce. Conceitualmente, acumula informação

24 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.

25 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”

26 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.

27 Um pouco de prática...

28 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)

29 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)

30 CFG

31 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)

32 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

33 Chaotic Iteration Simplificação: na prática, Fi lê apenas conteúdo em nós vizinhos a i!

34 Framework in gen kill out
Em geral, 4 funções descrevem uma análise intra-procedural: in, out, kill e gen Ilustração in gen kill out

35 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”

36 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 (

37 Outros Detalhes Generalização Reachable Defintions é uma análise
May/Must Forward/Backward Reachable Defintions é uma análise May e Forward

38 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)

39 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

40 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() h() calls g() Caixinha é um CFG g() returns from g() back to f() returns from g() back to h()

41 Diferenças Representação do grafo é diferente
Context insensitivity: alguns caminhos (de chamadas) são explorados, mas não são possíveis! propagada informação acumulada no contexto de chamada de h() para o retorno da chamada de g() em f()! f() calls g() h() calls g() g() returns from g() back to f() returns from g() back to h()

42 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)

43 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.

44 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.

45 Leitura adicional Michael Shwartzbach’s Lecture Notes on Static Analysis:


Carregar ppt "Fundamentos de Análise Estática"

Apresentações semelhantes


Anúncios Google