Especificação Formal de Software

Slides:



Advertisements
Apresentações semelhantes
Análise e Projeto Orientado a Objetos
Advertisements

Análise e Projeto Orientado a Objetos
Alexandre Mota Análise do Sistema Alexandre Mota
Paulo Marques Hernâni Pedroso
UML no CICLO de DESENVOLVIMENTO
Análise e Projeto de Sistemas
Projeto de Sistemas de Software
Projeto de Sistemas de Software
Teste em Esquemas de Dados Maria Cláudia Figueiredo Pereira Emer Universidade Federal do Paraná Departamento de Informática Seminário.
Análise Estruturada O mais amplamente usado dos métodos de modelagem de requisitos Modelos que retratam fluxo e o conteúdo da informação (dados e controle)
Análise e Projeto de Sistemas
Engenharia de Requisitos Requisito – sistema Caso de uso - usuário
Aula 9 Fases do desenvolvimento de software UML Diagramas de classes
Contratos Modelagem Funcional.
Classes e objetos Modelagem
Prof. Dr. Daniel D. Abdala Baseada nas transparências de professor Leandro Becker.
Aula 1 Minicurso: Astah Ministrantes: André Martins; Camila Brondani;
Introdução UML, Diagrama de Classes e Comunicação/Colabaração
Visão Geral do RUP.
Projeto de Sistemas de Software
DIAGRAMA DE CASO DE USO Prof. Fabíola Gonçalves C. Ribeiro.
Análise e Projeto de Sistemas
UML (Unified Modeling Language) Linguagem Unificada de Modelagem
LABORATÓRIOS DE INFORMÁTICA IV ENGENHARIA DE SOFTWARE: DA TEORIA À PRÁTICA GRUPO 13.
Bags n Servem para armazenar a repetição de elementos n Tal qual conjuntos, a ordem dos elementos não importa n Por isso, também recebem a designação de.
Linguagem Funcional 2 Linguagem Funcional 2 - LF2 Estende LF1 com funções de alta ordem Uma função passa a ser um valor O contexto inclui um único componente:
Referências: Booch, G. et al. The Unified Modeling Language User Guide
Anotando Diagramas de Classe com o Rose Engenharia de Software e Sistemas.
Introdução a Desenvolvimento de Sistemas
Diagramas de classes rational rose. introdução interação classes atributos, operações associações associação, agregação, composição, generalização, dependência.
CSP-Z Disciplina: Especificação de Sistemas Distribuídos Mestrado em Ciências da Computação Aleciano Jr. Leonilson Barbosa
O Processo Unificado (UP)
Banco de Dados Aplicado ao Desenvolvimento de Software
Programação Orientada à Objetos
Unified Modeling Language Professor Mário Dantas A NÁLISE O RIENTADA A O BJETOS Nov/2010.
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota (com material da Qualiti Software Process)
Laboratório de Programação
Análise e Especificação de Requisitos © 2001 Jaelson CastroInformações Gerais 1 Análise e Especificação de Requisitos - IF119 Centro de Informática Jaelson.
Fluxos secundários Só devem ser analisados e descritos após a descrição dos fluxos básicos. Fluxos alternativos situações especiais (desconto para um cliente)
Desenvolvimento de Jogos e Entretenimento Digital
A Linguagem Formal de Especificação VDM-SL
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
UML INTRODUÇÃO CEÇA MORAES 14/04/2017.
Orientação a Objetos com UML
UML e a Ferramenta Astah
Linguagem de Modelagem Unificada
Tarciane Andrade Análise de Casos de Uso Tarciane Andrade
Use Cases e Fluxo de Eventos
Modelo de Análise e Projeto
Object Constraint Language Philip Stephen Medcraft.
Análise de Casos de Uso Rafael Duarte Alexandre Mota [rmd,
Engenharia de Software e Sistemas
© Nabor C. Mendonça Processo / Metodologia de Desenvolvimento de Software.
Métodos Formais Juan Andrés Mussini.
Modelação Aula T15 Modelação Conceptual de Sistemas Revisão do Comportamento OCL – Object Constraint Language José Borbinha.
Paulo Borba e Augusto Sampaio Departamento de Informática Universidade Federal de Pernambuco Especificação Usando Conjuntos.
TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ANÁLISE E PROJETO DE SISTEMAS Aula /08/2012 Professor Leomir J. Borba-
Arnaldo Rocha1995 BANCO DE DADOS Modelo Relacional.
Orientação a Objetos com UML. Copyright © 2006 Qualiti. Todos os direitos reservados. Qualiti Software Processes Análise e Projeto OO com UML e Padrões|
Paulo Borba e Augusto Sampaio Departamento de Informática Universidade Federal de Pernambuco Especificação de Sistemas Distribuídos Parte 2.
20/04/2017 Orientação a Objetos 1 1.
UML (Unified Modeling Language) Linguagem Unificada de Modelagem
Modelagem de Sistemas Orientada a Objeto Com UML
UCSal – Bacharelado em Informática
OCLE Object Constraint Language Environment Fábio Moura CIn-UFPE.
Diagrama de Classes Herança Dependências.
Análise do Sistema Alexandre Mota
Analisar Caso de Uso. Copyright © 2002 Qualiti. Todos os direitos reservados. Qualiti Software Processes Analisar caso de uso | 2 Objetivos deste módulo.
©2003, Alexandre Vasconcelos & Augusto Sampaio CIn-UFPE1 Análise e Projeto de Sistemas Modelagem de Requisitos com Casos de Uso.
Transcrição da apresentação:

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

Desenvolvendo o Sistema Documento de Requisitos Problema Solução ...

Um Modelo Banco 1 1 0..* 0..* Conta 1..* 1..* Cliente Poupança

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

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

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

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

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

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

Anotando um Modelo Banco Conta Cliente idade: int Poupança 1 1 0..* 0..* Conta 1..* 1..* Cliente idade: int {idade>17} Poupança

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

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)

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

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

