A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Lógica para Computação Prof. Celso Antônio Alves Kaestner, Dr. Eng. celsokaestner (at) utfpr (dot) edu (dot) br.

Apresentações semelhantes


Apresentação em tema: "Lógica para Computação Prof. Celso Antônio Alves Kaestner, Dr. Eng. celsokaestner (at) utfpr (dot) edu (dot) br."— Transcrição da apresentação:

1 Lógica para Computação Prof. Celso Antônio Alves Kaestner, Dr. Eng. celsokaestner (at) utfpr (dot) edu (dot) br

2 Lógica para Computação (IF61B) Especificação de programas  Engenharia de Requisitos: como entender e modelar um problema real para obter uma solução computacional;  Engenharia de Software: é uma área da Computação voltada à especificação, desenvolvimento e manutenção de sistemas de software, com aplicação de tecnologias e práticas de gerência de projetos e outras disciplinas, visando organização, produtividade e qualidade. 12/4/2015Prof. Celso A A Kaestner 2

3 Lógica para Computação (IF61B) Especificação de programas 12/4/2015Prof. Celso A A Kaestner 3  Uma tarefa típica em Computação: problema real computacional Modelagem

4 Lógica para Computação (IF61B) Especificação de programas  Especificações em linguagem natural exigem que se assuma o significado de diversos termos, e por isto são “imprecisas / vagos / inconsistentes” permitindo diversas interpretações;  Este é um problema amplamente estudado em Engenharia de Software, que busca de métodos e formalismos tenta eliminar / reduzir este problema. 12/4/2015Prof. Celso A A Kaestner 4

5 Lógica para Computação (IF61B) Especificação de programas Visão operacional de um programa: dados de dados de entrada saída Programas como transformadores de estados:... 12/4/2015Prof. Celso A A Kaestner 5  1 = {v 1 1,v 1 2...v 1 m }  = {v 2 1,v 2 2...v 2 m }  = {v n 1,v n 2...v n m } programa

6 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 12/4/2015Prof. Celso A A Kaestner 6

7 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 2 (superespecificação):  sobre o estado inicial: x  10  y  10  (x + y)  0  sobre o estado final: z = x + y  z  20 12/4/2015Prof. Celso A A Kaestner 7

8 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 3 (especificação pouco clara):  sobre o estado inicial: x  10  (x + y)  (10 + x)  sobre o estado final: z = x + y 12/4/2015Prof. Celso A A Kaestner 8

9 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 4 (especificação incompleta):  sobre o estado inicial: x  10  sobre o estado final: z = x + y 12/4/2015Prof. Celso A A Kaestner 9

10 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” 5 (não é especificação...):  sobre o estado inicial: x  10  y  10  sobre o estado final: z = x + y  z < 10 12/4/2015Prof. Celso A A Kaestner 10

11 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: a linguagem matemática é precisa e identifica um significado único para cada propriedade; 2. Verificação de consistência: a linguagem matemática nos possibilita verificar inconsistências nas especificações quando há propriedades contraditórias sobre um mesmo objeto; 12/4/2015Prof. Celso A A Kaestner 11

12 Lógica para Computação (IF61B) Especificação de programas 3. Simulação: especificações em algumas linguagens matemáticas podem ser parcialmente executáveis, auxiliando a verificação; 4. Verificação de programas: após a construção de um programa é possível – de forma automática ou semiautomática – verificar se esta é uma solução (ou satisfaz) a especificação do problema. 12/4/2015Prof. Celso A A Kaestner 12

13 Lógica para Computação (IF61B) Especificação de programas  Pode-se usar o Lógica Matemática como linguagem de especificação;  Ver na referência (da Silva, Finger, de Melo) às páginas 165 a 169 o uso da Lógica Matemática como linguagem de especificação. 12/4/2015Prof. Celso A A Kaestner 13

14 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. 12/4/2015Prof. Celso A A Kaestner 14

15 Lógica para Computação (IF61B) Especificação de programas  Exemplo: fatorial. 1 se n=0 n! =1sen=1 n*(n-1)! se n>1  PRE: n  0  POS: fat = n!  fat > 0  INV: fat > 0 12/4/2015Prof. Celso A A Kaestner 15

16 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. 12/4/2015Prof. Celso A A Kaestner 16

17 Lógica para Computação (IF61B) Verificação de programas  Exemplo: (Merge) dadas duas seqüências ordenadas de inteiros produzir nova seqüência ordenada que entrelace os números das duas seqüências:  Entradas: V1 = {1,3,6,9} e V2 = {2,3,3,7,10}  Saída: V3 = {1,2,3,3,6,7,9,10} 12/4/2015Prof. Celso A A Kaestner 17

18 Lógica para Computação (IF61B) Verificação de programas void merge(int V1[],V2[],V3[],t1,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++;} } 12/4/2015Prof. Celso A A Kaestner 18

19 Lógica para Computação (IF61B) Verificação de programas  Erro: se uma das seqüê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 12/4/2015Prof. Celso A A Kaestner 19

20 Lógica para Computação (IF61B) Verificação de programas void merge(int V1[],V2[],V3[],t1,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++;} } 12/4/2015Prof. Celso A A Kaestner 20

21 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 12/4/2015Prof. Celso A A Kaestner 21

22 Lógica para Computação (IF61B) Verificação de programas void merge(int V1[],V2[],V3[],t1,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) 12/4/2015Prof. Celso A A Kaestner 22

23 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. 12/4/2015Prof. Celso A A Kaestner 23

24 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. 12/4/2015Prof. Celso A A Kaestner 24

25 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; 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. 12/4/2015Prof. Celso A A Kaestner 25

26 Lógica para Computação (IF61B) Verificação de programas  Estratégias para produzir programas corretos (pg. 183): 1. Síntese: dada um 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; 2. Verificação: Dada uma especificação  e um programa P, mostrar que P é um modelo para  (P satisfaz  ). 12/4/2015Prof. Celso A A Kaestner 26

27 Lógica para Computação (IF61B) Verificação de programas Uso da verificação formal na prática: 1) Análise: Dado um programa P, encontrar uma especificação  que defina o problema para o qual P é a solução; 2) Correção: Dados uma especificação  e um programa P que não satisfaz , construir P’ que satisfaça  e que seja “próximo” a P; 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. 12/4/2015Prof. Celso A A Kaestner 27

28 Lógica para Computação (IF61B) Verificação de programas  Exemplo de uma linguagem de programação (pg. 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; 12/4/2015Prof. Celso A A Kaestner 28

29 Lógica para Computação (IF61B) Verificação de programas  Semântica operacional (notação): →  ’  A execução de C sobre o estado  produz o estado  ’;  Exemplo: →  [m/x] 12/4/2015Prof. Celso A A Kaestner 29

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 ? 12/4/2015Prof. Celso A A Kaestner 30

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. 12/4/2015Prof. Celso A A Kaestner 31

32 Lógica para Computação (IF61B) Verificação de programas  Correção parcial de programas (pg. 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 (pg. 196);  Exemplos de provas (pg. 200 em diante). 12/4/2015Prof. Celso A A Kaestner 32


Carregar ppt "Lógica para Computação Prof. Celso Antônio Alves Kaestner, Dr. Eng. celsokaestner (at) utfpr (dot) edu (dot) br."

Apresentações semelhantes


Anúncios Google