1 / 55

Alloy & Alloy Analyzer

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.

melva
Télécharger la présentation

Alloy & Alloy Analyzer

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

  3. 1. Definição e Características

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

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

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

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

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

  9. 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)

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

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

  12. 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)

  13. 2. Noções Básicas

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

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

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

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

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

  19. 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 + …

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

  21. 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?

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

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

  24. 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)

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

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

  27. 3. A linguagem

  28. 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)

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

  30. 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 = 

  31. 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 = 

  32. 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]

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

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

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

  36. 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:

  37. Imports • open • 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(…)

  38. 4. O Alloy Analyzer

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

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

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

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

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

  44. Visualizador de Soluções

  45. 5. Exemplo

  46. 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{}

  47. 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)) }

  48. 6. Comparações com UML/OCL

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

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

More Related