evolução no desenvolvimento de software com a utilização ... · 3.2.4.1 pim – modelo ......

69
Universidade Federal de Santa Catarina Anna Carla Verner Helder dos Santos Puia Evolução no desenvolvimento de software com a utilização do MDA Florianópolis, 13 de Outubro de 2004.

Upload: hoangcong

Post on 17-Dec-2018

212 views

Category:

Documents


0 download

TRANSCRIPT

Universidade Federal de Santa Catarina

Anna Carla Verner

Helder dos Santos Puia

Evolução no desenvolvimento de software com a utilização do MDA

Florianópolis, 13 de Outubro de 2004.

2

1. Introdução......................................................................................................................... 4 2. Problemas atuais da Engenharia de Software ........................................................... 5

2.1 PRODUTIVIDADE X QUALIDADE ......................................................................... 5 2.2 PORTABILIDADE ...................................................................................................... 7 2.3 INTEROPERABILIDADE ......................................................................................... 9 2.4 MANUTENÇÃO........................................................................................................ 10 2.5 DOCUMENTAÇÃO .................................................................................................. 12

3. Model Driven Architecture............................................................................................ 14 3.1 OBJECT MANAGEMENT GROUP ......................................................................... 14 3.2 MDA........................................................................................................................... 14

3.2.1 O QUE É MDA? ................................................................................................. 14 3.2.2 Arquitetura........................................................................................................... 15

3.2.2.1 O Núcleo .................................................................................................... 16 3.2.2.2 Camada Intermediária ............................................................................. 20 3.2.2.3 Pervasive Services................................................................................... 20

3.2.3 Ciclo de Vida ....................................................................................................... 21 3.2.4 Funcionamento .................................................................................................... 22

3.2.4.1 PIM – Modelo independente de plataforma ......................................... 23 3.2.4.2 PSM – Modelo específico para plataforma .......................................... 23 3.2.4.3 Transformação .......................................................................................... 25

4. Como MDA pode ajudar na solução dos problemas atuais.................................... 29 4.1 Produtividade.............................................................................................................. 29 4.2 Portabilidade............................................................................................................... 30 4.3 Interoperabilidade....................................................................................................... 30 4.4 Manutenção e Documentação..................................................................................... 32

5. Ferramentas MDA ......................................................................................................... 33 5.1 Compuware OptimalJ ................................................................................................. 33 5.2 Rational XDE ............................................................................................................. 35 5.3 AndroMDA................................................................................................................. 37

6. MDA na Prática.............................................................................................................. 39 6.1 Aplicação de Controle de Compra e Venda de Mercadorias...................................... 39 6.2 Arquitetura da aplicação............................................................................................. 40 6.3 Aplicando o MDA ...................................................................................................... 40

6.3.1 PIM e PSM .......................................................................................................... 41 6.3.2 Transformações PIM para PSM .......................................................................... 42 6.3.3 Transformação de PSM para modelo de código.................................................. 42 6.3.4 Três Níveis de Abstração..................................................................................... 43 6.3.5 Transformação PIM para Relacional................................................................... 44

6.4 PIM ............................................................................................................................. 44 6.5 Modelo Relacional...................................................................................................... 45 6.6 Modelo de Componentes EJB .................................................................................... 46 6.7 Modelo Web ............................................................................................................... 48 6.8 Última Transformação – PSM para código ................................................................ 49

6.8.1 Modelo Relacional para Código SQL ................................................................. 49 6.8.2 Modelo EBJ para código Java ............................................................................. 50

6.8.2.1 Entity Bean ................................................................................................ 50

3

6.8.2.2 Session Bean ............................................................................................ 52 6.8.2.3 Session Façade ........................................................................................ 53

6.8.3 Transformação do Modelo WEB para Código .................................................... 54 6.8.3.1 JSP ............................................................................................................. 55 6.8.3.2 Struts .......................................................................................................... 56

6.9 Resultado .................................................................................................................... 57 7. Conclusão....................................................................................................................... 60 8. Referência Bibliográfica ............................................................................................... 62 9. Apêndices ....................................................................................................................... 64

9.1 Planilha de Use Case Points ....................................................................................... 64 9.2 Scripts ......................................................................................................................... 66

9.2.1 Script de criação .................................................................................................. 66 9.2.2 Script de Remoção............................................................................................... 68

9.3 Códigos....................................................................................................................... 69

4

1. Introdução

Uma das principais propriedades que um software deve apresentar é

capacidade a mudanças e adaptabilidade tanto a requisitos quanto ao ambiente

computacional no qual está inserido. Sabe-se que não é nada trivial atingir essa

capacidade, principalmente mantendo produtividade.

O MDA, Model Driven Architecture, é um framework que promove o uso de

desnvolvimento de modelos independentes dos detalhes da implementação dando

ao sistema uma flexibilidade maior. A maior parte do processo é automatizada

não só mantendo como aumentando a produtividade e qualidade do sistema.

O nosso objetivo neste trabalho é relatar o uso desse framework em uma

abordagem que pretende apresentar soluções para os principais problemas de

engenharia de software atualmente: Produtividade, portabilidade,

interoperabilidade, manutenção e documentação.

5

2. Problemas atuais da Engenharia de Software

Atualmente, no desenvolvimento de software, nos deparamos com uma

série de dificuldades que até pouco tempo atrás não estavam presentes.

Antigamente os sistemas eram mais simples, não precisavam ser integrados a

outros sistemas e em sua maioria eram sistemas batch, que não tinha interface

com o usuário.

Nesta seção apresentaremos algumas das dificuldades encontrada no

desenvolvimento de software atualmente.

2.1 PRODUTIVIDADE X QUALIDADE

Uma das preocupações da indústria de software é a necessidade de criar

software e sistemas corporativos muito mais rapidamente e a um custo mais

baixo. Para fazer bom uso da crescente potência dos computadores, precisamos

de um software de maior complexidade. Ainda que mais complexo esse software

também precisa ser mais confiável. A alta qualidade é fundamental no

desenvolvimento de software[MAR95].

Existem vários fatores que devem ser avaliados quando falamos em

qualidade de software. Mas o que é exatamente qualidade em software?

Existem várias definições para qualidade em software, uma das mais aceita

é a seguinte.

“Conformidade com requisitos funcionais e de desempenho explicitamente

declarados, padrões de desenvolvimento explicitamente documentados e

características implícitas, que são esperadas em todo software desenvolvido

profissionalmente”.

De forma geral, este conceito explica qualidade em software, mas que

características um software deve possuir para que possamos avaliar a qualidade

do mesmo?

6

Devemos levar em consideração ao avaliar qualidade em software fatores

internos e externos.

Alguns aspectos como rapidez, facilidade de uso, que estão presentes ou

não em um software, podem ser detectadas pelos usuários finais. Estes aspectos

são chamados fatores externos de qualidade. Outros aspectos como

modularidade, facilidade de leitura, são fatores internos, perceptíveis apenas a

profissionais de computação que tem acesso ao código fonte do sistema[MEY97].

Alguns dos mais importantes fatores de qualidade estão listados abaixo:

1. Corretude: é a habilidade do software de executar suas tarefas de

forma exata, como definido na especificação.

2. Robustez: é a habilidade do software de reagir de forma apropriada

sob condições anormais.

3. Extendibilidade: é a facilidade de adaptação do software a

mudanças de especificação.

4. Reusabilidade: é a habilidade dos componentes de software a

servirem para construção de muitas outras diferentes aplicações.

5. Compatilidade: é a facilidade de combinação de componentes de

software a outros.

6. Eficiência: é a habilidade do software de usar menos recursos de

hardware que for possível, como tempo de processador, espaço

ocupado em memória e disco, largura de banda usada no serviço de

comunicação.

7. Portabilidade: é a facilidade de transferir um software a vários tipos

de hardware e sistemas operacionais.

8. Facilidade de uso: é a facilidade com que pessoas de diversas

qualificações podem aprender a usar o software e ajuda-los a

resolver problemas. Isso inclui a facilidade de instalação, operação e

monitoramento.

Existem ainda diversos outros fatores que influenciam na qualidade do

software e existem também diversos normas e padrões muito aceitos e utilizados

7

como as normas ISO de qualidade e CMM, mas que não são objetivos deste

estudo.

Aí esta um grande dilema, como garantir os vários aspectos de qualidade e

ao mesmo tempo manter uma boa produtividade sem comprometer custos e

prazos.

O principal objetivo da engenharia de software é aumentar a produtividade

na construção de aplicações computacionais. Ela pode atingir esse objetivo de

várias maneiras. Duas das mais importantes são o uso de ferramentas

automatizadas e a identificação dos dados e processos comuns, de modo que

tenham que ser projetados uma vez apenas, e não separadamente para diversas

aplicações[MAR89].

A maneira mais conveniente de se conseguir produzir software com

qualidade sem comprometer custo e prazos, é com um bom planejamento, com

auxílio de ferramentas de apoio ao processo de desenvolvimento e uma equipe

capacitada para tal, apenas assim será possível atingir as metas estabelecidas no

início do projeto.

2.2 PORTABILIDADE

A indústria de software tem uma especial característica que a diferencia da

maioria das outras indústrias. A cada ano, e cada vez mais rápido, novas

tecnologias estão sendo inventadas e se tornando populares (por exemplo, Java,

Linux, XML, HTML, SOAP, UML, J2EE, .NET, ASP, Flash, Web Services, e assim

por diante). Muitas companhias precisam seguir estas novas tecnologias por boas

razões:

• A tecnologia é definida pelo cliente;

• Resolver alguns problemas reais;

• Ferramentas deixam de dar suporte a velhas tecnologias e passam a

focar nas novas[KLE03].

Portabilidade é reconhecidamente um atributo desejado para a maioria dos

softwares.

8

“Um software é portável sobre dois ambientes distintos se o custo de

transportar e adaptar este software para o novo ambiente é menor que o custo de

desenvolve-lo novamente”.

Existem vários fatores que afetam a portabilidade, dentre eles estão:

• Diferenças entre sistemas operacionais;

• Diferenças entre linguagens de programação;

• Diferenças entre arquiteturas de máquinas.

Podemos relacionar ainda a portabilidade, algumas sub-categorias:

• Adaptabilidade: atributos do software que evidenciam sua

capacidade de ser adaptado a ambientes diferentes, sem a necessidade

de aplicação de outras ações além daquelas fornecidas para esta

finalidade.

• Capacidade para ser instalado: atributos do software que evidenciam

o esforço necessário para sua instalação num ambiente especificado.

• Conformidade: atributos do software que o tornam consonantes com

padrões ou convenções relacionadas à portabilidade.

• Capacidade para substituir: atributos do software que evidenciam sua

capacidade e esforço necessário para substituir um outro software, no

ambiente estabelecido para esse outro software.

As novas tecnologias oferecem benefícios que não podem ser deixados de

lado. Por isso as pessoas vêm mudando de tecnologia constantemente. Como

conseqüência, os investimentos nas tecnologias perdem valor e se tornam

obsoletos.

A situação é ainda mais complexa porque as tecnologias evoluem também.

Elas vêm em diferentes versões, sem a garantia de que serão compatíveis com as

anteriores. As ferramentas geralmente suportam apenas duas ou três das mais

recentes versões.

9

Como conseqüência, os softwares existentes são sempre portados para as

novas tecnologias, ou para novas versões da tecnologia existente, ou então

passam a operar com as tecnologias antigas, como sistemas legados.

2.3 INTEROPERABILIDADE

