SlideShare uma empresa Scribd logo
1 de 34
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
Lógica para Computação (IF61B)


             Especificação de programas
  •      Uma tarefa típica em Computação:
                                                     problema computacional
problema 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
Lógica para Computação (IF61B)


            Especificação de programas
Visão operacional de um programa:

      dados de                programa                    dados de saída
      entrada

Programas como transformadores de estados:

                                  ...
σ1 = {v11,v12...v1m}   σ = {v21,v22...v2m}                     σ = {vn1,vn2...vnm}




25/05/09                       Prof. Celso A A Kaestner                              3
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 ≥ 20

25/05/09             Prof. Celso A A Kaestner              4
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 < 10


25/05/09             Prof. Celso A A Kaestner             5
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
Lógica para Computação (IF61B)


           Especificação de programas
Sistematizaçã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
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 > 0

25/05/09            Prof. Celso A A Kaestner       8
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
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
Lógica para Computação (IF61B)


           Verificação de Programas
void 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
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 programa


25/05/09             Prof. Celso A A Kaestner       12
Lógica para Computação (IF61B)


           Verificação de programas
void 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
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 programa
25/05/09           Prof. Celso A A Kaestner       14
Lógica para Computação (IF61B)


           Verificação de Programas
void 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
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
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
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
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
Lógica para Computação (IF61B)


           Verificação de Programas
Estraté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
Lógica para Computação (IF61B)


           Verificação de Programas
Estratégias para produzir programas
corretos (SILVA; FINGER; MELO, 2006, p. 184):
2. Verificação: Dada uma especificação ϕ e um
programa 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
Lógica para Computação (IF61B)


           Verificação de Programas
Uso 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 sistemas



25/05/09           Prof. Celso A A Kaestner       22
Lógica para Computação (IF61B)


           Verificação de Programas
Uso da verificação formal na prática (SILVA;
FINGER; MELO, 2006, p. 185-186):
2) Correção: Dada uma especificação ϕ e um
programa P que NÃO satisfaz ϕ, construir P’ que
satisfaça ϕe seja próximo de P (considerando
medida de proximidade – código, por exemplo).
   – Usada quando se escreve programa que não
     satisfaz a especificação
   – Usada quando os requisitos mudam

25/05/09           Prof. Celso A A Kaestner       23
Lógica para Computação (IF61B)


           Verificação de Programas
Uso da verificação formal na prática (SILVA;
FINGER; MELO, 2006, p. 185-186):
3) Otimização: Dada uma especificação ϕ e um
programa P que satisfaz ϕ, obter P’ equivalente a
P que seja ótimo sob determinada medida de
complexidade.
   – 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
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
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
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ígua
2)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
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
Lógica para Computação (IF61B)


           Verificação de Programas
Exemplo 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
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
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
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
Lógica para Computação (IF61B)


           Verificação de Programas
Correção parcial de programas (SILVA; FINGER;
MELO, 2006, p. 195);

Sistema de inferência com regras de Hoare
para a linguagem de programação
apresentada, sob a forma de uma lógica e
suas 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
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.

Mais conteúdo relacionado

Destaque

Verificação de Programas
Verificação de ProgramasVerificação de Programas
Verificação de ProgramasAdolfo Neto
 
Business intelligence
Business intelligenceBusiness intelligence
Business intelligenceAdolfo Neto
 
Curso de logica_e_programacao
Curso de logica_e_programacaoCurso de logica_e_programacao
Curso de logica_e_programacaoFelipe Pereira
 
7 Habilidades de uma Organização Ágil
7 Habilidades de uma Organização Ágil7 Habilidades de uma Organização Ágil
7 Habilidades de uma Organização ÁgilTeresa Maciel
 
Agile Methods, Week 4: Test-Driven Development
Agile Methods, Week 4: Test-Driven DevelopmentAgile Methods, Week 4: Test-Driven Development
Agile Methods, Week 4: Test-Driven DevelopmentAdolfo Neto
 
Introdução à Lógica
Introdução à LógicaIntrodução à Lógica
Introdução à LógicaAdolfo Neto
 
