Manual de Uso da FAFOOPS

   A seguir listamos todas as características implementadas pela FAFOOPS destacando a forma de utilização dos mesmos. Obviamente que esses recursos da FAFOOPS estão, direta e totalmente, voltados para as características da linguagem formal FOOPS, implicando assim que o uso da FAFOOPS por um engenheiro depende do conhecimento do mesmo com relação a linguagem formal FOOPS. Em vários pontos, a seguir, fazemos referência a número de requisitos que elicitamos para  a FAFOOPS e que estão de alguma forma sendo implementados. Todos esses requisitos podem ser encontrados na documentação referente à FAFOOPS.

Formas de Acessar as Funções da FAFOOPS

    Na FAFOOPS, existem duas formas distintas, de acessar as funções disponibilizadas: através dos menus, ou através do botões suspensos. Através dos menus, o usuário da FAFOOPS poderá acessar todas as funções da ferramenta. Adicionalmente, os menus, sempre estão visíveis e disponíveis ao especificador, não alterando de forma alguma, mesmo que a FAFOOPS esteja em modos de trabalho diferentes.

Os botões suspensos, por sua vez, possuem características diferentes dos menus. Primeiramente, que seu uso, não tem por objetivo disponibilizar um meio para que o usuário acesse todas as funções da ferramenta, mas sim, criar um mecanismo rápido (sem a necessidade de navegar em menus e sub-menus) e intuitivo (através do uso de ícones) de acessar as principais funções da ferramenta. Na FAFOOPS, os botões suspensos foram utilizados dentro da proposta citada acima, ou seja, disponibilizar um meio de acesso rápido e intuitivo aos principais recursos da ferramenta. Contudo, uma observação fundamental aqui, é que, devido a FAFOOPS fazer uso de vários modos de trabalho diferentes, os botões suspensos da ferramenta não fixos, ou seja, os botões disponibilizados ao especificador, dependem do modo de trabalho que ele esteja utilizando. Ratificando, o que foi dito, temos que quando o usuário estiver no modo de trabalho ``Editor de Módulo'', os botões suspensos apresentados pela ferramenta serão relacionados a este modo de trabalho. O mesmo ocorre para os demais modos de trabalho, ``Diagrama de Módulos'' e ``Diagrama de Classes''. A figura 5.3, destaca, os menus e os botões suspensos da FAFOOPS.

Figura 5.3: Formas de Acessar as Funções da FAFOOPS
\begin{figure}\begin{center}
\psfig{figure=figura25.pstex,width=155mm,height=48mm} \end{center}\end{figure}

A figura 5.4 apresenta a parte do menu da FAFOOPS destinada para que o usuário possa navegar entre os diferentes modos de trabalhos. É importante destacar estas opções, pois toda a ferramenta é configurada, automaticamente, para trabalhar sobre o modo de trabalho que estiver selecionado.

Figura 5.4: Opções de Modos de Trabalho da FAFOOPS
\begin{figure}\begin{center}
\psfig{figure=figura5.pstex,width=141mm,height=49mm} \end{center} \end{figure}

 

Detalhamento dos Recursos Implementados na FAFOOPS

    Nesta seção visamos apresentar todas as funcionalidades existentes na FAFOOPS. Mais do que, simplesmente listar estas funções implementadas, iremos também, simultaneamente, destacar as decisões de desenho que tangenciaram cada uma dessas funções e relacionar as mesmas aos requisitos elicitados por nós para a FAFOOPS. Todas as decisões de desenho, que implicaram na não implementação de recursos para a FAFOOPS, ou mesmo, implicaram na implementação parcial dos mesmos, serão discutidos separadamente, na próxima seção, desta página.

Suporte a Múltiplos Projetos

    A FAFOOPS implementa a noção de projetos, como definido no requisito R1. Sendo assim, a FAFOOPS permite que seus usuários possam trabalhar na especificação de diversos sistemas diferentes, bastando, para isto, criar um projeto independente para cada um desses sistemas. Desta forma, sempre que for necessário trabalhar sobre um dado sistema, basta que o projeto correspondente ao mesmo seja aberto.

Funções Implementadas para Apoiar Múltiplos Projetos

    Existem várias funções distintas, disponibilizadas pela FAFOOPS, que o usuário pode utilizar no     contexto de projetos. Elas são: criar um novo projeto, abrir um projeto existente, salvar um projeto, fechar o projeto aberto para liberar a ferramenta para que outro projeto possa ser editado, visualizar e editar propriedades do projeto, criar um novo projeto a partir de um existente (salvar como), realizar um backup automatizado de um projeto e por último excluir um projeto existente.

