Buscar

artigo Desenvolvimento de sistemas baseado em componentes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 7 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 7 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Desenvolvimento Baseado em Componentes: Experiências 
de Sucesso 
Leonardo Guerreiro Azevedo1, Fernanda Baião1,2, Márcio Duran1, José Roberto 
Blaschek3, Jano Moreira de Souza1,4, Geraldo Zimbrão1,4 
1Programa de Engenharia de Sistemas e Computação - Universidade Federal do Rio de 
Janeiro (UFRJ) 
Caixa Postal 68.511 - 21945-970 - Rio de Janeiro – Brasil 
2Departamento de Informática Aplicada – Universidade Federal do Estado do Rio de 
Janeiro (UNIRIO) – Rio de Janeiro – Brasil 
3Faculdade de Administração e Finanças – Universidade Estadual do Rio de Janeiro 
(UERJ) – Rio de Janeiro – Brasil. 
4Departamento de Ciência da Computação – Instituto de Matemática – Universidade 
Federal do Rio de Janeiro (UFRJ) – Rio de Janeiro - Brasil 
azevedo@cos.ufrj.br, baiao@cos.ufrj.br, mlfduran@cos.ufrj.br, 
blachek@attglobal.net, jano@cos.ufrj.br, zimbrao@cos.ufrj.br 
Abstract. This work presents experiences of the use of a software development 
process, based in components and derived from RUP and UML, and a team 
appropriate organization for its use. The process and team characteristics are 
also presented. The proposed process regards practical and efficient 
principles in order to guide the development leading to good results, 
increasing the productivity and the quality of the process and the product. 
Resumo. Este trabalho relata experiências de uso de um processo de 
desenvolvimento de software, baseado em componentes e derivado do RUP e 
da UML, e de uma organização de equipe de desenvolvimento adequada ao 
seu uso. As características do processo utilizado e da equipe são 
apresentadas. O processo proposto contemplou diretrizes práticas e eficientes 
para orientar o desenvolvimento, apresentando bons resultados de aumento de 
produtividade e da qualidade do processo e do produto resultante. 
1. Introdução 
No início deste novo século, onde rapidez no desenvolvimento, qualidade e flexibilidade 
dos sistemas de informação tornaram-se um aspecto crítico para a sobrevivência das 
organizações, o desenvolvimento de sistemas baseados em componentes tem sido 
apontado como solução [Allen e Frost 1998] e [Szyperski 1997]. 
 Por outro lado, no contexto das organizações, promover mudanças nos 
paradigmas de desenvolvimento de sistemas de informação não é tarefa simples, 
envolvendo não só um processo complexo de treinamento das equipes de 
desenvolvimento em novas tecnologias, como também a definição de novos processos 
de software e a seleção de novos métodos e ferramentas. 
 
 Este artigo relata três experiências diferentes e bem sucedidas de mudanças de 