Lógica e Matemática Computacional - Aula 04
Lógica e Matemática Computacional - Aula 04Lógica e Matemática Computacional - Aula 04
Lógica e Matemática Computacional - Aula 04thomasdacosta
 
Apostila de Raxioxínio Lógico. Polícia Federal
Apostila de Raxioxínio Lógico. Polícia FederalApostila de Raxioxínio Lógico. Polícia Federal
Apostila de Raxioxínio Lógico. Polícia FederalAdeilson14
 
Inglês instrumental 100%
Inglês instrumental 100%Inglês instrumental 100%
Inglês instrumental 100%Alexandre Paiva
 
Apostila de harmonia_funcional_1
Apostila de harmonia_funcional_1Apostila de harmonia_funcional_1
Apostila de harmonia_funcional_1prof_robsonsalviano
 
Antonio carlos jobim- (partitura_e_tablatura)_(songbook)
Antonio carlos jobim- (partitura_e_tablatura)_(songbook)Antonio carlos jobim- (partitura_e_tablatura)_(songbook)
Antonio carlos jobim- (partitura_e_tablatura)_(songbook)Vitor Bento
 
Ingles Instrumental Apostila Para Estudo
Ingles Instrumental Apostila Para EstudoIngles Instrumental Apostila Para Estudo
Ingles Instrumental Apostila Para EstudoAna
 
Bossa Nova e Tropicália - Arte.
Bossa Nova e Tropicália - Arte.Bossa Nova e Tropicália - Arte.
Bossa Nova e Tropicália - Arte.Letícia Padovani
 
Aula 01 - Algoritmo e Programação
Aula 01 - Algoritmo e ProgramaçãoAula 01 - Algoritmo e Programação
Aula 01 - Algoritmo e ProgramaçãoAislan Rafael
 

Destaque (20)

Verificação de Programas
Verificação de ProgramasVerificação de Programas
Verificação de Programas
 
Business intelligence
Business intelligenceBusiness intelligence
Business intelligence
 
Curso de logica_e_programacao
Curso de logica_e_programacaoCurso de logica_e_programacao
Curso de logica_e_programacao
 
7 Habilidades de uma Organização Ágil
7 Habilidades de uma Organização Ágil7 Habilidades de uma Organização Ágil
7 Habilidades de uma Organização Ágil
 
Agile Methods, Week 4: Test-Driven Development
Agile Methods, Week 4: Test-Driven DevelopmentAgile Methods, Week 4: Test-Driven Development
Agile Methods, Week 4: Test-Driven Development
 
Métodos Ágeis
Métodos ÁgeisMétodos Ágeis
Métodos Ágeis
 
Introdução à Lógica
Introdução à LógicaIntrodução à Lógica
Introdução à Lógica
 
Aula 16
Aula 16Aula 16
Aula 16
 
Lógica e Matemática Computacional - Aula 04
Lógica e Matemática Computacional - Aula 04Lógica e Matemática Computacional - Aula 04
Lógica e Matemática Computacional - Aula 04
 
Aula07
Aula07Aula07
Aula07
 
Apostila de Raxioxínio Lógico. Polícia Federal
Apostila de Raxioxínio Lógico. Polícia FederalApostila de Raxioxínio Lógico. Polícia Federal
Apostila de Raxioxínio Lógico. Polícia Federal
 
Inglês instrumental 100%
Inglês instrumental 100%Inglês instrumental 100%
Inglês instrumental 100%
 
Apostila de harmonia_funcional_1
Apostila de harmonia_funcional_1Apostila de harmonia_funcional_1
Apostila de harmonia_funcional_1
 
Antonio carlos jobim- (partitura_e_tablatura)_(songbook)
Antonio carlos jobim- (partitura_e_tablatura)_(songbook)Antonio carlos jobim- (partitura_e_tablatura)_(songbook)
Antonio carlos jobim- (partitura_e_tablatura)_(songbook)
 
Songbook choro vol 2
Songbook choro vol 2Songbook choro vol 2
Songbook choro vol 2
 