Por razões de tempo, decidimos por implementar somente as funções associadas a projeto que viabilizassem ao engenheiro utilizar a interface em vários projetos distintos. Desta forma a FAFOOPS está disponibilizando dentre as funções apresentadas em seu menu, as seguintes funções básicas:


Diagrama de Módulos da FAFOOPS

O módulo, para a linguagem FOOPS, é a unidade básica para construção de uma especificação. Ou seja, uma especificação em FOOPS é um conjunto de módulos que no seu total (considerando suas hierarquias e componentes) determinam os requisitos de um sistema.

Sendo assim, para um especificador FOOPS, é fundamental visualizar o sistema através de um diagrama que apresente os módulos e todas as hierarquias existentes entre os mesmos, para que assim ele consiga racionar de forma modular (o que é fundamental para especificar sistemas grandes), direcionando seu raciocínio somente nas propriedades importantes no momento de planejar o sistema como um todo.

Este recurso da FAFOOPS, denominado Diagrama de Módulos, é definido e especificado no nosso requisito R6. Lá discutimos detalhadamente a importância deste Diagrama de Módulos e suas possíveis conseqüências benéficas.

Notação Gráfica Utilizada no Diagrama de Módulos

Em [Soc92] é definida uma notação gráfica para visualizar uma especificação FOOPS através dos módulos e teorias que a compõem e das hierarquias existentes entre os mesmos.

A FAFOOPS fez uso desta notação gráfica para apresentar o Diagrama de Módulos. Como pode ser notado na figura 5.6 um módulo ou uma teoria são representados no diagrama através de um retângulo. Logo MES, HORA, DATA e INTERVALOTEMPO são exemplos de módulos na especificação do SAR [Dar92] visualizada na FAFOOPS.

Outra notação gráfica utilizada é a seta tracejada que vai de um módulo A em direção a um outro módulo B. Esta seta indica que o módulo A é importado pelo módulo B. Em nossa figura 5.6 podemos notar que no SAR, o módulo DATA importa o módulo MES, pois para definirmos uma data necessitamos da noção de mês. O mesmo ocorre com o módulo INTERVALOTEMPO (cujo nome na figura 5.6, aparece cortado, devido ao seu comprimento) que especifica que um intervalo de datas é composto por duas datas, uma data inicial que deve ser menor ou igual a uma data final. Obviamente que o módulo INTERVALOTEMPO necessita da especificação de uma data (módulo DATA) para ser definido.

Uma característica que adicionamos à notação listada em [Soc92] é uma pequena descrição que é apresentada no canto inferior direito de cada módulo. Esta descrição é uma indicação de que tipo de módulo ou teoria está sendo representado pelo retângulo. Basicamente na linguagem FOOPS podemos ter: um módulo funcional (fmod), um módulo orientado a objetos (omod), uma teoria funcional (fth) ou uma teoria orienta a objetos (oth). Logo a descrição diz em qual dos quatro tipos listados acima o módulo ou teoria representado pelo retângulo se encaixa. Recorrendo novamente a figura 5.6 podemos notar por exemplo que o módulo INTERVALOTEMPO é um módulo funcional (fmod) enquanto que o módulo REUNIAO é um orientado a objetos (omod). Este recurso, agregado por nos ao diagrama de módulos, foi definido e justificado no requisito R6.6 da FAFOOPS.

Figura 5.6: Diagrama de Módulos para o Sistema SAR
\begin{figure}\begin{center}
\psfig{figure=figura6.pstex,width=155mm,height=100mm} \end{center} \end{figure}

Descrição das Funções Correlatas ao Diagrama de Módulo

Iremos descrever, agora, as funções de nossa ferramenta formal, relacionadas ao Diagrama de Módulos, que foram implementadas. Estas funções são listadas e explicadas detalhadamente abaixo. As funções, definidas nos requisitos da FAFOOPS, mas que não forem descritas abaixo, são funções não implementadas. Adiante, na seção 5.5.4 iremos discutir cada uma delas.


Diagrama de Classes da FAFOOPS

    Apesar de a unidade básica para construção de uma especificação FOOPS ser o módulo, esta linguagem apresenta uma propriedade extremamente interessante para o usuário, que é o suporte a orientação à objetos. A OO (orientação a objetos) traz várias vantagens para o especificador, principalmente na forma como pensar e organizar as partes (componentes) do sistema.

