programação funcional avançada program slicing patrick machado
Post on 17-Apr-2015
130 Views
Preview:
TRANSCRIPT
Programação funcional avançada
Program Slicing
Program SlicingPatrick 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
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.
Programação funcional avançada
Program Slicing
Dependências
• Dependências de dadosx = 1;
y = x;
• Dependêcias de controloif(n==2)
X = 3;
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})
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})
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
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)
Programação funcional avançada
Program Slicing
Grafos de dependências
x = 1;
y = x + 2;
x = 10;
output(x)
output(y)
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)
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.
• …
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
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
top related