Ingles Instrumental Apostila Para Estudo
Ingles Instrumental Apostila Para EstudoIngles Instrumental Apostila Para Estudo
Ingles Instrumental Apostila Para Estudo
 
Harmonia
HarmoniaHarmonia
Harmonia
 
Bossa Nova e Tropicália - Arte.
Bossa Nova e Tropicália - Arte.Bossa Nova e Tropicália - Arte.
Bossa Nova e Tropicália - Arte.
 
Aula 01 - Algoritmo e Programação
Aula 01 - Algoritmo e ProgramaçãoAula 01 - Algoritmo e Programação
Aula 01 - Algoritmo e Programação
 
Songbook choro vol 1
Songbook choro vol 1Songbook choro vol 1
Songbook choro vol 1
 

Semelhante a Lógica Computação: Especificação Verificação Programas

Aplicando eXtreming Programing ao cenário do Borland ALM - BorCon 2003
Aplicando  eXtreming Programing  ao cenário do  Borland ALM - BorCon 2003Aplicando  eXtreming Programing  ao cenário do  Borland ALM - BorCon 2003
Aplicando eXtreming Programing ao cenário do Borland ALM - BorCon 2003Edgar Silva
 
MC-102 — Aula 01 Introdução à Programação de Computadores.pdf
MC-102 — Aula 01 Introdução à Programação de Computadores.pdfMC-102 — Aula 01 Introdução à Programação de Computadores.pdf
MC-102 — Aula 01 Introdução à Programação de Computadores.pdfLuanaBatista74
 
apresentação Curso de Python ppt python for all
apresentação Curso de Python ppt python for allapresentação Curso de Python ppt python for all
apresentação Curso de Python ppt python for allRosibertoGonalves
 
Aula07_TesteSoftware_Parte1_semResposta.pdf
Aula07_TesteSoftware_Parte1_semResposta.pdfAula07_TesteSoftware_Parte1_semResposta.pdf
Aula07_TesteSoftware_Parte1_semResposta.pdfHoctairBernardino
 
Aula18_V&VTesteSoftware.pdf
Aula18_V&VTesteSoftware.pdfAula18_V&VTesteSoftware.pdf
Aula18_V&VTesteSoftware.pdfMichaelArrais1
 
Conceitos e técnicas de programação aula 2
Conceitos e técnicas de programação aula 2Conceitos e técnicas de programação aula 2
Conceitos e técnicas de programação aula 2Robson Ferreira
 
Introdução a Programação Orientada a testes
Introdução a Programação Orientada a testesIntrodução a Programação Orientada a testes
Introdução a Programação Orientada a testesAndré Luiz Forchesatto
 
Verificação e Validação
Verificação e ValidaçãoVerificação e Validação
Verificação e ValidaçãoMarcelo Yamaguti
 
Planejamento projeto masiero
Planejamento projeto masieroPlanejamento projeto masiero
Planejamento projeto masieroMaitsudá Matos
 
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...Claudinei Brito Junior
 
Introdução - Algoritmos
Introdução - AlgoritmosIntrodução - Algoritmos
Introdução - AlgoritmosPsLucas
 
Aula 01 - Introducao a C (3).pptx
Aula 01 - Introducao a C (3).pptxAula 01 - Introducao a C (3).pptx
Aula 01 - Introducao a C (3).pptxAbdulSacur2
 

Semelhante a Lógica Computação: Especificação Verificação Programas (20)

Aplicando eXtreming Programing ao cenário do Borland ALM - BorCon 2003
Aplicando  eXtreming Programing  ao cenário do  Borland ALM - BorCon 2003Aplicando  eXtreming Programing  ao cenário do  Borland ALM - BorCon 2003
Aplicando eXtreming Programing ao cenário do Borland ALM - BorCon 2003
 
MC-102 — Aula 01 Introdução à Programação de Computadores.pdf
MC-102 — Aula 01 Introdução à Programação de Computadores.pdfMC-102 — Aula 01 Introdução à Programação de Computadores.pdf
MC-102 — Aula 01 Introdução à Programação de Computadores.pdf
 
