Programação funcional avançada Program Slicing Patrick Machado.
Transcript of Programação funcional avançada Program Slicing Patrick Machado.
![Page 1: Programação funcional avançada Program Slicing Patrick Machado.](https://reader036.fdocument.pub/reader036/viewer/2022081505/552fc11a497959413d8c97c7/html5/thumbnails/1.jpg)
Programação funcional avançada
Program Slicing
Program SlicingPatrick Machado
![Page 2: Programação funcional avançada Program Slicing Patrick Machado.](https://reader036.fdocument.pub/reader036/viewer/2022081505/552fc11a497959413d8c97c7/html5/thumbnails/2.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022081505/552fc11a497959413d8c97c7/html5/thumbnails/3.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022081505/552fc11a497959413d8c97c7/html5/thumbnails/4.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022081505/552fc11a497959413d8c97c7/html5/thumbnails/5.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022081505/552fc11a497959413d8c97c7/html5/thumbnails/6.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022081505/552fc11a497959413d8c97c7/html5/thumbnails/7.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022081505/552fc11a497959413d8c97c7/html5/thumbnails/8.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022081505/552fc11a497959413d8c97c7/html5/thumbnails/9.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022081505/552fc11a497959413d8c97c7/html5/thumbnails/10.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022081505/552fc11a497959413d8c97c7/html5/thumbnails/11.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022081505/552fc11a497959413d8c97c7/html5/thumbnails/12.jpg)
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.](https://reader036.fdocument.pub/reader036/viewer/2022081505/552fc11a497959413d8c97c7/html5/thumbnails/13.jpg)
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