paradigmas de desenvolvimento, do tradicional para o baseado em componentes, que 
resultaram em sistemas de qualidade e que atenderam às expectativas dos usuários, 
dentro de prazos e custos previstos. Para o relato destas experiências, a seção 2 do artigo 
caracteriza os três projetos; a seção 3 apresenta o processo, os métodos e os diagramas 
utilizados; e a seção 4 mostra como a equipe foi organizada para executar o 
desenvolvimento. As conclusões são apresentadas na seção 5. 
2. Caracterização dos Projetos 
Esta seção descreve três sistemas em que o desenvolvimento baseado em componentes 
foi essencial para o sucesso dos projetos. 
Os sistemas descritos a seguir foram desenvolvidos para uma organização com 
unidades de armazenamento localizadas geograficamente em várias regiões do Brasil e 
do exterior. Para o desenvolvimento dos sistemas, foram utilizadas arquiteturas em 
plataformas baixas distintas: uma arquitetura cliente servidor em duas camadas, com 
sistema gerenciador de bases de dados (SGBD) Oracle e linguagem de programação 
(LP) Delphi, e uma segunda em quatro camadas, também com SGBD Oracle e LP ASP 
com componentes em Visual Basic. 
2.1. Descrição do domínio dos sistemas 
O primeiro sistema desenvolvido englobou as funções de controle financeiro, 
distribuição de estoque, identificação e catalogação do material fornecido, compra de 
material junto a fornecedores externos, entre outras. O sistema foi implementado com o 
objetivo de substituir um sistema legado, que era executado em um ambiente de 
plataforma alta, com custo operacional elevado e interface com o usuário baseada em 
caracter, ou seja, extremamente rígida e com funcionalidades limitadas. Um segundo 
sistema foi desenvolvido para dar suporte às funções de auditoria e análise de contas de 
outro departamento da mesma organização. Neste contexto, os dois novos sistemas 
foram construídos, independentemente, usando uma arquitetura cliente-servidor em duas 
camadas, com interface gráfica orientada a evento, utilizando uma abordagem RAD 
(Rapid Application Development) [McConnell 1996]. O primeiro sistema encontra-se 
em produção desde março de 2001. A primeira versão do segundo sistema foi 
disponibilizada em abril de 2002, tendo sido desenvolvida num período de 5 meses. 
A terceira experiência foi o desenvolvimento de um sistema para o 
gerenciamento de transporte de carga da mesma organização, incluindo importações e 
exportações de material. Entre as atividades principais, destacam-se o controle de todo o 
fluxo de transporte de material e controle do custo associado a este transporte. O fato de 
os depósitos de materiais estarem geograficamente distribuídos e de existirem pontos 
móveis de entrega e retirada de material foram requisitos para a escolha do 
desenvolvimento de um sistema voltado para WEB, com arquitetura cliente servidor em 
quatro camadas, utilizando o modelo MVC [Gamma et al. 1995]. O primeiro módulo 
desde sistema encontra-se atualmente em produção. 
Todos os três sistemas foram desenvolvidos dentro das expectativas de tempo e 
de custo estimadas no plano de projeto, tendo sido muito bem aceitos pelos usuários da 
organização. 
 
2.2. Eliminando os riscos através de componentes 
As características dos projetos determinaram diversos desafios e riscos, entre os quais 
destacam: 
• Aumentar o grau de modularização dos sistemas através da criação de 
componentes reutilizáveis; 
• Melhorar a produtividade das equipes de desenvolvimento para viabilizar a 
execução dos projetos dentro do cronograma estabelecido; 
• Garantir a qualidade do desenvolvimento realizado por diversas equipes 
constituídas por pessoas com formação heterogênea; 
• Definir um padrão de interface funcional e de fácil uso, para todo o sistema, 
implementada em todos os subsistemas por todas as equipes, garantindo uma 
identidade visual do sistema como um todo e facilitando o aprendizado pelos 
usuários; 
• Estabelecer um padrão de codificação, principalmente para aumentar a 
manutenibilidade das aplicações; 
• Garantir o bom desempenho do sistema, mesmo para o ambiente de rede 
metropolitanas. 
Com a análise destes riscos, optou-se pelo desenvolvimento baseado em 
componentes. Os componentes criados na primeira experiência foram essencialmente 
componentes de interface, segurança (controle de acesso às funcionalidades do sistema) 
e de acesso a dados, com o objetivo de padronizar a interface com o usuário e obter um 
bom desempenho. Na segunda experiência, com a aplicação da arquitetura MVC, foram 
criados componentes de modelo, incluindo objetos de negócio e de dados, componentes 
de vista (ou de interface) e de controle da aplicação. 
O desenvolvimento baseado em componentes foi essencial para evitar os riscos 
acima, possibilitar o aumento do reuso, incrementar a produtividade das equipes, 
estabelecer padrões para a codificação e garantir a qualidade do processo e dos produtos 
resultantes. Todas essas vantagens puderam ser alcançadas através da utilização do 
modelo orientado a objetos em todas as fases do desenvolvimento. 
Durante a implementação do sistema dois tipos diferentes de componentes foram 
desenvolvidos: componentes com funcionalidades mais gerais (por exemplo, 
componentes de acesso a dados); e componentes mais específicos (por exemplo, 
componentes responsáveis pela execução de uma determinada regra de negócio 
específica de um dos módulos dosistema). 
O desenvolvimento do primeiro tipo de componentes fez surgir um novo 
desafio: a construção de componentes de qualidade a serem reutilizados em todos os 
módulos dos sistemas. Isto tornou essencial a definição de um processo de 
desenvolvimento adequado e a definição de uma equipe dedicada ao desenvolvimento 
dos componentes. O processo de desenvolvimento é discutido na Seção 3 e a 
organização e estrutura da equipe na Seção 4. 
 
