Rohit Gheyi rg@cin.ufpe.br Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br.

Slides:



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

Python: Funções Claudio Esperança.
Pseudo-código: sintaxe
Concepção da linguagem, ou seja, porque e como ela é como é?
Paulo Marques Hernâni Pedroso
LOGICA DE PRIMEIRA ORDEM Cálculo dos Predicados
Teoria da Computação EQUIVALÊNCIA DE PROGRAMAS E MÁQUINA Fabrício Dias
Teste de Software.
(Unified Modeling Language)
Prof.: Bruno Rafael de Oliveira Rodrigues
Elsa Carvalho 163 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Teoria dos Modelos.
O Essencial sobre Linguagens de Programação Luís Caires Maio 2005.
Unidades de Execução e de Controle Sistemas Digitais.
Subconsultas ou Consultas Aninhadas
SQL – Noções Gerais Por Márcia Jacyntha N. Rodrigues Lucena
BCC 101– Matemática Discreta
Introdução a diagrama de classes e UML
Diagrama de Classes.
Lógica de Programação Módulo II
Otter Provador de Teoremas
Contratos Modelagem Funcional.
INF 1771 – Inteligência Artificial
INF 1771 – Inteligência Artificial
INF 1771 – Inteligência Artificial
Especificação de Requisitos de Software com Casos de Uso
Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012.
Prolog Programação Lógica Ícaro A. Souza.
Introdução a linguagem Python
Princípios de Orientação à Objetos
Introdução UML, Diagrama de Classes e Comunicação/Colabaração
Aula prática 13 Orientação a Objetos – C++ Parte 1
-Conjuntos: noções básicas e operações -Funções e relações -Sequências
Aula prática 6 Vetores e Matrizes
DIAGRAMA DE CASO DE USO Prof. Fabíola Gonçalves C. Ribeiro.
DIAGRAMA DE CLASSE Modelagem de Software
Informática Teórica Engenharia da Computação
Linguagens lógicas 2013 – Luiz Mauricio Nascimento Silva
INF 1771 – Inteligência Artificial
ACCESS 2007 EDIMILSON JÚNIOR.
Verificação de Tipos e Escopos
Estudo dos Conceitos e Paradigmas de Programação
Programação Orientada à Objetos
Avaliação de Desempenho Simulação
Paradigmas de Linguagens de Programação Aula 2
CSP-Z Disciplina: Especificação de Sistemas Distribuídos Mestrado em Ciências da Computação Aleciano Jr. Leonilson Barbosa
© Ricardo Pereira e Silva
Algumas notas sobre a linguagem de programação C
Programação Orientada à Objetos
Java Kickstart, day 2 Semelhanças com linguagem C.
©Silberschatz, Korth and Sudarshan (modificado)4.1.1Database System Concepts Capítulo 4: SQL Estrutura básica Operações com conjuntos Funções de agregação.
Métodos Formais.
Acabias Marques Luiz. I - Introdução ao Ruby Parte 1 – Introdução a linguagem  O que é Ruby  Instalação  O IRB  Operadores Aritméticos  Tipos de.
Redução.
Modelagem de Sistemas de Informação I 2014/1 Laboratórios de Especificação Prof. Eber equipe.nce.ufrj.br/eber.
A Linguagem Formal de Especificação VDM-SL
Fundamentos de linguagens de programação
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.
Análise e Projeto de Sistemas Unified Modeling Language Renata Araujo Ricardo Storino Núcleo de Computação Eletrônica Curso de Programação de Computadores.
Transações Banco de Dados II Aline S Costa 1. TRANSAÇÕES Conjunto de operações que formam uma única unidade lógica de trabalho; Conjunto de instruções.
PROGRAMAÇÃO II – PARTE 3 Profa. Maria Augusta Constante Puget.
Módulo II Capítulo 1: Orientação a Objetos
Palavras-Chaves Linguagem gráficas e utilizações de símbolos.
OCLE Object Constraint Language Environment Fábio Moura CIn-UFPE.
Álgebra Booleana e Circuitos Lógicos Em 1854, George Boole introduziu o formalismo que até hoje se usa para o tratamento sistemático da lógica, que é.
Análise e Design de Software Site:
1 Programação de Banco de Dados José Antônio da Cunha George Azevedo da Silva.
1 Lógica de Predicados BCC101 Matemática Discreta I.
Variáveis, expressões e comandos Dilvan Moreira. Lembrando …  Instalação normal (para utilizar no PC com Windows) 
Testes de Unidade. 2 Pauta Testes de Unidade; Testes de Unidade; Desenvolvimento orientado a testes; Desenvolvimento orientado a testes; Testes unitários.
Transcrição da apresentação:

