43
Especificação Formal de Software Alexandre Mota ([email protected])

Especificação Formal de Software Alexandre Mota ([email protected])

Embed Size (px)

Citation preview

Page 1: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)

Especificação Formal de Software

Alexandre Mota([email protected])

Page 2: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)

Desenvolvendo o SistemaDocumento

deRequisitos

...

Problema Solução

Page 3: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)

Um Modelo

ClienteConta

Poupança

Banco

0..* 0..*

1 1

1..* 1..*

Page 4: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)

Mais Precisão... Para caracterizar melhor um

sistema, sem entrar em detalhes de implementação, fazemos uso de: Pré-condições Pós-condições Invariantes Propriedades

Page 5: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)

Pré-condição Pré-condições são associadas a

operações (métodos) Sua utilidade é caracterizar uma

condição (restrição) sobre a aplicabilidade da operação

Se a condição for válida, a execução da operação é garantida não gerar exceções

Page 6: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)

Pós-condição Pós-condições são associadas a

operações também Sua utilidade é descrever em que

condição o sistema irá estar após a realização com sucesso (terminação) da operação

Page 7: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)

Invariante Para modelos orientados a objetos, o

invariante é associado a classes Daí, denominar-se de invariante da classe Sua utilidade é estabelecer os limites

válidos sobre as instâncias (objetos) criadas por uma classe

Assim, devido ao invariante, nem todos as instâncias são possíveis de serem criadas ou de efetuarem certas operações que mudem seus atributos

Page 8: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)

Propriedades Todo sistema é esperado satisfazer

a propriedades desejáveis Ausência de deadlock, composições de

operações bem-sucedidas, etc. Portanto, para toda classe podemos

estabelecer quais propriedades ela deve satisfazer

Tais propriedades podem ser usadas posteriormente na fase de testes

Page 9: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)

Anotando um Modelo Um diagrama de classes UML pode

ser anotado com formalismos O padrão de UML é anotar seus

diagramas com OCL (Object Contraint Language)

OCL é uma linguagem que explora textualmente elementos de lógica de predicados e teoria dos conjuntos é substituído por implies é substituído por forall

Page 10: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)

Anotando um Modelo

ClienteConta

Poupança

Banco

0..* 0..*

1 1

idade: int

{idade>17}

1..* 1..*

Page 11: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)

Anotando um Modelo Infelizmente, OCL não possui

suporte de ferramentas para explorar as restrições estabelecidas

A única ferramenta para OCL atualmente é um verificador de sintaxe e de tipos (parcial)

Portanto, usaremos lógica de predicados e teoria dos conjuntos (Z) pois existem mais ferramentas

Page 12: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)

A Notação Tal qual OCL, nossa linguagem

também é bastante textual Assim,

é obtido através de \implies é conseguido com \forall

Essa linguagem é nada mais que uma codificação em LaTeX (versão LaTeX para os elementos gráficos de Z)

Page 13: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)

Tipos Pré-Definidos Em nossa notação, assumiremos

três tipos básicos pré-definidos Naturais (\nat)

0, 1, 2, 3, ... Inteiros (\num)

..., -3, -2, -1, 0, 1, 2, 3, ... Booleanos (Bool)

true, false

Page 14: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)

Construtores de Tipos Dispomos de vários tipos para

caracterizarmos os problemas Given sets (conjuntos genéricos) Free-types (tipos enumerados) Conjunto potência (das partes) Produto cartesiano Relações Funções Seqüências Bags

Page 15: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)

Hierarquia de Tipos

Conjuntos ( P)IGiven Sets Free-Types

Relações ()

Funções ()

Seqüências (seq) Bags (bag)

Tuplas (...)

Page 16: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)

Given Sets Usam-se given sets quando não se tem

interesse sobre a estrutura dos elementos de tais conjuntos

Elementos de given sets são meramente identificadores

Somente operações sobre conjuntos independentes de tipos podem ser aplicadas a given sets (, , , etc.)

Para criá-los em um diagrama, basta digitar seus nomes nos espaços referentes a tipos

Page 17: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)

Exemplo de Given Set

Clienteid: ID Given set ID

Page 18: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)

Free-Types São os conhecidos tipos enumerados

de linguagens de programação (apesar de mais versáteis)

Sua versatilidade advém do fato de podermos definir tipos recursivos (construtores)

Normalmente usados para caracterizar as mensagens que o sistema irá exibir

Page 19: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)

Free-Types<<enumeration>>

Mensagensokfalha

<<enumeration>>Nat

zerosucc \ldata Nat \rdata

Enumeração Simples

Enumeração Recursiva

Page 20: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)

Produto Cartesiano Quando se deseja formar tuplas de

elementos de tipos base Usa-se T1 \cross T2 \cross ... \cross Tn Seus elementos são identificados

como (A, 2, casa) ou (3, 4) As funções first e second aplicam-se

a 2-uplas ou pares first (1, 2) = 1 e second (1, 2) = 2

Page 21: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)

Produtos Cartesianos first (x, y) second (x, y)

Page 22: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)

Conjunto Potência Para usar o conjunto potência, basta