Softwares raramente vivem sozinhos. Muitos sistemas precisam se

comunicar com outros, muitas vezes com sistemas já existentes.

“Interoperabilidade refere-se à habilidade de dois ou mais sistemas

(computadores, recursos, redes, software, e outros componentes de tecnologia da

informação) de interagir com o outro e trocar dados de acordo com um método

prescrito a fim de atingir resultados esperados [ISO ITC-215]”.

Alguns benefícios da interoperabilidade são:

• Os clientes podem escolher a tecnologia mais adequada para as

suas necessidades.

• Aumento da competição, levando a um aumento da qualidade e

diminuição dos preços.

• Redução do uso de tecnologia obsoleta.

Pode-se ter muitos ganhos com a interoperabilidade, mas ela não vem de

graça, exige muito trabalho adicional, e existem várias barreiras a serem

quebradas, dentre as dificuldades encontradas para se atingir a interoperabilidade

estão o tamanho e complexidade dos dados, performance, heterogeneidade, taxa

de mudança e diferença entre domínios de aplicação. Estes itens estão

detalhados abaixo.

• Tamanho/complexidade dos dados: quando o conjunto de dados é

relativamente pequeno ou simples, a interoperabilidade pode ser

atingida convertendo os dados de saída de um componente

conforme entrada do outro. Mas se o conjunto de dados é muito

10

grande, a memória utilizada e a performance associada a esta

conversão pode ser inaceitável.

• Performance: A interoperabilidade exige uma alta performance, pois

para atingi-la é necessário a implementação de várias camadas de

interfaces virtuais, o overhead gerado por estas camadas podem

atingir níveis inaceitáveis.

• Heterogeneidade: Nós enfrentamos freqüentemente uma

diversidade grande de sistemas computacionais, de origens dos

dados e de formatos, de usuários, de línguas, e de modelos de

programação. Esta heterogeneidade ao mesmo tempo em que

estimula, também dificulta a interoperabilidade.

• Taxa de mudança: Tecnologia computacional (hardware e

software), estão sempre mudando. Quando uma nova tecnologia se

torna disponível uma enorme pressão para os usuários passaram a

utiliza-la passa a existir. Esta volatilidade geralmente faz com que a

interoperabilidade tenha uma baixa posição na lista de prioridades.

• Diferenças entre domínio de aplicação: Inevitavelmente,

diferentes aplicações têm diferentes requisitos. Assim como a

heterogeneidade, esta diferenças aumentam a complexidade quando

vamos gerar uma ferramenta para garantir a interoperabilidade. Uma

das dificuldades é a necessidade de adaptar a ferramenta, para

acomodar a terminologia e a semântica associadas com o domínio

particular da aplicação.

2.4 MANUTENÇÃO

A manutenção faz parte da vida do software, pois de maneira geral, todo

software sofre modificações. Essas modificações normalmente são devidas a

mudanças de legislação, inclusão ou alteração de funcionalidades e correções de

erros. Um software pode apresentar os seguintes tipos de manutenções:

11

• Corretiva – Quando o sistema não foi corretamente desenvolvido,

sendo que na manutenção devemos diagnosticar e corrigir esses

problemas de desenvolvimento.

• Adaptativa – Realizada pra acompanhar mudanças e evoluções de

hardware.

• Perfectiva – Realização de melhorias que surgiram com a utilização o

software. Como por exemplo, a alteração de uma funcionalidade ou a

inclusão de uma nova.

• Preventiva ou Preditiva – Realizada para aumentar a confiabilidade

ou a manutenibilidade futura do sistema ou software.

A manutenção consome em média 70% de todo o esforço despendido com

a produção do software, mantendo o mesmo em looping e aumentando seu tempo

de vida, claro que não passamos 70% do tempo corrigindo erros, apenas cerca de

20% deste tempo é desprendido em correção, os 80% restante são gastos

adaptando sistemas a modificações no seu ambiente externo, fazendo melhorias

solicitadas pelo usuário e submetendo a reengenharia, para uso futuro.

A manutenção é caracterizada como um iceberg, esperamos que apenas a

parte visível esteja carente de manutenção, porém, normalmente uma massa

enorme de problemas e custos esconde-se sob a superfície. No início dos anos

70, o iceberg de manutenção era suficientemente grande para afundar um porta-

aviões. Hoje, poderia facilmente afundar toda a marinha[PRE01].

Uma vez sendo inevitável ter mudanças quando se constroem sistemas

baseados em computador e para pessoas, devemos desenvolver mecanismos e

processos para avaliar, controlar e fazer modificações, visando facilitar as

mudanças e reduzir a quantidade de esforços despendidos em manutenção. Um

mecanismo que contribui para uma melhor manutenibilidade do sistema é a

documentação do sistema.

A manutenção torna-se mais difícil devido ao uso de documentação

inadequada. Quando se realizam alterações, quase sempre se esquece de fazer

as atualizações correspondentes na documentação. Essa então não mais reflete o

sistema.

12

2.5 DOCUMENTAÇÃO

A documentação nos conta toda a história de um sistema, desde sua

concepção, passando pelo seu desenvolvimento e acompanhando sua

manutenção, mostrando-nos o que fazem, como fazem e para quem fazem. Ela

inicia no momento da elaboração e segue por todas as etapas do projeto. A

documentação mais do que qualquer coisa faz com que o sistema independam

das pessoas que irão manipula-lo.

A documentação deve ser vista como uma ferramenta de auxílio, pois será

utilizada nos momentos de necessidade por todas as pessoas envolvidas no

sistema. Para cumprir tal papel, deve ser elaborada no final de cada fase

determinada pela metodologia adotada bem como necessita ser atualizada

sempre que houver uma modificação.

Os documentos devem conter informações necessárias que possibilitam

concluir sobre a finalidade, como foram feitos e o que é necessário para colocar o

sistema em funcionamento.

Os principais objetivos de documentar são:

• Divulgar e deixar claro o que faz o sistema, como utiliza-lo, as suas

vantagens, operação e requisitos para funcionamento;

• Mostrar quais as técnicas ou ferramentas utilizadas para o

desenvolvimento, tempo, custos, equipe, cronogramas, metodologia,

integração, etc.;

• Orientar e treinar o usuário na operação do sistema;

• Possibilitar a garantia para a empresa da continuidade do

funcionamento do sistema.

A documentação está inserida num contexto de produção de variada gama

de informações por pertencer ao processo de desenvolvimento de software, onde

a qualidade e disponibilidade de informação sobre diferentes tipos de serviços

influenciam diretamente a qualidade e agilidade do processo e do produto,

acumulando grande quantidade de documentos.

13

Existem algumas diretrizes de qualidade que uma boa documentação deve

apresentar. Tais diretrizes estão calçadas em três pilares:

• Completa: Não deve faltar nenhuma informação para facilitar a

compreensão do usuário, lembrando sempre que nem tudo que é

irrelevante para um é para outro. Podemos eliminar diversas falhas

apenas adotando alguma padronização;

• Precisão: Os documentos devem ser revisados por duas pessoas

com visões diferentes e devem estar em conformidade com as

especificações do sistema;

• Clareza: Devem ser de fácil identificação, localização e organização.

Dados estatísticos demonstram que de 47% a 62% do tempo gasto em

manutenção de sistemas é despendido na tentativa de entender o programa, e

que ler o código fonte custa 3,5 vezes mais do que ler a documentação. Além

disso, 53% dos defeitos são descobertos em trechos tidos como corretos e 10%

são introduzidos durante as alterações. Outros 64% dos defeitos são de lógica,

enquanto 79% são causados por entendimento incorreto do problema. [KET99].

14

3. Model Driven Architecture

A Object Management Group é a entidade idealizadora do MDA e nesta

etapa iniciaremos com uma visão geral sobre a OMG, continuaremos com uma

abordagem sobre o MDA, o que é, como está estruturado e como funciona.

3.1 OBJECT MANAGEMENT GROUP A OMG foi fundada em abril de 1989 inicialmente por 11 companhias

realizando operações independentes sem fins lucrativos. Com o objetivo de

desenvolver excelência tecnológica, comercialmente viável e independente de

especificações proprietárias para a indústria de software. O novo consórcio inclui

aproximadamente 800 membros.

Foi formada para ajudar a reduzir a complexidade, baixar os custos e

acelerar a introdução de novas aplicações padronizadas. A OMG pretende atingir

essa meta através da introdução do MDA.

A OMG é responsável pelo aparecimento de tecnologias como CORBA,

XML, XMI, UML, MOF, CWM, entre outras. A organização é respeitada

mundialmente e as tecnologias criadas pelo grupo são sempre inovadoras e

tendem a se tornar padrões de desenvolvimentos.

3.2 MDA

3.2.1 O QUE É MDA?

O MDA é um framework para desenvolvimento de software. A chave do

MDA é a importância dos modelos no processo de desenvolvimento. Com MDA o

processo de desenvolvimento de software é dirigido pela modelagem do sistema.

MDA define uma abordagem à especificação de sistemas de informação

que separa a especificação das funcionalidades do sistema, da especificação da

implementação dessa funcionalidade numa plataforma específica, abstraindo a

maneira como o mesmo usará as potencialidades de sua plataforma.

15

O objetivo é automatizar algumas das etapas do processo de

desenvolvimento de software incluindo a geração de código para a plataforma

escolhida.

As três principais metas do MDA são a portabilidade, interoperabilidade e

usabilidade baseada na separação de interesses.

Para entender o impacto que o MDA trará para a engenharia de software é

só analisarmos a atuação da OMG e sua influência na indústria de software. A

OMG sempre buscou a definição de normas que facilitassem e padronizassem o

desenvolvimento de sistemas buscando a tão sonhada interoperabilidade.

3.2.2 Arquitetura

O coração da arquitetura está no centro da Figura 1, é baseado nos

padrões de modelagem da OMG: UML, MOF e CWM.

Outras duas camadas completam a arquitetura. A primeira representa as

plataforma que são alvo do framework atualmente e a segunda representa os

serviços que devem existir independente da plataforma adotada.

Figura 1 - Arquitetura MDA

16

3.2.2.1 O Núcleo

O núcleo do MDA compreende um conjunto de UML profiles, desenvolvidos

pela OMG, cada um abrangendo determinada área do processo de

desenvolvimento. Esses profiles representam as características comuns de todos

os ambientes middleware apropriados, porém será independente de qualquer

plataforma específica.

MOF – Meta-Object Facility

O MOF é uma ampla especificação. O principal foco é o gerenciamento de

meta-dados, fornecendo um framework que suporta qualquer tipo de meta-dados

e permita que novos tipos sejam adicionados se necessário.

O que permite isso é sua arquitetura baseada na arquitetura tradicional de

meta-modelos, de quatro camadas que são padronizados por órgão como ISO e

CDIF. Estas camadas estão descritas abaixo:

• Informação: É a camada usada pelos Objetos, e compreendem as

informações que desejamos descrever. Estas informações são

tipicamente referenciadas como “dados”;

• Modelo: Esta camada engloba as informações descritas pelos meta-

dados. Os meta-dados são informalmente agregados como modelos.

• Meta-modelo: Compreende as descrições que definem a estrutura e

semântica dos meta-dados. Meta-meta-dados são informalmente

agregados como meta-modelos. Um meta-modelo pode ser pensado

como sendo uma “linguagem” para descrever diferentes tipos de

dados.

• Meta-meta-modelo: Compreende as descrições que definem a

