Trabalho de formatura supervisionado

MAC 499

UMLWP - Uma ferramenta de edição de modelos de software baseados em UML

Jorge F. Del Teglia

IME - USP - Brasil

2001

 

 

Índice

1    Informações gerais

2    Introdução

2.1    UML: motivação

2.2    UML: ferramenta industrial

3    Objetivos do trabalho

4    A ferramenta

4.1    Funcionalidades e características

5    Projeto parcial da ferramenta

6    Futuro

7    Características gerais do projeto

 

1   Informações gerais

2   Introdução

2.1   UML: motivação

Uma das características que marcaram a história do software é a necessidade de comunicação entre os participantes das equipes de desenvolvimento. Estes participantes podem ser vistos como indivíduos ou até o mesmo individuo em um tempo diferente. Todos eles precisam comunicar idéias, decisões, razões e limitações nos seus trabalhos, conseguindo, desta forma, realmente trabalhar em equipe, particionando projetos em "módulos" mais facilmente gerenciáveis por grupos  menores, mantendo a comunicação funcional.

Segundo Brooks, quem caracterizou os problemas referentes ao software como Essenciais e Acidentais, um dos problemas mais complicados reside na complexidade inerente  do software. Esta complexidade é muito difícil de atacar, e um dos enfoques que tem dado resultado é a partição do problema original em problemas menores. Nesta partição, o software é visto como sucessivas representações consistentes entre si, onde cada representação agrega detalhes à representação anterior. É uma partição em níveis de abstração. Em cada nova representação com o aumento do detalhe, cada elemento de software é dividido em elementos menores, seguindo assim até que o tamanho dos elementos seja de tratável segundo a tecnologia em uso. 

Conseguir dividir um projeto em partes menores é apenas  parte da solução. Colocá-las a trabalhar juntas, conseguir que as equipes trabalhando em cada uma delas trabalhem na direção de um projeto comum, é outra.

Para conseguir uma comunicação deste tipo, é necessária uma linguagem comum aos participantes. A linguagem de facto hoje na industria é a Unified Modeling Language (UML). Esta linguagem, resultado de anos de experiência e participação de grandes personalidades da comunidade de engenharia de software internacional, permite-nos expressar modelos de sistemas, especificá-los e documentar sistemas já construídos. Desta forma a comunicação entre os diferentes integrantes do processo de desenvolvimento melhora reduzindo a ambigüidade e aumentando a precisão dos conceitos e idéias representados.

2.2   UML: ferramenta industrial

Segundo seus criadores, a UML é “uma linguagem gráfica para visualizar, especificar, construir e documentar elementos de um sistema intensamente baseado em software”.

Esta linguagem permite expressar, especificar e documentar modelos de sistemas, novos ou já construídos. Desta forma a comunicação entre os diferentes integrantes do processo de desenvolvimento melhora, reduzindo a ambigüidade e aumentando a precisão dos conceitos e idéias representadas.

UML é a linguagem de facto na indústria. A linguagem existe desde 1997 (na sua versão 1.0) e a partir de então inúmeros produtos surgiram  suportando-a, auxiliando o desenvolvedor a especificar sistemas utilizando UML. Muitos destes produtos são comerciais (e de alto preço), porém existem alguns exemplos baseados em software livre.

3    Objetivos do trabalho

O objetivo deste trabalho é especificar, projetar e implementar uma ferramenta que sirva para a criação e edição de um subconjunto de diagramas da UML (basicamente, diagramas de classe) e ao fazer isto, demonstrar a aplicabilidade de algumas ferramentas de tecnologia de orientação a objetos utilizadas no processo (a mesma UML, design patterns, frameworks, etc.).

4    A ferramenta

Uma imagem capturada durante o funcionamento serve de referência para posicionar ao leitor:

 

 

4.1  Funcionalidades e características

·         Elementos suportados pelo modelo

 

o        Classes e interfaces.

o        Atributos e métodos em classes. Suporte a visibilidade e modificadores.

o        Relacionamentos entre objetos: associações simples, agregações e composições. Cardinalidade de associações e “role names”. Nomes para associações.

o        Relacionamentos entre classes/interfaces: herança e implementação (realization).

o        Documentação para todos os elementos do modelo.

o        Pacotes de UML.

 

·         Outras características

 

o        Persistência do modelo e seu layout (save, load e saveAs).

o        Seleção de múltiplos elementos do modelo.

o        Drag & drop de elementos do modelo e seleções múltiplas de elementos.

o        Acompanhamento do ponteiro do mouse (mouse tracking) para maior controle das operações.

o        Múltiplos mecanismos para layout de relacionamentos.

o        Estrutura interna para suporte a diversos processadores de código. Por exemplo, é muito simples conectar geradores de código para diferentes linguagens.

5    Projeto parcial da ferramenta

Para a especificação da arquitetura base da aplicação foram utilizados diagramas UML construídos com o auxílio de uma ferramenta comercial.  É de se esperar que quando o projeto esteja numa etapa mais avançada, a especificação seja realizada utilizando a própria ferramenta, isto é, estaríamos construindo uma ferramenta meta-circular que contribuiria em sua própria construção.