prefixar o tipo base com \power Exemplo:

\power \{0, 1\} = \{ \{\}, \{0\}, \{1\}, \{0, 1\}\}

O tipo potência deve ser usado quando instâncias são conjuntos em si

Page 23: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)

Conjuntos Potência # A A = B, A B x A, x A , A B, A B A B, A B, A \ B AA, AA

Page 24: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)

Relações O tipo relação é obtido através do

operador \rel entre dois tipos Pessoa \rel Endereço

Produz subconjuntos de produtos cartesianos

Usado para capturar dependência entre dois tipos base

Page 25: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)

Relações dom R, ran R R ; S, S R A R, R A A R, R A R~

R A

(| )|

Page 26: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)

Funções Funções são tipos especiais de

relações Assim, funções provém de relações

com acréscimos de restrições Tipo mais comum de função é a parcial

Pessoa \pfun Endereço Esse relacionamento indica que nem toda

pessoa tem endereço

Page 27: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)

Funções F G

Page 28: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)

Seqüências Seqüências são especializações de

funções São obtidas com o prefixo \seq sobre

o tipo base \seq Pessoa

Contrariamente a conjuntos, seqüências são empregadas quando se deseja capturar a ordem entre os elementos

Page 29: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)

Seqüências S1 S2 head S, tail S front S, last S rev S

(

Page 30: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)

Bags Bags são usados para capturar a

repetição de elementos através de freqüência (ocorrência)

Usa-se o operador \bag prefixado sobre o tipo base

Normalmente, bags são usados como armazenadores de quantidades (“estoques”)

Page 31: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)

Bags count B x x in B B1 B2, B1 B2 items S

+ -

Page 32: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)

Detalhando o Modelo: Banco

0..n 0..n

1 0..n

BancocadastrarremovercreditardebitargetSaldotransferir

PoupançarenderJuros

Contanumero: NUMsaldo: \natgetNumgetSaldocreditardebitar

Clienteid: IDnome: NOMEgetIdgetNome

clientescontas

dono

Page 33: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)

Detalhando as Classes Para cada classe do diagrama

anterior: Descrever a funcionalidade de cada

método através de: Pré-condição Pós-condição

Caracterizar o invariante da classe

Page 34: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)

Classe ClienteCliente- id: ID- nome: NOMEgetIdsetIdgetNomesetNome

getId() pré: pós: result! = id

setId(id: ID) pré: pós: id’ = id?

getNome() pré: pós: result! = nome

setNome(nome: NOME) pré: pós: nome’ = nome?

Page 35: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)

Classe ContaConta- num: NUM- saldo: INgetNum()setNum()getSaldo()setSaldo()creditar()debitar()

getNum() pré: pós: result! = num

setNum(num: NUM) pré: pós: num’ = num?

getSaldo() pré: pós: result! = saldo

setSaldo(saldo: IN) pré: pós: saldo’ = saldo?

Page 36: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)

Classe ContaConta- num: NUM- saldo: IN...creditar()debitar()

creditar(val: IN) pré: pós: saldo’ = saldo + val?

debitar(val: IN) pré: saldo val? pós: saldo’ = saldo - val?

Page 37: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)

Invariante Classe Banco

cl: clientes cl null cc: contas cc null c1,c2: contas | c1 c2

c1.getNum() c2.getNum() cl1,cl2: clientes | cl1 cl2

cl1.getId() cl2.getId()

Page 38: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)

Classe Banco

Banco

cadastrar()remover()creditar()debitar()transferir()

ATENÇÃO: Esta classe possui dois atributos implícitos nomeados de contas: IP Conta e clientes: IP Cliente, respectivamente

cadastrar(conta: Conta) pré: conta? null

cc:contas cc.getNum() conta? pós: contas´ = contas {conta?}

remover(conta: Conta) pré: conta? null

cc:contas cc.getNum() = conta? pós: contas´ = contas \ {conta?}

Page 39: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)

Desenvolvendo o Sistema

...

Problema Solução

O que eu desejo GARANTIR na minha solução???

Page 40: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)

Operadores em Propriedades Para estabelecer propriedades

entre operações, podemos usar , , , , , , \ (.../...) pre, ;

Page 41: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)

Propriedade sobre Conta É verdade que, para uma mesma

conta, creditar um valor e, em seguida, debitar o mesmo valor resultará no mesmo estado inicial da conta?

Como garantir isso? v, saldo, saldo’: IN

creditar(v) ; debitar(v) saldo’=saldo

Page 42: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)

Propriedade sobre Conta Como garantir que creditar é uma

operação comutativa? Ou seja, creditar um valor v1 e depois v2 é o mesmo que creditar o valor v2 e depois o v1.

Page 43: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)

Bibliografia Booch, G. et al. The Unified Modeling Language

User Guide Sommerville, I. Software Engineering Tepfenhart, W. et al. Practical Object-Oriented

Development with UML and Java Woodcock, J. et al. Using Z (

http://www.usingz.com/) Spivey, J.M. The Z Notation (

http://spivey.oriel.ox.ac.uk/~mike/zrm/) Kruchten, P. The Rational Unified Process: An

Introduction