estrutura e semântica dos meta-meta-dados, em outras palavras, é a

“linguagem” para definição de diferentes tipos de meta-dados.

17

A figura 2 mostra a arquitetura MOF englobando modelos e meta-modelos

para UML e OMG IDL.

Figura 2 - Arquitetura MOF

A arquitetura dos meta-dados de MOF tem algumas características

importantes que a distinguem de outras arquiteturas:

• MOF é orientado a objetos e suporta meta-modelos alinhados com

os modelos de objetos de UML;

• O modelo de MOF é auto descritivo, ou seja, o modelo de MOF é

formalmente definido com seus próprios modelos.

O fato do MOF se autodefinir ajuda a validar seus meta-modelos. Desde

que ele possa se auto descrever, ele deve ser adequado para descrever outros

meta-modelos de mesma complexidade.

UML – Unified Model Language

UML é um sistema de notação, incluindo a semântica, dirigida à

modelagem de sistemas, usando conceitos orientados a objetos. UML é um

padrão aceito pela indústria para a modelagem orientada a objetos.

Ela começou como um esforço conjunto de Grady Booch e Jim Rumbaugh

em 1994, para combinar seus dois métodos populares – os métodos Booch e

18

OMT(Object Modeling Techinque). Mais tarde, Ivar Jacobson se juntou a eles (o

criador do método OOSE, Object Oriented Software Engineering). Em resposta a

uma solicitação da OMG para definir uma linguagem e notação de modelagem

padronizada, UML foi submetida como candidata em 1997.

A OMG aceitou UML, a qual também recebeu a aprovação de fato pela

indústria, uma vez que seus criadores representam métodos de análise e/ou

projeto de primeira geração muito populares.

UML ajuda você a especificar, visualizar e documentar modelos de

software, incluindo sua estrutura e designer, de modo que englobe todos os

requisitos. Você pode utiliza-lo para modelar negócio e também outros sistemas

que não sejam software.

Com UML pode ser modelado qualquer tipo de aplicação, rodando com

qualquer combinação de hardware, sistema operacional, linguagem de

programação e rede. É flexível possibilitando a modelagem de aplicações

distribuídas utilizando qualquer middleware disponível no mercado. UML é

construído baseado em MOF o qual define classe, operações e conceitos

fundamentais que são ajustados naturalmente a linguagens e ambientes

orientados a objetos.

UML forma a fundação do MDA, pois com ele pode-se especificar sistema

independente de plataforma ou especificar para uma plataforma específica e MDA

utiliza essas duas formas.

UML não é uma metodologia, mas sim uma linguagem de modelagem. As

metodologias definem métodos e processos de desenvolvimento para a criação

efetiva de sistemas de software, no entanto, agora, podem faze-lo usando uma

linguagem comum.

CWM – Common Warehouse Model

19

CWM fornece um framework para representar os meta-dados sobre a

origem dos dados, dados alvos, transformação e análises, e o processo e

operação que criam e gerenciam data warehouse e provê informações sobre seu

uso.

O meta-modelo CWM consiste em um conjunto de sub-meta-modelo que

representam os meta-dados comum do warehouse. Os sub-meta-modelos são:

• Data Source: Incluem meta-modelos que representam orientação a

objetos, registros, relacionamentos, multidimensionalidade e XML;

• Data Analysis: Incluem meta-modelos que representam as

transformações de dados, OLAP, Data Mining, informações visuais e

nomenclatura de negócio.

• Warehouse Management: Incluem meta-modelos que representam

processos e resultados de operações warehouse.

Figura 3 - Meta-modelo CWM

Em resumo o CWM é um padrão de meta-dados específico para a

integração de Data Warehouses, e-business e sistemas de negócio inteligentes

em ambientes heterogêneos e distribuídos, através de uma representação e de

um formato de troca de meta-dados. É uma iniciativa do grupo, com o objetivo de

prover um framework orientado a objetos e padronizado para aplicações

20

distribuídas, visando dar suporte a reusabilidade, portabilidade e

interoperabilidade entre componentes de DW.

Utiliza a UML como linguagem de modelagem padrão, organizando os tipos

de meta-dados por assunto segundo categorias e funções num DW.

3.2.2.2 Camada Intermediária

Essa camada compreende os ambientes middleware que são alvo do MDA

atualmente: O ambiente web-service, CORBA principalmente CORBA Component

Model ou CCM, Java incluindo EJB, C#, .NET, XML/SOAP. Se sua plataforma

favorita não estiver nessa lista ou se novas plataformas surgirem os membros da

OMG irão adiciona-las o mais breve possível.

3.2.2.3 Pervasive Services

Todas as aplicações, independente do contexto, dependem de um conjunto

de serviços essências. Esses serviços variam de acordo com a origem do sistema,

mas normalmente incluem serviços de diretórios, segurança, manipulação de

eventos, persistência e transações. Esses serviços estão representados na

arquitetura no anel mais externo.

Ainda que com mesmos objetivos, em termos de implementação esses

serviços quando definidos e construídos em plataformas específicas possuem

características que os restringem das demais plataformas.

No framework MDA os pervasive services são representados no mais alto

nível de abstração. A este nível de abstração, a maneira com que esses serviços

serão implementados na plataforma específica ficará a cargo do framework

deixando transparente o funcionamento para o desenvolvedor.

21

3.2.3 Ciclo de Vida

Historicamente sistemas têm sido desenvolvidos, gerenciados e integrados

usando um grande número de tecnologias, ferramentas e middleware. O que

temos visto ultimamente é uma movimentação gradual para modelos semânticos

mais completos, bem como padrões de representação de comunicação de dados.

Neste aspecto a OMG contribui com as tecnologias já citadas UML, CWM, MOF,

entre outras. Essas tecnologias podem ser usadas para melhor integrar as fases

do ciclo de vida do sistema

O ciclo de vida do MDA não difere muito dos ciclos de vida dos modelos

tradicionais. As mesmas fases podem ser identificadas. Uma das maiores

diferenças está na natureza dos artefatos que são criados durante o processo de

desenvolvimento. Os artefatos são modelos formais que podem ser entendidos

pelo computador.

Na Figura 4 – ciclo de vida do MDA, cada uma das esferas representa uma

das etapas do processo de desenvolvimento, que é bastante similar às demais

metodologias. A primeira etapa é o levantamento de requisitos, em seguida as

etapas de análise, design, codificação, teste e implantação. O que difere são as

saídas das etapas, que são representadas pelos quadrados, onde surgem novos

conceitos e modelos, que serão vistos em mais detalhes a seguir.

22

.

Figura 4 – Ciclo de vida do MDA

3.2.4 Funcionamento

Para entendermos o funcionamento do MDA devemos conhecer os

modelos definidos pela sua arquitetura. Esses modelos são à base do

funcionamento do framework, o que torna possível o alcance dos objetivos

proposto.

Requisitos

Analise

Design

Codificação

Teste

Implantação

Fonte

PIM

PSM

Fonte

Processo

MDA

Especificação De Requisitos

23

3.2.4.1 PIM – Modelo independente de plataforma

Todo projeto em MDA começa com a criação do modelo independente de

plataforma. O objetivo do PIM é expressar apenas as funcionalidades de negócio

e comportamento, devendo ser construído por analista de negócio e de modelo,

sendo o mais preciso possível.

O PIM pode ser refinado tornando-se ainda mais precisos. Para isso

podemos incorporar ao PIM alguns aspectos de tecnologia sempre abstraindo

detalhes de alguma plataforma específica. Por exemplo, todos os ambientes

permitem especificar padrões, alguns dos padrões de modelagem que são

incorporados a todas as tecnologias foram também incorporados ao UML,

tornando fácil à adoção de algum padrão de desenvolvimento, apenas

identificando alguns estereótipos nos modelos.

Além dos padrões de desenvolvimento, neste nível também podem ser

incorporados aos modelos, os pervasive services. Como vimos anteriormente, os

pervasive services são modelados em MDA no mais alto nível de abstração,

sendo este mais alto nível representado pelo PIM.

O PIM pode ser refinado tantas vezes quanto necessário até que se atinja o

nível de precisão desejado. O PIM produzido especifica a funcionalidade e

comportamento do sistema e os links aos pervasive services, finalizada esta etapa

esses modelos serão transformados em outros modelos que levam em

consideração todas as características específicas da plataforma escolhida(PSM).

3.2.4.2 PSM – Modelo específico para plataforma

O PSM é uma visão do sistema do ponto de vista específico da plataforma.

Um PSM combina as especificações no PIM com os detalhes que especificam

como esse sistema usa um tipo particular de plataforma.

Uma vez que a primeira interação do PIM esteja completa o mesmo é

armazenado em MOF e serve como entrada para a produção do modelo

24

específico para a plataforma, como mostrado na Figura 5. Especificações e

extensões UML dão o poder de representar tanto PIM quanto PSM.

Figura 5 - Processo com MDA

Para produzir o PSM é necessário escolher a plataforma alvo ou

plataformas para os modelos da aplicação. Caso a ferramenta de desenvolvimento

utilizada não saiba qual a plataforma e quais pervasive services serão utilizados,

essas informações deverão ser fornecidas.

25

Durante o mapeamento as características de tempo real e informações de

configuração que projetamos de uma maneira geral são convertidas para

formulários específico requeridos pela plataforma alvo. Através de um

mapeamento padrão, as ferramentas automatizam as conversões possíveis

deixando os pontos ambíguos para serem implementados a mão. As versões mais

antigas do MDA podem requerer ajustes consideráveis, sendo que a quantidade

diminuirá com os profiles e o amadurecimento dos mapeamentos.

3.2.4.3 Transformação

O processo MDA se parece muito com o processo de desenvolvimento

tradicional, a grande diferença e vantagem do processo MDA está na

transformação de PIM para PSM, sendo que este processo pode e deve ser

automatizado para que se obtenha todos os benefícios que o framework oferece.

Ocorrem duas transformações essências no processo, a primeira é a

transformação do PIM para PSM e a segunda de PSM para código. A

transformação de PSM para código não é nenhuma novidade, uma vez que este

modelo é muito próximo ao código. Essas transformações são baseadas em

mapeamento que consistem em um conjunto de regras de transformação que são

especificações não ambíguas de modo que o modelo possa ser usado para criar

outro modelo.

A figura 6 mostra a descrição do metamodelo MDA. PIM, PSM e técnicas

de mapeamento são baseadas em metamodelos expressados preferencialmente

por tecnologias OMG (MOF, UML ou CWM).

26

Figura 6 – Metamodelo MDA

Em MDA, uma das características chave é a noção de mapeamento.

Mapeamento é um conjunto de regras e técnicas usadas para modificar um

modelo a fim de gerar outro. Os mapeamentos são usados para transformar:

• PIM para PIM – Esta transformação é usada quando os modelos são

refinados, filtrados ou especializados durante o ciclo de vida do

desenvolvimento sem necessitar nenhuma informação que dependa

da plataforma. O mapeamento mais óbvio é o da análise para o

projeto. Mapeamentos PIM para PIM são usados geralmente para o

refinamento do modelo.

• PIM para PSM – Esta transformação é usada quando o PIM está

refinado o suficiente para ser projetado para a infraestrutura

específica. A projeção é baseada nas características da plataforma.

A descrição destas características deve ser feita usando uma

descrição UML e eventualmente um profile para descrever conceitos

comuns da plataforma. Ir de um modelo de componente lógico a um

27

modelo de componente comercial existente, como EJB para a

plataforma J2EE ou CCM para a plataforma CORBA, é um tipo de

