propriedades rose, roze, z-eves
introdução propriedades em diagramas UML Roze, Z-Eves
Propriedades Características desejáveis do sistemas Úteis para geração de casos de teste Não se sabe a priori se a propriedade é satisfeita
classe Conta Conta saldo : \nat = 0 Creditar() Debitar() CreditarV1V2()
exemplo Criar um diagrama de classes no Rose para a classe Conta, inserindo as operações especificadas no diagrama anterior.
pré, pós-condições Creditar Debitar pós saldo' = saldo + val? pré saldo val? pós saldo' = saldo – val?
dúvida? E se o invariante da classe fosse saldo 0 O que aconteceria com Debitar? E com o saldo?
exemplo Inserir as pré e pós condições para as operações de Conta.
propriedades Inverso Comutativo Creditar ; Debitar saldo' = saldo Creditar[v1/val?] ; Creditar[v2/val?] Creditar[v2/val?] ; Creditar[v1/val?]
exemplo Inserir as propriedades Inverso e Comutativo para a classe Conta. Abrir especificação da classe, clicar na aba “Roze” e escrever a propriedade no campo “properties” Lembre-se de especificar que as operações creditarDebitar e creditarV1V2 são operações auxiliares aba “Roze” -> “isDefinition”’ = true
usando o Roze Mapeamento de UML anotado para especificações Z Selecionar uma classe, selecionar no menu: tools -> roze -> Z property checker Salvar arquivo
usando Z-Eves Verificador de sintaxe, teoremas, modelos. Abrir arquivo criado anteriormente: File -> import Checar especificação Command -> check all paragraphs
Provando propriedades com o Z-Eves Provar propriedade Clicar com botão direito na propriedade e selecionar “show proof” Reduction -> prove by reduce Nem sempre se consegue provar as propriedades na primeira tentativa, por isso há algumas opções para se reescrever a propriedade e tentar novamente
exercícios Crie uma classe coleção de contas que possua os métodos: removerConta(Conta c) adicionarConta(Conta c) Escreva as pré e pós condições das operações. Escreva e teste uma propriedade que diga que: duas inserções do mesmo elemento seguido de sua remoção implica que o elemento não pertence à coleção. Escreva uma propriedade desejada para o seu sistema.