Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouGiovana Sergio Alterado mais de 9 anos atrás
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
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.