alloy & alloy analyzer rohit gheyi [email protected]

55
Alloy & Alloy Analyzer Rohit Gheyi [email protected]

Upload: internet

Post on 17-Apr-2015

147 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

Alloy & Alloy Analyzer

Rohit [email protected]

Page 2: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

Roteiro

1. Definição e Características2. Noções Básicas3. A linguagem4. O Alloy Analyzer5. Exemplo6. Comparações com UML/OCL7. Conclusões e Bibliografia

Page 3: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

1. Definição e Características

Page 4: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

Objetivo

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

Page 5: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

Porque Alloy?

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

Page 6: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

Características

Características dos modelos de Alloy

Micro modelosAnalisávelDeclarativaEstruturada

Page 7: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

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

Page 8: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

Analisável

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

Page 9: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

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)

Page 10: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

Estruturada

Sistemas de software possuem pelo menos dois tipos de complexidade

devido ao event sequencingdevido à estruturação do estado

Alloy foi feito para a tratar a complexidade estrutural do estadoExistem muitas ferramentas para analisar seqüências de eventos entretanto poucas delas analisam estruturas

Page 11: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

Mas isso não já existe?

Nem todas as características são novas

Especificações formais em Z são declarativas e estruturadasLinguagens de checagem de modelos como SMV e Promela são analisáveis

Page 12: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

Então, porque Alloy?

Por muito tempo acreditou-se que um modelo não podia ser declarativo e analisável ao mesmo tempoA novidade de Alloy é a combinação dos quatro itens a modelagem principalmente

declarativa e analisável (executável)

Page 13: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

2. Noções Básicas

Page 14: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

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

Page 15: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

Relações

É uma estrutura que relaciona átomosEm Alloy são:

sempre de 1a ordemsempre finitassão tipadas

Page 16: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

Conjuntos e escalares

Toda expressão é uma relaçãoNão existem conjuntos

São representados por relações unárias

Não existem escalaresSão relações unárias Singletons:

a {(a)}

Faz a semântica da linguagem ficar simples e uniformeNa prática, não precisamos pensar que conjuntos são relações unárias

Page 17: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

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

Page 18: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

Operadores Relacionais

Transposta (~r)É a relação inversa

~pai=filho

pai

João

JoséJoão.pai = José

José.~pai = João

Page 19: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

Operadores Relacionais

Transitive Closure (^r)É a união da aplicação da relação r, 1 ou mais vezesExemplo: Ancestrais de jose

jose.^pais = jose.pais + jose.pais.pais + jose.pais.pais.pais + …

Page 20: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

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

Page 21: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

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.filhosSignificado: Quais são os filhos dos pais de Rohit?

Page 22: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

Operadores Lógicos

ConjunçãoA && B (A and B)

DisjunçãoA || B (A or B)

Negação! A ou not A

Page 23: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

Quantificadores

Seja e é uma expressão:all - todos ()

all x: e | Fórmula

no – nenhumno x: e | Fórmula

some – existe ()some x: e | Fórmula

Page 24: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

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)

Page 25: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

Observação Importante

Não se pode casar com um irmãono 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

Page 26: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

Solução

no x: Pessoa | some(x.esposa) => x.esposa in x.irmaos

Tomar cuidado com o conjunto vazio em Alloy

Page 27: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

3. A linguagem

Page 28: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

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)

Page 29: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

Assinatura

Declara um novo tipo e um novo conjuntoA assinatura cria um namespace localExemplo:

sig Pessoa {mae: option Mulher,pai: option Homem

} mae é uma relação do tipo: Pessoa Mulher

Page 30: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

Extensão da Assinatura

Não introduz um novo tipoÉ um subconjunto da classe paiPossui o mesmo tipo da classe paisig 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 =

Page 31: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

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 =

Page 32: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

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::maep.maemae[p]

Page 33: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

Fatos

Fato é uma fórmula que restringe os valores dos conjuntos e das relaçõesExemplo:

fact {all p:Adao+Eva | no (p.pai+p.mae)}

Todas as pessoas p dos conjuntos Adao e Eva não possuem pais

Page 34: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

Fatos Attached

sig Pessoa {mae: option Mulher,pai: option Homem}{

one mae -- significa que toda pessoa tem

} -- uma mãePossui o fato implícito:

all this: Pessoa | with this | one mae

Page 35: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

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

Page 36: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

Imports e Pacotes

O pacote é declarado no início do programa com module:

module library/Listasig Lista { fun adicionar() {…} }

Imports devem ser colocados depois do pacoteAo importarmos um pacote importamos também seus fatosO import em Alloy pode ser feito de 2 formas:

Page 37: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

Imports

1. openNão precisa colocar o nome qualificado open library/ListaEx: adicionar (…)

2. usesPrecisa colocar o nome qualificadouses library/ListaEx: library/Lista/adicionar(…)

Page 38: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

4. O Alloy Analyzer

Page 39: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

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

Page 40: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

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

Page 41: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

Comandos

checkCheca 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.

Page 42: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

Comandos

Exemplos:check A for 3

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 TExecuta 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

Page 43: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

Alloy Analyzer

Painel de EdiçãoPainel da Solução

Painel com a Sintaxe(Fórmulas)

Barra de Status

Page 44: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

Visualizador de Soluções

Page 45: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

5. Exemplo

Page 46: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

Exemplo

module modelos/Pessoa // Pacotesig 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{}

Page 47: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

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.maeall p: Pessoa | all filhos: p..getFilhos() |

filhos ! in (p.^(pai + mae))}

Page 48: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

6. Comparações com UML/OCL

Page 49: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

Relacionamento entre Alloy e UML

Alloy é similar a OCL maspossui sintaxe mais convencionalpossui semântica mais simplespossibilita análise automática dos modelos

Alloy é uma linguagem totalmente declarativaOCL mistura elementos operacionais e declarativos

Page 50: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

Relacionamento entre Alloy e UML

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

Page 51: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

Relacionamento entre Alloy e UML

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

Page 52: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

Fato Simples

Fato: O nome de uma criança ou de um amigo não pode ser dado a nenhum cachorroOCL: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

Page 53: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

7. Conclusões e Bibliografia

Page 54: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

Conclusões

Os pontos fortes dos modelos de Alloy são:

Micro modelosAnalisávelEstruturada Declarativa

Alloy possui uma semântica simples e uniforme

Page 55: Alloy & Alloy Analyzer Rohit Gheyi rg@cin.ufpe.br

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/