3. Processo de desenvolvimento orientado a componentes usando a UML 
Esta seção descreve o processo de desenvolvimento orientado a componentes que foi 
seguido para os sistemas apresentados na seção 2. O processo de desenvolvimento 
baseou-se no RUP [Kruchten 1999], o qual foi estendido para melhor suportar a 
construção de componentes, incluindo o uso da UML [Cheesman e Daniels 2000]. Este 
processo define uma seqüência de atividades que devem ser conduzidas para a 
identificação, especificação, análise, projeto e distribuição dos componentes da 
aplicação. Além disso, o processo proposto contemplou diretrizes práticas e eficientes 
para orientar o desenvolvimento de aplicações baseadas em componentes, apresentando 
bons resultados de aumento de produtividade e da qualidade do processo e do produto 
resultante. 
A primeira fase do processo de desenvolvimento foi a fase de concepção, cujo 
propósito incluiu: identificar o problema ou oportunidade de negócio; definir o escopo 
do projeto; identificar os requisitos do usuário e as funcionalidades que o sistema deve 
possuir para atender tais requisitos; identificar premissas e restrições existentes no 
ambiente que interfiram no sistema; além de prever o custo e o tempo de 
desenvolvimento do sistema. 
Para atingir tais objetivos, foram conduzidas as primeiras entrevistas com os 
usuários do sistema para construir o “Modelo Conceitual de Negócio”, representando os 
conceitos do domínio através de um diagrama de classes da UML [Rumbaugh 1999]. 
Em seguida, construiu-se o “Modelo do Processo”, representando todo o fluxo de 
atividades do sistema através do diagrama de atividades da UML. O próximo passo foi a 
construção dos diagramas de casos de uso essenciais [Larman 1998], detalhando cada 
funcionalidade do sistema, com suas respectivas descrições e casos de teste. Todos estes 
produtos foram então validados com o usuário através de reuniões JAD [Wood e Silver 
1996]. Esta validação foi essencial para assegurar o correto entendimento do escopo do 
sistema pela equipe de desenvolvimento. 
Após a fase de concepção, passou-se para a fase de elaboração, responsável pela 
confecção do plano de projeto, que incluiu: a lista de riscos do projeto, estimativa do 
tempo de preparação da infra-estrutura de desenvolvimento, planejamento da 
importação de dados legados, definição dos critérios de aceitação e validação dos 
produtos pelo usuário, estabelecimento das prioridades para o projeto e o cronograma de 
desenvolvimento, com marcos e pontos de controle para que o usuário pudesse 
acompanhar o andamento do projeto e validar os artefatos de software produzidos. 
A terceira fase do processo de desenvolvimento, denominada construção, teve 
como propósito entregar ao usuário as versões atendendo às suas necessidades, com 
bom desempenho, sem erros, e no tempo estimado. Essa fase caracterizou-se pelo 
desenvolvimento do sistema e disponibilização de uma versão do sistema em produção. 
A primeira versão do sistema contemplou os casos de uso definidos como prioritários 
pelo usuário. 
A seqüência de atividades realizadas na fase de construção foi: a preparação do 
ambiente de desenvolvimento, análise e projeto, codificação, realização de testes, 
elaboração da documentação e validação do usuário. 
 
