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

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

Lógica para Computação: Especificação e Verificação de Programas

Apresentações semelhantes


Apresentação em tema: "Lógica para Computação: Especificação e Verificação de Programas"— Transcrição da apresentação:

1 Lógica para Computação: Especificação e Verificação de Programas
Prof. Celso Antônio Alves Kaestner, Dr. Eng. Alterado e complementado por Prof. Adolfo Neto, D.Sc. 1

2 Especificação de programas
Uma tarefa típica em Computação: 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. problema computacional Modelagem problema real 25/05/09 Prof. Celso A A Kaestner 2

3 Especificação de programas
Visão operacional de um programa: Programas como transformadores de estados: ... dados de entrada programa dados de saída 1 = {v11,v12...v1m}  = {v21,v22...v2m}  = {vn1,vn2...vnm} 25/05/09 Prof. Celso A A Kaestner 3

4 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 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 “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 Especificação de programas
Vantagens de se ter uma especificação definida por formalismo matemático: Precisão; Verificação de consistência; Simulação; 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 Especificação de programas
Sistematização das propriedades de programas: Pré-condições: válidas sobre os dados de entrada; Pós-condições: válidas sobre os dados de saída; Invariantes: válidas sempre, durante toda a execução do programa. 25/05/09 Prof. Celso A A Kaestner 7

8 Especificação de programas
Exemplo: fatorial. 1 se n=0 n! = 1 se n=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 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 Verificação de Programas
Exemplo (SILVA; FINGER; MELO, 2006, p ): (Merge) dadas duas seqüê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 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 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 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 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 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 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; } O programa agora está OK. 25/05/09 Prof. Celso A A Kaestner 16

17 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 Verificação de Programas
Procedimentos utilizados para verificação: Inspeção: segue-se a lógica do programa em busca de situações incorretas ou não previstas. Forma subjetiva de julgamento! 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 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 Verificação de Programas
Estratégias para produzir programas corretos (SILVA; FINGER; MELO, 2006, p. 183): 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; Se tal problema estivesse resolvido por completo, não precisaríamos mais programar... 25/05/09 Prof. Celso A A Kaestner 20

21 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 Verificação de Programas
Uso da verificação formal na prática (SILVA; FINGER; MELO, 2006, p ): 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 Verificação de Programas
Uso da verificação formal na prática (SILVA; FINGER; MELO, 2006, p ): 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 Verificação de Programas
Uso da verificação formal na prática (SILVA; FINGER; MELO, 2006, 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. 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 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 ) 25/05/09 Prof. Celso A A Kaestner 25

26 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 da sentenças na linguagem.” (SILVA; FINGER; MELO, 2006, p ) 25/05/09 Prof. Celso A A Kaestner 26

27 Verificação de Programas
“Portanto, para verificarmos programas, necessitamos de: Uma especificação escrita em uma linguagem com fundamento matemático para que seja precisa e não ambígua 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 ) 25/05/09 Prof. Celso A A Kaestner 27

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

29 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 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 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 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 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 provas (SILVA; FINGER; MELO, 2006, p ). 25/05/09 Prof. Celso A A Kaestner 33

34 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.


Carregar ppt "Lógica para Computação: Especificação e Verificação de Programas"

Apresentações semelhantes


Anúncios Google