Curso de Python.ppt
Curso de Python.pptCurso de Python.ppt
Curso de Python.ppt
 
apresentação Curso de Python ppt python for all
apresentação Curso de Python ppt python for allapresentação Curso de Python ppt python for all
apresentação Curso de Python ppt python for all
 
Aula07_TesteSoftware_Parte1_semResposta.pdf
Aula07_TesteSoftware_Parte1_semResposta.pdfAula07_TesteSoftware_Parte1_semResposta.pdf
Aula07_TesteSoftware_Parte1_semResposta.pdf
 
Mini aula de teste de software
Mini aula de teste de softwareMini aula de teste de software
Mini aula de teste de software
 
Aula18_V&VTesteSoftware.pdf
Aula18_V&VTesteSoftware.pdfAula18_V&VTesteSoftware.pdf
Aula18_V&VTesteSoftware.pdf
 
Algop - aula 05
Algop - aula 05Algop - aula 05
Algop - aula 05
 
Algoritmo aula 01-f
Algoritmo   aula 01-fAlgoritmo   aula 01-f
Algoritmo aula 01-f
 
Conceitos e técnicas de programação aula 2
Conceitos e técnicas de programação aula 2Conceitos e técnicas de programação aula 2
Conceitos e técnicas de programação aula 2
 
Introdução a Programação Orientada a testes
Introdução a Programação Orientada a testesIntrodução a Programação Orientada a testes
Introdução a Programação Orientada a testes
 
Verificação e Validação
Verificação e ValidaçãoVerificação e Validação
Verificação e Validação
 
Planejamento projeto masiero
Planejamento projeto masieroPlanejamento projeto masiero
Planejamento projeto masiero
 
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
 
Webshow - Automação Laboratorial I
Webshow - Automação Laboratorial IWebshow - Automação Laboratorial I
Webshow - Automação Laboratorial I
 
Introdução - Algoritmos
Introdução - AlgoritmosIntrodução - Algoritmos
Introdução - Algoritmos
 
Tp03 (v1)
Tp03 (v1)Tp03 (v1)
Tp03 (v1)
 
Aula 01 - Introducao a C (3).pptx
Aula 01 - Introducao a C (3).pptxAula 01 - Introducao a C (3).pptx
Aula 01 - Introducao a C (3).pptx
 
Excel VBA: Aula 2
Excel VBA: Aula 2Excel VBA: Aula 2
Excel VBA: Aula 2
 
01-Paradigmas.pdf
01-Paradigmas.pdf01-Paradigmas.pdf
01-Paradigmas.pdf
 

Mais de Adolfo Neto

How to clear out your unwanted books
How to clear out your unwanted booksHow to clear out your unwanted books
How to clear out your unwanted booksAdolfo Neto
 
The Elixir programming language community
The Elixir programming language communityThe Elixir programming language community
The Elixir programming language communityAdolfo Neto
 
Encontros de Usuários e Entusiastas de Métodos Ágeis no Brasil
Encontros de Usuários e Entusiastas de Métodos Ágeis no BrasilEncontros de Usuários e Entusiastas de Métodos Ágeis no Brasil
Encontros de Usuários e Entusiastas de Métodos Ágeis no BrasilAdolfo Neto
 
Programando em Elixir
Programando em ElixirProgramando em Elixir
Programando em ElixirAdolfo Neto
 
Coding Dojo - Unreal Engine - Sobre Unreal
Coding Dojo - Unreal Engine - Sobre UnrealCoding Dojo - Unreal Engine - Sobre Unreal
Coding Dojo - Unreal Engine - Sobre UnrealAdolfo Neto
 
Coding Dojo - Unreal Engine
Coding Dojo - Unreal EngineCoding Dojo - Unreal Engine
Coding Dojo - Unreal EngineAdolfo Neto
 
