1 Planejamento/Gerenciamento Alexandre Mota ([email protected])
Especificação Formal de Software Alexandre Mota ([email protected])
-
Upload
fernanda-bastos-coimbra -
Category
Documents
-
view
215 -
download
2
Transcript of Especificação Formal de Software Alexandre Mota ([email protected])
![Page 2: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)](https://reader035.fdocument.pub/reader035/viewer/2022081520/570638511a28abb8238f8ff9/html5/thumbnails/2.jpg)
Desenvolvendo o SistemaDocumento
deRequisitos
...
Problema Solução
![Page 3: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)](https://reader035.fdocument.pub/reader035/viewer/2022081520/570638511a28abb8238f8ff9/html5/thumbnails/3.jpg)
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)](https://reader035.fdocument.pub/reader035/viewer/2022081520/570638511a28abb8238f8ff9/html5/thumbnails/4.jpg)
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)](https://reader035.fdocument.pub/reader035/viewer/2022081520/570638511a28abb8238f8ff9/html5/thumbnails/5.jpg)
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)](https://reader035.fdocument.pub/reader035/viewer/2022081520/570638511a28abb8238f8ff9/html5/thumbnails/6.jpg)
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)](https://reader035.fdocument.pub/reader035/viewer/2022081520/570638511a28abb8238f8ff9/html5/thumbnails/7.jpg)
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)](https://reader035.fdocument.pub/reader035/viewer/2022081520/570638511a28abb8238f8ff9/html5/thumbnails/8.jpg)
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)](https://reader035.fdocument.pub/reader035/viewer/2022081520/570638511a28abb8238f8ff9/html5/thumbnails/9.jpg)
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)](https://reader035.fdocument.pub/reader035/viewer/2022081520/570638511a28abb8238f8ff9/html5/thumbnails/10.jpg)
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)](https://reader035.fdocument.pub/reader035/viewer/2022081520/570638511a28abb8238f8ff9/html5/thumbnails/11.jpg)
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)](https://reader035.fdocument.pub/reader035/viewer/2022081520/570638511a28abb8238f8ff9/html5/thumbnails/12.jpg)
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)](https://reader035.fdocument.pub/reader035/viewer/2022081520/570638511a28abb8238f8ff9/html5/thumbnails/13.jpg)
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)](https://reader035.fdocument.pub/reader035/viewer/2022081520/570638511a28abb8238f8ff9/html5/thumbnails/14.jpg)
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)](https://reader035.fdocument.pub/reader035/viewer/2022081520/570638511a28abb8238f8ff9/html5/thumbnails/15.jpg)
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)](https://reader035.fdocument.pub/reader035/viewer/2022081520/570638511a28abb8238f8ff9/html5/thumbnails/16.jpg)
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)](https://reader035.fdocument.pub/reader035/viewer/2022081520/570638511a28abb8238f8ff9/html5/thumbnails/17.jpg)
Exemplo de Given Set
Clienteid: ID Given set ID
![Page 18: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)](https://reader035.fdocument.pub/reader035/viewer/2022081520/570638511a28abb8238f8ff9/html5/thumbnails/18.jpg)
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)](https://reader035.fdocument.pub/reader035/viewer/2022081520/570638511a28abb8238f8ff9/html5/thumbnails/19.jpg)
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)](https://reader035.fdocument.pub/reader035/viewer/2022081520/570638511a28abb8238f8ff9/html5/thumbnails/20.jpg)
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)](https://reader035.fdocument.pub/reader035/viewer/2022081520/570638511a28abb8238f8ff9/html5/thumbnails/21.jpg)
Produtos Cartesianos first (x, y) second (x, y)
![Page 22: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)](https://reader035.fdocument.pub/reader035/viewer/2022081520/570638511a28abb8238f8ff9/html5/thumbnails/22.jpg)
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)](https://reader035.fdocument.pub/reader035/viewer/2022081520/570638511a28abb8238f8ff9/html5/thumbnails/23.jpg)
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)](https://reader035.fdocument.pub/reader035/viewer/2022081520/570638511a28abb8238f8ff9/html5/thumbnails/24.jpg)
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)](https://reader035.fdocument.pub/reader035/viewer/2022081520/570638511a28abb8238f8ff9/html5/thumbnails/25.jpg)
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)](https://reader035.fdocument.pub/reader035/viewer/2022081520/570638511a28abb8238f8ff9/html5/thumbnails/26.jpg)
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)](https://reader035.fdocument.pub/reader035/viewer/2022081520/570638511a28abb8238f8ff9/html5/thumbnails/27.jpg)
Funções F G
![Page 28: Especificação Formal de Software Alexandre Mota (acm@cin.ufpe.br)](https://reader035.fdocument.pub/reader035/viewer/2022081520/570638511a28abb8238f8ff9/html5/thumbnails/28.jpg)
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)](https://reader035.fdocument.pub/reader035/viewer/2022081520/570638511a28abb8238f8ff9/html5/thumbnails/29.jpg)
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)](https://reader035.fdocument.pub/reader035/viewer/2022081520/570638511a28abb8238f8ff9/html5/thumbnails/30.jpg)
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)](https://reader035.fdocument.pub/reader035/viewer/2022081520/570638511a28abb8238f8ff9/html5/thumbnails/31.jpg)
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)](https://reader035.fdocument.pub/reader035/viewer/2022081520/570638511a28abb8238f8ff9/html5/thumbnails/32.jpg)
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)](https://reader035.fdocument.pub/reader035/viewer/2022081520/570638511a28abb8238f8ff9/html5/thumbnails/33.jpg)
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)](https://reader035.fdocument.pub/reader035/viewer/2022081520/570638511a28abb8238f8ff9/html5/thumbnails/34.jpg)
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)](https://reader035.fdocument.pub/reader035/viewer/2022081520/570638511a28abb8238f8ff9/html5/thumbnails/35.jpg)
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)](https://reader035.fdocument.pub/reader035/viewer/2022081520/570638511a28abb8238f8ff9/html5/thumbnails/36.jpg)
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)](https://reader035.fdocument.pub/reader035/viewer/2022081520/570638511a28abb8238f8ff9/html5/thumbnails/37.jpg)
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)](https://reader035.fdocument.pub/reader035/viewer/2022081520/570638511a28abb8238f8ff9/html5/thumbnails/38.jpg)
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)](https://reader035.fdocument.pub/reader035/viewer/2022081520/570638511a28abb8238f8ff9/html5/thumbnails/39.jpg)
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)](https://reader035.fdocument.pub/reader035/viewer/2022081520/570638511a28abb8238f8ff9/html5/thumbnails/40.jpg)
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)](https://reader035.fdocument.pub/reader035/viewer/2022081520/570638511a28abb8238f8ff9/html5/thumbnails/41.jpg)
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)](https://reader035.fdocument.pub/reader035/viewer/2022081520/570638511a28abb8238f8ff9/html5/thumbnails/42.jpg)
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)](https://reader035.fdocument.pub/reader035/viewer/2022081520/570638511a28abb8238f8ff9/html5/thumbnails/43.jpg)
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