mapeamento PIM para PSM.

• PSM para PSM – Esta transformação é necessária para a

concretização e a extensão dos componentes. Por exemplo,

empacotamento dos componentes é realizado através da seleção

dos serviços e sua configuração. Uma vez empacotados, a entrega

dos componentes pode ser feita pela especificando inicial dos dados,

máquinas alvo, geração e configuração do container, etc.

Mapeamentos PSM para PSM são usados geralmente para refinar o

modelo dependente da plataforma.

• PSM para PIM – Esta transformação é requerida para a abstração

de modelos implementados em uma plataforma específica em um

modelo de plataforma independente. Este procedimento assemelha-

se freqüentemente a um processo de "mineração" que é difícil ser

automatizado inteiramente. Porém pode ser suportado por

ferramentas. Idealmente, o resultado deste mapeamento resultará

no PIM correspondente ao mapeamento PSM.

UML Profiles tem um papel importante dentro de MDA, visto que MDA os

usa para realizar os mapeamentos entre modelos. Para implementar

mapeamentos é necessário conhecer os metamodelos de entrada e os modelos

de saídas bem como suas regras de mapeamentos.

Há múltiplos caminhos para transformar um PIM expressado em UML para

um PSM correspondente também expressado em UML:

• Alguém pode estudar o modelo independente de plataforma e

construir a mão o modelo específico para plataforma.

• Alguém pode estudar o modelo independente de plataforma e utilizar

modelos de padrões de refinados conhecidos para reduzir a

dificuldade na construção do PSM e a relação de refinamento entre

os dois.

28

• Um algoritmo pode ser aplicado ao modelo independente de

plataforma e criar um esqueleto do modelo específico para

plataforma e ser refinado manualmente, talvez usando alguns dos

mesmos padrões de refinamento do segundo item.

• Um algoritmo pode criar um modelo específico para plataforma

completo de um modelo independente de plataforma completo,

explicitamente ou implicitamente gravando a relação de refinamento

para o uso de outras ferramentas automatizadas.

As transformações inteiramente automatizadas são praticáveis em

ambientes restritos. O grau de transformações automatizadas pode ser

aumentado consideravelmente quando as seguintes circunstâncias são obtidas:

• Não existe relação com sistemas legados.

• O modelo de entrada para a transformação é semanticamente rico.

• O algoritmo de transformação ser de alta qualidade.

29

4. Como MDA pode ajudar na solução dos problemas atuais

Nas seções anteriores vimos alguns dos principais problemas encontrados

no desenvolvimento de software atualmente, o que é MDA e como o mesmo

funciona. Nesta seção veremos como ele pode ajudar realmente na solução dos

problemas apresentados.

4.1 Produtividade

Em MDA o foco maior do desenvolvedor está no desenvolvimento do PIM.

Desde que o desenvolvedor possa trabalhar independentemente de detalhes

específicos da plataforma alvo, há muitos detalhes técnicos que eles não precisam

se incomodar. Esses detalhes técnicos são automaticamente adicionados na

transformação de PIM para PSM. Isto pode melhorar a produtividade de duas

formas.

Em primeiro lugar o desenvolvedor tem menos trabalho porque os detalhes

específicos da plataforma não precisam ser projetados e escritos. Estes detalhes

estão definidos no mapeamento das transformações. Em nível de PSM a muito

menos código a ser escrito, porque a maior parte do código já é gerada a partir do

PIM.

O segundo melhoramento é conseqüência do desenvolvedor estar mais

focado na produção do PIM, prestando mais atenção do negócio, na arquitetura e

no modelo de objetos por traz do sistema. Engenharia de Software tem provado

que projetar o sistema primeiro irá reduzir as possibilidades de erros arquiteturais

do sistema. Como resultado temos um sistema que se ajusta melhor as

necessidades dos usuários finais, sendo que esses usuários podem obter essas

melhores funcionalidades em menos tempo.

Todo esse ganho de produtividade pode ser atingido apenas com o uso de

ferramentas que automatizam a geração do PSM a partir do PIM. Note que isso

implica em muitas informações estarem incorporadas ao PIM e/ou a ferramenta de

geração.

30

Outro fator importante para o ganho da produtividade é a geração de

código. Gerando código automaticamente podemos economizar o trabalho que é

requerido para escrever os mesmos arquivos sempre. Por exemplo, na plataforma

J2EE às vezes precisamos escrever seis ou mais arquivos para criar apenas um

componente EJB. A maioria disso poderia ser automatizada com uma ferramenta

de geração.

4.2 Portabilidade

Com MDA a portabilidade é alcançada pelo foco do desenvolvimento nos

PIM’s, que são definidos independente de plataforma. O mesmo PIM pode ser ao

mesmo tempo transformado em diversos PSM para diferentes plataformas. Tudo o

que se especifica em nível de PIM deve ser completamente portável.

A portabilidade está limitada as ferramentas de geração automática que

estão disponíveis. Para as plataformas mais populares um grande número de

ferramentas estão sendo disponibilizadas, para as menos populares deve-se ter

uma ferramenta que suporte um plugin para definição de transformações e essas

definições devem ser descritas manualmente. Para novas tecnologias e

plataformas que irão chegar no futuro a industria de software precisa disponibilizar

os mapeamentos de transformações a tempo. Isso nos permite rapidamente

desenvolver novos sistemas com novas tecnologias baseadas nos modelos de

PIMs já existentes.

4.3 Interoperabilidade

A figura 7 mostra vários PSM gerados a partir de um PIM e podem ter

relações. Em MDA essas relações são chamadas de bridges(pontes). Quando os

PSMs são alvos para diferentes plataformas eles não podem conversar

diretamente um com outro, de uma forma ou de outra nós precisamos transformar

os conceitos de uma plataforma em conceitos usados para a outra plataforma.

31

MDA resolve esse problema gerando não apenas PSM mas também as pontes

necessárias entre eles.

Figura 7 – Interoperabilidade MDA com o uso de bridges

Sendo capaz de transformar um PIM em dois PSM’s alvos de duas

plataformas, todas as informações que são necessárias para a construção das

pontes entre os dois PSM’s estão disponíveis. Para cada elemento de um PSM é

conhecido o elemento no PIM que o originou. A partir do elemento PIM sabe-se

qual é o elemento correspondente no segundo PSM. Pode-se então deduzir como

os elementos de um PSM se relacionam com elementos de um segundo PSM.

Desde que também se conheça todos os aspectos e detalhes técnicos de todos os

PSM’s, se tem todas as informações necessárias para gerar a bridge entre os dois

PSM’s.

Tomando como exemplo, um PSM podia ser o modelo Java e o outro PSM

poderia ser um modelo relacional. Para um elemento Cliente no PIM sabe se quais

classes Java ele se transformou. Também são conhecidas as tabelas que esse

elemento foi transformado. Construir uma bridge entre o objeto Java no PSM-Java

e uma tabela no PSM-Relacional é fácil. Para buscar um objeto na base de dados

deve-se selecionar os dados das tabelas do cliente e incializar as classes do outro

PIM

PSM

Code Code

PSM PSM Bridge

Code Bridge

Primeira Transformação

Primeira Transformação

Segunda Transformação

Segunda Transformação

32

PSM com esses dados. O armazenamento é realizado obtendo os dados a partir

de um objeto Java e persistindo nas tabelas do cliente.

A interoperabilidade entre plataformas pode ser realizada por ferramentas

que não geram apenas PSM, mas também as bridges entre eles, e possivelmente

a outras plataformas também.

4.4 Manutenção e Documentação

O PIM é usado para gerar PSM e o PSM é usado para gerar código. O

modelo é a exata representação do código. O PIM tem a função de documentar o

mais alto nível de abstração que é necessário para qualquer sistema. A grande

diferença é o que PIM não é abandonado depois de construído, mudanças

realizadas no sistema são realizadas por mudança no PIM e feita uma nova

geração de PSM e código.

Boas ferramentas entre tanto mantém esses elementos sincronizados, ou

seja, qualquer alteração em qualquer um destes elementos refletira em alterações

correspondentes nos demais.

Em MDA a documentação de mais alto nível estará naturalmente refletindo

a exata implementação do sistema, tornando assim a manutenção do sistema e da

própria documentação menos custosa.

33

5. Ferramentas MDA

Como vimos anteriormente, MDA pode nos ajudar em vários aspectos no

processo de desenvolvimento. Mas todo o ganho que MDA pode oferecer, está

totalmente vinculado as ferramentas que dão suporte a esta abordagem. Nesta

seção abordaremos algumas das ferramentas que implementam este conceito,

algumas delas de forma completa (modelagem, transformações entre modelos e

geração de código), porém a grande maioria das ferramentas existentes dão

suporte apenas parte dos conceitos que o framework adota.

5.1 Compuware OptimalJ

OptimalJ tem a sua base nos padrões da indústria, definidos pela OMG,

como MDA que gera aplicações J2EE diretamente de modelos visuais deixando

por conta dos patterns as melhores práticas na geração dos códigos e com um

alto nível de abstração. Tudo isso com foco na funcionalidade da aplicação e não

na sua implementação.

Fornece um simples e fácil, porém poderoso modo de desenvolver

aplicações Java distribuídas, sem envolver os desenvolvedores na complexidade

da arquitetura J2EE. Desenvolvedores com pouca experiência podem facilmente

construir ou modificar aplicações, enquanto desenvolvedores experientes podem

se voltar para construção e refinamentos da arquitetura. Isto significa que podem

focar no que você esta construindo, e não como está construindo.

34

Figura 8 - Interface OptimalJ

Usando OptimalJ, os desenvolvedores interagem com um modelo visual da

aplicação e geram automaticamente a maior parte do código necessário para

executar uma aplicação multicamada completa. Usando este paradigma visual, os

desenvolvedores podem abstrair a complexidade do desenvolvimento distribuído

em J2EE.

Além do ambiente visual, o ambiente integrado de desenvolvimento fornece

um editor de fonte, um navegador de classes, um editor de formulário e um

debugger para permitir aos desenvolvedores ver, modificar e customizar a

aplicação gerada. As classes existentes não geradas por OptimalJ podem ser

importadas e chamadas pela aplicação.

OptimalJ utiliza padrões para gerar todo código necessário. Padrões

encapsulam as melhores práticas para codificação J2EE. Com OptmalJ, pode-se

rapidamente criar aplicações usando um conjunto completo de componentes

35

J2EE, incluindo Enterprise Java Beans(EJB), Java Server Page(JSP), entre

outros.

Esta ferramenta mantém sincronizados o código fonte e os modelos, de

forma que qualquer um que seja alterado implique na alteração nos demais, além

de permitir a integração com outras ferramentas. Ele permite a importação de

diversos modelos já existentes, o que inclui diagramas UML no formato XML

(Extensible Markup Language) que podem ser gerados por produtos como o

Rational Rose, da IBM, arquivos IDL do CORBA e JCA do Cobol, além de web

services na extensão WSDL e arquivos .JAR já existentes.

Como prega o MDA, o foco do desenvolvimento com OptmalJ está nos

modelos, a partir dele a aplicação é gerada, tendo um ganho de produtividade

significativo, além de manter sincronizados os modelos e código fonte, mantendo

uma documentação do sistema sempre atualizadas.

A restrição quanto à ferramenta está no fato desta gerar aplicações

exclusivamente para plataforma J2EE, deixando a empresa que adota esta

ferramenta, engessada nesta arquitetura.