Rohit Gheyi rg@cin.ufpe.br Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

Roteiro Definição e Características Noções Básicas A linguagem O Alloy Analyzer Exemplo Comparações com UML/OCL Conclusões e Bibliografia

1. Definição e Características

Objetivo Essa apresentação é sobre como construir e analisar modelos utilizando a linguagem Alloy

Porque Alloy? Porque surgiu uma nova linguagem se já existem muitas outras linguagens e abordagens para modelar software?

Características Características dos modelos de Alloy Micro modelos Analisável Declarativa Estruturada

Micro Modelos Com poucas linhas dá para se analisar implementações que possuem milhares de linhas de código É uma linguagem pequena e simples mas é poderosa e flexível o suficiente para representar sistemas complexos

Analisável Existe um analisador que simula modelos e checa suas propriedades A análise tende não só a fazermos modelos mais corretos mas também mais sucintos Não se precisa dar entradas ou casos de teste ao analisador Dá para encontrar bugs mais rapidamente sem muito custo

Declarativa Um modelo declarativo descreve um estado de um sistema listando suas propriedades e restrições Não especifica como estados são construídos ou como sua execução leva de um estado para outro (não indica como uma operação deve ser feita) E sim, como o estado novo se relaciona com o estado antigo (reconhece como uma operação ocorreu)

Estruturada Sistemas de software possuem pelo menos dois tipos de complexidade devido ao event sequencing devido à estruturação do estado Alloy foi feito para a tratar a complexidade estrutural do estado Existem muitas ferramentas para analisar seqüências de eventos entretanto poucas delas analisam estruturas

Mas isso não já existe? Nem todas as características são novas Especificações formais em Z são declarativas e estruturadas Linguagens de checagem de modelos como SMV e Promela são analisáveis

Então, porque Alloy? Por muito tempo acreditou-se que um modelo não podia ser declarativo e analisável ao mesmo tempo A novidade de Alloy é a combinação dos quatro itens a modelagem principalmente declarativa e analisável (executável)

2. Noções Básicas

Estruturas em Alloy As estruturas em Alloy são construídas através de átomos e relações Átomos É uma entidade primária que possui as seguintes características: indivisível, imutável, sem interpretação

Relações É uma estrutura que relaciona átomos Em Alloy são: sempre de 1a ordem sempre finitas são tipadas

Conjuntos e escalares Toda expressão é uma relação Não existem conjuntos São representados por relações unárias Não existem escalares São relações unárias Singletons: a  {(a)} Faz a semântica da linguagem ficar simples e uniforme Na prática, não precisamos pensar que conjuntos são relações unárias