A FAFOOPS, como interface do FOOPS, também fornece mecanismos para que o engenheiro possa trabalhar utilizando a OO em suas especificações. Estes mecanismos basicamente giram em torno de um recurso especial da FAFOOPS que é o Diagrama de Classes. Este diagrama é a representação gráfica de todas as classes e subclasses (juntamente com algumas de suas propriedades) definidas na especificação. Disponibilizando assim ao especificador um visão abstrata que se concentra nos aspectos OO e despresa outros elementos da linguagem FOOPS como: módulos, hierarquias entre módulos, sorts, funções, etc.

A seguir, como para o Diagrama de Módulos, iremos descrever todas as funções disponibilizadas pela FAFOOPS para este modo de trabalho. Já podemos adiantar que existem ainda poucas funções e recursos na FAFOOPS que apóiem o seu usuário a pensar e especificar utilizando todo o poder da OO, na seção 5.5.5 iremos falar detalhadamente sobre estas limitações.

Notação Gráfica Utilizada no Diagrama de Classes

Na figura 5.9, temos um exemplo de Diagrama de Classes gerado pela FAFOOPS para o sistema SAR (Apêndice A e [Dar92]). Como é notável na figura, uma classe no diagrama é representada por um retângulo que possui uma barra horizontal em sua parte superior. Acima desta barra temos o nome da classe na qual o retângulo está representando. Abaixo temos uma lista dos atributos definidos na especificação para tal classe. Sendo assim temos que em nosso exemplo Reuniao, Participante, PartImportante, PartComum e PartReuniao são classes. Já, intervalodata, duracao e iniciador, por sua vez, são atributos da classe Reuniao (como pode ser observado abaixo da barra horizontal superior da classe Reuniao).

Adicionalmente temos que as hierarquias entre as classes também são representadas no diagrama. Recorrendo novamente a figura 5.9 podemos verificar a existência de duas setas partindo das classes PartImportante e PartComum e chegando na classe Participante. Elas indicam que ambas as classes PartImportante e PartComum são subclasses da classe Participante. Vale ressaltar as classes PartImportante e PartComum, não fazem parte realmente da especificação formal do SAR, nos criamos as mesmas, temporariamente no SAR, somente para exemplificar o que estamos dizendo aqui.

Figura 5.9: Exemplo de Diagrama de Classes da FAFOPS
\begin{figure}\begin{center}
\psfig{figure=figura11.pstex,width=150mm,height=100mm} \end{center} \end{figure}

A notação utilizada acima vai de encontro à notação proposta em [Boo00] que descreve a linguagem para modelagem OO conhecida como UML. Na seção 5.5.5, como já mencionado, iremos enumerar mais propriedades de uma especificação OO que deveriam, mas não são apresentadas na FAFOOPS.

Descrição das Funções Correlatas ao Diagrama de Classes

Existem somente três funções vinculadas ao Diagrama de Classes (e, portanto, a gerência das classes e subclasses da especificação) na FAFOOPS. A seguir, iremos enumerá-las e explicá-las detalhadamente.


Editor de Módulos da FAFOOPS

    Este é o recurso da FAFOOPS do qual o especificador provavelmente mais fará uso. Ele é denominado de Editor de Módulos e tem por objetivo disponibilizar um editor inteligente, que apóie ao máximo o engenheiro, no momento de escrever suas especificações. Esta codificação da especificação é um das tarefas mais lentas e complexas para o especificador. Sua complexidade é proporcional a complexidade das linguagens formais em si, que fazem uso de inúmeras expressões, comandos e regras de sintaxe e semântica para disponibilizar poderes para especificar precisamente os requisitos dos sistemas do mundo real.

Sendo assim, como advogado em R10, é fundamental para o especificador ter um editor integrado com o ambiente de seu método formal e que seja totalmente voltado para apoiar as peculiaridades da linguagem formal que ele utiliza, de forma que ele alcance uma maior facilidade e produtividade em seu trabalho.

A seguir, detalharemos todos os recursos do Editor de Módulos da FAFOOPS, destacando também pontos a serem futuramente desenvolvidos. Um primeira visão do Editor de Módulos da FAFOOPS é apresenta na figura 5.10. Nesta figura temos o editor ativo na FAFOOPS com a especificação do módulo Reuniao do SAR.

Figura 5.10: Editor de Módulos com uma Especificação de um Módulo
\begin{figure}\begin{center}
\psfig{figure=figura13.pstex,width=156mm,height=90mm} \end{center} \end{figure}

Descrição das Funções Correlatas ao Editor de Módulos