5.2 Rational XDE

IBM Rational Rose XDE oferece aos analistas e desenvolvedores a

possibilidade de desenvolvimento dirigido a modelo em um ambiente para

construção que permite desenvolver software com rapidez e qualidade. Oferece

um ambiente visual e de desenvolvimento completo que visa suprir as

necessidades das organizações que utilizam J2EE, C++ e .NET. Permite aos

usuários trabalhar dentro de IDE´s, incluindo Eclipse, ou pode ser instalado dento

do WebSphere Studio e Microsoft Visual Studio .NET.

36

Figura 9 - Interface Rational XDE

O Rational Rose XDE fornece todos os elementos essenciais de UML em

um único produto. Pode ser aplicado na análise, arquitetura, projeto e

implementação. Fornece ferramentas comuns para criação e manutenção de

modelos UML, suporta engenharia reversa do código e geração automática de

código e permite o controle de quando e como os modelos serão sincronizados ao

código.

XDE possui templates de código que aumenta o poder desta ferramenta

com relação à geração de código. Esses templates geram muito mais do que o

esqueleto do código. Em poucas palavras, os templates de código contem parte

de código escritos na plataforma alvo, como Java, e scripts como JavaScripts que

podem ser executados dinamicamente quando o template de código for aplicado a

um elemento do modelo.

37

O Rational XDE possui padrões baseados em UML, ou em relacionamentos

estruturados e comportamentos que podem ser aplicados em situações gerais no

desenvolvimento de software. Os padrões fornecem um refinamento de modelo

para modelo enquanto que os templates de código fornecem um refinamento de

modelo para código.

O Rational XDE é uma das ferramentas mais completas atualmente, pois

implementa a grande maioria dos conceitos MDA. Com essa ferramenta

conseguimos a automatização não apenas para uma plataforma. Para grandes

empresas, é um investimento justificável, pois pode se ter o retorno rapidamente,

mas para pequenas empresas o investimento feito em uma ferramenta como essa

pode ser inviável.

5.3 AndroMDA

AndroMDA é um framework de geração de código, que pega modelos UML

gerados por alguma ferramenta de modelagem no formato XMI e gera

componentes customizados. Vem com um conjunto de templates de geração

baseados em tags XDoclet.

A figura 8, mostra o funcionamento da ferramenta. A partir de modelos XMI

gerados por alguma ferramenta de modelagem, o AndroMDA gera os

componentes JAVA usando o template adequado para cada elemento do modelo.

Este templete é baseado em tags XDoclet.

38

Figura 10 - AndroMDA Funcionamento

XDoclet é uma ferramenta para gerar texto e código através do

processamento de templates. É uma extensão da API Javadoc Doclet, da Sun,

aplicação mais popular é gerar artefatos EJB. A partir de templates para esta e

muitas outras tecnologias, é possível automatizar a codificação de sistemas.

XDoclet é o coração do AndroMDA, pois esta vem com um grande conjunto

de templates permitindo a geração automática de vários componentes. AndroMDA

permite também que você crie seus próprios templates e os adicione ao conjunto

de templates do AndroMDA.

A grande vantagem do AndroMDA é ser uma ferramenta open source, de

geração de código para plataforma JAVA a partir dos modelos, ou seja, as

atenções do desenvolvedor está voltada para o negócio do sistema.

A restrição está no fato de não implementar todos os conceitos de MDA.

Como o AndroMDA não é uma ferramenta de modelagem, não é possível

sincronizar código fonte e modelo, e em alguns casos existe algumas

incompatibilidades com algumas ferramentas de modelagem, e ser exclusivo para

plataforma JAVA, contudo é uma solução barata para aumento da produtividade.

39

6. MDA na Prática

Neste capítulo iremos apresentar uma análise prática do processo MDA

utilizando a ferramenta OptimalJ. A escolha dessa ferramenta se deve ao fato de

ser, entre as ferramentas pesquisadas, a que mais se adequou a tal paradigma.

Para tanto desenvolvemos uma aplicação de controle de compra e venda

de mercadorias de uma loja fictícia. A aplicação é relativamente simples e foi

desenvolvida sem nenhuma pretensão comercial, visando apenas à ilustração do

paradigma.

6.1 Aplicação de Controle de Compra e Venda de Mercadorias

O exemplo que será explorado neste trabalho consiste em uma aplicação

de controle de compra e venda de mercadorias que pode ser utilizado para

qualquer estabelecimento com tal necessidade, é uma aplicação relativamente

simples visto que o objetivo não é um software comercial, mas sim a ilustração do

processo MDA.

A aplicação consiste em gerenciar as operações de compra e venda de um

estabelecimento comercial qualquer, disponibilizando ao usuário as

funcionalidades de cadastro de produtos e fornecedores, bem como o registro de

uma compra e de uma venda realizando o controle de estoque. O usuário cadastra

os produtos, clientes, vendedor e os fornecedores e após disso está apto a

registrar uma compra ou uma venda.

No cadastro de produtos é possível cadastrar a porcentagem que se está

acrescentando ao valor pago por ele, facilitando um possível desconto no

momento da venda. Também é cadastrada a quantidade mínima de que o produto

deve ter no estoque. Um produto é fornecido por apenas um fornecedor, sendo

que um fornecedor pode oferecer vários produtos.

A compra consiste na aquisição de uma lista de produtos de um

determinado fornecedor para o estabelecimento, sendo confirmada o estoque

deve ser atualizado. A venda é semelhante à compra, porém na venda o vendedor

40

pode oferecer um desconto para o cliente com base na porcentagem que o

produto está sendo vendido e o cliente adquire uma lista de produtos

independente de fornecedores.

6.2 Arquitetura da aplicação

Optamos por utilizar uma arquitetura de três camadas (MVC), apesar de a

ferramenta nos dar outras opções, por ela fornecer uma maneira de dividir a

funcionalidade envolvida na manutenção e apresentação dos dados de uma

aplicação de forma a facilitar o entendimento.

Nesta arquitetura o modelo representa os dados da aplicação e as regras

do negócio que gerenciam o acesso e a modificação dos dados. O modelo

mantém o estado persistente do negócio e fornece ao controlador a capacidade de

acessar as funcionalidades da aplicação encapsuladas pelo próprio modelo.

A visualização renderiza o conteúdo de uma parte particular do modelo e

encaminha para o controlador as ações do usuário, também acessa os dados do

modelo via controlador e define como esses dados devem ser apresentados.

Um controlador define o comportamento da aplicação, é ele que interpreta

as ações do usuário e as mapeia para chamadas do modelo. As ações realizadas

pelo modelo incluem ativar processos de negócio ou alterar o estado do modelo.

Com base na ação do usuário e no resultado do processamento do modelo, o

controlador seleciona uma visualização a ser exibida como parte da resposta a

solicitação do usuário. Há normalmente um controlador para cada conjunto de

funcionalidades relacionadas.

6.3 Aplicando o MDA

No desenvolvimento da aplicação nós podemos identificar quais PSMs e

modelos de código podem ser derivados e quais definições de transformações

podem ser usadas para gerar os PSMs e o modelo de código. Todos os modelos

41

MDA usados no exemplo são mostrados na figura abaixo. Os retângulos

representam os modelos e as setas as transformações usadas.

Figura 11 - Três Níveis de Modelo

6.3.1 PIM e PSM

Para iniciarmos o processo devemos construir um modelo de plataforma

independente que compreenda o negócio da aplicação. Nosso PIM será um

diagrama de classe UML. Esse será o único modelo a ser construído, os outros

serão gerados.

Cada camada usa uma tecnologia diferente e, portanto necessitamos de um

modelo específico para cada camada (PSM). O primeiro modelo é um modelo

relacional que descreve entidades e relacionamentos.

O PSM para a camada intermediária, chamada de modelo EJB, é escrita

em uma linguagem que é variante de UML. Ela usa classes, associações e assim

42

por diante, como em UML, mas há um número de estereótipos definidos

explicitamente para a plataforma EJB.

O PSM para interface Web também é escrito por uma variante de UML.

Essa linguagem usa estereótipos diferentes da variante UML utilizadas para o

modelo EJB.

6.3.2 Transformações PIM para PSM

Como três modelos PSMs precisam ser gerados, nós precisamos de três

transformações de PIM para PSM:

• Transformação de PIM para modelo relacional: Essa transformação

consite em pegar o modelo de entrada, no nosso caso o diagrama de

classes, e produzir um modelo escrito em termos de entidade-

relacionamento. O template para essa transformação não utiliza

nenhuma variante de UML, consiste apenas em um mapeamento.

• Transformação de PIM para modelo EJB: A transformação usa o PIM

como entrada e escreve o modelo EJB com variantes UML usando

estereótipos especiais para EJB, podemos também utilizar o PSM

entidade-relacionamento para gerarmos o modelo EJB.

• Transformação de PIM para modelo Web: O nosso modelo de

entrada é o PIM novamente, a transformação utiliza variante UML

agora com estereótipos especiais para a interface Web para gerar o

modelo Web.

6.3.3 Transformação de PSM para modelo de código

Para cada PSM nós precisamos gerar código. O código foi incluído

explicitamente para caber em nossa definição do modelo. Conseqüentemente, nós

podemos falar dos modelos do código escritos em alguma linguagem de

programação. Para a nossa aplicação exemplo nós temos três modelos de código,

43

em SQL, Java e JSP. Consequentemente nós precisamos de três transformações

de PSM para código:

• Transformação de modelo relacional para SQL: A transformação usa

o modelo de entidade-relacionamento para gerar o modelo SQL.

• Transformação do modelo EJB para Java: Essa transformação pega

o modelo EJB e produz um modelo Java.

• Transformação do modelo web para JSP e HTML: Essa

transformação usa o modelo de web como entrada e escreve um

modelo em JSP e HTML

Tanto as transformações de PIM para PSM como de PSM para Modelo de

códigos, são realizadas com base em templates que estão acoplados a

ferramenta.

6.3.4 Três Níveis de Abstração

Todos os modelos descritos especificam o mesmo sistema, sendo que a

diferença entre eles é o nível de abstração. O nível mais alto de abstração é

definido pelo PIM, nosso diagrama de classe. Esse modelo define os conceitos

sem especificar nenhuma tecnologia, podendo ser usado para gerar PSMs

diferentes dos que estamos gerando.

No próximo nível estão os PSMs, eles abstraem os padrões de codificação

das tecnologias, porém são específicos da plataforma.

O último nível compreende os modelos de código. Esses modelos são de

fato puros e específicos da plataforma, abrangendo até mesmo padrões de

codificação da linguagem escolhida.

Podemos ver na figura (figura do livro) bem a diferença entre os três níveis

de abstração e a transformação entre eles. É importante observar que temos três

camadas e três níveis de abstração, as camadas são escritas da direita para a

esquerda enquanto que a abstração é escrita de cima para baixo.

44

6.3.5 Transformação PIM para Relacional

A regra de transformação para gerar um modelo de base de dados

relacional tipicamente consiste em mapear objetos consistentes. Embora muito

dessas regras seja direta e bem conhecida, pode ser um trabalho difícil executá-

las manualmente. Pequenas mudanças no PIM podem ter grande impacto no

modelo relacional.

6.4 PIM

O diagrama de classes abaixo, figura 12, apresenta as características da

nossa aplicação sem vincular nenhuma tecnologia. O PIM diz o que a aplicação

faz sem dizer como ela vai fazer, é o modelo com o nível mais alto de abstração.