A mais importante destas atividades foi a de análise e projeto, já que foi a 
responsável por especificar e modelar os requisitos do sistema de forma a possibilitar a 
identificação e desenvolvimento dos componentes. A modelagem seguiu o padrão 
UML, através da elaboração dos seguintes produtos: 
• Diagrama de Casos de Uso Reais [Larman 1998], detalhando as 
funcionalidades identificadas no diagrama de casos de uso essenciais da fase 
de concepção; 
• Diagrama de Dados, representado por um diagrama Entidade-
Relacionamento, identificando e modelando as tabelas e atributos do(s) 
SGBD(s) necessários para implementação dos objetos de dados; 
• Diagrama de Interface de Componentes, representado por um diagrama de 
classes da UML, identificando os métodos de cada componente 
(componentes de interface e dados na primeira e segunda experiências, e 
componentes do modelo MVC na segunda) disponíveis para a interação entre 
eles. Neste ponto, os componentes foram identificados através dos eventos 
extraídos da descrição dos casos de uso reais, seguindo a abordagem 
sugerida em [Poo 1999]; 
• Diagrama de Seqüência, descrevendo a seqüência de mensagens trocadas 
entre os componentes necessárias para a implementação dos casos de uso 
reais; 
• Diagrama de Componentes, especificando os métodos públicos e privados de 
cada componente identificado no Diagrama de Interface de Componentes 
anterior, e agrupando-os em “packages” que definiram as bibliotecas de 
componentes (ex.: DLL’s, arquivos “.jar”) geradas na etapa de 
implementação. Neste diagrama foram também representados todos os 
artefatos de software (ex.: stored procedures, páginas html e java scripts) 
utilizados na implementação dos componentes. 
• Diagrama da Arquitetura do Sistema, representado por um Diagrama de 
Desenvolvimento da UML (Deployment Diagram), identificando a 
distribuição de cada componente ou artefato de software pelos servidores do 
sistema (Web Server, servidores de aplicação, servidores de banco de dados 
e máquinas cliente). Esta representação foi importante para visualizar a 
arquitetura na qual o sistema é executado. 
A realização de validações periódicas com o usuário (previstas no cronograma 
pelos marcos e pontos de controle estabelecidos) permitiu a identificação antecipada de 
eventuais atrasos no cronograma. No momento da identificação de um atraso, foram 
avaliadas as causas e tomadas as devidas providências para que o atraso não impactasse 
a entrega dos produtos previstos no cronograma. 
Finalmente, a última fase do processo de desenvolvimento foi a fase de 
implantação, onde foram realizadas as atividades de preparação, configuração e 
documentação do ambiente de operação do sistema; instalação da nova versão do 
sistema; elaboração do manual de instalação; e realização de testes para garantir a 
operação do sistema pelo usuário. Além disso, esta fase também foi responsável pela 
manutenção das versões que já se encontravam em produção. 
 
4. Organização da Equipe de Desenvolvimento 
Para alcançar o sucesso na construção de um sistema baseado em componentes foi 
essencial definir uma equipe dedicada ao seu desenvolvimento dos componentes 
genéricos. Entre as responsabilidades desta equipe destacou-se a aplicação do processo 
de desenvolvimento descrito na Seção 3, e a definição de padrões de codificação (como 
por exemplo definir as regras de nomenclaturas e relacionar as boas práticas de 
programação que devem ser utilizadas e as más técnicas que devem se evitadas). Esta 
equipe também zelou pela qualidade do desenvolvimento realizado pelas diversas 
equipes que participaram da implementação da aplicação. Desta forma, enquanto os 
analistas de componentes foram responsáveis pelo projeto e qualidade dos componentes, 
os analistas de aplicação foram responsáveis pelo levantamento de requisitos junto ao 
usuário, pelo projeto em alto nível e pela construção da aplicação, utilizando os 
componentes criados pela equipe anterior. A Figura 1 apresenta a estrutura da equipe de 
desenvolvimento, a qual foi dividida em equipe de componentes e equipe de aplicacao, 
sendo ambas coordenadas pelo gerente. 
O gerente desempenha um papel muito importante no processo de 
desenvolvimento. Ele é o responsável por coordenar as duas equipese por garantir a 
perfeita comunicação entre as mesmas. Esta interação foi essencial para definir os 
requisitos dos componentes criados, já que coube à equipe da aplicação determinar as 
necessidades que precisavam ser supridas pelos componentes. O gerente deve ser uma 
pessoa capaz de identificar oportunidades para a componentização ou aplicação de 
reuso, a fim de impedir que as equipes trabalhassem de forma distinta e 
implementassem as mesmas funcionalidades de maneiras diferentes. 
EQUIPE DE COMPONENTES
GERENTE
ANALISTA DE COMPONENTES ANALISTA DE APLICAÇÃO
PROGRAMADORES E 
DESIGNER
PROGRAMADORES E 
DESIGNER
EQUIPE DE APLICAÇÃOEQUIPE DE COMPONENTES
GERENTE
ANALISTA DE COMPONENTES ANALISTA DE APLICAÇÃO
PROGRAMADORES E 
DESIGNER
PROGRAMADORES E 
DESIGNER
EQUIPE DE APLICAÇÃO
 
