DESENVOLVIMENTO DE SISTEMAS CORRETOS
BISI, Nícolas Nogueira
Universidade Federal de Pelotas
[email protected]
FOSS, Luciana; COSTA, Simone André da
Universidade Federal de Pelotas
[email protected], [email protected]
1 - INTRODUÇÃO
Atualmente boa parte de nossa vida está relacionada de alguma forma
com algum tipo de software, como por exemplo, computadores, celular,
agenda eletrônica, controle de tráfego aéreo, etc. Nesse sentido, por
questões de eficiência e segurança a certificação de que tais softwares sejam
executados da forma desejada, se faz necessária. Este trabalho tem por
objetivo apresentar uma investigação sobre a importância do
desenvolvimento de sistemas corretos, e algumas perspectivas de pesquisa
da linha de métodos formais no projeto intitulado Núcleo de Excelência em
Engenharia de Software para Sistemas Embarcados, coordenado pelo
professor Flávio Wagner Rech (UFRGS) e desenvolvido em cooperação com
pesquisadores da UFRGS, UFPEL e UNIPAMPA.
Trata-se de uma pesquisa em estado inicial, em que propomos
algumas considerações sobre a importância da certificação formal para o
alcance de um software de alto padrão de qualidade. Em geral, para garantir
que um sistema satisfaça certos requisitos, surge a necessidade de utilizar
modelos que permitam uma descrição precisa do mesmo. Em particular,
quando esses sistemas são bastante complexos, devemos optar por modelos
que forneçam construções abstratas que facilitem o entendimento e a
especificação desse sistema de forma modular. A linguagem de
especificação adotada, gramática de grafos, detalhada na seção 2, cumpre
tais requisitos.
A adoção de um método de especificação formal para a descrição de
um sistema permite que propriedades desejadas (requisitos) sejam
verificadas antes mesmo do desenvolvimento completo do sistema. Uma das
técnicas de verificação mais utilizadas hoje em dia é a técnica de model
checking [1]. Ferramentas que utilizam esta técnica recebem como entrada
um modelo finito que representa o sistema a ser analisado e uma
propriedade a ser verificada neste modelo. Uma busca exaustiva no espaço
de estados do sistema verifica se a propriedade é válida para o modelo
descrito. O processo é automático, em muitos casos, eficiente e pode ser
utilizado para verificar especificações parciais. Em alguns casos, quando as
propriedades são violadas, contra-exemplos podem ser produzidos, provendo
informações importantes para análise de erros de uma especificação.
Para verificação formal de propriedades de sistemas especificados em
gramática de grafos [2], utilizou-se o GROOVE [4], um programa que além de
verificação formal, permite realizar simulações nos sistemas especificados.
Esta ferramenta é brevemente apresentada na seção 3. Considerações finais
e trabalhos futuros serão descritos na seção 4.
2 – Gramática de Grafos
Gramáticas são uma forma de representação matemática que permite
especificar linguagens, através de um conjunto de regras capaz de gerar
todas as palavras da linguagem. Gramáticas de grafos são uma
generalização de gramáticas de Chomsky, substituindo strings por grafos.
Pesquisas nessa área começaram a ocorrer a partir da década de 70,
sendo seus resultados utilizados amplamente no campo da informática, como
na teoria de linguagens formais, no reconhecimento e geração de imagens,
na construção de compiladores, na engenharia de software, na teoria de
banco de dados, entre outros [3].
Diferenciando-se das gramáticas de Chomsky, uma regra de uma
gramática de grafos é constituída de dois grafos, um grafo esquerdo e um
grafo direito, e de um (homo)morfismo parcial de grafos, que mapeia os
elementos do lado esquerdo aos do lado direito de forma compatível. Uma
regra especifica elementos que são preservados, criados e/ou deletados. Os
elementos preservados são os elementos que pertencem ao lado direito e
são mapeados para o lado esquerdo. Os elementos criados são os
elementos do lado direito da regra que não são imagem do lado esquerdo.
Os elementos deletados são os elementos do lado esquerdo da regra que
não são mapeados para o lado direito.
A Figura 1 ilustra uma gramática de grafos que modela (parcialmente)
o jogo Come-Come (PacMan) [5]. O grafo Ini ilustra o estado inicial do jogo, e
as regras moveP, moveG, eat e kill modelam o seu comportamento. As
regras moveP e moveG especificam o deslocamento do PacMan e do
Fantasma, respectivamente; quando o PacMan se encontra no mesmo local
que a maçã, a regra eat pode ser aplicada, removendo a maçã para fora do
jogo; já a regra kill descreve a situação quando o PacMan e o fantasma se
encontram no mesmo local, na qual o PacMan morre, restando apenas o
fantasma. A mesma especificação poderia ter sido feita usando strings ao
invés de grafos, mas a gramática resultante certamente seria muito menos
intuitiva.
Figura 1. Especificação do Come-Come usando Gramática de Grafos.
O comportamento (semântica) de um sistema especificado usando
gramática de grafos é descrito via aplicação de regras. Uma regra é aplicada
a um grafo estado (estado atual), determinado uma mudança no estado do
sistema. A Figura 2 mostra a aplicação da regra moveP no grafo Ini. De
acordo com a regra, a seta que aponta para o local 8 é deletada (lado
esquerdo) e a seta que aponta para o local 7 é criada (no lado direito), ou
seja, o PacMan se move do local 8 para o 7, alterando o estado do sistema
para o grafo Out.
Figura 2. Aplicação da regra moveP no grafo Ini.
3 – Especificação e Verificação no GROOVE
Para realizarmos simulações, utilizamos a ferramenta GROOVE,
desenvolvida pela universidade de Twente, Países Baixos, onde de uma
maneira simples, é inserido um modelo especificado em gramática de grafos.
A Figura 3 apresenta a interface da ferramenta com o exemplo do
PacMan. No centro está especificado um possível estado inicial do sistema e
na esquerda podemos acessar as regras que compõem a gramática.
Figura 3. Interface do GROOVE.
Na Figura 4 é detalhada a regra kill, em que o PacMan (PacM) é
deletado caso se encontre no mesmo local (b) que o fantasma (Ghost).
Figura 4. Regra kill especificada no GROOVE.
Esta ferramenta nos permite também fazer a verificação automática
(model-checking) de propriedades de um sistema. A especificação destas
propriedades é feita usando lógica temporal, que nos permite descrever
comportamentos do sistema no decorrer de sua evolução. Para realizarmos a
verificação de uma propriedade, deve-se gerar o espaço de estados do
sistema e o verificador varre este espaço de estados verificando se a
propriedade é válida. Para o exemplo do PacMan, podemos garantir, por
exemplo, que até morrer o PacMan poderá sempre se mover (propriedade
desejada no jogo).
4 - CONCLUSÕES
A aplicabilidade das certificações formais permite o desenvolvimento
de sistemas corretos e confiáveis. A adoção de tais métodos em sistemas
críticos se torna ainda mais importante, permitindo prevenir erros e
problemas graves. Por exemplo, acidentes em sistemas ferroviários e aéreos
podem ser evitados, falhas em sistemas bancários, como cobranças
indevidas, podem ser identificadas, entre outros.
A proposta futura do projeto é a aplicação da certificação formal em
sistemas embarcados, visando o projeto destes sistemas em um tempo
reduzido, garantindo qualidade e eficiência. Em particular, quer se investigar
modelos que possuam abstrações capazes de descrever adequadamente os
diversos requisitos de sistemas embarcados, nas diferentes fases do seu
desenvolvimento, bem como definir transformações entre esses modelos. Os
modelos e as transformações serão especificados formalmente para permitir
diversos tipos de análise e prover garantias tanto nos modelos quanto nas
respectivas transformações.
5 - REFERÊNCIAS
[1]
DWYER, M.; HATCLIFF, J.; ROBBY; PASAREANU, C. E VISSER, W. Formal
Software Analysis Emerging Trends in Software Model Checking. In: Formal
Software Analysis Emerging Trends in Software Model Checking, p.1-17, 2007.
[2]
EHRIG, H. Introduction to the algebraic theory of graph grammars (a survey). In:
Graph-Grammars and Their Application to Computer Science and Biology, Bad
Honnef, October 30 - November 3, 1978. Lecture Notes in Computer Science, vol 73.
Springer Berlin/Heidelberg, 1979. Pg. 1-69.
[3]
EHRIG, H.; ENGELS, G.; KREOWSKI, H.-J.; ROZENBERG, G. Handbook of graph
grammars and computing by graph transformation: vol. 2: applications,
languages, and tools. World Scientific: 1998.
[4]
GROOVE, GRaphs for Object-Oriented Verification. Novembro de 2010. Disponível
em http://groove.sourceforge.net/groove-index.html.
[5]
RIBEIRO, L. Métodos Formais de Especificação: Gramáticas de Grafos. In: SBC Sul.
(Org.). VIII Escola de Informática da SBC-Sul. Porto Alegre: Editora da UFRGS,
2000, p. 1-33.
Download

o desenvolvimento de sistemas corretos - PET Computação