Upload
trananh
View
220
Download
1
Embed Size (px)
Citation preview
Alunos:
Cleverson Luiz Ferreira
Eduardo Rachid
Fábio César Schuartz
Linguagem de Especificação VDM-SL
• Histórico• Definição: O que é VDM?• Estrutura da Linguagem de Especificação• Fases para a construção de especificações• Estudo de Caso: Agenda de Reuniões• Testes com VDM• Ferramentas de Suporte• Considerações Finais• Referências
Tópicos da Apresentação:
• Início em 1970, no laboratório da IBM, em Vienna
• Grupo liderado por Heinz Zemanek
• Meta Linguagem VDL (Vienna Definition Language): semântica
operacional
• Meta-IV: semântica denotacional
– Dines Bjørner - Lyngby, Dinamarca
– Cliff B. Jones - Manchester, Inglaterra
• Padrão BSI, iniciado em 1986
• Padrão ISO, entre 1991 e 1996, por ISO/IEC JTC1
• Uso nas linguagens PL/I, BASIC, FORTRAN, APL, ALGOL-60, ADA e
PASCAL
Histórico
types
Person = token;Workers = set of Person;
state AWCCS ofpres: Workers
end
operations
INIT()ext wr pres: Workerspost pres = {};
ENTER(p : Person)ext wr pres : Workerspre p not in set prespost pres = pres~ union {p};
EXIT(p : Person)ext wr pres : Workerspre p in set prespost pres = pres~\{p};
ISPRESENT(p : Person) r : boolext rd pres : Workerspost r <=> p in set pres~
Definição: O que é VDM?
• VDM (Vienna Development Method): coleção de técnicas para a especificação formal e desenvolvimento de sistemas de computação– VDM-SL;– regras para refino de dados e operações;– método teórico de prova.
• Método formal orientado a modelo baseado numa estrutura de semântica denotacional para suportar refinamento passo a passo
Definição: O que é VDM?
• VDM suporta 2 tipos de abstração:– Representacional
• Abstração fornecida pela modelagem de dados (especificação de dados matemáticos: conjuntos, seqüências, mapeamentos, objetos compostos, produtos cartesianos e uniões)
– Operacional• Abstração das manipulações algorítmicas dos
dados, suportada pela abstração funcional (especificação de funções) e abstração relacional (especificação de operações)
Definição: O que é VDM?
• Uma especificação VDM para um problema consiste de uma descrição de estado, utilizando representações de tipos de dados, e de operações, que expressam mudanças às variáveis de estado consistentes com os requisitos do problema.– O estado é um modelo do problema e as operações no estado descrevem o comportamento do modelo
Definição: O que é VDM?
• VDM é estruturada em vários blocos, identificados por uma palavra-chave:
types< definição de tipos >
values< definição de valores >
functions< definição de funções >
operations< definição de operações >
state < nome do estado > of < definição do estado >end
Estrutura da Linguagem de Especificação
• O VDM suporta dois tipos de estruturas:– Abstração Representacional
• Tipos Simples• Tipos Compostos• Estados• Invariantes
– Abstração Operacional• Definição de Funções• Definição de Operações• Definição de Declarações
Estrutura da Linguagem de Especificação
• Podemos separar a construção de uma especificação em VDM em 5 fases:1. Criação de um Estado do Sistema2. Construção de Invariantes de Tipos de Dados3. Modelagem das Operações do Sistema4. Prova5. Refinamento da Especificação
Fases para a construção de especificações
Abstração Representacional: 1 e 2Abstração Operacional: 3
• É construído um modelo de dados do sistema, usando tipos primitivos e estruturas de dados construídas:– Tipos Primitivos (definidos na sintaxe da linguagem):
• Z - Inteiro, N - Natural, R - Real, Q - Racional, B - Booleano, char - Caracter, token – Token
– Tipos “Quote”: representação definida por uma string de letras maiúsculas distintas
– Tipos Compostos: construídos a partir de tipos já introduzidos na especificação, usando os construtores:
• União, Conjunto, Seqüência, Mapeamento, Registro, Produto Cartesiano e Tipos de Funções
1 – Criação do Estado do Sistema
• Modelo pode ser visto como um tipo de dado definido pelo usuário e define o universo de possíveis estados que o sistema pode estar durante a execução
• Cada estado corresponde a um valor do modelo de dados
• Se o estado tem muitas componentes que as operações podem acessar separadamente, então declaramos variáveis globais para representar essas partes do estado que as operações podem acessar referenciando diretamente o nome da variável
1 – Criação do Estado do Sistema: Representação de Variáveis Globais
state nome_do_estado of
nome_do_componente: tipo1_componente
...
...
nome_do_componente: tipon_componente
end
1 – Criação do Estado do Sistema: Representação de Variáveis Globais
• Uma invariante é uma propriedade que restringe o comportamento daquela entidade. Existem 2 tipos:– Invariante de Tipo: similar a restrições de
integridade de bases de dados– Invariante de Estado: restringe o
comportamento do sistema quando ele é sujeito a modificações por operações especificadas naquele estado.
2 – Construção de Invariantes de Tipos de Dados
Propriedades impostas por invariantes devem ser preservadas antes e depois de cada operação realizada naquela entidade.
• Exemplo de invariante de tipo:
inv mk-Student (nome, id, cursoconcluido, cursomatriculado) Δ cursoconcluido ∧ cursomatriculado = {}
• Exemplo de invariante de estado:
state Person_age ofn: Ninv n ∆ n ≤ 130
end
2 – Construção de Invariantes de Tipos de Dados
Uma vez descritos os objetos do sistema através da abstração representacional (fases anteriores), podemos definir agora o comportamento do modelo através da abstração operacional
A abstração operacional é definida por– Funções– Operações– Declarações
3 – Modelagem das Operações do Sistema
• Diferenças entre funções e operações:
– Funções não acessam variáveis globais
– Operações não somente acessam variáveis globais
como podem modificá-las
• Declarações têm semântica similar aos
comandos utilizados em linguagens de
programação e são utilizadas para detalhar
melhor a especificação
3 – Modelagem das Operações do Sistema
Definição de funções:fun (p1: t1, p2: t2, ..., pn: tn) p: t
pre B
post B’
Definição de operações:oper (p1: t11, p2: t12, ..., pn: t1n) p: t
ext <modo> g1: t21
...
<modo> gk: t2k
pre B
post B’
• err expr1 : B1 → B1’
3 – Modelagem das Operações do Sistema
O intuito de se provar que uma especificação formal está correta é eliminar erros lógicos ou semânticos
Existem ferramentas para checar se a sintaxe do modelo especificado está de acordo com a sintaxe de VDM
A especificação de uma operação está correta se é possível encontrar uma implementação (algoritmo) que satisfaça a operação
Um algoritmo satisfaz a operação se para qualquer estado do sistema e/ou valor de parâmetro de entrada que torna a pré-condição verdadeira, o algoritmo produz um estado de saída e/ou valor de parâmetro de saída que torna a pós-condição verdadeira
Ferramenta disponível: SpecBox
4 – Prova
Uma especificação em VDM pode ter camadas de
modelos, cada modelo sendo uma versão
refinada do modelo anterior. O último nível de
refinamento é bem próximo à implementação
Existem 2 modos de refinar uma especificação
VDM:
Refinamento de dados
Decomposição de operações
5 – Refinamento da Especificação
types
comp::
s: N
d: dia
h: hora
sala::
numero: N
sf: flag
Estudo de Caso: Agenda de ReuniõesDefinição de tipos
state agente of
compromissos: comp-set
inv mk-agente( ) Δ ∀ x, y ∈ compromissos
• x ≠ y ∧ {x.d ≠ y.d ∨ x.h ≠ y.h}
init mk-agente( ) Δ compromissos = { }
end
Estudo de Caso: Agenda de ReuniõesDefinição do estado agente
state agente_marcador of
salas: sala-set
compromisso: comp
agentes: agente-set
init mk-agente marcador(s: sala-set, c: comp, a: agente-set)
Δ salas := s
compromisso := c
agentes := a
end
Estudo de Caso: Agenda de ReuniõesDefinição do estado agente marcador
operation agendar_compromisso( )ext rd compromisso: comp
rd agentes: agente-setrd salas: sala-setrd compromissos: comp-setwr compromissos: comp-setwr agentes: agente-set
pre∀ sl ∈ salas • compromisso.s == sl.numero ∧ sl.sf == livre∀ ag ∈ agentes • verica(ag) == OK
poscompromissos.s := compromisso.s∀ ag ∈ agentes • marcar( ) ∧ report = SUCESSO∀ sl ∈ salas • sl.sf := ocupado
Estudo de Caso: Agenda de ReuniõesDefinição da operação de
agendamento
operation verica(ag: agente)
ext rd compromisso: comp
if compromisso.d ∉ ag.d ∨ compromisso.h ∉ ag.h
then return OK
else return Invalido
operation marcar( )
ext rd compromissos: comp-set
ext wr compromissos: comp-set
compromissos = compromissos ∪ {mk-comp(s, d, h)}
Estudo de Caso: Agenda de ReuniõesOperações de verificação e marcar
reunião
• Utilizada pela NASA no projeto SAFER usando o VDM-SL e o
conjunto de ferramentas IFAD VDM-SL
• Facilidade de ligação dinâmica constante na ferramenta,
permitindo uma rápida prototipação do sistema
• SAFER: mochila com sistemas de propulsão para prover a
movimentação no espaço durante uma EVA (Extravehicular
Activity)
• Suporta técnicas de validação, efetuando o teste de cobertura
para as propriedades dos propulsores e de outros subsistemas
Testes com VDM
• VDMTools: ferramenta comercial líder para VDM e VDM++, desenvolvida por
CSK Systems. Inclui geração de código automático para Java e C++, biblioteca
de links dinâmicos e suporte a CORBA
• Overture: iniciativa comunitária de código aberto destinada a suprir uma
ferramenta gratuita de suporte ao VDM++ em cima da plataforma Eclipse
• SpecBox: contém correção de sintaxe, algum mecanismo simples de correção
semântica e geração de um arquivo LaTeX permitindo que especificações
sejam impressas em notação matemática
• Macros para LaTeX e LaTeX2: disponíveis para suportar a apresentação de
modelos VDM na sintaxe matemática da Linguagem Padrão ISSO
Ferramentas de Suporte
• Especificações de hipóteses e propriedades são descritas diretamente no modelo que está sendo construído
• Clareza e o fácil entendimento com o qual os requisitos são especificados• Baixo custo necessário nas revisões de projeto, devido a eliminação de
inconsistências e ambigüidades que possam existir no projeto• Facilidade e rapidez de prototipação de sistemas fornecida através do modelo VDM• Permitem a reutilização de módulos compilados, para comporem a especificação sem
comprometer o processo de modelagem• Podem ser utilizadas de forma altamente abstratas até um nível muito baixo de
abstração• Padronização de sua linguagem de especificação, o que facilita a portabilidade de
especificações• Aumenta-se a qualidade e confiabilidade dos produtos desenvolvidos. O formalismo
diminui os erros de projeto devido a precisão matemática utilizada
• Fraco suporte a modelagem de tempo em suas especificações, como os de tempo real, onde o fator tempo deve ser avaliado precisamente
• Não suportam emissões relacionadas a evento, ou seja, sincronismo de eventos
Considerações Finais
• [1] Adilson Luiz Bonifácio e Rodrigo Bonacin. Modelagem e Especificação de Sistemas Utilizando VDM: Um Survey. Engenharia de Software, Instituto de Computação - Unicamp, 2000.
• [2] Vienna Development Method. Wikipedia, página criada em 2002. Disponível em: < http://en.wikipedia.org/wiki/Vienna_Development_Method>, acessado dia 08/05/2009.
• [3] Adilson Luiz Bonifácio. Verificação e síntese de sistemas híbridos. Tese de Mestrado, Universidade Estadual de Campinas - IC/UNICAMP, abril de 2000.
• [4] Sten Agerhom e Peter Gorm Larsen. Modeling and validating safer in vdm-sl. Em Procededings of the Fourth NASA Langley Formal Methods Workshop (Lfm97), setembro de 1997.
• [5] Dines Bjorner. The vdm specication & implementation methodology, 1989. IFIP TC2/WG2.2, Department of Computer Science, Technical University of Denmark.
Referências