Figura 12 - Diagrama de Classes da Aplicação

45

Podemos observar que temos as informações apenas gerais, como que

dados devemos conhecer sobre um cliente, quais dados são necessários

conhecermos de um vendedor, o que devemos saber sobre um produto e sobre

uma venda, entre outros. Como falamos anteriormente a aplicação é

relativamente simples, consiste em registrar um pedido de compra ou uma venda.

A compra está vinculada a um fornecedor e a uma lista de produtos,

representados pelos relacionamentos entre Fornecedor e PedidoCompra e entre

PedidoCompra e ItemPedidoCompra. A cada compra realizada a quantidade de

itens do produto adquirida deve ser atualizada. Também deve ser fornecida uma

margem máxima de desconto para ser praticada na venda.

A venda está vinculada a um produto ou a uma lista de produtos, podemos

observar isso através do relacionamento das classes PedidoVenda e

ItemPedidoVenda, a um vendedor, e a um cliente. Quando um cliente realizar uma

compra no estabelecimento, ao passar o produto é apresentado ao usuário o

desconto máximo que ele pode oferecer ao cliente. Na efetivação da venda, o

estoque é atualizado e os dados armazenados. Uma venda não está

necessariamente atrelada a um cliente, mas caso esteja esses dados são

utilizados posteriormente para possíveis promoções.

6.5 Modelo Relacional

O modelo relacional, figura 13, mostrado abaixo corresponde ao

mapeamento do nosso PIM para um modelo de entidade-relacionamento. Esse

modelo não é complexo de ser construído, mas sem a geração teríamos que

construí-lo na mão o que seria trabalhoso.

46

Figura 13 - Diagrama de Entidade e Relacionamento

Não há nada de especial no diagrama, ele representa a mesma aplicação

que o PIM, porém representado de uma forma diferente, de uma maneira que o

template que gera o código SQL possa interpreta-lo para gerar nossa base de

dados.

A transformação do PIM para o modelo, apenas mapeia as entidades e

relacionamentos, acrescentando informações específicas para a geração do

código SQL. Deve-se ter cuidado quanto a consistências dos objetos mapeados,

verificando se todas as entidades estão mapeadas e estão com os atributos

corretos, se não existe nenhuma entidade a mais e principalmente se os

relacionamentos entre elas estão corretos.

6.6 Modelo de Componentes EJB

A persistência de objetos é uma das partes mais importantes de uma

aplicação e também a que julgamos por nosso tempo de experiência como

desenvolvedores a mais trabalhosa. A ferramenta que escolhemos nos possibilita

a escolha de algumas formas de persistência, nós optamos por utilizar

componentes EJB.

47

Figura 14 - Diagrama Componentes EBJ

Note que todas as entidades estão representadas, estando associadas a

um serviço. Como a ferramenta modela tudo modularmente, podemos observar

que além dos módulos das entidades e dos serviços também forma representadas

interface para os mesmos. Os relacionamentos também estão representados, por

exemplo, o PedidoVenda está associado ao produto, ao cliente e ao vendedor.

Esse diagrama utiliza templates baseado em variantes de UML específicas

para EJB, que adicionam informações específicas sobre a plataforma que nos

permite gerar em seguida o código EJB. O OptimalJ nos permite gerar esse

modelo com base no PIM ou no modelo relacional, sendo que nós decidimos gerar

pelas duas formas para ver se ocorriam diferenças e também para termos uma

transformação de um modelo PSM para PSM com mesmo nível de abstração.

Como sabemos, podemos apartir do modelo ER, através de engenharia

reversa obter o PIM e conseguir gerar então os demais modelos, porém

transformação de PSM para PSM, que estamos nos referindo é direta, isso é

possível uma vez que o modelo ER não está atrelado a nenhuma variante

48

específica de UML e também porque o modelo EJB é o modelo de persistência

dos dados, sendo comum e simples a sua geração através de modelos ER.

Como era de se esperar os modelos gerados não apresentaram diferença.

Esse modelo representa igualmente nossa aplicação como o PIM e modelo ER,

mas assim como o modelo ER ele está vinculado a uma tecnologia específica,

neste caso a plataforma EJB.

6.7 Modelo Web

No modelo Web temos representado o que estará visível para o usuário, o

que realmente o usuário poderá realizar no sistema. Como vemos no diagrama

abaixo o usuário terá acesso à manutenção de clientes, produtos, vendedor e

fornecedor, bem como aos pedidos de compra e venda.

Figura 15 - Diagrama Componentes WEB

Podemos observar que o usuário terá acesso aos mesmos serviços

disponibilizados no modelo EJB. Assim como o modelo EJB, o modelo web é

construído com templates que usam variantes de UML específicas para JSP, que

49

acrescentam ao modelo informações para a confecção dos mesmos

posteriormente. O modelo Web é construído especificando apenas a camada de

apresentação, sem considerar as demais camadas.

O relacionamento entre as camadas é realizado através das pontes de

comunicação.

6.8 Última Transformação – PSM para código

Agora que já temos todos os PSM da nossa aplicação de exemplo gerados,

o próximo passo é a última transformação, PSM para código. Esse passo não

apresenta grandes novidades, visto que um modelo específico de plataforma é

uma visão da aplicação muito próximo ao código da plataforma que este

representa, tornado esta transformação mais simples.

O objetivo deste tópico é apresentar uma visão da tecnologia empregada

para nossa aplicação de exemplo, bem como a arquitetura na qual esta foi

desenvolvida.

6.8.1 Modelo Relacional para Código SQL

A partir do nosso modelo de negócio, foram gerados três diferentes PSM’s.

Dentre eles esta presente um modelo relacional, que nada mais é do que a

representação da nossa aplicação de exemplo, na visão de um modelo de

Entidade e Relacionamento.

Este modelo é uma representação muito próxima de uma base de dados

relacional, com seus conceitos e características. A partir dele é fácil a geração de

código SQL, e existem várias ferramentas disponíveis no mercado para tal

funcionalidade.

A partir deste modelo, são criados um par de SCRITP’s SQL, um para a

criação da base de dados, outro para deleção da base de dados. Estes scripts

contém todos os comandos necessários para a criação da base de dados e

50

tabelas, bem como os comandos para deleção de cada uma das tabelas e base

de dados.

Estes scripts podem ser analisados no 9.2.

6.8.2 Modelo EBJ para código Java

O segundo modelo gerado a partir do nosso modelo independente de

plataforma foi o modelo EJB, mas antes de prosseguir apresentararemos um

pouco da arquitetura relacionada a esta camada da aplicação.

Como pode ser visto no modelo EJB, existem para cada entidade

representada no nosso PIM, existem dois componentes mapeados no modelo

EJB, o primeiro deles é um Entity Bean, e o segundo um Session Bean, que nada

mais é que um Session Facade para o Entity Bean em questão.

6.8.2.1 Entity Bean

Entity Beans são componentes que representam entidades persistentes.

Em outras palavras, são componentes de negócio com mecanismo de persistência

de dados. O estado do Entity Bean pode ser persistido em um banco de dados

relacional, arquivo XML além de outros tipos de repositórios de dados. Isto quer

dizer que o estado do Entity Bean é mantido além do tempo de vida da aplicação

ou do servidor J2EE. Esta é uma característica muito útil em situações onde se

deseja utilizar os dados desta entidade em momentos que seria inviável mantê-los

em memória.

Existem dois tipos de Entity Beans:

• Bean Managed Persistence (BMP).

51

Utilizando esta estratégia, a codificação das chamadas de acesso à base

de dados estão na classe de negócios do EJB e são de responsabilidade do

desenvolvedor. Então, para os métodos de busca (métodos utilizados para

encontrar Entity Beans na base de dados) e para os métodos de criação, remoção

e atualização dos Entity Beans, deve-se codificar os comandos responsáveis por

realizar estas operações.

O Entity Bean BMP oferece ao desenvolvedor a flexibilidade de desenvolver

as operações de persistência de dados que em alguns casos, podem ser

complexas de serem implementadas pelo container.

• Container Managed Persistence (CMP).

Entity Beans CMP (Bean de Entidade com Persistência Gerenciada pelo

Container) oferecem mais rapidez e facilidade no desenvolvimento de objetos

persistentes, pois o desenvolvedor não precisa escrever os comandos para

persistir e manipular os dados.

O container se encarrega de realizar estas operações e retornar os valores

desejados. Ele faz isso para as operações triviais tais como inserção do objeto,

remoção, atualização e seleção pela chave primária (create, remove, store e

findByPrimaryKey respectivamente).

Para as operações específicas de consulta a objetos persistidos, se faz

necessário o uso de uma linguagem de consulta conhecida como EQL (EJB Query

Language). Uma linguagem muito parecida com SQL, porém voltada para

componentes do tipo Entity Bean CMP.

Estas operações devem ser definidas no arquivo de deploy do componente

utilizando-se de EQL para cada operação desejada. Neste arquivo define-se quais

campos que serão persistidos e os relacionamentos entre Entity Beans.

52

6.8.2.2 Session Bean

Session Beans são componentes que apresentam serviços para seus

clientes. Estes serviços são fornecidos para o cliente pelas interfaces do EJB

Session Bean e implementadas pelos métodos de negócio no próprio Bean. O

estado do objeto Session Bean consiste no valor da instância de seus atributos,

sendo que estes não são persistidos.

Figura 16 - Diagrama de Classe UML do Session Bean

Analisando o diagrama de classes acima temos uma classe e duas

interfaces. A classe do EJB Session Bean SBExampleBean (EJBSession) e as

interfaces SBExample (Remote) e SBExampleHome (Home). Para cada classe do

Bean devemos definir as interfaces (Remote e/ou Local e Home e/ou LocalHome).

No exemplo acima, foram definidas as interfaces Remote e Home, mas poderiam

ter sido definidas as interfaces Local e LocalHome ou todas elas (com isto

teríamos acesso local e remoto ao mesmo EJB).

53

O Bean deve conter os métodos definidos para um EJB Session Bean

conforme a API J2EE que são: ejbCreate(), ejbRemove(), ejbActivate(),

ejbPassivate() e setSessionContext(). Também devem apresentar os métodos de

negócio com suas devidas implementações que serão os serviços disponibilizados

pelo EJB.

Na interface Home do EJB devemos definir o método create(), que será

utilizado pelo cliente para solicitar ao container que crie uma instância do Bean e

forneça uma referência para acessar os seus serviços ou os métodos de negócio

através da interface Remote.

6.8.2.3 Session Façade

Criar uma aplicação EJB controlável requer quebrar a camada do EJB em

duas partes. O modelo de dados é construído via entity beans e geralmente

corresponde à camada de banco de dados base. A lógica de negócio (que em

aplicações antigas poderia ter sido mantida em uma aplicação cliente ou em

stored procedures dentro do banco de dados) é mantida nos session beans. Em

muitas circunstâncias, clientes acessarão session beans que efetuarão ações

sobre entity beans e retornarão resultados apropriados para a aplicação cliente.

É claro, é possível adicionar lógica de negócio diretamente a um entity

bean, mas isto deve ser minimizado. Tirar a lógica de negócio dos entity beans e

colocá-la na aplicação cliente também é problemático, já que cada aplicação

cliente (além de fornecer uma interface para o usuário) deve incluir todas as

regras de negócio para modificar a estrutura do entity bean, e deve ter

conhecimento de cada entity bean mesmo que tenha sido invocado remotamente

na transação. A separação das camadas cliente e de negócio efetivamente

