Você está na página 1de 8

Especificação em Z: Utilizando o conceito de esquemas

Nataline Silva da Cunha

Universidade Estadual do Rio Grande do Norte (UERN) Campus de Natal/ Núcleo de Nova Cruz

Curso de Ciências da Computação

Resumo: Esse trabalho tem o intuído de mostrar os benefícios e a praticidade dos esquemas em Z, mostrando seu conceito e também um exemplo de sua aplicação em relação a uma especificação para que possamos perceber quanto é proveito o uso do mesmo em especificações mais complexas.

Introdução

A especificação de um software é uma receita que descreve o que ele deve fazer, e para sua especificação é necessário uma notação ou linguagem, pois a linguagem coloquial que usamos no dia a dia é inadequada para descrever com exatidão a estrutura lógica dos objetos especificados e dos operadores por falta de precisão em muitos casos. Com o uso de um método formal para a construção de programas podemos conhecer e analisar o seu comportamento sem que seja preciso executar o código fonte, prevendo também atribuição de significado às fórmulas que compõem a especificação, além de abrigar leis de transformação para simplificar e combinar essas fórmulas. Com essas características é formado um cálculo de programa que distinguem métodos formais de outros métodos que não atribuem um significado preciso e passível de cálculo. O uso do formalismo e do cálculo subjacente ajuda em muito a evitar a persistência de falhas em módulos de software finalizado, além de limitar atrasos no processo de desenvolvimento de software. Algumas especificações complexas precisam de mecanismos notacionais para a busca de economia e de modularização, e isso só se consegue em Z através da noção de esquemas que vamos ver detalhadamente neste artigo.

Formalismo em Z

Desde já, vale salientar que Z não é uma linguagem de programação, e sim uma notação que facilita a descrição de sistemas de computação, fazendo uso de noções de conjuntos e princípios básicos de lógica matemática. As especificações em Z não precisam ser executadas, nem existe a noção de armazenar valores em posição de memória associadas às variáveis definidas numa especificação escrita em Z. Essa notação descreve a estrutura lógica de um sistema de software, descrevendo também certas operações que podem ser aplicadas à componentes dessa estrutura.

Uma vez terminada uma especificação em Z, usualmente ela é transformada para código, expresso em uma linguagem de programação Esse código depois de compilado, origina um programa objeto passível de execução. E no processo de transformação da especificação em Z para o código na linguagem de programação que os vários detalhes de organização e funcionamento da máquina hospedeira começam a ser considerados.

Atualmente, dentre os métodos de especificação que usam algum formalismo para agregar precisão e rigor às especificações construídas, talvez a notação em Z esteja entre as mais desenvolvidas e consolidadas. Estando estabelecida a ponto de contar com uma padronização internacional.

Esquemas em Z

Em linhas gerais, a especificação de transformações pressupõe duas partes bem definida:

1. Uma primeira parte declarativa, onde as variáveis de estado são declaradas, e indicadas as variáveis de entrada e saída.

2. Uma segunda parte predicativa, onde construímos predicados que exprimem a relação exta que deve vigorar entre as variáveis de estado. Nessa parte indicamos as restrições que devem ser satisfeitas pelos valores iniciais das variáveis envolvidas na operação.

Mesmo em especificações simples, uma boa parte do volume delas é formada por linhas que se repetem nas várias descrições axiomáticas. Em linguagem de programação quando isso ocorre sugere-se imediatamente a ideia de macros. Seguindo essa linha de raciocínio, deveríamos organizar partes comuns que ocorrem nessas especificações, agrupá-las em conjuntos à parte e designar esse grupo nos vários pontos em que desejássemos enxertar seu conteúdo. Com isso seria substituído o nome do conjunto pela linhas que o compõem, no ponto do texto onde se gerou a invocação. Esse tipo de mecanismo proporcionar considerável clareza e economia em especificações mais complexas, desde que seja usado com habilidade.

Em Z, essa ideia é comparada com o conceito de esquema, que nada mais é que uma descrição axiomática à qual associamos um nome. Sua apresentação é feita dessa forma:

associamos um nome. Sua apresentação é feita dessa forma: onde M é o nome associado ao

onde M é o nome associado ao esquema, Decls é sua parte declarativa e Preds é predicativa.

Em geral, se Decls representa um conjunto de declarações e Preds denota uma família de cláusulas predicativas, então um esquema M também poderá ser especificado através de uma declaração na forma:

ser especificado através de uma declaração na forma: onde o símbolo que está depois da letra

onde o símbolo que está depois da letra M, é usado para introduzir o novo nome atribuído ao esquema.

Inclusão

A inclusão é uma das operações mais básicas que podemos realizar com esquema em Z.

mais básicas que podemos realizar com esquema em Z. , esquemas em Z. A operação de
mais básicas que podemos realizar com esquema em Z. , esquemas em Z. A operação de

, esquemas em

Z. A operação de incluir S em M é indicada simplesmente listando-se o nome S entre as declarações de M, em qualquer posição relativa. Resultando em um novo esquema, H, especificado de duas formas:

Sejam

e

declarações de M, em qualquer posição relativa. Resultando em um novo esquema, H, especificado de duas

O efeito da inclusão de S em M é duplo, portanto:

1. Toda parte declarativa de S é enxertada na parte declarativa de M, sem distinção de ordem ou precedência entre as várias declarações.

2. Todas as linhas que compõem a parte predicativa de S são listadas na parte predicativa de M. De novo, não há restrição de ordem entre as cláusulas presentes em M e em S.

Na inclusão de esquemas devemos ter alguns cuidados. Um deles é evitar os conflitos de tipos entre variáveis declaradas em S e em M.

Estudo de Caso

O exemplo envolvendo o uso do esquema foi utilizado em uma especificação para um sistema simples que visa controlar as operações de uma videolocadora. Para esse exemplo foi utilizado apenas uma parte da especificação que se encarrega em fazer uma locação de fita que não tenha sucesso. O programa utilizado para implementar essas especificações foi o Z-eves, versão 2.3.1 utilizando a plataforma Windows 7.

A Figura 1 mostra a implementação dessa especificação sem o uso do esquema. Vemos que há repetição de algumas variáveis, fazendo com que a especificação fique repetitiva e longa ao mesmo tempo.

Na primeira linha foram introduzidos três tipos iniciais, depois temos variáveis fortemente tipadas, onde foram agrupadas as mensagens que deverão ser emitidas pelo sistema, e finalmente foram introduzidas as variáveis do sistema, sendo essas na parte declarativa. Já na parte predicativa ficou a restrição que resultaria em uma locação sem sucesso, e isso acontece se a pessoa que for locar não estiver cadastrada e também se a fita pedida pelo cliente não estiver contida no acervo, a variável de saída retornara “LocacaoNOK”. Vale salientar que as variáveis c? e Sel?, correspondem a variáveis de entrada, e a variável resp! de saída.

Figura 1: Locação sem sucesso Em seguida temos a Figura 2, que mostra a mesma

Figura 1: Locação sem sucesso

Em seguida temos a Figura 2, que mostra a mesma especificação com o uso do conceito de esquemas em Z. Foi preciso criar três esquemas para que a especificação pudesse atender a restrição desejada. Vemos que ao invés de repetição de variáveis, temos blocos específicos que servem para serem requisitados pelo nome quando preciso, dando maior praticidade e fazendo com que a especificação seja mais fácil de entender.

Figura 2: Especificação utilizando esquemas

Figura 2: Especificação utilizando esquemas

CONCLUSÃO

Como vimos uma especificação em Z, não é simplesmente a tradução de um texto em prosa para fórmulas matemáticas, ele tenta apenas mostrar com maior clareza os requisitos para a especificação de um sistema. Utilizando-se sempre de mecanismos que ajudam na sua melhor produtividade e clareza, para que os software de computadores sejam melhores implementados, evitando também erros e aumentando assim as garantias de sucesso do produto final e consequentemente em toda sua vida útil.

BIBLIOGRAFIA

MOURA, Arnaldo Vieira: Especificações em Z: Uma introdução Campinas, SP:

Editora da Unicamp, 2001.