Preocupações e Limitações no Desenvolvimento Ágil de Software: Um Levantame...
Preocupações e Limitações no Desenvolvimento  Ágil de Software:  Um Levantame...Preocupações e Limitações no Desenvolvimento  Ágil de Software:  Um Levantame...
Preocupações e Limitações no Desenvolvimento Ágil de Software: Um Levantame...Adolfo Neto
 
Programando em Elixir
Programando em ElixirProgramando em Elixir
Programando em ElixirAdolfo Neto
 
How do software developers learn new tricks
How do software developers learn new tricksHow do software developers learn new tricks
How do software developers learn new tricksAdolfo Neto
 
Applications of Probabilistic Logic to Materials Discovery: Solving problems ...
Applications of Probabilistic Logic to Materials Discovery: Solving problems ...Applications of Probabilistic Logic to Materials Discovery: Solving problems ...
Applications of Probabilistic Logic to Materials Discovery: Solving problems ...Adolfo Neto
 
Coding Dojos para Aprendizagem de TDD - Há Evidências Científicas? - Ignite T...
Coding Dojos para Aprendizagem de TDD - Há Evidências Científicas? - Ignite T...Coding Dojos para Aprendizagem de TDD - Há Evidências Científicas? - Ignite T...
Coding Dojos para Aprendizagem de TDD - Há Evidências Científicas? - Ignite T...Adolfo Neto
 
Cholesterol is not an important risk factor for heart disease and current die...
Cholesterol is not an important risk factor for heart disease and current die...Cholesterol is not an important risk factor for heart disease and current die...
Cholesterol is not an important risk factor for heart disease and current die...Adolfo Neto
 
Quem foi Alan Turing?
Quem foi Alan Turing?Quem foi Alan Turing?
Quem foi Alan Turing?Adolfo Neto
 
O método maffetone
O método maffetoneO método maffetone
O método maffetoneAdolfo Neto
 
Pesquisa em Métodos Ágeis para o Desenvolvimento de Software
Pesquisa em Métodos Ágeis para o Desenvolvimento de SoftwarePesquisa em Métodos Ágeis para o Desenvolvimento de Software
Pesquisa em Métodos Ágeis para o Desenvolvimento de SoftwareAdolfo Neto
 
Desenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com JunitDesenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com JunitAdolfo Neto
 
Apresentacao PPGCA
Apresentacao PPGCAApresentacao PPGCA
Apresentacao PPGCAAdolfo Neto
 
Introducao a Logica
Introducao a LogicaIntroducao a Logica
Introducao a LogicaAdolfo Neto
 
Logica Proposicional
Logica ProposicionalLogica Proposicional
Logica ProposicionalAdolfo Neto
 

Mais de Adolfo Neto (20)

How to clear out your unwanted books
How to clear out your unwanted booksHow to clear out your unwanted books
How to clear out your unwanted books
 
The Elixir programming language community
The Elixir programming language communityThe Elixir programming language community
The Elixir programming language community
 
Encontros de Usuários e Entusiastas de Métodos Ágeis no Brasil
Encontros de Usuários e Entusiastas de Métodos Ágeis no BrasilEncontros de Usuários e Entusiastas de Métodos Ágeis no Brasil
Encontros de Usuários e Entusiastas de Métodos Ágeis no Brasil
 
Programando em Elixir
Programando em ElixirProgramando em Elixir
Programando em Elixir
 
Coding Dojo - Unreal Engine - Sobre Unreal
Coding Dojo - Unreal Engine - Sobre UnrealCoding Dojo - Unreal Engine - Sobre Unreal
Coding Dojo - Unreal Engine - Sobre Unreal
 
Coding Dojo - Unreal Engine
Coding Dojo - Unreal EngineCoding Dojo - Unreal Engine
Coding Dojo - Unreal Engine
 
Preocupações e Limitações no Desenvolvimento Ágil de Software: Um Levantame...
Preocupações e Limitações no Desenvolvimento  Ágil de Software:  Um Levantame...Preocupações e Limitações no Desenvolvimento  Ágil de Software:  Um Levantame...
Preocupações e Limitações no Desenvolvimento Ágil de Software: Um Levantame...
 
