Your SlideShare is downloading. ×
0
Especificação e Verificação de Programas
Especificação e Verificação de Programas
Especificação e Verificação de Programas
Especificação e Verificação de Programas
Especificação e Verificação de Programas
Especificação e Verificação de Programas
Especificação e Verificação de Programas
Especificação e Verificação de Programas
Especificação e Verificação de Programas
Especificação e Verificação de Programas
Especificação e Verificação de Programas
Especificação e Verificação de Programas
Especificação e Verificação de Programas
Especificação e Verificação de Programas
Especificação e Verificação de Programas
Especificação e Verificação de Programas
Especificação e Verificação de Programas
Especificação e Verificação de Programas
Especificação e Verificação de Programas
Especificação e Verificação de Programas
Especificação e Verificação de Programas
Especificação e Verificação de Programas
Especificação e Verificação de Programas
Especificação e Verificação de Programas
Especificação e Verificação de Programas
Especificação e Verificação de Programas
Especificação e Verificação de Programas
Especificação e Verificação de Programas
Especificação e Verificação de Programas
Especificação e Verificação de Programas
Especificação e Verificação de Programas
Especificação e Verificação de Programas
Especificação e Verificação de Programas
Especificação e Verificação de Programas
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Especificação e Verificação de Programas

1,032

Published on

Slides sobre Especificação e Verificação de Programas, baseados no livro de Silva, Finger e Melo.