Hierarquia de Tipos Given Sets Conjuntos ( P) I Tuplas (...) Free-Types Relações () Funções () Seqüências (seq) Bags (bag)

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

Exemplo de Given Set Cliente id: ID Given set ID

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

Free-Types ok Enumeração Simples falha zero succ \ldata Nat \rdata <<enumeration>> Mensagens ok falha Enumeração Simples <<enumeration>> Nat zero succ \ldata Nat \rdata Enumeração Recursiva

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

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

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

 AA,  AA Conjuntos Potência # A A = B, A  B x  A, x  A A  B, A  B, A \ B  AA,  AA

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

Relações dom R, ran R R ; S, S  R A R, R A A R, R A R~ R A     ( | ) |

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

Funções F  G

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

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

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”)

Bags count B x x in B B1  B2, B1  B2 items S + -

Detalhando o Modelo: Banco cadastrar remover creditar debitar getSaldo transferir clientes contas 0..n 0..n Conta numero: NUM saldo: \nat getNum getSaldo creditar debitar Cliente id: ID nome: NOME getId getNome dono 1 0..n Poupança renderJuros

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

Classe Cliente Cliente - id: ID - nome: NOME getId setId getNome pré: pós: result! = id Cliente - id: ID - nome: NOME getId setId getNome setNome setId(id: ID) pré: pós: id’ = id? getNome() pré: pós: result! = nome setNome(nome: NOME) pré: pós: nome’ = nome?

Classe Conta Conta - num: NUM - saldo: IN getNum() setNum() getSaldo() pré: pós: result! = num Conta - num: NUM - saldo: IN getNum() setNum() getSaldo() setSaldo() creditar() debitar() setNum(num: NUM) pré: pós: num’ = num? getSaldo() pré: pós: result! = saldo setSaldo(saldo: IN) pré: pós: saldo’ = saldo?

Classe Conta Conta - 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?

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()

Classe Banco 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?} Banco cadastrar() remover() creditar() debitar() transferir() remover(conta: Conta) pré: conta?  null  cc:contas  cc.getNum() = conta? pós: contas´ = contas \ {conta?}

Desenvolvendo o Sistema O que eu desejo GARANTIR na minha solução??? Problema Solução ...

Operadores em Propriedades Para estabelecer propriedades entre operações, podemos usar , , , ,  , , \ (.../...) pre, ;

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

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.

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