Figura 1: Estrutura da equipe de desenvolvimento 
Foi necessário ter também um ambiente de homologação dos novos 
componentes, já que os sistemas desenvolvidos baseados em componentes são 
tipicamente muito sensíveis a qualquer problema que surja nos mesmos. O ambiente de 
homologação permitiu a realização de testes, reduzindo assim o impacto no 
desenvolvimento das aplicações. Após a homologação, os componentes eram liberados 
para a equipe de aplicação para utilização e testes. Somente após a validação dos 
componentes pela equipe de aplicação, estes eram então liberados para a entrada em 
produção. 
A comunicação entre as equipes de componente e de aplicação foi um fator de 
risco acompanhado cuidadosamente de forma a garantir que a equipe de aplicação 
 
tomasse conhecimento de qualquer alteração produzida nos componentes. A divulgação 
dos novos componentes também era muito importante, inclusive com a realização de 
treinamentos para a equipe de aplicação para tornar mais clara a forma correta de uso 
dos novos componentes. Portanto, a adoção destes procedimentos de homologação e 
comunicação entre as equipes foi essencial para aumentar a qualidade dos componentes, 
e conseqüentemente do sistema como um todo. 
5. Conclusão 
Na nova economia, os gerentes de tecnologia de informação (TI) enfrentam sérias 
dificuldades para atender às necessidades de mudança das organizações. Se por um lado 
as novas tecnologias e os novos processos de desenvolvimento são apontados como 
solução, a implantação de processos de mudanças é lenta e oferece muitos riscos. 
Este artigo relatou duas experiências de mudança desses paradigmas, 
enfatizando aspectos técnicos do desenvolvimento e de organização de equipes de 
desenvolvimento. 
O processo de desenvolvimento descrito neste trabalho baseou-se no RUP, e foi 
estendido para suportar mais adequadamente a construção de sistemas orientados a 
componentes e o uso da UML. 
A simplicidade do processo e dos métodos descritos neste trabalho constituiu 
uma importante vantagem para o sucesso na sua utilização. 
Referências 
Allen, P. e Frost, S. (1998) “Component -Based Development for Enterprise Systems”, 
Cambridge University Press. 
Cheesman, J. e Daniels, J. (2000) “UML Components: A Simple Process for Specifying 
Component-Based Software”, Addison Wesley. 
Gamma, E., Helm, R., Johnson, R., Vlissides, J. (1995) “Design Patterns”, Addison 
Wesley Pub. 
Kruchten P. (1999), “The Rational Unified Process - an Introduction”, Addison -Wesley. 
Larman, C. (1998) “Applying UML and Patterns”, Prentice -Hall. 
McConnell, S. (1996) “Rapid Development”, Microsoft Press. 
Poo, D.C.D. (1999) Events in Use Case as a Basis for Identifying and Specifying 
Classes and Business Rules, Anais da “TOOLS 29 Conference”, Nancy, France, 
Junho. 
Rumbaugh, J., Jacobson, I., Booch, G. (1999) “The Unified Modeling Language 
Reference Manual”, Addison -Wesley. 
Szyperski, C. (1997) “Component Software: Beyond Object -Oriented Programming”, 
Addison-Wesley. 
Wood, J. e Silver, D. (1996) “Joint Application Development”, 2 nd ed., New York, 
Wiley.

Outros materiais