Slides sobre Especificação e Verificação de Programas, baseados no livro de Silva, Finger e Melo.

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,032
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
17
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Lógica para Computação (IF61B) Lógica para Computação:Especificação e Verificação de Programas Prof. Celso Antônio Alves Kaestner, Dr. Eng. kaestner@dainf.ct.utfpr.edu.br Alterado e complementado por Prof. Adolfo Neto, D.Sc. adolfo@utfpr.edu.br
  • 2. Lógica para Computação (IF61B) Especificação de programas • Uma tarefa típica em Computação: problema computacionalproblema real Modelagem • Especificações em linguagem natural exigem que se assuma o significado de diversos termos, e por isto são “imprecisas / vagas / inconsistentes” permitindo diversas interpretações; • Este é um problema amplamente estudado em Engenharia de Software, que busca métodos e formalismos tenta eliminar / reduzir este problema. 25/05/09 Prof. Celso A A Kaestner 2
  • 3. Lógica para Computação (IF61B) Especificação de programasVisão operacional de um programa: dados de programa dados de saída entradaProgramas como transformadores de estados: ...σ1 = {v11,v12...v1m} σ = {v21,v22...v2m} σ = {vn1,vn2...vnm}25/05/09 Prof. Celso A A Kaestner 3
  • 4. Lógica para Computação (IF61B) Especificação de programas Especificação de propriedades de programas:• Exemplo: dados dois valores (x e y) inteiros maiores ou iguais a 10 calcular sua soma (z);• Especificação 1: – sobre o estado inicial: x ≥ 10 ∧ y ≥ 10 – sobre o estado final: z = x + y• Especificação 2 (superespecificação): – sobre o estado inicial: x ≥ 10 ∧ y ≥ 10 ∧ (x + y) ≥ 0 – sobre o estado final: z = x + y ∧ z ≥ 2025/05/09 Prof. Celso A A Kaestner 4
  • 5. Lógica para Computação (IF61B) Especificação de programas• Especificação 3 (especificação pouco clara): – sobre o estado inicial: x ≥ 10 ∧ (x + y) ≥ (10 + x) – sobre o estado final: z = x + y• Especificação 4 (especificação incompleta): – sobre o estado inicial: x ≥ 10 – sobre o estado final: z = x + y• “Especificação” 5 (não é especificação ...): – sobre o estado inicial: x ≥ 10 ∧ y ≥ 10 – sobre o estado final: z = x + y ∧ z < 1025/05/09 Prof. Celso A A Kaestner 5
  • 6. Lógica para Computação (IF61B) Especificação de programas• Vantagens de se ter uma especificação definida por formalismo matemático:1. Precisão;2. Verificação de consistência;3. Simulação;4. Verificação de programas.• Pode-se usar a Lógica Matemática como linguagem de especificação (SILVA; FINGER; MELO, 2006, p. 165);25/05/09 Prof. Celso A A Kaestner 6
  • 7. Lógica para Computação (IF61B) Especificação de programasSistematização das propriedades de programas:1. Pré-condições: válidas sobre os dados de entrada;2. Pós-condições: válidas sobre os dados de saída;3. Invariantes: válidas sempre, durante toda a execução do programa.25/05/09 Prof. Celso A A Kaestner 7
  • 8. Lógica para Computação (IF61B) Especificação de programas• Exemplo: fatorial. 1 se n=0 n! = 1 sen=1 n*(n-1)! se n>1• PRE: n ≥ 0 ∧ n0 = n• POS: fat = n! ∧ fat > 0• INV: fat > 025/05/09 Prof. Celso A A Kaestner 8
  • 9. Lógica para Computação (IF61B) Verificação de Programas• Os erros são comuns em programação;• O funcionamento correto de um programa depende também dos dados fornecidos ao programa, isto é, se sua variação foi corretamente prevista;• Deseja-se verificar se o programa desenvolvido atende à especificação e corrigi-lo se for o caso.25/05/09 Prof. Celso A A Kaestner 9
  • 10. Lógica para Computação (IF61B) Verificação de Programas• Exemplo (SILVA; FINGER; MELO, 2006, p.179-183): (Merge) dadas duas sequências ordenadas de inteiros produzir nova sequência ordenada que entrelace os números das duas sequências:• Entradas: V1 = {1,3,6,9} e V2 = {2,3,3,7,10}• Saída: V3 = {1,2,3,3,3,6,7,9,10}25/05/09 Prof. Celso A A Kaestner 10
  • 11. Lógica para Computação (IF61B) Verificação de Programasvoid merge(int V1[],V2[],V3[],int t1,int t2){int p1=0,p2=0,p3=0; while(t1+t2>0) {if (V1[p1] > V2[p2]) {V3[p3]=V2[p2]; p2=p2+1; t2=t2-1;} else {V3[p3]=V1[p1]; p1=p1+1; t1=t1-1;} p3++;} }25/05/09 Prof. Celso A A Kaestner 11
  • 12. Lógica para Computação (IF61B) Verificação de Programas• Erro: se uma das sequências for vazia há uma comparação indevida: if (v1[p1] > V2[p2])• Numa execução real haveria erro.• Para a correção ... Novo programa25/05/09 Prof. Celso A A Kaestner 12
  • 13. Lógica para Computação (IF61B) Verificação de programasvoid merge(int V1[],V2[],V3[],int t1,int t2){int p1=0,p2=0,p3=0; while(t1>0 && t2>0) {if (V1[p1] > V2[p2]) {V3[p3]=V2[p2]; p2=p2+1; t2=t2-1;} else {V3[p3]=V1[p1]; p1=p1+1; t1=t1-1;} p3++;} }25/05/09 Prof. Celso A A Kaestner 13
  • 14. Lógica para Computação (IF61B) Verificação de programas• Agora a comparação só ocorre se houver elementos nas listas;• Porém, quando uma lista termina deixa-se de colocar os elementos restantes da outra lista na lista de saída.• Um novo erro é introduzido ao se corrigir o erro inicial.• Para a correção ... Novo programa25/05/09 Prof. Celso A A Kaestner 14
  • 15. Lógica para Computação (IF61B) Verificação de Programasvoid merge(int V1[],V2[],V3[],int t1,int t2){int p1=0,p2=0,p3=0; while(t1>0 && t2>0) {if (V1[p1] > V2[p2]) {V3[p3]=V2[p2]; p2=p2+1; t2=t2-1;} else {V3[p3]=V1[p1]; p1=p1+1; t1=t1-1;} p3++;}; (continua)25/05/09 Prof. Celso A A Kaestner 15
  • 16. Lógica para Computação (IF61B) Verificação de Programas while (t1>0) {V3[p3]=V1[p1]; p1=p1+1; t1=t1-1; p3++;} while (t2>0) {V3[p3]=V2[p2]; p2=p2+1; t2=t2-1; p3++;} }• O programa agora está OK.25/05/09 Prof. Celso A A Kaestner 16
  • 17. Lógica para Computação (IF61B) Verificação de Programas• Se tantos erros ocorrem em um programa tão simples, como proceder no caso de sistemas complexos ?• Como determinar se um programa está correto ?• Solução: minimizar os erros, por meio de alguns procedimentos.25/05/09 Prof. Celso A A Kaestner 17
  • 18. Lógica para Computação (IF61B) Verificação de Programas• Procedimentos utilizados para verificação: 1. Inspeção: segue-se a lógica do programa em busca de situações incorretas ou não previstas. Forma subjetiva de julgamento! 2. Teste de programas: alguns casos de teste são selecionados, em conjunto com dados de teste, sobre os quais o programa é executado e os resultados são verificados; não garante a correção total do programa.25/05/09 Prof. Celso A A Kaestner 18
  • 19. Lógica para Computação (IF61B) Verificação de Programas• “Para garantir que um programa responda adequadamente aos dados do domínio, precisamos verificar se ele é, de fato, uma implementação particular da especificação do problema. Para isso, precisamos provar que o programa satisfaz a especificação do problema” (SILVA; FINGER; MELO, 2006, p. 183)25/05/09 Prof. Celso A A Kaestner 19
  • 20. Lógica para Computação (IF61B) Verificação de ProgramasEstratégias para produzir programas corretos (SILVA; FINGER; MELO, 2006, p. 183):1. Síntese: dada uma especificação ϕ, um programa P é construído de forma automática ou semi-automática, por meio de transformação da especificação ϕ em P; – Se tal problema estivesse resolvido por completo, não precisaríamos mais programar...25/05/09 Prof. Celso A A Kaestner 20
  • 21. Lógica para Computação (IF61B) Verificação de ProgramasEstratégias para produzir programascorretos (SILVA; FINGER; MELO, 2006, p. 184):2. Verificação: Dada uma especificação ϕ e umprograma P, mostrar que P é um modelo para ϕ(P satisfaz ϕ). – “Vários desenvolvimentos têm sido realizados nesta área, inclusive com aplicação na indústria”25/05/09 Prof. Celso A A Kaestner 21
  • 22. Lógica para Computação (IF61B) Verificação de ProgramasUso da verificação formal na prática (SILVA; FINGER; MELO, 2006, p. 185-186):1) Análise: Dado um programa P, encontrar uma especificação ϕ que defina o problema para o qual P é a solução. – Usada para sistemas prontos – Permite corrigir e/ou documentar sistemas25/05/09 Prof. Celso A A Kaestner 22
  • 23. Lógica para Computação (IF61B) Verificação de ProgramasUso da verificação formal na prática (SILVA;FINGER; MELO, 2006, p. 185-186):2) Correção: Dada uma especificação ϕ e umprograma P que NÃO satisfaz ϕ, construir P’ quesatisfaça ϕe seja próximo de P (considerandomedida de proximidade – código, por exemplo). – Usada quando se escreve programa que não satisfaz a especificação – Usada quando os requisitos mudam25/05/09 Prof. Celso A A Kaestner 23
  • 24. Lógica para Computação (IF61B) Verificação de ProgramasUso da verificação formal na prática (SILVA;FINGER; MELO, 2006, p. 185-186):3) Otimização: Dada uma especificação ϕ e umprograma P que satisfaz ϕ, obter P’ equivalente aP que seja ótimo sob determinada medida decomplexidade. – O novo programa P’ pode ser comparado tanto com P (equivalência) quanto com a especificação ϕ (satisfazibilidade)25/05/09 Prof. Celso A A Kaestner 24
  • 25. Lógica para Computação (IF61B) Verificação de Programas• “Na verificação formal, faz-se necessária a comparação entre a especificação e o programa correspondente.”• “Se a especificação for escrita em linguagem natural, não há como compará- la com o programa de forma matemática” (SILVA; FINGER; MELO, 2006, p. 185-186)25/05/09 Prof. Celso A A Kaestner 25
  • 26. Lógica para Computação (IF61B) Verificação de Programas• “Para que provemos que um programa satisfaz uma dada especificação, precisamos construir um sistema de provas, e não há como construir tal sistema baseado em linguagem natural pela falta de precisão e ambiguidades das sentenças da linguagem.” (SILVA; FINGER; MELO, 2006, p. 185-186)25/05/09 Prof. Celso A A Kaestner 26
  • 27. Lógica para Computação (IF61B) Verificação de Programas• “Portanto, para verificarmos programas, necessitamos de:1)Uma especificação escrita em uma linguagem com fundamento matemático para que seja precisa e não ambígua2)Um programa escrito em uma linguagem que tem o significado de seus comandos definido de forma precisa – semântica formal da linguagem de programação” (SILVA; FINGER; MELO, 2006, p. 185-186)25/05/09 Prof. Celso A A Kaestner 27
  • 28. Lógica para Computação (IF61B) Verificação de Programas• “Portanto, para verificarmos programas, necessitamos de:3) Uma forma de associar e comparar as asserções da especificação com os comandos do programa; as linguagens de especificação e programação devem, portanto, ser comparáveis;4) Um sistema de provas que usamos para mostrar que um programa satisfaz uma dada especifcação” (SILVA; FINGER; MELO, 2006, p. 185-186)25/05/09 Prof. Celso A A Kaestner 28
  • 29. Lógica para Computação (IF61B) Verificação de ProgramasExemplo de uma linguagem de programação (SILVA; FINGER; MELO, 2006, p. 186);• Um programa sequencial é basicamente um transformador de dados do estado inicial ao estado final;• Semântica operacional: indica o funcionamento de cada comando como transformador de estados;25/05/09 Prof. Celso A A Kaestner 29
  • 30. Lógica para Computação (IF61B) Verificação de Programas• Semântica operacional (notação): <C,σ> → σ’• A execução de C sobre o estado σ produz o estado σ’;• Exemplo: <x:=E, σ> → σ[m/x]25/05/09 Prof. Celso A A Kaestner 30
  • 31. Lógica para Computação (IF61B) Verificação de Programas• Tripla de Hoare: <ϕ> P <ψ> para todo estado σ que satisfaz ϕ, se a execução de P sobre ϕ termina produzindo um estado σ’ que satisfaz ψ;• Prova de programas: construir um sistema de provas para asserções do tipo ꜔ <ϕ> P <ψ> ?25/05/09 Prof. Celso A A Kaestner 31
  • 32. Lógica para Computação (IF61B) Verificação de Programas• Correção parcial: <ϕ> P <ψ> é satisfeita sob correção parcial se para todos os estados que satisfazem ϕ o estado resultante da execução de P satisfaz ψ, se P parar;• Correção total: <ϕ> P <ψ> é satisfeita sob correção total se para todos os estados que satisfazem ϕ o estado resultante da execução de P satisfaz ψ e é garantido que P pára.25/05/09 Prof. Celso A A Kaestner 32
  • 33. Lógica para Computação (IF61B) Verificação de ProgramasCorreção parcial de programas (SILVA; FINGER;MELO, 2006, p. 195);Sistema de inferência com regras de Hoarepara a linguagem de programaçãoapresentada, sob a forma de uma lógica esuas regras de inferência (SILVA; FINGER; MELO,2006, p. 196);Exemplos de demonstrações (SILVA; FINGER;MELO, 2006, p. 200-225).25/05/09 Prof. Celso A A Kaestner 33
  • 34. Lógica para Computação (IF61B) Referências• SILVA, Flávio S. C. da; FINGER, M.; MELO, Ana C. V. de. Lógica para Computação. São Paulo: Thomson Learning, 2006.

×