Alguns destes diagramas vão a continuação:

·         Diagramas de classes

o        Model (de MVC) principal

o        View principal

o        Biblioteca DEFSupport 

·         Diagramas de seqüência:

o        básico 1

o        avançado 1

 

Para esta implementação, e visando a construção REALMENTE modular e reutilização de componentes futura, foi construída uma biblioteca de apoio destinada projetos baseados em editores gráficos (DEFSupport) que já está sendo incluída em outros projetos.

6   Futuro

A ferramenta foi projetada de forma a ser facilmente extensível. Foram utilizadas extensivamente técnicas avançadas de orientação a objetos como Design Patterns e frameworks.  Por exemplo, foi construído um pacote de gerenciamento de recursos para editores gráficos, independente, conceitual e funcionalmente, da ferramenta. Este pacote permite simplificar a criação de aplicações que utilizem estes serviços. Hoje já existe uma possibilidade concreta de estender partes do sistema, para a realização de um editor genérico de configurações.

 

Algumas idéias:

·         Integração com ferramentas industriais (Rational Rose, TogetherJ)

·         Persistência baseada em formato XML/XMI.

·         Geração de código semi-automática e verificação de tipos dependendo da linguagem escolhida.

·         Implementação dos 8 diagramas da UML restantes.

·         Versão Mobile: versão lightweight que executaria sobre a plataforma J2ME, particularmente sobre handhelds Palm rodando KVM.

·         Versão Enterprise: versão com suporte a trabalho cooperativo distribuído (múltiplos usuários compartilhando modelos via internet e fazendo modificações concorrentes).

7    Características gerais do projeto

O projeto foi inicialmente concebido como uma implementação de funcionalidades básicas apoiadas numa arquitetura extensível que permita a adição de novas funcionalidades. Dentro deste esquema, as funcionalidades básicas representavam a metade do trabalho, sendo a outra metade a preparação da ferramenta para ser estendida.

Foram realizadas reuniões periódicas com Alan respeitando um cronograma que foi adaptado as necessidades e situações necessárias. Nestas reuniões foram discutidos tópicos relacionados às características técnicas internas do trabalho (projeto orientado a objetos), questões de usabilidade da ferramenta, priorização de necessidades e possibilidades de extensão.

Como desafio interessante, o projeto em si já foi um mundo. Mas a falta do tempo necessário limitou o número de qualidades que foram inseridas nesta etapa do projeto. Perceber que este projeto está vivo, isto é, não morre com esta matéria; futuros trabalhos, no ambiente do IME ou externamente, serão continuados.

As idéias a serem expressas neste projeto claramente ultrapassaram os recursos de tempo disponíveis. Muitas características úteis e interessantes estão á espera de tempo e dedicação neste trabalho. A complexidade inerente à área e a existência de ferramentas industriais que funcionem como fonte de inspiração apresentam um volume potencial de áreas de dedicação que lamentavelmente não conseguiu ser explorado na sua totalidade.

Foram utilizadas extensivamente ferramentas e tecnologias da área e orientação a objetos.  Por exemplo, mais de dez design patterns foram utilizados [Design Patterns – Elements of Reusable Object-Oriented Software, Gamma et al, 1994], técnicas de refactoring catalogadas no trabalho de Martin Fowler [Refactoring – Improving the Design of Existing Code, Martin Fowler, 2000] e numerosas técnicas de orientação a objetos. Como ferramenta de criação de diagramas UML (meta modelado) foi usado o TogetherJ, da empresa Together Software.

Algumas das disciplinas cursadas no BCC mais relevantes para o trabalho foram as matérias relacionadas à programação.  Laboratório I e II tiveram uma influencia direta devido ao trabalho intensivo de programação. Programação orientada a Objetos é indispensável na formação de qualquer pessoa que tenha interesse em escrever algo a mais que scripts de configuração. Outras matérias como Sistemas operacionais e Programação Concorrente ofereceram um conjunto de técnicas sempre úteis na hora de construir um sistema minimamente complexo. Engenharia de Software apresentou o backbone sobre o que o processo de desenvolvimento foi baseado.  Matérias como Analise de algoritmos e Introdução a Grafos tiveram uma influencia importante na hora de escolher algoritmos de tratamento dos componentes gráficos utilizados, visando manter níveis razoáveis de performance. Finalmente, as matérias associadas a linguagens formais, como Compiladores, Paradigmas de Programação e Linguagens formais e Autômatos tiveram (e vão ter mais ainda nos próximos estágios do projeto) uma importância definitiva associada a parsing e geração de código.

Como conclusão, o trabalho mostrou-se claramente enriquecido pela formação introduzida pelo IME e pela rica interação com o professor Durham. Foi um trabalho atual, aplicando conhecimentos cruzados de múltiplos tópicos e disciplinas da área da computação a técnicas de desenvolvimento de software mais orientadas a industria.  Serviu como banco de testes para um grande volume de informação e conhecimentos destilados pelo IME que talvez, em projetos mais clássicos ou estágios industriais padrões, poderiam passar sub–aproveitados.