Top Banner
Programação funcional avançada Program Slicing Program Slicing Patrick Machado
13

Programação funcional avançada Program Slicing Patrick Machado.

Apr 17, 2015

Download

Documents

Internet User
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Programação funcional avançada Program Slicing Patrick Machado.

Programação funcional avançada

Program Slicing

Program SlicingPatrick Machado

Page 2: Programação funcional avançada Program Slicing Patrick Machado.

Programação funcional avançada

Program Slicing

Conteúdo

• O que é?• Dependências • Slicing estático• Slicing dinâmico• Métodos

– Equações de fluxo de dados– Grafos de dependências– Eficiência

• Aplicação– Aplicação ao trabalho

• Bibliografia

Page 3: Programação funcional avançada Program Slicing Patrick Machado.

Programação funcional avançada

Program Slicing

O que é?

• Mecanismo para particionar um programa em partes independentes.

• Um slice ou partição consiste em todos os ‘statements’ do programa que podem afectar o valor da computação num determinado ‘statement’.

• Essa partição é definida segundo o critério de slicing.

Page 4: Programação funcional avançada Program Slicing Patrick Machado.

Programação funcional avançada

Program Slicing

Dependências

• Dependências de dadosx = 1;

y = x;

• Dependêcias de controloif(n==2)

X = 3;

Page 5: Programação funcional avançada Program Slicing Patrick Machado.

Programação funcional avançada

Program Slicing

Slicing estático

• É usada apenas informação disponível estaticamente

• Critério especifica o statement e o conjunto de variáveis relevantes.

x = 1;

y = x + 2;

x = 10;

output(x)

output(y)

C = ( 5, {y})

Page 6: Programação funcional avançada Program Slicing Patrick Machado.

Programação funcional avançada

Program Slicing

Slicing dinâmico

• É utilizada uma determinada instância do programa.

• O critério tem em conta o input, o statement relevante e o conjunto de variáveis.

x = 2;if(x == 2){

y = x;}else{

y = x + 1;}output(y)

C = ({x==2}, 10, {y})

Page 7: Programação funcional avançada Program Slicing Patrick Machado.

Programação funcional avançada

Program Slicing

Métodos

• Equações de fluxo de dados– Calculam-se conjuntos sucessivos de

‘statements’ indirectamente relevantes, de acordo com as dependências

• Grafos de dependências– Constrói-se um grafo com as dependências.

• Nos -> ‘statements’

• Arcos -> dependências

Page 8: Programação funcional avançada Program Slicing Patrick Machado.

Programação funcional avançada

Program Slicing

Equações de fluxo de dados

No Def Ref Infl

1 {x} {} {}

2 {y} {x} {}

3 {soma} {} {}

4 {} {i} {5}

5 {soma}{soma,i}

{}

6 {} {soma} {}

x = 1;

y = x + 2;

soma = 0;

while(i < 10)

soma = soma + i;

output(soma)

Page 9: Programação funcional avançada Program Slicing Patrick Machado.

Programação funcional avançada

Program Slicing

Grafos de dependências

x = 1;

y = x + 2;

x = 10;

output(x)

output(y)

Page 10: Programação funcional avançada Program Slicing Patrick Machado.

Programação funcional avançada

Program Slicing

Eficiência

• Tempo polinomial– Equações de fluxo de dados

• O(v * n * e)

– Grafos de dependências• O(n * e)

Page 11: Programação funcional avançada Program Slicing Patrick Machado.

Programação funcional avançada

Program Slicing

Aplicação• Debug

– Ignorar ‘statements’ que não interferem no resultado pretendido

– Observar os ‘statements’ afectados por uma possível alteração

• Manutenção (integração e diferenciação)– Tratamento de diferentes versões. Verificação de

componentes equivalentes– Integração de versões modificadas relativamente à base

• Paralelismo– Determinar secções independentes do programa para

serem executados em paralelo.

• …

Page 12: Programação funcional avançada Program Slicing Patrick Machado.

Programação funcional avançada

Program Slicing

Aplicação ao projecto

• Construção de grafos de dependências– Relações explícitas

entre tipos– Relações implícitas

• Invocações de métodos• Possivelmente ao nível

do ‘statement’

• Slicing e chopping através do grafo de dependências

Page 13: Programação funcional avançada Program Slicing Patrick Machado.

Programação funcional avançada

Program Slicing

Bibliografia

• A Survey of Program Slicing Techniques, Frank Tip, 19942.

• The Use of Program Dependence Graphs in Software Engineering, Susan Horwits and Thomas Reps, 19923.

• Graph Theoretic Foundations of Program Slicing and Integration, Arun Lakhotia, 1993