Programando em Elixir
Programando em ElixirProgramando em Elixir
Programando em Elixir
 
Kanban
KanbanKanban
Kanban
 
How do software developers learn new tricks
How do software developers learn new tricksHow do software developers learn new tricks
How do software developers learn new tricks
 
Applications of Probabilistic Logic to Materials Discovery: Solving problems ...
Applications of Probabilistic Logic to Materials Discovery: Solving problems ...Applications of Probabilistic Logic to Materials Discovery: Solving problems ...
Applications of Probabilistic Logic to Materials Discovery: Solving problems ...
 
Coding Dojos para Aprendizagem de TDD - Há Evidências Científicas? - Ignite T...
Coding Dojos para Aprendizagem de TDD - Há Evidências Científicas? - Ignite T...Coding Dojos para Aprendizagem de TDD - Há Evidências Científicas? - Ignite T...
Coding Dojos para Aprendizagem de TDD - Há Evidências Científicas? - Ignite T...
 
Cholesterol is not an important risk factor for heart disease and current die...
Cholesterol is not an important risk factor for heart disease and current die...Cholesterol is not an important risk factor for heart disease and current die...
Cholesterol is not an important risk factor for heart disease and current die...
 
Quem foi Alan Turing?
Quem foi Alan Turing?Quem foi Alan Turing?
Quem foi Alan Turing?
 
O método maffetone
O método maffetoneO método maffetone
O método maffetone
 
Pesquisa em Métodos Ágeis para o Desenvolvimento de Software
Pesquisa em Métodos Ágeis para o Desenvolvimento de SoftwarePesquisa em Métodos Ágeis para o Desenvolvimento de Software
Pesquisa em Métodos Ágeis para o Desenvolvimento de Software
 
Desenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com JunitDesenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com Junit
 
Apresentacao PPGCA
Apresentacao PPGCAApresentacao PPGCA
Apresentacao PPGCA
 
Introducao a Logica
Introducao a LogicaIntroducao a Logica
Introducao a Logica
 
Logica Proposicional
Logica ProposicionalLogica Proposicional
Logica Proposicional
 

Lógica Computação: Especificação Verificação Programas

  • 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 computacional problema 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 programas Visão operacional de um programa: dados de programa dados de saída entrada Programas 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 ≥ 20 25/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 < 10 25/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 programas Sistematizaçã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 > 0 25/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 Programas void 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 programa 25/05/09 Prof. Celso A A Kaestner 12
  • 13. Lógica para Computação (IF61B) Verificação de programas void 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 programa 25/05/09 Prof. Celso A A Kaestner 14
  • 15. Lógica para Computação (IF61B) Verificação de Programas void 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 Programas Estraté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 Programas Estratégias para produzir programas corretos (SILVA; FINGER; MELO, 2006, p. 184): 2. Verificação: Dada uma especificação ϕ e um programa 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 Programas Uso 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 sistemas 25/05/09 Prof. Celso A A Kaestner 22
  • 23. Lógica para Computação (IF61B) Verificação de Programas Uso da verificação formal na prática (SILVA; FINGER; MELO, 2006, p. 185-186): 2) Correção: Dada uma especificação ϕ e um programa P que NÃO satisfaz ϕ, construir P’ que satisfaça ϕe seja próximo de P (considerando medida de proximidade – código, por exemplo). – Usada quando se escreve programa que não satisfaz a especificação – Usada quando os requisitos mudam 25/05/09 Prof. Celso A A Kaestner 23
  • 24. Lógica para Computação (IF61B) Verificação de Programas Uso da verificação formal na prática (SILVA; FINGER; MELO, 2006, p. 185-186): 3) Otimização: Dada uma especificação ϕ e um programa P que satisfaz ϕ, obter P’ equivalente a P que seja ótimo sob determinada medida de complexidade. – 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ígua 2)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 Programas Exemplo 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 Programas Correção parcial de programas (SILVA; FINGER; MELO, 2006, p. 195); Sistema de inferência com regras de Hoare para a linguagem de programação apresentada, sob a forma de uma lógica e suas 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.