desaparece, e qualquer alteração nas regras de negócio irá requerer a atualização

de todos os clientes.

Mesmo com a lógica de negócio distribuída em vários session beans, ainda

há o problema do overhead da rede. Clientes EJB acessam o servidor EJB da

54

rede, e chamadas na rede significam atrasos. Acessar um objeto local é sempre

muito mais rápido do que acessar um objeto remoto, e cada entity bean ou

session bean que um cliente usa resulta em uma outra chamada remota.

A solução é empacotar transações de nível mais alto em um session

façade. Session façade é um session bean que organiza um conjunto de métodos

de negócio relacionados. A session façade é responsável por acessar recursos,

atualizar dados e realizar a transação com uma interação limitada com o cliente. O

propósito da session façade é fornecer uma interface simples e unificada para

todos os clientes da aplicação. Os clientes podem usar a session façade como um

ponto de entrada único para os dados e para a funcionalidade de uma aplicação.

Agora que vimos como componentes EJB’s funcionam e como se

interagem, fica mais fácil de compreender o modelo EJB gerado. Os Entity Beans

são nossos componentes que representam nossas entidades persistentes, que

são responsáveis pelo acesso à base de dados da aplicação. No nosso exemplo

foram gerados componentes do tipo CMP, no qual a responsabilidade de

persistência dos dados fica a cargo do container EJB.

Acima destes componentes existe outra camada de componentes EJB, que

são Session Façade que detém toda a regra de negócio da aplicação, e são

responsáveis pelo acesso aos Entity Beans.

Para cada um dos componentes representados neste modelo, são gerados

as interfaces Local, LocalHome, Remote, RemoteHome, bem como o a classe

Bean, que implementa as funcionalidades relacionadas a este.

Além disso, também são gerados os arquivos de configuração dos

componentes (deployment descriptor), bem como a ponte de comunicação com a

base de dados em questão.

Todo o código da aplicação pode ser visualizado no Apêndice 9.3.

6.8.3 Transformação do Modelo WEB para Código

Para implementar componentes WEB, nós temos que gerar código que

manipule as requisições do usuário e produza HTML como resposta. Em geral, a

55

complexidade deste código pode ser alta. Uma boa ferramenta MDA fornece esta

transformação utilizando-se de padrões de código bem estabelecidos.

Para cada um dos componentes WEB do modelo, são criados arquivos

JSP, e classes Java que atendem as requisições do usuário, processam e enviam

a resposta de acordo com a requisição. Os componentes WEB gerados são

baseados no framework STRUTS.

6.8.3.1 JSP

É uma tecnologia baseada em Java que simplifica o processo de

desenvolvimento de sites da web dinâmicos, esta tecnologia está intimamente

ligada ao novo tipo de desenvolvimento para a Internet. Na verdade pode-se

considerar JSP como “uma linguagem de criação de scripts no servidor”. Os

arquivos JSP são arquivos textos comuns interpretados pelo servidor quando

requisitados pelo cliente.

Os benefícios conseguidos por utilizar a plataforma JSP para o

desenvolvimento de aplicativos na web são muito grandes. Primeiramente, sendo

uma tecnologia baseada em Java, ela se aproveita de todas as vantagens que a

linguagem Java fornece em relação a desenvolvimento e acionamento. Como uma

linguagem orientada a objetos com forte encapsulamento, tratamento de exceções

e gerenciamento automático da memória, o uso de Java conduz a uma

produtividade aumentada do programador além de um código mais robusto.

Completando, assim como o Java que não possui restrição de sistema

operacional, o JSP também não possui.

A performance da plataforma JSP é mais rápida e melhor que outras

linguagens de aplicação dinâmica, por fazer o tratamento de múltiplas solicitações

necessitando de uma única instância do processo no servidor, isto lhe garante a

rapidez e melhor tratamento das requisições.

56

6.8.3.2 Struts

É uma framework que implementa a arquitetura padrão MVC em Java. O

Struts é um projeto open source mantido pela Apache Software Foundation. O

objetivo do pattern MVC é separar de maneira clara a camada de apresentação da

camada de Negócio.

O Framework Struts é uma implementação cliente-servidor de MVC,

combinado JSP, taglibs e Servlets Java.

Figura 17 - Implementação MVC do Struts

A figura acima mostra o fluxo de uma requisição para a maioria das

aplicações que usam o Struts. Este processo pode ser dividido em 4 passos

básicos. Estes passos descrevem as classes ActionServlet e Action.

1. Uma requisição para aplicação é feita.

2. A requisição é interceptada pelo ActionServlet que atua como

controlador. O ActionServlet, a partir de configurações em arquivo XML,

determina a classe action que irá processar toda a lógica de negócio

associada a requisição.

3. Uma vez que a classe action completou seu processamento, ele retorna

o controle para o ActionServlet. A classe Action fornece ao ActionServlet

uma chave que indica o resultado do processamento. O ActionServlet

57

usa esta chave para determinar para onde o fluxo de execução deve ser

direcionado.

4. A requisição é finalizada quando o ActionServlet responde direcionando

a requisição para a Visão (View) que foi associada a chave de retorno.

Esta visão apresenta o resultado do Action.

Além do controlador da aplicação o framewor Struts também fornece uma

vasta biblioteca de tag que facilitam a construção dos arquivos JSP’s bem como

um plug-in para validação dos campos de entrada da aplicação, validações como

de campos obrigatórios, datas, numéricos, entre outras.

6.9 Resultado

Como nosso maior resultado tivemos um ganho de produtividade notável

obtendo uma aplicação que atende aos mais conceituados padrões de qualidade e

robustez, devido ao emprego de alguns padrões de desenvolvimento e a utilização

de tecnologias bem conceituadas.

Todo o processo de desenvolvimento foi direcionado a construção e

refinamento do PIM, sendo que foram gerados automaticamente todos os demais

modelos (ER, EJB e WEB). Durante toda a fase de design estes modelos

permaneceram sincronizados, garantindo assim que nossa documentação de

análise estivesse sempre atualizada, facilitando assim as alterações necessárias

durante o desenvolvimento.

Quase a totalidade do código necessário para nossa aplicação de exemplo

foi gerada automaticamente, sendo que pequenas customizações foram

necessárias, especificamente para o cálculo do valor total para compra e venda,

bem como a atualização do estoque para estes casos.

Mas o que mais esperávamos com resultado deste estudo, é o real ganho

de produtividade que uma tecnologia como MDA pode oferecer. Para termos uma

visão mais realista deste possível ganho de produtividade, fizemos uma estimativa

de horas, desconsiderando o uso de ferramentas de automatização do processo

58

de desenvolvimento, mas considerando que teríamos uma equipe bem qualificada

para o mesmo, bem como a estabilidade dos requisitos da aplicação.

Para esta estimativa utilizamos a técnica de Use Case Points, uma das

mais utilizadas para aplicações OO. Identificamos para nossa aplicação 6 casos

de uso, que são:

1. Manter Vendedor.

2. Manter Cliente.

3. Manter Produto.

4. Manter Fornecedor.

5. Efetuar Compra.

6. Efetuar Venda.

Consideramos para esta estimativa que os casos de uso de 1 a 4 como

sendo de complexidade simples, e os dois últimos de complexidade média.

Levando em consideração todos estes parâmetros, e aplicando as regras

determinadas pela técnica de Use Case Points chegamos a um total de 345 horas.

Esta estimativa não é apenas para a construção da aplicação, mas sim para todo

o processo de desenvolvimento de uma aplicação comercial. Dentre processo de

desenvolvimento o MDA auxilia na parte de análise e design e construção. Estas

duas etapas totalizam cerca de 275 horas. A planilha com todos os parâmetros

utilizados nesta estimativa podem ser vistos no apêndice 9.1.

Com o auxilio de uma tecnologia como MDA foi possível reduzir o número

de horas da etapa de análise, design e construção para cerca de 80 horas,

considerando ainda a falta de experiência com a ferramenta escolhida, este

número de horas poderia ser ainda mais reduzido se uma equipe mais experiente

na ferramenta tivesse desenvolvido esta aplicação.

Essa redução do número de horas trás vários benefícios a empresa de

desenvolvimento, fazendo com que seu produto possa chegar antes ao mercado

aumentando lucros e diminuindo custos.

Porém devemos levar em consideração o fato de nossa aplicação possuir a

maioria de seu comportamento estático, uma vez que a ferramenta utilizada não

59

suporta a representação do comportamento dinâmico, por isso acreditamos que à

medida que complexidade aumente o ganho de produtividade decresça.

60

7. Conclusão

Neste trabalho foi possível avaliar vários problemas encontrados no

desenvolvimento de software atual bem como de todas as dificuldades de se

produzir software com qualidade, rapidez, sem comprometer os custos pré-

estipulados.

Vimos também que MDA pode ser a grande resposta para tais problemas e

que cada vez mais empresas em conjunto com a OMG estão investindo e

apostando nesta idéia.

Nos primórdios do desenvolvimento de software, construir uma aplicação

era sinônimo de escrever código, muitas vezes este código era muito próximo da

linguagem de máquina. Com a evolução da complexidade dos sistemas, este tipo

de abordagem deixou de ser viável. Por isso o processo de desenvolvimento

evoluiu de forma que se tornasse cada vez mais familiar a linguagem humana.

Muito neste aspecto foi feito, hoje em dia as linguagens de modelagem de

sistemas e linguagens de programação já estão bastante naturais para os

humanos.

Uma evolução natural é o de desenvolver sistemas aplicativos apenas

especificando suas funcionalidade e características de forma bastante abstrata.

Essa idéia até bem pouco tempo parecia um tanto utópica, mas os primeiros

passos já foram dados, e o MDA veio justamente ajudar neste sentido.

São notáveis as vantagens que um framework como MDA trás ao processo

de desenvolvimento de software. Como vimos durante o trabalho, podemos

reduzir bastante o tempo de desenvolvimento, o que diminui os custos e possibilita

que o produto chegue ao mercado ou ao cliente antecipadamente. Facilita também

o gerenciamento da documentação, portabilidade, interoperabilidade e

manutenção.

Vale ressaltar que o MDA não é apenas um processo que pode ser

facilmente adotado. Para que se tenha ganho total é necessário alguns subsídios

que dão suporte ao desenvolvimento. O principal delas é a ferramenta escolhida.

Já existem no mercados várias ferramentas que vendem este conceito, citamos

algumas delas neste trabalho. Algumas das ferramentas já estão bastante

61

evoluídas, mas nenhuma delas aparentemente aborda MDA em sua totalidade.

Em algumas delas nem todas as transformações estão previstas, em outras não é

possível modelar o comportamento dinâmico da aplicação e há ainda aquelas em

que não conseguimos gerar um modelo totalmente independente de plataforma.

Apesar de ainda não implementar MDA em sua totalidade, acreditamos que

em breve isso será possível, uma vez que as empresas estão investindo bastante

nesta tecnologia e na evolução dos templates de transformação, que são à base

do paradigma.

Ainda não existem no mercado ferramentas que atendam a todas as

plataformas e as melhores ferramentas que existem são proprietárias com um

custo elevado, porém conseguimos atender boa parte dos conceitos de MDA para

algumas plataformas utilizando algumas ferramentas free integradas como, por

exemplo, o Poseidon e o AndroMDA.

Outra grande mudança em relação ao desenvolvimento como conhecemos

hoje, são as pessoas que participam do processo. Cada vez mais será necessário

ter pessoas que conheçam muito bem as regras de negócio da aplicação, e um