Abaixo, segue uma lista das funções disponibilizadas atualmente pela FAFOOPS ao especificador, em se tratando do Editor de Módulos. Algumas destas funções são usuais em qualquer editor de texto, porém, em sua grande maioria, estas funções apóiam o engenheiro a trabalhar especificamente com a linguagem formal FOOPS. No requisito R10, temos a definição de todas as propriedades e funcionalidades correspondente ao Editor de Módulos.

Considerações Adicionais sobre as Decisões de Desenho da FAFOOPS

Nesta seção visamos apresentar diversas decisões de desenho que tomamos com relação a FAFOOPS. Com algumas exceções, como o próximo item listado abaixo, que discute decisões relacionadas a linguagem de programação e plataforma, todos os demais itens, nesta seção, estão voltados principalmente para um caminho. Este caminho é, discutir decisões de projeto, que de alguma forma conduziram a não implementação, ou mesmo implementação parcial, de funções especificadas através dos requisitos elicitados para a FAFOOPS. Com isto, deixaremos claro ao leitor, os pontos desta ferramenta que necessitam de serem desenvolvidos ou melhorados. Vale ressaltar que, todas essas decisões de desenho, que limitaram a funcionalidade da FAFOOPS, foram tomadas principalmente em decorrência da falta de tempo.

 

Linguagem e Plataforma

    FAFOOPS foi desenvolvida utilizando a linguagem Java (SDK 2.0 - JFC/Swing). A opção pela linguagem Java foi, primeiramente, de encontro à possibilidade de implementação da FAFOOPS em uma arquitetura cliente-servidor que, viabilizasse o seu uso em estações clientes Windows, Linux, e assim por diante, tornando, desta forma, a ferramenta totalmente multiplataforma - do lado cliente - e também multiusuária (Com Java poderíamos desenvolver tanto o lado cliente quanto o lado servidor da ferramenta, utilizando a mesma linguagem de programação).

Outro ponto que nos conduziu para a linguagem Java foi a intenção de implementar a FAFOOPS para trabalhar em ambiente Web, dado que existem vários recursos que Java disponibiliza para aplicações Web, como Applets, Sevlets, JSP, dentre outros. Assim, o especificador poderia trabalhar em um browser e especificar seus sistemas com todos os benefícios agregados à Internet. Esta opção de implementação chegou a ser inicialmente implementada por nós, entretanto, nós desistimos desta abordagem, pois atualmente a criação de GUI's (Interfaces Gráficas com o Usuário) com as propriedades que a FAFOOPS exige é bastante limitada em um ambiente como o da Internet.

A FAFOOPS, na forma como se encontra - uma aplicação que trabalha em conjunto com FOOPS em uma única estação de trabalho (monousuária) - está preparada para ser atualizada para implementar uma arquitetura cliente-servidor que viabilize à mesma ser totalmente multiplataforma e multiusuária.

Interação com o FOOPS

Como mencionado na introdução desta página, muitas das decisões de desenhos que tomamos não são definitivas, em decorrência da pouca disponibilidade de tempo. Uma das principais decisões dentre essas, diz respeito à forma como a FAFOOPS interage com o FOOPS. Foi definido como um requisito da FAFOOPS (R4) que ela deveria implementar toda a interação com o FOOPS de forma automática e transparente, de forma a garantir que o usuário não tivesse a percepção de que o FOOPS e a FAFOOPS são ambientes distintos. Contudo durante o desenho da interface decidimos por não implementar esta interação, adotando um abordagem não definitiva, onde a FAFOOPS ficou independente do FOOPS, permitindo que o especificador gere suas especificações em um ambiente gráfico mas que no momento de validar e verificar suas especificações ele tenha que recorrer ao FOOPS por conta própria, submetendo ao mesmo os textos de especificação gerados no FAFOOPS. Em 5.4.1 detalhamos a função ``Interagir FOOPS'' que é uma função paliativa que apóia o especificador no momento de submeter as suas especificações desenvolvidas no FAFOOPS para o FOOPS.

Decisões de Desenho Adicionais sobre Gerência de Projetos

Decisões de Desenho Adicionais sobre o Diagrama de Módulos

Decisões de Desenho Adicionais sobre o Diagrama de Classes

Decisões Adicionais de Desenho sobre o Editor de Módulos

Vamos enumerar agora algumas derivações do requisito correspondente ao Editor do Módulo (requisito R10) que não foram implementadas. Sempre lembrando que o fator tempo foi responsável por estas decisões.