Operações sobre Conjuntos Subconjunto (in) A in B União () A + B Interseção () A & B Diferença (-) A – B Tamanho do Conjunto (#) # A

Operadores Relacionais Transposta (~r) É a relação inversa João.pai = José José.~pai = João José pai ~pai=filho João

Operadores Relacionais Transitive Closure (^r) É a união da aplicação da relação r, 1 ou mais vezes Exemplo: Ancestrais de jose jose.^pais = jose.pais + jose.pais.pais + jose.pais.pais.pais + …

Operadores Relacionais Join ou Composição (s1,…,sn-1, sn) (t1,t2,…, tm) Join = (s1,…, sn-1, t2,…, tm) , onde sn = t1 Exemplo: Se S for um conjunto e r uma relação binária: S.r = é a imagem relacional de S em r

Exemplos Seja Rohit um escalar, Homem, Mulher e Pessoa conjuntos e pais e filhos duas relações binárias: Rohit.pais Significado: Quais são os pais de Rohit? Rohit.pais.~pais = Rohit.pais.filhos Significado: Quais são os filhos dos pais de Rohit?

Operadores Lógicos Conjunção Disjunção Negação A && B (A and B) A || B (A or B) Negação ! A ou not A

Quantificadores Seja e é uma expressão: all - todos () no – nenhum all x: e | Fórmula no – nenhum no x: e | Fórmula some – existe () some x: e | Fórmula

Exemplos Toda pessoa, exceto Adao e Eva, possui uma mãe all p: Pessoa-Adao-Eva | one p.mae Existe um homem que é ancestral de todo mundo, exceto Adao e Eva some x: Homem | all p: Pessoa-Adao-Eva | x in p.*(pai+mae)

Observação Importante Não se pode casar com um irmão no x: Pessoa | x.esposa in x.irmaos E se uma pessoa não tiver casada, este fato é verdadeiro? Estamos tratando com conjuntos => x.esposa =   é subconjunto de todo conjunto, inclusive de x.irmaos Como achamos uma pessoa, logo o fato não é verdadeiro

no x: Pessoa | some(x.esposa) => x.esposa in x.irmaos Solução no x: Pessoa | some(x.esposa) => x.esposa in x.irmaos Tomar cuidado com o conjunto vazio em Alloy

3. A linguagem

Estrutura de um Programa 1 pacote (module) 0 ou n imports (open/uses) 0 ou n parágrafos Assinatura (signature) Fato (fact) Asserção (assertion) Função (function) Rodar (run) Checar (check) Avaliar (eval)

Assinatura Declara um novo tipo e um novo conjunto A assinatura cria um namespace local Exemplo: sig Pessoa { mae: option Mulher, pai: option Homem } mae é uma relação do tipo: Pessoa  Mulher

Extensão da Assinatura Não introduz um novo tipo É um subconjunto da classe pai Possui o mesmo tipo da classe pai sig Homem extends Pessoa { esposa : option Mulher } Todos os campos declaradas na classe filha, são também declaradas na classe pai, só que sempre retornam . Fato Implícito: (Pessoa-Homem).esposa = 

Qualificadores static disj sig Adao, Eva extends Pessoa { } static – indica que o Adao e Eva só possuem 1 átomo (Singleton) disj – indica que os subconjuntos são disjuntos. Ou seja: Adao  Eva = 

Relações sig Pessoa { mae: option Mulher, pai: option Homem } Seja o átomo p do tipo Pessoa. A relação mae pode ser chamado das seguintes formas: (ordem decrescente de precedência) p::mae p.mae mae[p]

Fatos Fato é uma fórmula que restringe os valores dos conjuntos e das relações Exemplo: fact {all p:Adao+Eva | no (p.pai+p.mae)} Todas as pessoas p dos conjuntos Adao e Eva não possuem pais

Fatos Attached sig Pessoa { mae: option Mulher, pai: option Homem }{ one mae -- significa que toda pessoa tem } -- uma mãe Possui o fato implícito: all this: Pessoa | with this | one mae

Funções É uma fórmula parametrizável que será usada em algum momento. fun Pessoa::getFilhos(): set Pessoa{ result = this.~pai+ this.~mae } Retorna os filhos de uma pessoa

Imports e Pacotes O pacote é declarado no início do programa com module: module library/Lista sig Lista { fun adicionar() {…} } Imports devem ser colocados depois do pacote Ao importarmos um pacote importamos também seus fatos O import em Alloy pode ser feito de 2 formas:

Imports open uses Não precisa colocar o nome qualificado open library/Lista Ex: adicionar (…) uses Precisa colocar o nome qualificado uses library/Lista Ex: library/Lista/adicionar(…)

4. O Alloy Analyzer

Alloy Analyzer É uma ferramenta para análise automática de modelos É mais um model finder do que um model checker É mais um refutador do que um provador de teoremas Se ele achar um contra-exemplo ele mostra. Mas se não mostrar não há garantia de que o teorema é válido

Asserções Especifica uma fórmula que é supostamente verdadeira (teorema). assert assercaoBiologica { no p: Pessoa | p in p.^(pai+mae) } Ninguém pode ser o seu próprio ancestral

Comandos check Checa se uma asserção é valida. O resultado dele é um contra-exemplo, caso exista. run É usado para achar uma especificação válida para uma função.

Comandos Exemplos: check A for 3 run func for 3 but 2 S, 5 T A asserção (A) é checada para todas as configurações possíveis onde cada tipo básico é restringido a não ter mais do que 3 átomos run func for 3 but 2 S, 5 T Executa a função (func) com no máximo 3 átomos para cada tipo, exceto o tipo S e T que possuirão no máximo 2 e 5 átomos respectivamente

Alloy Analyzer Painel com a Sintaxe (Fórmulas) Painel da Solução Painel de Edição Barra de Status

Visualizador de Soluções

5. Exemplo

Exemplo module modelos/Pessoa // Pacote sig Pessoa { mae: option Mulher, pai: option Homem } disj sig Homem, Mulher extends Pessoa {} static disj sig Adao extends Homem{} static disj sig Eva extends Mulher{}

Exemplo fun Pessoa::getFilhos(): set Pessoa{ result = this.~pai+ this.~mae } fact P { all p:Adao+Eva | no (p.pai+p.mae) all p: (Pessoa-Adao-Eva) | one p.pai && one p.mae all p: Pessoa | all filhos: p..getFilhos() | filhos ! in (p.^(pai + mae))

6. Comparações com UML/OCL

Relacionamento entre Alloy e UML Alloy é similar a OCL mas possui sintaxe mais convencional possui semântica mais simples possibilita análise automática dos modelos Alloy é uma linguagem totalmente declarativa OCL mistura elementos operacionais e declarativos

Relacionamento entre Alloy e UML A utilização do operador ponto (.) em Alloy dá uma interpretação mais uniforme e flexível do que OCL Como os operadores podem ser aplicados a conjuntos e relações, Alloy tende a ser mais sucinto do que OCL Os modelos de OCL são mais difíceis de ler e escrever

Relacionamento entre Alloy e UML Alloy lida com relações com qualquer aridade Alloy possui um mecanismo de estruturação que permite o reuso de fragmentos do modelo O modelo em Alloy não só descreve seus objetos e operações mas também as propriedades que necessitem serem checadas

Fato Simples Fato: O nome de uma criança ou de um amigo não pode ser dado a nenhum cachorro OCL: Person self.pets -> select (d | d.oclKindOf(Dog)) -> forall(d | not (self.children -> union(self.friends) -> collect(q | q.name)) -> includes(d.name) Alloy: all p: Person | all d: p.pets & Dog | d.name ! in (p.children+p.friends).name

7. Conclusões e Bibliografia

Conclusões Os pontos fortes dos modelos de Alloy são: Micro modelos Analisável Estruturada Declarativa Alloy possui uma semântica simples e uniforme

Bibliografia Artigos, ferramentas, exemplos: http://sdg.lcs.mit.edu/alloy/ Daniel Jackson – criador do Alloy http://sdg.lcs.mit.edu/~dnj/ MIT LCS Software Design Group http://sdg.lcs.mit.edu/