número menor de pessoas, possivelmente menos especializadas para a

codificação, visto que a maior parte do código será automatizado, com apenas

customizações sendo feitas manualmente, e a medida que o processo e

ferramentas amadurecerem, a tendência é que nenhuma customização manual

seja necessária.

A utilização da arquitetura MDA e ferramentas que implementam a mesma

nos levam a conclusão que o código é importante, mas ele na verdade é resultado

de uma transformação, isto é, o código é uma “tradução” da solução de negócio

para determinado ambiente computacional, toda a “inteligência” de uma aplicação

está nas suas regras de negócio.

62

8. Referência Bibliográfica

1. Martin, James & Odell, James J. Análise e Projeto Orientados a Objetos:

Markon Books 1995.

2. Meyer, Bertrand Pbject-Oriented Software Construction 2ª edição: Prentic

Hall PTR 1997.

3. Qualidade Software Seleção de Textos: Ana Regina Cavalcanti da Rocha

& Kival Chaves Weber 1996.

4. Rezende, Denis Alcides Engenharia de Software Empresarial: Brasport

1997.

5. Martin, James Engenharia da Informação: Campus; 1991.

6. Kleppe, Anneke & Warmer, Jos & Bast, Wim MDA Explained – The Model

Driven Architecture: Practice and Promise: Addison-Wesley 2003

7. Pressman, Roger S. Engenharia de Software 5ª edição: McGraw-Hill

2002.

8. KETIS, D. Terceirizando a documentação de sistemas. Developers’ CIO

Magazine: 1999.

9. Miller, Joaquin & Mukerji, Jishnu Model Driven Architecture (MDA): 2001

10. Miller, Joaquin & Mukerji, Jishnu MDA Guide Version 1.0.1: 2003

11. Costa, Marco Arquitectura de Sistemas de Informação em UML.

12. Siegel, Jon & OMG Staff Strategy Group Developing in OMG’s Model-

Driven Architecture: 2001.

13. Common Warehouse Metamodel (CWM) Specification: 2001

14. Meta Object Facility (MOF) Specification: 2000

15. Chaves, Rafael Alves Aspectos e MDA Criando modelos executáveis

baseados em aspectos: 2004

16. Goodwil, James Mastering Jakarta Struts : 2002

17. http://www.starlink.rl.ac.uk/star/docs/sgp42.htx/node25.html

18. http://www.telehealthlab.com/about/inter.asp

19. http://www-vis.lbl.gov/Events/DOEworkshop-98/document.html

20. http://www.pr.gov.br/batebyte/edicoes/2002/bb123/armazenamento.htm

21. http://www.omg.org

63

21. http://www.componentsource.com

22. http://www.compuware.pt/pressroom/news/2003/2003040801.htm

23. http://www.compuware.com/products/optimalj/default.htm

24. http://www.itweb.com.br/itlab/artigo.asp?id=41448

25. http://www.andromda.org

26. http://www-306.ibm.com/software/rational

64

9. Apêndices

9.1 Planilha de Use Case Points

Estimativa de Tempo com Use Cases

Pesando Atores Tipo de Ator Número Total Peso Simples 0 0 1Médios 0 0 2Complexos 0 0 3 Soma 0

Pesando Use Cases Tipo de Use Case Número Total Peso Simples 4 20 5Médios 2 20 10Complexos 0 0 15 Soma 40 UUCP 40

Pesando Fatores Técnicos Descricao Peso Total Peso Sistema Distribuido 2 4 2Requisitos de Performace 2 2 1OnLine 5 5 1Processo Interno Complexo 1 1 1Código deve ser reusavel 3 3 1Fácil de Instalar 1 0.5 0.5User Friendly 5 2.5 0.5Portavel 1 2 2Flexivel a mudanças 3 3 1Concorrência 1 1 1Inplementações Especiais de Segurança 3 3 1Provê acesso direto a terceiros 1 1 1Precisa de facilitadores para treinamento a usuários 1 1 1 Tfactor 29 TCF 0.89

65

Pesando Fatores de Ambiente para Pessoas Descricao Peso Total Fator Familiaridade com Unified Process 5 7.5 1.5Experiencia em Aplicações 2 1 0.5Experiência em OO 5 5 1Capacidade do analista lider 4 2 0.5Motivação 5 5 1Estabilidade dos requisitos 5 10 2Profissionais Part Time 0 0 -1Dificuldade da linguagem de programação 4 -4 -1 Efactor 26.5 EF 0.605

UCP 21.538

Homens Hora por UCP 16 345Homens-Hora

Distribuição Média de Horas Use Cases simples medio complexo total peso total de horas peso por complexidade 20 20 0 40 345 valor médio em horas por peso 172.304 172.304 0 número de horas por cada use case, agrupado por complexidade 43.076 86.152 #DIV/0! Distribuição Média de Horas no Ciclo de Desenvolvimento 344.61 Detalhamento de Use Cases 34.46 S M C Análise & Design 103.38 Construção 172.30 21.538 43.076 #DIV/0! Transição 34.46 Resumo Simples Médio Complexo Atores 0 0 0 Use Cases 4 2 0

Lista de Use Cases Complexidade Quant

Lista de Atores Complexidade Quant

Manter Vendedor Simples 1 Manter Cliente Simples 1 Manter Produto Simples 1 Manter Fornecedor Simples 1 Efetuar Compra Médio 1 Efetuar Venda Médio 1

66

9.2 Scripts

9.2.1 Script de criação --GEN-GUARD:GENERATECREATESCHEMA$pidfed9f268bfbf70b7 -- SOLID Server 04.00.0025 create table script -- Generated by OptimalJ --GEN-FREE-GEN:Header$$GENERATECREATESCHEMA$pidfed9f268bfbf70b7 --GEN-GUARD:1$$GENERATECREATESCHEMA$pidfed9f268bfbf70b7 CREATE SCHEMA projetomda; CREATE TABLE projetomda.Vendedor ( uniqueId VARCHAR (32) NOT NULL, dataAdmissao DATE NULL, salarioBase DOUBLE PRECISION NULL, percentualComissao REAL NULL, nomeVendedor VARCHAR (40) NULL, PRIMARY KEY (uniqueId) ); CREATE TABLE projetomda.Cliente ( uniqueId VARCHAR (32) NOT NULL, nome VARCHAR (40) NULL, endereco VARCHAR (40) NULL, bairro VARCHAR (40) NULL, cidade VARCHAR (40) NULL, uf VARCHAR (40) NULL, cep VARCHAR (40) NULL, cpfCnpj VARCHAR (40) NULL, RG VARCHAR (40) NULL, PRIMARY KEY (uniqueId) ); CREATE TABLE projetomda.PedidoVenda ( ClienteUniqueId VARCHAR (32) NULL, VendedorUniqueId VARCHAR (32) NOT NULL, uniqueId VARCHAR (32) NOT NULL, dataVenda DATE NULL, valorTotal DOUBLE PRECISION NULL, percentualDesconto REAL NULL, PRIMARY KEY (uniqueId) -- Database doesn't support deferrable constraints. Skip constraint: -- , FOREIGN KEY (ClienteUniqueId) REFERENCES projetomda.Cliente (uniqueId) -- Database doesn't support deferrable constraints. Skip constraint:

67

-- , FOREIGN KEY (VendedorUniqueId) REFERENCES projetomda.Vendedor (uniqueId) ); CREATE TABLE projetomda.Fornecedor ( uniqueId VARCHAR (32) NOT NULL, razaoSocial VARCHAR (40) NULL, cnpj VARCHAR (40) NULL, telefone VARCHAR (40) NULL, PRIMARY KEY (uniqueId) ); CREATE TABLE projetomda.PedidoCompra ( FornecedorUniqueId VARCHAR (32) NOT NULL, uniqueId VARCHAR (32) NOT NULL, dataCompra DATE NULL, valorTotal DOUBLE PRECISION NULL, PRIMARY KEY (uniqueId) -- Database doesn't support deferrable constraints. Skip constraint: -- , FOREIGN KEY (FornecedorUniqueId) REFERENCES projetomda.Fornecedor (uniqueId) ); CREATE TABLE projetomda.Produto ( uniqueId VARCHAR (32) NOT NULL, codigoBarras VARCHAR (40) NULL, descricao VARCHAR (40) NULL, margemDesconto REAL NULL, qtdEstoque INTEGER NULL, qtdMinima VARCHAR (40) NULL, imagem VARCHAR (40) NULL, valorVenda DOUBLE PRECISION NULL, PRIMARY KEY (uniqueId) ); CREATE TABLE projetomda.ItemPedidoVenda ( PedidoVendaUniqueId VARCHAR (32) NOT NULL, ProdutoUniqueId VARCHAR (32) NOT NULL, uniqueId VARCHAR (32) NOT NULL, quantidade INTEGER NULL, valorUnitario DOUBLE PRECISION NULL, percentualDesconto REAL NULL, PRIMARY KEY (uniqueId, PedidoVendaUniqueId) -- Database doesn't support deferrable constraints. Skip constraint: -- , FOREIGN KEY (PedidoVendaUniqueId) REFERENCES projetomda.PedidoVenda (uniqueId) -- Database doesn't support deferrable constraints. Skip constraint: -- , FOREIGN KEY (ProdutoUniqueId) REFERENCES projetomda.Produto (uniqueId) );

68

CREATE TABLE projetomda.ItemPedidoCompra ( PedidoCompraUniqueId VARCHAR (32) NOT NULL, ProdutoUniqueId VARCHAR (32) NOT NULL, uniqueId VARCHAR (32) NOT NULL, qtd INTEGER NULL, valorUnitario DOUBLE PRECISION NULL, PRIMARY KEY (uniqueId, PedidoCompraUniqueId) -- Database doesn't support deferrable constraints. Skip constraint: -- , FOREIGN KEY (PedidoCompraUniqueId) REFERENCES projetomda.PedidoCompra (uniqueId) -- Database doesn't support deferrable constraints. Skip constraint: -- , FOREIGN KEY (ProdutoUniqueId) REFERENCES projetomda.Produto (uniqueId) ); COMMIT WORK; --GEN-FREE-GEN:Footer$$GENERATECREATESCHEMA$pidfed9f268bfbf70b7 --GEN-GUARD:2$$GENERATECREATESCHEMA$pidfed9f268bfbf70b7

9.2.2 Script de Remoção --GEN-GUARD:GENERATEDROPSCHEMA$pidfed9f268bfbf70b7 -- SOLID Server 04.00.0025 drop table script -- Generated by OptimalJ --GEN-FREE-GEN:Header$$GENERATEDROPSCHEMA$pidfed9f268bfbf70b7 --GEN-GUARD:1$$GENERATEDROPSCHEMA$pidfed9f268bfbf70b7 DROP TABLE projetomda.ItemPedidoCompra; DROP TABLE projetomda.ItemPedidoVenda; DROP TABLE projetomda.Produto; DROP TABLE projetomda.PedidoCompra; DROP TABLE projetomda.Fornecedor; DROP TABLE projetomda.PedidoVenda; DROP TABLE projetomda.Cliente; DROP TABLE projetomda.Vendedor; DROP SCHEMA projetomda; COMMIT WORK; --GEN-FREE-GEN:Footer$$GENERATEDROPSCHEMA$pidfed9f268bfbf70b7 --GEN-GUARD:2$$GENERATEDROPSCHEMA$pidfed9f268bfbf70b7

69

9.3 Códigos

Ver arquivo projetoMDA.zip