UNIVERSIDADE FEDERAL DE SÃO CARLOS CENTRO DE CIÊNCIAS EXATAS E DE TECNOLOGIA PROGRAMA DE PÓS-GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO “Uma Abordagem para o Desenvolvimento de Software Baseado em Componentes Distribuídos” Orientador: Prof. Dr. Antonio Francisco do Prado Co-Orientador: Prof. Dr. Luis Carlos Trevelin Aluno: Eduardo Santana de Almeida Fevereiro/2003 “...eu vim da Bahia, mas algum dia eu volto pra lá...” Gilberto Gil, 1965 i A DEUS, minha maravilhosa Mãe, Nando, Marcelo e Loana. ii Agradecimentos Ao longo desse período de um ano e dez meses, muitas pessoas contribuíram e me incentivaram nesta conquista tão almejada. Inicialmente, não poderia deixar de agradecer ao meu Deus, que tanto me deu força e coragem para lutar pelos meus sonhos e objetivos, não me deixando abater pelos obstáculos encontrados ao longo do caminho. Em seguida, (Universidade esforços agradeço Salvador), para especialmente, Gorgonio a meu que me ingresso Antonio Barreto todos Carlos Araújo, os incentivaram na Fontes Isaac professores e da UNIFACS não mediram carreira Atta, Douglas acadêmica, Dalila Moreira e Haickel, Vicente Manuel Moreira Júnior. A Cesar Augusto Camillo Teixeira pelo grande incentivo e hospitalidade para o meu ingresso na Universidade Federal de São Carlos, e pelas criticas e sugestões realizadas durante os exames de qualificação e dissertação de mestrado. Ao professor Mauro Biajiz e a professora Marina Teresa Pires Vieira pela confiança depositada no meu potencial durante o ingresso nesta universidade. Ao meu orientador Antonio Francisco do Prado por toda orientação, incentivo e confiança depositada ao longo deste período e pelas diferentes, pesquisador. mas inúmeras que me discussões ajudaram sobre muito a pontos de engrandecer vista como iii Ao meu co-orientador Luis Carlos Trevelin que desde o início deste trabalho se mostrou sempre uma pessoa amiga e disposta a cooperar através de inúmeras conversas e discussões sobre temas relacionados ao trabalho, além do seu grande incentivo. Aos colegas Luis Fernando Hachich de Souza e Alexandre Álvaro pelas inúmeras discussões sobre objetos distribuídos. A todos os amigos do especialmente, Calebe de incentivo e inúmeras grupo Paula discussões; de engenharia Bianchini Daniel de por software, toda Lucrédio força, por estar sempre disposto a ajudar e discutir novas idéias e projetos; e Valdirene Fontanette pelas inúmeras traduções e auxílio no inglês. A Orlando de Andrade Figueiredo por toda hospitalidade e grande ajuda durante minha chegada em São Carlos. A Dona Ofélia e toda a sua família por toda a ajuda, carinho e amizade. Aos colegas descontração, de república especialmente, pelos momentos Fernando César de amizade Balbino, e Edson Guimarães, Cláudio Haruo Yamamoto e Alessandro Rodrigues. Aos professores Guilherme Horta Travassos e, especialmente, Márcio de Oliveira Barros, da Universidade Federal do Rio de Janeiro, pelas inúmeras contribuições para o desenvolvimento do experimento. Ao professor Silvio Romero de Lemos Meira pelas criticas e sugestões apresentadas durante a defesa de dissertação. A todos alunos que aceitaram participar do estudo experimental. A Fundação de Amparo a Pesquisa do Estado da Bahia (FAPESB) pelo financiamento parcial deste projeto. Ao grande amigo Vinicius Cardoso Garcia, companheiro de longa data, por toda ajuda dada nos momentos de extrema dificuldade em São Carlos; pelas inúmeras conversas por noites e viagens afora; por todo incentivo, amizade e disponibilidade em sempre querer ajudar. iv A toda família Maricondi por todo apoio, carinho e incentivo. A minha maravilhosa mãe, pelo grande amor, incentivo, carinho e grande esforço que fez durante toda a vida para me oferecer os subsídios para minha chegada neste ponto. A minha segunda mãe, Luiza, por todo o amor e carinho que sempre teve por mim, estando eu, longe ou perto. Ao meu irmão Nando pelo incentivo, companheirismo, carinho, amizade; por contribuir em parte de minha formação e por tudo que sempre fez para me ver feliz. Ao meu irmão Marcelo que contribuiu muito para minha formação, por todo amor e incentivo nos momentos difíceis; e, por muitas vezes, abrir mão de certas coisas que a vida poderia te proporcionar para investir no meu estudo e na minha formação desde os tempos de criança; com certeza, este trabalho deve-se muito a você. A Loana, o amor de minha vida, pela excepcional pessoa que sempre se mostrou, por todo o amor, companheirismo, carinho e incentivo que sempre teve comigo. Mais uma vez gostaria de agradecer a minha mãe, Marcelo, Nando e Loana, sem vocês, certamente, este trabalho não se concretizaria. Amo todos vocês. v Sumário AGRADECIMENTOS .............................................................................................................. II SUMÁRIO................................................................................................................................. V LISTA DE FIGURAS ........................................................................................................... VIII LISTA DE TABELAS .............................................................................................................. X RESUMO .................................................................................................................................XI ABSTRACT ........................................................................................................................... XII INTRODUÇÃO.......................................................................................................................... 1 1.1 MOTIVAÇÃO ................................................ 1 1.2 APRESENTAÇÃO ............................................. 3 ENGENHARIA DE SOFTWARE BASEADA EM COMPONENTES................................... 5 2.1 INTRODUÇÃO ...............................................5 2.2 ARTEFATOS REUTILIZÁVEIS ....................................6 2.2.1 ABORDAGENS PARA REUTILIZAÇÃO ................ .........6 2.3 ENGENHARIA DE SOFTWARE BASEADA EM COMPONENTES ...................7 2.3.1 ENGENHARIA DE DOMÍNIO ...............................7 2.3.1.1 ATIVIDADES DA ENGENHARIA DE DOMÍNIO ...............8 2.3.1.2 PROFISSIONAIS ENVOLVIDOS COM A ENGENHARIA DE DOMÍNIO .8 2.3.1.3 PRODUTOS GERADOS PELA ENGENHARIA DE DOMÍNIO ........9 2.4 DESENVOLVIMENTO BASEADO EM COMPONENTES (DBC) ..................10 2.4.1 COMPONENTES DE SOFTWARE ........................... 11 2.4.2 COMPONENTES E OBJETOS ..............................15 2.4.3 MODELO DE COMPONENTES ..............................16 2.4.3.1 ELEMENTOS DE UM MODELO DE COMPONENTES ............17 2.4.3.2 IMPLEMENTAÇÃO DE UM MODELO DE COMPONENTES .........18 2.4.4 MÉTODOS PARA DESENVOLVIMENTO DE COMPONENTES ............19 2.4.4.1 CATALYSIS ..................................20 2.4.4.2 RATIONAL UNIFIED PROCESS (RUP) ................22 2.4.4.3 SELECT PERSPECTIVE ...........................24 2.4.4.4 UML COMPONENTS ..............................25 2.5 REPOSITÓRIO DE COMPONENTES ............................... 25 2.6 COMMERCIAL-OFF-THE-SHELF (COTS) ........................ 27 vi 2.7 TÓPICOS DE PESQUISA EM DBC ................................29 2.7.1 MEDIDAS E MÉTRICAS PARA COMPONENTES DE SOFTWARE .........29 2.7.2 AGENTES DE SOFTWARE COMO A PROXIMA GERAÇÃO DE COMPONENTES 30 2.7.3 PROGRAMAÇÃO ORIENTADA A ASPECTOS .....................31 2.8 RESUMO .................................................33 PADRÕES DE SOFTWARE....................................................................................................34 3.1 INTRODUÇÃO ............................................. 34 3.2 DISTRIBUTED ADAPTERS PATTERN (DAP) ........................ 36 3.3 PADRÕES PARA O MAPEAMENTO DE OBJETOS DE NEGÓCIO PARA BANCO DE DADOS RELACIONAL ..................................................39 3.3.1 PERSISTENCE LAYER .................................40 3.3.2 CRUD (CREATE, READ, UPDATE, DELETE) ............41 3.3.3 CONNECTION MANAGER .................................41 3.3.4 TABLE MANAGER ......................................42 3.4 RESUMO .............................................. 43 COMPUTAÇÃO DISTRIBUÍDA E OBJETOS DISTRIBUÍDOS .........................................44 4.1 INTRODUÇÃO ..............................................44 4.2 MIDDLEWARE ........................................... 46 49 4.2.1 OBJECT REQUEST BROKER (ORB) .................... 4.2.1.1 COMMON OBJECT REQUEST BROKER ARCHITECTURE (CORBA) 50 4.2.1.2 ARQUITETURA CORBA ......................... 51 4.3 RESUMO ................................................ 59 FERRAMENTAS CASE ....................................................... .................................................60 5.1 INTRODUÇÃO ..............................................60 5.2 FERRAMENTAS DE ANÁLISE E PROJETO ........................... 64 5.2.1 MVCASE ....................................... 64 5.2.2 NOTAÇÕES UML SUPORTADAS PELA MVCASE ............... 65 5.3 RESUMO .................................................68 ABORDAGEM DE DESENVOLVIMENTO DE SOFTWARE BASEADO EM COMPONENTES DISTRIBUÍDOS .......................................................................................69 6.1 INTRODUÇÃO ..............................................69 6.2 MECANISMOS DA ABORDAGEM ...................................70 6.2.1 MÉTODO CATALYSIS ..................................70 6.2.2 MIDDLEWARE .......................................71 6.2.3 FRAMEWORK E PADRÕES ................................71 6.2.3.1 FRAMEWORK PERSISTENCE ............................72 6.2.4 FERRAMENTA MVCASE ................................73 6.2.4.1 MODELO DE COLABORAÇÃO ..........................74 6.2.4.2 FRAMEWORK DE MODELOS E MODELO DE APLICAÇÃO DO FRAMEWORK ............................................................74 6.2.4.3 WIZARD PARA GERAÇÃO DE CÓDIGO DOS COMPONENTES .......76 6.3 ABORDAGEM DE DESENVOLVIMENTO DE SOFTWARE BASEADO EM COMPONENTES DISTRIBUÍDOS ................................................77 6.3.1 DESENVOLVVER COMPONENTES DISTRIBUÍDOS .................78 6.3.1.1 DEFINIR PROBLEMA ..............................80 6.3.1.2 ESPECIFICAR COMPONENTES .........................81 vii 6.3.1.3 PROJETAR COMPONENTES ...........................83 6.3.1.3.1 APLICANDO O DAP ...........................84 6.3.1.3.2 OUTROS REQUISITOS NÃO FUNCIONAIS .............85 6.3.1.4 IMPLEMENTAR COMPONENTES ........................87 6.3.2 DESENVOLVER APLICAÇÕES DISTRIBUÍDAS .......................88 6.3.2.1 ESPECIFICAR APLICAÇÃO ..........................89 6.3.2.2 PROJETAR APLICAÇÃO ............................89 6.3.2.2.1 PREPARAR AMBIENTE .........................90 6.3.2.3 IMPLEMENTAR APLICAÇÃO ..........................91 6.4 TESTES ENVOLVENDO OS COMPONENTES E AS APLICAÇÕES ...............92 6.5 AVALIAÇÃO DA ABORDAGEM ...................................93 6.5.1 INTRODUÇÃO .......................................93 6.5.2 A ABORDAGEM ......................................93 6.5.2.1 PLANEJAMENTO..................................94 6.5.2.2 MONITORAÇÃO ..................................94 6.5.2.3 AVALIAÇÃO DOS RESULTADOS ........................96 6.6 RESUMO .................................................97 ESTUDO EXPERIMENTAL ..................................................................................................98 7.1 INTRODUÇÃO ..............................................98 7.2 TERMINOLOGIA UTILIZADA ....................................99 7.3 ESTUDO EXPERIMENTAL ......................................100 7.3.1 DEFINIÇÃO DO ESTUDO EXPERIMENTAL ....................101 7.3.2 PLANEJAMENTO ....................................102 7.3.3 PROJETO UTILIZADO NO ESTUDO EXPERIMENTAL ..............108 7.3.4 INSTANCIAÇÃO DO ESTUDO EXPERIMENTAL ..................108 7.3.5 EXECUÇÃO DO ESTUDO EXPERIMENTAL .....................109 7.3.6 ANALISE DOS RESULTADOS DO ESTUDO EXPERIMENTAL ..........110 7.3.7 LIÇÕES APRENDIDAS ................................114 7.4 RESUMO ................................................115 CONCLUSÕES .....................................................................................................................116 8.1 SOBRE O TRABALHO ........................................116 8.2 PRINCIPAIS CONTRIBUIÇÕES ..................................117 8.3 TRABALHOS RELACIONADOS ...................................118 8.3.1 A PROPOSTA DE GUIMARÃES ...........................118 8.3.2 A PROPOSTA DE CLEMENT .............................119 8.3.3 OUTRAS FERRAMENTAS ...............................119 8.4 TRABALHOS FUTUROS .......................................120 8.5 CONTRIBUIÇÕES ACADÊMICAS ..................................122 REFERÊNCIAS BIBLIOGRÁFICAS ...................................................................................125 APÊNDICE ............................................................................................................................144 viii Lista de Figuras FIGURA 1: PROCESSO DESENVOLVIMENTO DE FIGURA 2: UM EXEMPLO FIGURA 3: ESTRUTURA FIGURA 4: SERVIÇOS SOFTWARE EM CATALYSIS ....... 22 DAP .................................. 37 PADRÃO DAP .............................. 38 DO DE FIGURA 5: ESTRUTURA DO DE MIDDLEWARE ............................... 48 DE UM ORB ................................. 52 FIGURA 6: OBJECT MANAGEMENT ARCHITECTURE ......................... 55 FIGURA 7: DIAGRAMA DE CLASSES.................................. 66 FIGURA 8: DIAGRAMA DE COMPONENTES .............................. 67 FIGURA 9: DIAGRAMA DE CASO USO DE SEQÜÊNCIA .................... 67 E FIGURA 10: FRAMEWORK PERSISTENCE ............................... 72 FIGURA 11: MODELO DE COLABORAÇÃO ............................... 74 FIGURA 12: FRAMEWORK DE MODELOS ................................ 75 FIGURA 13: MODELO DE APLICAÇÃO DO FRAMEWORK ...................... 76 FIGURA 14: WIZARD PARA GERAÇÃO DE CÓDIGO FIGURA 15: ABORDAGEM DE FIGURA 16: PASSOS DESENVOLVIMENTO DO DE TIPOS DA MODELOS FIGURA 20: MODELO DE APLICAÇÃO FIGURA 21: MODELO DE CLASSES OBTIDO FIGURA 22: MODELO DE COMPONENTES CÓDIGO FIGURA 24: DESENVOLVIMENTO COMPONENTES DISTRIBUÍDOS .... 79 PASSO ESPECIFICAR COMPONENTES ......... 81 DO DE DE DOS ABORDAGEM: DEFINIR PROBLEMA ........... 80 FIGURA 19: FRAMEWORK FIGURA 23: GERAÇÃO COMPONENTES............ 77 DBCD ................................. 78 FIGURA 17: PRIMEIRO PASSO FIGURA 18: MODELO DOS DO NA DAS DO DOMÍNIO DE ORDEM DE SERVIÇOS ...... 82 FRAMEWORK ...................... 82 DO APÓS MODELO APLICAR DE O TIPOS ............. 84 DAP ............... 85 FERRAMENTA MVCASE ................ 87 APLICAÇÕES DISTRIBUÍDAS ............. 88 ix FIGURA 25: COMPONENTES REUTILIZADOS FIGURA 26: PROJETO DA PARA APLICAÇÃO REGISTRAR CLIENTE .. 89 APLICAÇÃO DISTRIBUÍDA ...................... 90 FIGURA 27: MODELO OBJECT WEB ESTENDIDO .......................... 91 FIGURA 28: IMPLEMENTAÇÃO FIGURA 29: TIPOS DE FIGURA 30: DESCRIÇÃO DA APLICAÇÃO REGISTRAR CLIENTE ............ 92 VARIÁVEIS DO EM UM PROJETO DE EXPERIMENTO ................... 99 DESENVOLVIMENTO ............... 108 x Lista de Tabelas TABELA 1: ELEMENTOS DE UM MODELO DE COMPONENTES ................... 17 TABELA 2: DIAGRAMAS ESTRUTURAIS ................................ 65 TABELA 3: DIAGRAMAS COMPORTAMENTAIS ............................. 65 TABELA 4: CATALYSIS VERSUS ABORDAGEM DE DBCD..................... 71 TABELA 5: ARTEFATOS DISPONIBILIZADOS ............................ 96 TABELA 6: PERFIL DOS PARTICIPANTES TABELA 7: DADOS OBTIDOS TABELA 8: DADOS OBTIDOS POR CADA DO ESTUDO EXPERIMENTAL .......... 110 PARTICIPANTE UTILIZANDO POR CADA A PARTICIPANTE UTILIZANDO ABORDAGEM . 111 A ABORDAGEM AD- HOC ........................................................ 111 TABELA 9: MÉDIA DOS DADOS OBTIDOS PELOS DOIS GRUPOS .............. 112 xi Resumo Apesar das recentes e constantes pesquisas na área de Desenvolvimento Baseado em Componentes (DBC), ainda existe uma carência de padrões, abordagens e metodologias que suportem, efetivamente, quanto término o o desenvolvimento desenvolvimento da Internet, tanto última onde com década, a reutilização. com distribuição para se o acelerado tornou reutilização, Considerando o crescimento da requisito não um funcional essencial em muitas aplicações, o problema tornou-se ainda maior. Este projeto apresenta uma Abordagem para o Desenvolvimento de Software Baseado em Componentes Distribuídos, que integra os princípios de engenharia de software baseada em componentes, frameworks, padrões e distribuição. A abordagem é dividida em duas etapas: no desenvolvimento para reutilização e no desenvolvimento com reutilização. Uma ferramenta CASE é o principal mecanismo de execução da abordagem, suportando, inclusive, a geração de código dos componentes e aplicações. Um ambiente para distribuição dos componentes e aplicações é proposto para experimental, execução são da abordagem. mostrados os Através resultados de da um estudo análise da viabilidade de utilização da abordagem no desenvolvimento de software baseado em componentes distribuídos. xii Abstract In spite of recent and constant researches in the ComponentBased Development patterns, support as (CBD) approaches much the area, and there is methodologies development for still a that effectively reuse as lack with of reuse. Considering the accelerated growth of the Internet over the last decade, where distribution has become an essential nonfunctional requirement of most applications, the problem became bigger. Thus, this project presents a Distributed Component-Based Software Developmente Approach that integrates the concepts of Component-Based Software Engineering (CBSE), frameworks, patterns, and distribution. This approach is divided into two stages: in the development for reuse, and in the development with reuse. A CASE tool is the main mechanism to apply this approach, supporting inclusively, the code generation of applications environment is components and applications A distributed components and proposed for accomplishing the results of this approach. The results of the analysis of the viability of using the approach in the distributed component-based software development are presented through an experimental study. Capítulo 1 Introdução 1.1 Motivação Uma das razões mais convincentes para a adoção de abordagens de desenvolvimento de software baseado em componentes, com ou sem objetos, é a premissa de reutilização. A idéia é construir software de componentes já existentes primariamente pela montagem e substituição de suas partes interoperáveis. Estes componentes abrangem desde controles de interfaces de usuário, como listboxes e HTML browsers, até componentes para persistência em banco de dados e distribuição. As implicações de redução de tempo de desenvolvimento e melhoria da qualidade do produto tornam esta abordagem muito atrativa [Szyperski, 1998]. A reutilização reaproveitar ao implementação mesma idéia desenvolvido, implantá-lo já é uma máximo variedade de técnicas trabalho de análise, o concluído. O objetivo cada vez que mas sim organizar imediatamente em um um novo o é não produto trabalho novo que projeto e reinventar a tiver já contexto. visa que ser realizado Deste e modo, mais produtos podem ser entregues em menores tempos, os custos referentes às tarefas de manutenção são reduzidos, uma vez que as melhorias realizadas em um segmento do projeto refletir-seão em todos os projetos nos quais este está sendo utilizado e, 2 Capítulo 1 – Introdução por fim, tem-se uma melhoria de qualidade, visto que os componentes reutilizados já foram bem testados. Para que a reutilização possa ser efetiva, deve-se considerála em todas as fases do processo de desenvolvimento do software. Portanto, o Desenvolvimento Baseado em Componentes (DBC) deve suportem oferecer desde componentes, do a métodos, técnicas identificação domínio do e problema, e ferramentas especificação até o seu que dos projeto e implementação em uma linguagem orientada a componentes. Além disso, o DBC deve empregar inter-relações entre componentes já existentes, previamente testados, visando reduzir a complexidade e o custo de desenvolvimento do software [Werner, 2000]. Componentes de software já se tornaram realidade no nível de implementação [Szyperski, 1998] e, atualmente, o conceito deve ser consolidado nas fases anteriores do ciclo de vida de desenvolvimento. Deste modo, os princípios e os conceitos de DBC devem ser desenvolvimento aplicados e durante realizados de todo uma o fase processo para de outra, consistentemente. Os métodos e as abordagens atuais de DBC, discutidos em [D’Souza, 1999], [Perspective, 2000], [Jacobson, 2001], não incluem o suporte total para o conceito de um componente. Isto resulta do fato de que os componentes são tratados principalmente nas fases de implementação e implantação, ao invés de serem focados durante todo o ciclo de vida de desenvolvimento [Stojanovic, 2001]. Além disso, estes métodos não definem claramente como adicionar requisitos não funcionais, como, por exemplo, distribuição e persistência em banco de dados e como se dá o desenvolvimento das aplicações reutilizando os componentes previamente construídos, deixando esta tarefa totalmente a cargo do desenvolvedor. Assim, motivado pelas idéias de reutilização, desenvolvimento baseado em componentes e distribuição, este projeto pesquisa uma Abordagem para o Desenvolvimento de Software Baseado em 3 Capítulo 1 – Introdução Componentes Distribuídos que procura orientar o engenheiro de software tanto no desenvolvimento dos componentes de um domínio do problema, quanto no desenvolvimento das aplicações que os reutilizam. 1.2 Apresentação Esta dissertação está organizada em oito capítulos e um engenharia de apêndice. O primeiro capítulo contém esta introdução. O Capítulo 2 apresenta uma visão geral da software baseada em componentes, discutindo, detalhadamente, a Engenharia de Componentes. O Domínio e o Desenvolvimento capítulo contém, ainda, uma Baseado em descrição dos mecanismos essenciais no processo de engenharia de software baseada em componentes: a utilização de um repositório para armazenamento e busca dos Commercial-Off-The-Shelf discutidos os componentes (COTS). principais Por tópicos e a fim, de utilização são de relatados pesquisa que e estão começando a ser explorados na área de DBC. O Capítulo 3 apresenta os padrões de software, em especial, os padrões negócio para para distribuição banco de e mapeamento dados de relacional, objetos de utilizados na abordagem proposta. O Capítulo 4 descreve a evolução da computação centralizada, passando pelas redes locais até chegar aos chamados objetos distribuídos; elemento introduz fundamental arquiteturas alguns dos também nos o sistemas cliente/servidor, principais conceito tipos middleware, distribuídos descrevendo de de e nas superficialmente middleware existentes. Em seguida, descreve, com detalhes, uma tecnologia específica de middleware, o Object Request Broker, ou simplesmente ORB, definindo suas principais funcionalidades e aplicações. O Capítulo 5 introduz as ferramentas CASE, sua taxonomia, baseada no ferramenta critério MVCASE, de onde função se como apóia elemento toda a chave, abordagem e a de 4 Capítulo 1 – Introdução desenvolvimento de software baseado em componentes distribuídos. O Capítulo 6 apresenta, Desenvolvimento de detalhadamente, Software Baseado a Abordagem em de Componentes Distribuídos, discutindo seus principais mecanismos, suas duas grandes etapas e os aspectos envolvendo os testes dos componentes e aplicações. Por fim, é apresentado e discutido um processo inicial de validação, ao qual a abordagem foi submetida. O Capítulo 7 apresenta a definição, o planejamento, a execução e os resultados alcançados pelo estudo experimental de viabilidade da abordagem proposta no desenvolvimento de software baseado em componentes distribuídos. O Capítulo dissertação, 8 apresenta ressaltando as suas considerações contribuições, finais desta limitações e perspectivas futuras. O apêndice apresenta os dois questionários estudo experimental apresentado no Capítulo 7. utilizados no Capítulo 2 Engenharia de Software Baseada em Componentes 2.1 Introdução Antes de apresentar e discutir a engenharia de software baseada em componentes, este capítulo apresenta um princípio chave na área: a reutilização. Segundo [Pressman, 2001], a reutilização no contexto da engenharia de software não é uma idéia velha, nem nova. Ainda conforme o autor, os programadores têm utilizado idéias, abstrações e processos desde os primeiros dias da computação, mas as primeiras abordagens à reutilização eram as da prática corrente. Atualmente, sistemas complexos e de alta qualidade baseados em computador necessitam ser construídos em curtos períodos de tempo. Isso indica uma abordagem mais organizada e voltada à reutilização. Um dos grandes pesquisadores na área de reutilização, Martin Griss, visualiza a mesma como uma simples e bem conhecida idéia [Griss, 1996]. A partir da necessidade de se construir um novo software, construídos. Deste deve-se modo, utilizar tem–se a componentes redução nos previamente custos de desenvolvimento, testes, documentação e manutenção. O mais comum produto de software reutilizável é o código fonte, o qual é o produto final e mais importante da atividade de desenvolvimento. Adicionalmente ao código, qualquer produto 6 Capítulo 2 – Engenharia de Software Baseada em Componentes intermediário do ciclo de vida do software pode ser reutilizado [Yunwen, 2001]. 2.2 Artefatos Reutilizáveis D’Souza parte de [1999] projeto. define artefato trabalho que O considera autor possa reutilizável como qualquer ser utilizado em mais os seguintes artefatos de um como candidatos à reutilização: • Código compilado; objetos executáveis. • Código Fonte; classes e métodos. • Casos de testes. • Modelos e Projetos: frameworks, padrões. • Interface de usuário. • Planos, estratégias e regras arquiteturais. 2.2.1 Abordagens para a Reutilização Em uma cultura de reutilização, o desenvolvimento tende a ser realizado através de duas atividades distintas [D’Souza, 1999]: • Desenvolvimento do Produto: corresponde ao projeto e à criação das aplicações para resolver o problema. Essa atividade é centralizada no entendimento do problema e na rápida localização e montagem dos artefatos reutilizáveis, necessários à implementação. • Desenvolvimento dos Artefatos: corresponde ao projeto e à criação de componentes reutilizáveis que possam ser utilizados em diferentes contextos. Apesar de bem conhecidos os benefícios do uso da reutilização, esse objetivo ainda é complexo na prática. Não basta apenas agrupar partes de software em uma biblioteca e disponibilizá-la [Yunwen, 2001]. para reutilização Assim, os pelos componentes desenvolvedores têm de ser 7 Capítulo 2 – Engenharia de Software Baseada em Componentes cuidadosamente projetados e desenvolvidos, a fim de propiciarem uma reutilização adequada em todas as etapas do processo de desenvolvimento [Griss, 2001]. Segundo Griss [1996], o processo de desenvolvimento necessita ser mudado para dar suporte ao desenvolvimento e à reutilização de componentes. As pessoas precisam ser treinadas de modo a utilizar os componentes e as bibliotecas, novas tecnologias e o próprio processo de desenvolvimento. Novos métodos, visando o desenvolvimento baseado em componentes e a reutilização, precisam ser estabelecidos e, por fim, as empresas necessitam ganhar experiências com essas mudanças. 2.3 Engenharia de Software Baseada em Componentes A engenharia de software baseada em componentes é um processo que enfatiza o projeto e a construção de sistemas baseados em computador, utilizando componentes de software reutilizáveis [Pressman, 2001]. O modelo de processo para a engenharia de software baseada em componentes enfatiza caminhos paralelos, nos quais duas atividades são essenciais: a Engenharia de Domínio e o Desenvolvimento Baseado em Componentes. 2.3.1 Engenharia de Domínio (ED) Segundo Pressman [2001], a intenção da Engenharia de Domínio (ED) é identificar, construir, catalogar e disseminar um conjunto de componentes de software que possua aplicabilidade para software existente ou futuro, dentro de um particular domínio de mecanismos aplicações. que Deste sistematizem a modo, busca a e ED a deve estabelecer representação de informações do domínio, de forma a facilitar ao máximo a sua reutilização [Werner, 2000]. 8 Capítulo 2 – Engenharia de Software Baseada em Componentes 2.3.1.1 Atividades da Engenharia de Domínio Pesquisas [Prieto-Diaz, 1990], [Griss, 1998], [Pressman, 2001] apontam que existem basicamente três etapas principais na ED: • Análise do Domínio: corresponde ao processo pelo qual a informação usada no desenvolvimento do sistema, para um determinado organizada, domínio, com a é identificada, proposta de ser capturada reutilizada para e a criação de novos sistemas [Prieto-Diaz, 1990]; • Projeto do Domínio: nesta etapa, os resultados da análise do domínio soluções são usados para os para identificar requisitos e comuns, generalizar através da especificação de uma arquitetura de software do domínio. As oportunidades de reutilização, identificadas na análise do domínio, são refinadas de forma a especificar as restrições do projeto [Werner, 2000]; e • Implementação do Domínio: nesta etapa, transformam-se as oportunidades de reutilização e soluções do projeto para um modelo implementacional, que inclui serviços, tais como: a identificação, reengenharia e/ou construção, e manutenção dos componentes reutilizáveis, que suportem estes requisitos e soluções de projeto [Werner, 2000]. 2.3.1.2 Profissionais envolvidos com a Engenharia de Domínio Em [Simos, 1996], [Werner, 2000], são apresentados três grupos principais de profissionais, que atuam de forma efetiva num processo de ED: • Fontes: são os usuários finais, que utilizam aplicações já desenvolvidas naquele domínio, e os especialistas do domínio, que provêem informações a respeito de conceitos e funcionalidades relevantes no domínio; 9 Capítulo 2 – Engenharia de Software Baseada em Componentes • Produtores: são os analistas e os projetistas do domínio, que capturam as informações das fontes e de aplicações existentes e realizam implementação a análise, o e o empacotamento dos são os desenvolvedores de projeto, a componentes reutilizáveis; e • Consumidores: aplicações e usuários finais interessados no entendimento do domínio, que utilizam para a os modelos gerados especificação entendimento de nas etapas aplicações dos conceitos e Produtos gerados pela anteriores e/ou funções maior inerentes ao domínio. 2.3.1.3 Engenharia de Domínio Um método de engenharia de domínio, para ser efetivo, deve prover representações específicas para documentar os resultados de cada uma das fases da ED [Werner, 2000]. Estas representações devem, prioritariamente, representar o escopo e a abrangência do domínio, descrever os problemas passíveis de serem solucionados, domínio, e através prover de componentes especificações de software, arquiteturais no e implementacionais que solucionem os problemas encontrados do domínio. Desta forma, para cada uma das fases da engenharia de domínio, devem existir produtos específicos a serem disponibilizados. Na fase de análise de domínio, devem ser disponibilizadas representações que capturem o contexto e a abrangência no domínio, explicitando seu relacionamento com outros domínios. Nesta fase, ainda, devem ser disponibilizados modelos, que capturem os principais conceitos e funcionalidades inerentes ao domínio, gerando, assim, um ou mais modelos com abstrações do domínio [SEI, 1999a]. 10 Capítulo 2 – Engenharia de Software Baseada em Componentes O projeto do especifiquem a domínio deve estrutura disponibilizar arquitetural a ser modelos seguida que pelas aplicações do domínio. As representações geradas devem prover modelos arquiteturais arquiteturas que específicas auxiliem para cada na especificação aplicação (SEI, de 1999b), [Werner, 2000]. A fase de implementação do domínio deve disponibilizar componentes implementacionais, que especifiquem as principais funcionalidades encontradas em aplicações do domínio. Estes componentes implementacionais devem estar em conformidade com o modelo de abstrações da fase de análise e com os modelos arquiteturais da fase de projeto, de forma que possam cooperar entre si para implementar todas as funcionalidades necessárias para uma determinada aplicação [SEI, 1999b]. 2.4 Desenvolvimento Baseado em Componentes (DBC) Até bem pouco tempo atrás, o desenvolvimento da maioria dos produtos de software, disponíveis no mercado, era baseado em uma abordagem de desenvolvimento de blocos monolíticos, formados por um grande número de partes inter-relacionadas, onde estes relacionamentos estavam, na maioria das vezes, implícitos. O DBC surgiu como uma nova perspectiva para o desenvolvimento de software, cujo objetivo é a “quebra” destes blocos monolíticos em componentes interoperáveis, reduzindo, desta forma, a complexidade do desenvolvimento, assim como os custos, através da utilização de componentes que, em princípio, seriam adequados para serem utilizados em outras aplicações [Sametinger, 1997]. Este objetivo não é novo no desenvolvimento de software. Em [Werner, 2000], são listados alguns trabalhos que, desde então, vislumbravam uma indústria de componentes de software reutilizáveis. A diferença é que estas abordagens se baseavam, essencialmente, em código. Entretanto, constata-se que o DBC, 11 Capítulo 2 – Engenharia de Software Baseada em Componentes para ser efetivo, envolve muito mais do que isto. Apenas recentemente, o DBC está sendo considerado como uma técnica importante fatores no desenvolvimento despertou este novo de software. interesse na Um conjunto área, de provendo a motivação necessária para se acreditar que o DBC possa ser agora mais efetivo e realizado em larga escala. Dentre estes fatores, podemos citar [Sametinger, 1997], [D’Souza, 1999]: • Desenvolvimento da Internet, que aumentou a preocupação em relação à computação distribuída; • A mudança da estrutura de sistemas baseados em mainframes para sistemas baseados na arquitetura cliente e servidor, levando os desenvolvedores a considerarem as aplicações não mais como sistemas monolíticos, mas sim como um conjunto de sub-sistemas interoperáveis; e • Uso de Padrões para construção de aplicações, como o Object Management Group (OMG) e Component Object Model (COM). 2.4.1 Componentes de Software O conceito exato de componente em DBC ainda não é um tópico fechado. Cada grupo de pesquisa caracteriza, da maneira mais adequada ao seu contexto, o que seria um componente e, assim, não há ainda, na literatura, uma definição comum e precisa para este termo. Desde o primeiro workshop de DBC em 1998, Kyoto [Brown, 1998], até o mais recente, na Flórida, Estados Unidos [CBSE, 2002], passando [ICSR, 2002], apresentadas. por [WCOP, Em outras conferências 2002], diversas [Heineman, 2001], um mais específicas definições grupo têm formado sido por especialistas na área de engenharia de software baseada em componentes relata que ao fim de dezoito meses chegou-se a um consenso sobre o que seria um componente de software. Segundo esses especialistas, um componente de software é um elemento de software em conformidade com um modelo de 12 Capítulo 2 – Engenharia de Software Baseada em Componentes componentes e que pode ser independentemente implantado e composto sem modificações, conforme um padrão de composição. Em [Brown, 1998], são apresentadas diversas definições do que vem a ser um componente. Algumas dessas visões são: • “Um componente como um elemento arquitetural. Este componente deve prover e estar em conformidade com um conjunto de interfaces”; • “Um componente acessado como através de um elemento interfaces bem implementacional documentadas, que podem ser descobertas em tempo de execução”; • “Um componente como um elemento implementacional, mas que faz parte de um contexto arquitetural específico”; • “Um componente de negócio representa a implementação de um conceito autônomo de negócio ou processo. Consiste dos artefatos de software necessários para expressar, implementar e executar o conceito como um elemento reutilizável de um grande sistema de negócio”. Cada uma dessas visões ressalta um determinado aspecto de um componente. Atualmente, pode-se notar que já existem definições mais precisas e convergentes. Em [Werner, 2000], são listados alguns aspectos que um componente de software deve realizar. Dentre estes aspectos, constatou-se que um componente deve: • descrever ou realizar uma função específica [Sametinger, 1997], [D’Souza, 1999]; • estar em conformidade e prover um conjunto de interfaces bem definidas [Sametinger, 1997], [Szyperski, 1998]; • ter disponível uma documentação adequada [Sametinger, 1997]; • estar inserido no contexto de um modelo que oriente a composição deste componente com outros (arquitetura de software); 13 Capítulo 2 – Engenharia de Software Baseada em Componentes • ser autocontido em termos da funcionalidade que provê. Outro ponto importante é que, no início, a visão de um componente como um elemento, somente como código, era bastante comum e, atualmente, esta visão está mudando e os engenheiros de software níveis de começam a abstração visualizar [D’Souza, componentes 1999], em todos [Heineman, os 2001], [Ommering, 2002]. Segundo Williams [2001], os componentes podem ser divididos em três categorias: • Componentes GUI: são os componentes encontrados mais no conhecidos mercado. Nessa tipos de categoria enquadram-se todos os botões, menus e outros widgets utilizados na criação de interfaces para aplicações. • Componentes de Serviços: provêem acessos para serviços comuns necessários em muitas aplicações. Isso inclui acesso a banco de dados, acesso a serviços de mensagens e transações e serviços de integração. Uma característica comum dos componentes de serviços é que estes utilizam uma estrutura adicional ou sistemas para realizar suas funções. Por exemplo, pode-se empacotar um sistema existente a fim de criar um componente de serviço e este realize funções para outras aplicações [Mehta, 2002]. • Componentes do Domínio: também chamados de componentes de negócio, são os componentes mais difíceis de se projetar e construir. Esses componentes necessitam de um alto conhecimento do domínio para sua construção, a fim de permitirem uma maior reutilização no desenvolvimento das aplicações. Considerando todos os aspectos aqui mencionados, a definição de Sametinger satisfatória, a [1997] fim de apresenta-se estabelecer o que suficientemente vem a ser um 14 Capítulo 2 – Engenharia de Software Baseada em Componentes componente de software. Esta definição é a que será utilizada como base no decorrer deste trabalho. “Componentes claramente reutilizáveis identificáveis, são que artefatos descrevem autocontidos, ou realizam uma função específica e têm interfaces claras em conformidade com um dado modelo de arquitetura de software, documentação apropriada e um grau de reutilização definido.” Ser autocontido significa que a função que o componente desempenha deve ser realizada por ele, de forma completa. Um componente deve, também, ser claramente identificável, de forma que possa ser encontrado de maneira facilitada. Este atributo, inclusive, vem sendo alvo de inúmeras pesquisas [Werner, 2000a], [Yunwen, 2002], [Elias, 2002]. Um determinado componente não é completamente independente dos outros componentes e do ambiente. O que determina como se dá esta dependência do componente, em relação aos demais e ao ambiente que o cerca, são suas interfaces. As interfaces de um componente determinam como este componente pode ser reutilizado e interconectado com outros componentes. Szyperski [1998] define uma interface como um conjunto de assinaturas cliente. de operações Segundo Councill que podem [2001], ser a invocadas interface por descreve um o comportamento de um componente, que é obtido por considerar somente as interações de suas interfaces e por ocultar todas as demais interações. Ainda conforme Councill, existem dois tipos de interfaces: providas e requisitadas. Um componente suporta uma interface provida se contém definidas pela necessita de interação definida a implementação interface. uma Por interface na de outro todas lado, requisitada interface e espera elemento de software suporte essa interface. as um se que operações componente solicita algum uma outro 15 Capítulo 2 – Engenharia de Software Baseada em Componentes Nestes dois casos, a conexão entre os componentes é realizada através de suas interfaces, de maneira direta, sendo as próprias interfaces dos componentes o elemento de conexão dos mesmos. Porém, existem casos em que esta conexão não pode ser realizada de forma direta, sendo necessária a utilização de um outro esta componente, conexão, projetado denominado exclusivamente por alguns para intermediar autores de conector [Wills, 2001]. A documentação é também indispensável para a reutilização. Esta deve componente, ser suficiente avaliar sua para que se adequabilidade possa para recuperar um contexto da o reutilização, fazer adaptações (se for o caso) e integrar o componente ao seu novo ambiente. Outro conceito importante é o que os pesquisadores chamam de “grau de reutilização” do componente. O grau de reutilização contém informações, tais como: quantas vezes e onde o componente foi reutilizado, quem é responsável pela manutenção do componente e quem é o proprietário [Sametinger, 1997]. 2.4.2 Componentes e Objetos Segundo [Weinreich, 2001], a engenharia de software baseada em componentes é considerada o passo seguinte à orientação a objetos. Ainda conforme o autor, não são surpreendentes os fatos de os componentes serem geralmente relacionados a objetos e, em alguns casos, o termo ser simplesmente utilizado como um sinônimo para objeto. Entretanto, os conceitos de componentes e objetos são independentes, embora muitos modelos de componentes sejam baseados em objetos. Objetos são comportamento entidades e que possuem encapsulam um um estado identificador e um único. O comportamento e a estrutura dos objetos são definidos através de suas classes. Uma classe serve para vários propósitos. Inicialmente, a mesma implementa o conceito de Tipo Abstrato de Dados (TAD) e provê uma descrição abstrata do comportamento 16 Capítulo 2 – Engenharia de Software Baseada em Componentes dos seus objetos. Em seguida, uma classe provê a implementação do comportamento dos objetos. Por último, é utilizada para criar objetos, isto é, instâncias dessas classes [Weinreich, 2001]. Atualmente, a maioria dos modelos de componentes são baseados no paradigma da orientação a objetos. A premissa básica da orientação a objetos é construir programas a partir de um conjunto de objetos. Este processo não muda com as abordagens de desenvolvimento baseado em componentes. Componentes são similares às classes. Assim como as classes, os componentes definem o comportamento e a criação dos objetos. Objetos criados através de componentes são chamados de instâncias de componentes. Ambos, implementação componentes através de e classes, descrições realizam de essa comportamentos abstratos, chamados interfaces [Weinreich, 2001]. Assim como as classes, a implementação de um componente é geralmente forma oculta e, binária. em alguns Internamente, casos, um somente avaliada na pode ser componente implementado por uma simples classe, por diversas classes ou através de procedimentos programação não tradicionais orientada a objetos. em uma Por linguagem último, a de mais importante distinção é que os componentes de software estão em conformidade com um padrão definido através do modelo de componentes. 2.4.3 Modelo de Componentes Segundo [Weinreich, 2001], um modelo de componentes define um conjunto de padrões interoperabilidade, para customização, implementação, composição e nomeação, evolução dos componentes. Councill [2001] define o modo de operação de um modelo de componentes através de duas fases. Na primeira fase, o modelo de componentes define como construir um componente de maneira individual. Por exemplo, o Microsoft Component Object Model 17 Capítulo 2 – Engenharia de Software Baseada em Componentes (COM) requer que cada componente COM possua uma interface IUnKnown. Na fase subseqüente, um modelo de componentes pode determinar um comportamento global sobre como um conjunto de componentes pode interagir e se comunicar em um sistema baseado em componentes. Atualmente, existem diversos modelos de componentes disponíveis. Dentre estes modelos, vêm obtendo grande destaque o OMG Corba Component Model (CCM) [OMG, 2002], o Microsoft DCOM/COM+ [Microsoft, 2002] e, os Sun Microsystem JavaBeans e Enterprise JavaBeans [Sun, 2002]. 2.4.3.1 Elementos de um Modelo de Componentes Dentro do podem ser composição mercado de componentes independentemente através de de software, implantados componentes componentes e adquiridos sujeitos de à terceiros. Assim, o mercado de componentes necessita de padrões. Padrões para comunicação e intercâmbio de dados entre componentes de diferentes propósitos são necessários. Segundo [Weinreich, 2001], os elementos básicos de um modelo de componentes são padrões para: interfaces, nomeação, meta dados, customização, composição, evolução e implantação. A Tabela 1 [Weinreich, 2001] mostra esses elementos. Tabela 1 - Elementos de um Modelo de Componentes. Padrões para Interfaces Descrição Especificação de comportamento dos componentes e de suas únicos para propriedades. Nomeação Nomes globais interfaces e componentes. Meta dados Informações componentes, sobre as interfaces seus relacionamentos. os e Capítulo 2 – Engenharia de Software Baseada em Componentes 18 Interoperabilidade de Comunicação dados e intercâmbio entre componentes diferentes de fornecedores, implementados em diferentes linguagens. Customização Interfaces e ferramentas para customizar componentes. Composição Interfaces e regras para combinar componentes a fim de criar grandes estruturas. Suporte a Evolução Regras e serviços substituir para componentes ou interfaces por novas versões. Empacotamento e Implantação Empacotamento da Implementação e recursos instalar necessários e para configurar um componente. Um modelo de componentes pode ter padrões especializados para descrever características específicas do domínio, necessárias para determinadas componentes dentro aplicações. de Por domínios exemplo, com a composição atividades de concorrentes necessita de padrões apropriados para tratamento de Threads e mecanismos de sincronização. Um segundo exemplo pode ser um sistema de processamento distribuído que necessita de padrões para invocação remota de métodos e aspectos relacionados à segurança [Weinreich, 2001]. 2.4.3.2 Implementação de um Modelo de Componentes Um importante padronização componentes. elemento do de ambiente um de modelo de suporte componentes à execução é a dos 19 Capítulo 2 – Engenharia de Software Baseada em Componentes A implementação de um modelo de componentes é um dedicado conjunto de elementos de software executáveis, necessários para suportar a execução dos componentes conforme um modelo de componentes previamente definido [Councill, 2001]. O Common Object Request Broker Architecture (CORBA), padronizado pelo Object Management Group (OMG), por exemplo, funciona em um sistema aberto de processamento distribuído utilizando Object Request Broker (ORB); por outro lado, as aplicações de software executam em sistemas operacionais como o Windows ou UNIX. CORBA é um padrão aberto, através do qual o OMG promove um padrão, mas não é um produtor de componentes que provê a implementação de um modelo de componentes. Quando um produtor de uma implementação do modelo de componentes é também o projetista de um modelo de componentes, o modelo de componentes pode se tornar proprietário, isto é, somente uma implementação do modelo de componentes torna-se disponível. 2.4.4 Métodos para Desenvolvimento de Componentes Como todo processo de desenvolvimento de software, é preciso prover uma componentes, controlada, sistemática devendo para ser para o ser cuidadosamente efetiva. desenvolvimento Assim, é baseado em planejada e necessária uma abordagem que enfatize a reutilização em todas as etapas do desenvolvimento, não envolvendo apenas código [Werner, 2000]. Segundo Krueger [1992], o processo de desenvolvimento pode ser dividido em duas etapas: desenvolvimento para reutilização e desenvolvimento com reutilização. Colocando esta abordagem sobre o prisma do desenvolvimento baseado em componentes, esta nomenclatura poderia ser mudada e, assim, tem-se a mesma divisão: desenvolvimento de componentes e desenvolvimento com componentes. Ao considerar componentes muito mais do que somente código, uma abordagem de desenvolvimento de componentes pode ser vista 20 Capítulo 2 – Engenharia de Software Baseada em Componentes como um processo de engenharia de domínio completo, onde a preocupação, além de ser com a disponibilização de componentes em todos os níveis de abstração, não é com uma única aplicação, mas com uma família de aplicações. Assim, o grau de reutilização de um determinado componente será muito maior e seu entendimento também, uma vez que este componente será disponibilizado tanto para especificação quanto para código. Por outro lado, o desenvolvimento com componentes deve ser visto como um processo de desenvolvimento de aplicações, onde a reutilização de componentes deve estar presente em todas as fases. Ainda por ser uma abordagem nova para a engenharia de software, o número de métodos projetados especificamente para DBC ainda é limitado. Alguns destes métodos são extensões de métodos já existentes, em particular, métodos de desenvolvimento orientado a objetos. Dentre estes métodos, pode-se destacar o Catalysis [D’Souza, 1999], o Rational Unified Process (RUP) [Jacobson, 2001], o Select Perspective [Cheesman, descrição 2000]. desses [Perspective, A seção métodos. 2000] seguinte O e o UML apresenta critério Components uma selecionado breve para apresentação dos métodos foi puramente de ordem alfabética, não considerando demais características. 2.4.4.1 Catalysis Na tentativa software de melhorar orientado a o processo objetos, de desenvolvimento pesquisadores de desenvolveram vários métodos, destacando-se o OMT [Rumbaugh, 1991] e o de Booch [Booch, 1994]. Esses métodos, embora tenham contribuído continuamente para produzir apresentavam problemas de software com rastreamento melhor qualidade, de requisitos, semântica para verificar consistência, níveis de granularidade e refinamento e distinção entre modelo do domínio, modelo do sistema e arquitetura [D’Souza, 1999]. A evolução desses 21 Capítulo 2 – Engenharia de Software Baseada em Componentes métodos resultou construir em um Sistemas método integrado Distribuídos de técnicas Orientado a para Objetos, denominado Catalysis [D’Souza, 1999]. Catalysis é Universidade uma de iniciativa Brighton, de pesquisa Inglaterra, por desenvolvida D’Souza e na Wills [D’Souza, 1999]. Conforme os autores, o método Catalysis é um método de desenvolvimento baseado em componentes completo, cobrindo todas as fases do desenvolvimento de um componente a ser utilizado no desenvolvimento de uma dada aplicação, desde a especificação até sua implementação. Catalysis é baseado em um conjunto de princípios [D’Souza, 1999] para o princípios, desenvolvimento pode-se refinamento, de destacar: componentes software. a “plug-in” Dentre esses abstração, precisão, e leis algumas de reutilização. O princípio abstração orienta o desenvolvedor na busca de aspectos essenciais do sistema, dispensando detalhes que não são relevantes para o contexto do sistema. O princípio precisão tem como objetivo descobrir erros e inconsistências na modelagem. fase para Refinamentos outra são sucessivos aplicados, de transições buscando-se obter de uma artefatos cada vez mais precisos e propícios à reutilização. O princípio componentes “plug-in” suporta a reutilização de componentes, a fim de construir outros. Por fim, a principal lei de reutilização do método Catalysis é não reutilizar código sem reutilizar modelos de especificações desses códigos. O processo Catalysis é de desenvolvimento dividido Especificação dos em três de software níveis: Componentes e Domínio Projeto utilizando do Problema, Interno dos Componentes, como mostra a Figura 1. Estes níveis correspondem às fases tradicionais elicitação, Assim análise como software, em no e do ciclo modelagem, ciclo Catalysis, e tradicional pode-se de vida projeto de retornar do dos software: requisitos. desenvolvimento ao nível de anterior 22 Capítulo 2 – Engenharia de Software Baseada em Componentes para remover inconsistências com o domínio do problema e com a especificação [D’Souza, 1999]. Identificar o problema Estabelece a terminologia de Domínio do Problema Entende os processos de negócios e colaborações Domínio do Problema Especificar o sistema Define responsabilidades e escopo dos componentes Especifica as operações desejadas dos componentes e define suas interfaces Especificação dos Componentes Especificar o sistema Define a arquitetura interna dos componentes Define o comportamento interno dos componentes e suas colaborações Projeto Interno dos Componentes Figura 1 – Processo de Desenvolvimento de Software em Catalysis. No nível Domínio do Problema é dada ênfase no entendimento do problema, especificando-se “o quê” o sistema deve atender para solucionar o Componentes, problema. é descrito Em seguida, o na comportamento forma não ambígua e, no último nível, Especificação do sistema de dos uma Projeto Interno dos Componentes, define-se como serão implementados os requisitos especificados para os componentes [D’Souza, 1999]. 2.4.4.2 Rational Unified Process (RUP) O Rational Unified Process [Jacobson, 2001] é o método de engenharia de método interativo, é software da Rational orientado a Software Corporation. O controlado e objetos, suportado através de ferramentas, podendo ser aplicado a todo tipo de projeto de desenvolvimento de software. O RUP alcançou grande popularidade na indústria de software, especialmente, entre usuários das ferramentas Rational que oferecem suporte à modelagem e à implementação. Conforme os autores [Jacobson, 2001], o RUP representa mais do que um simples processo de desenvolvimento de software 23 Capítulo 2 – Engenharia de Software Baseada em Componentes capaz de transformar requisitos do usuário em um sistema de software. Ele é um framework de processo genérico, capaz de ser especializado para diferentes áreas de aplicação, tipos de organização, níveis de competência e tamanhos de projeto. O processo de desenvolvimento utilizando o RUP é dividido em quatro fases: concepção, elaboração, construção e transição, e um número arbitrário de interações. Adicionalmente, o RUP é estruturado através de um conjunto de workflows, os quais agrupam diferentes tipos de atividades. O RUP não introduz nenhum novo conceito de modelagem, pois o mesmo se apóia na utilização da Unified Modeling Language (UML) para estas tarefas, porém introduz novos conceitos, como artefatos, atividades e workflow. Esses conceitos capturam abstrações, como: “quem” deve fazer “o quê”, “como” e “quando” [Boertin, 2001]. O conceito chave do RUP é a definição de atividades (workflows) realizadas do começo ao fim do ciclo de vida de desenvolvimento, como a identificação dos requisitos, análise, projeto, implementação e teste. No RUP, o suporte à abordagem de DBC é encorajado, porém esse suporte ainda é muito influenciado e restringido pela notação UML. A visão do método no conceito voltada de mais ao componente nível programação, baseando-se implantação. Isto componente como é ainda físico em não muito de pela trivial, limitada, pacotes componentes comprovado “uma é UML de e definição quase sendo código de diagramas do de RUP de independente, e substituível parte de um sistema que realiza uma função clara no contexto de uma arquitetura bem definida”. RUP utiliza o conceito da UML de subsistema para a proposta de modelagem dos componentes, mas não detalha como esse processo deve ser realizado [Stojanovic, 2001]. Uma das principais vantagens do RUP é prover uma oportunidade para o desenvolvimento de sistemas, de forma interativa e 24 Capítulo 2 – Engenharia de Software Baseada em Componentes incremental, o que é visto, atualmente, como uma das melhores práticas de desenvolvimento [Jacobson, 2001]. 2.4.4.3 Select Perspective O método Select Perspective foi originalmente criado em 19941995, através da combinação do Object Modelling Technique (OMT) [Rumbaugh, 1991] e do método Use Case Driven Objectory [Jacobson, 1992], baseando-se em princípios Rapid Application Development (RAD). Originalmente, o Select suportava somente a modelagem de negócio, casos de uso, classes, modelagem de interação dos objetos e modelagem de estados. Após o crescente interesse e importância do paradigma de desenvolvimento baseado em componentes, o método foi estendido a fim de prover mecanismos para modelagem de componentes [Perspective, 2000], [Boertin, 2001], [Stojanovic, 2001]. Além da modelagem de componentes, o Select Perspective utiliza a notação adotada da metodologia CSC Catalyst [CSC, 1995] para modelagem do negócio, mantendo o link entre processos de negócios e classes e casos de uso associados. Além disso, (ERD) para diagramas o método modelagem UML Perspective e utiliza dos modelos trata o Entity-Relationship dados e provê relacionais conceito de de Diagrams mapeamento dados. componente, O entre Select utilizando a definição de pacote da UML, como [OMG, 1999] “um mecanismo de proposta geral para organizar elementos em grupos”. Dois stereotypes básicos para pacotes são distinguidos: pacotes de serviços, utilizados na modelagem de componentes orientado ao negócio, e pacote de componentes, utilizado na implementação de componentes e sistemas. Um pacote de serviço contém classes que possuem um alto nível de interdependência e servem como uma proposta comum de oferecer um consistente conjunto de serviços. Por outro lado, um pacote de componentes representa um componente executável, isto é, o código fonte [Perspective, 2000], [Stojanovic, 2001]. 25 Capítulo 2 – Engenharia de Software Baseada em Componentes 2.4.4.4 UML Components Segundo Cheesman [2000], o método UML Components representa um processo para a especificação de software baseado em componentes. Neste processo, os sistemas são estruturados em quatro camadas distintas: interface com o usuário, comunicação com o usuário, serviços de sistemas e serviços do negócio. O relacionamento entre estas camadas representa a arquitetura do sistema. O UML Components propõe a utilização da UML para modelar todas as fases componentes, do desenvolvimento compreendendo as de sistemas atividades de baseado definição em dos requisitos, identificação e descrição das interfaces entre os componentes, especificação, implementação e montagem dos componentes. Além disso, os autores tiveram a preocupação de oferecer uma solução sem especificar uma particular plataforma de desenvolvimento. Outros métodos de DBC, não abordados neste trabalho, também vêm sendo alvos de pesquisas e sucessivos refinamentos. Dentre estes métodos, encontram-se o CADA [2000], o COmponent-based METhodology (COMET) [COMET, 1997] e o KobrA [Kobra, 2000]. 2.5 Repositório de Componentes Antes dos engenheiros de software obterem as vantagens inerentes à reutilização, eles devem possuir mecanismos hábeis a fim de facilitar a busca e o armazenamento dos componentes. Nesse contexto, encaixa-se a idéia de repositório de componentes. Um repositório de componentes pode ser entendido como um sistema de informação que auxilia os programadores na localização Esses dos sistemas componentes componentes possuem três reutilizáveis, interface para interação. reutilizáveis um conotações: mecanismo [Yunwen, uma de 2001]. coleção busca e de uma 26 Capítulo 2 – Engenharia de Software Baseada em Componentes Sametinger [1997] conceitua repositório de componentes como sendo uma base preparada para o armazenamento e a recuperação de componentes. Para que esta recuperação venha a se tornar efetiva, o autor ressalta a importância do armazenamento de informações adicionais relativas ao componente. Assim, a chance que um desenvolvedor tem de reutilizar um determinado componente, ao invés de desenvolver um novo, depende da disponibilidade do componente em um repositório, de forma que este possa ser facilmente localizado e recuperado. Ainda segundo Sametinger, existem três tipos de repositórios, a saber: • Repositórios Locais: armazenam componentes de propósito geral em um único repositório; • Repositórios específicos componentes a específicos, um com domínio: escopo armazenam bem definido, podendo prover componentes alternativos para as mesmas tarefas; • Repositórios de referências: auxiliam na busca por componentes em outros repositórios, funcionando como uma espécie de páginas amarelas. De acordo com centralizados Seacord que [1999], os armazenam repositórios componentes locais e genéricos, historicamente, falharam, principalmente por serem projetados como sistemas centralizados. verifica a viabilidade traders, brokers, de Ainda neste utilização serviços de de localização trabalho, o autor tecnologias, e como mecanismos de buscas, aliados a introspecção de código, a fim de criar um repositório de componentes distribuído e acessível através da Internet. Esse repositório recebeu a denominação de Agora. Mesmo sendo específicos, considerado adotando os uma evolução princípios de dos repositórios repositórios de referências, o sistema Agora apresentou muitas limitações. Por basear-se num mecanismo de busca utilizando introspecção 27 Capítulo 2 – Engenharia de Software Baseada em Componentes computacional, o semanticamente sistema quanto apresentou na limitações abrangência, uma vez tanto que são recuperados apenas componentes binários. Atualmente, um novo tipo de repositório vem sendo pesquisado, o sistema 2002]. Em de repositórios contraste convencional, onde aos os de componentes mecanismos usuários, de ativos acesso a [Yunwen, informação explicitamente, iniciam o processo de busca à informação, os mecanismos de entrega ativa apresentam informações relevantes para os usuários sem que estes tenham feito requisições explícitas [Fischer, 1993]. No sistema sistema CodeBroker realiza desenvolvido inferências sobre o em [Yunwen, código fonte 2001], ainda o em desenvolvimento, buscando componentes que possam realizar as mesmas tarefas. aplicação, estas o Assim, sistema tarefas. Essa enquanto apresenta o desenvolvedor possíveis abordagem de codifica componentes repositório de a para sistemas ativos, embora interessante, apresenta alguns problemas. No modelo atual são feitas inferências a partir da assinatura dos métodos e de comentários JavaDoc. O grande problema é que os componentes são representando vistos modelos de apenas alto como nível, código fonte, restringindo não assim, o grau de reutilização. Este tipo de repositório parece bastante promissor, porém, uma série de refinamentos ainda deve ser realizada, a fim de oferecer um melhor rastreamento do conceito de componentes, não apenas como código fonte. 2.6 Commercial-Off-The-Shelf (COTS) O crescimento em tamanho e complexidade dos sistemas de software aumentou o interesse no desenvolvimento de sistemas baseados em componentes reutilizáveis adquiridos de terceiros, conhecidos na literatura como Commercial-Off-The-Shelf (COTS). Segundo comunidade Heineman de [2001a], engenharia de atualmente, o software que é consenso na comprar um 28 Capítulo 2 – Engenharia de Software Baseada em Componentes componente é melhor do que desenvolvê-lo. A determinação de “melhor” é baseada na concepção de que os custos para desenvolver, testar e manter um componente excedem os custos de desenvolver um novo. Oberndorf [1997] define COTS como produtos que são vendidos, alugados ou licenciados para o público; isto é, usualmente avaliados sem código fonte, ou seja, suportados e desenvolvidos pelos vendedores, os quais possuem os direitos legais de abordagem propriedade são as intelectual. reduções de Os benefícios custos e do desta tempo de desenvolvimento. A natureza de COTS sugere que o modelo de desenvolvimento de software baseado em componentes deve ser diferente do resultado, convencional uma modelo significante de mudança desenvolvimento. tem sido Como observada: do desenvolvimento convencional de software para uma abordagem voltada à obtenção de componentes [Tran, 1997]. Em geral, o ciclo de vida de sistemas baseados em COTS consiste das seguintes fases: identificação, avaliação, seleção, integração e atualização dos componentes [Oberndorf, 1997]. A abordagem de desenvolvimento utilização de de software componentes tem-se mostrado COTS no bastante promissora a fim de melhorar a qualidade e a produtividade [Hissam, 2002]. Entretanto, a utilização de software COTS introduz alguns problemas e riscos, inerentes à dificuldade de seleção adequada dos componentes e análise de requisitos [Lipson, 2001]. Por exemplo, em um intensivo sistema com COTS, muitos produtos de diferentes vendedores têm que ser integrados e adaptados para prover uma completa funcionalidade do sistema. Em desenvolvidos em fornecedores. Além limitado ao muitos casos, tempos disso, projeto as interno estes produtos diferentes, empresas do por possuem produto e a COTS são diferentes acesso opções muito pré- definidas de customização de seu comportamento [Alves, 2001]. 29 Capítulo 2 – Engenharia de Software Baseada em Componentes A grande maioria dos métodos de DBC, incluindo os mencionados neste trabalho, ainda não oferece suporte ao conceito de COTS. Assim, ainda existe um gap nestes métodos, uma vez que se considera apenas o processo de criação dos componentes e não a reutilização com componentes adquiridos de terceiros. 2.7 Tópicos de Pesquisa em DBC Existem ainda pesquisa em na DBC literatura que estão diversos começando outros tópicos de ser explorados e a evidenciados. Apesar das pesquisas ainda estarem incipientes, elas se mostram bastante promissoras. Dentre elas, destacamse: medidas e métricas para componentes de software, agentes de software como a próxima geração de componentes e a Programação Orientada a Aspectos. 2.7.1 Medidas e Métricas para Componentes de Software Criar produtos de qualidade requer, cada vez mais, um controle e gerenciamento sistemático através de todo o ciclo da engenharia de software baseada em componentes. Métricas podem ajudar a estimar, planejar e identificar áreas para melhorar a qualidade, reduzir custos, otimizar o gerenciamento dos projetos e facilitar o gerenciamento de riscos. Poulin [2001] utilizadas nos define projetos algumas métricas envolvendo que engenharia podem ser de software quantidade de produtos tempo. métrica baseada em componentes. Dentre estas, destacam-se: • Produtividade: entregue por representa unidade a de A de produtividade pode ser calculada através do total de horas de desenvolvimento por projeto/total de linhas de código dos componentes (SLOC); • Grau de reutilização: representa as linhas de códigos propícias à reutilização pelo total de linhas de código 30 Capítulo 2 – Engenharia de Software Baseada em Componentes do componente. A métrica correspondente ao grau de reutilização pode ser calculada através das linhas de código reutilizadas/total de linhas de código; • Performance: cada vez mais a performance vem sendo utilizada como um requisito não funcional necessário em muitas aplicações. distribuídos, este Tratando-se requisito de componentes torna-se ainda mais importante. Assim, o tempo de resposta das operações disponibilizadas pelos componentes torna-se um atributo essencial. Além destas métricas aqui mencionadas, um projeto envolvendo engenharia de software baseada em componentes pode utilizar as seguintes informações como medidas adicionais: linhas de código por componente, tempo de desenvolvimento, classificação do componente (componente de negócio, componente GUI), custos e total de defeitos encontrados [Poulin, 2001]. 2.7.2 Agentes de Software como a próxima comércio eletrônico geração de Componentes O crescente ofereceu volume uma das grande atividades motivação e de oportunidade para as atividades de busca, análise e negociação da informação. Estas novas classes de aplicações demandam flexibilidade e soluções inteligentes. agentes de componentes, Neste contexto software. que está Agentes oferecem uma são inserida tipos a tecnologia de especializados de flexibilidade maior que os componentes de software tradicionais [Griss, 2001a]. A fim de integrar processos de negócios entre companhias, as próximas gerações de aplicações de comércio eletrônico necessitam ser mais robustas, complexas e flexíveis [Sharman, 1999]. Como estas aplicações serão desenvolvidas utilizando componentes escritos por diferentes desenvolvedores em 31 Capítulo 2 – Engenharia de Software Baseada em Componentes períodos diferentes, os desenvolvedores necessitam ter modos poderosos para construir sistemas flexíveis rapidamente e oferecer serviços mais atrativos para os usuários. O desenvolvimento de software orientado a agentes estende o convencional desenvolvimento baseado em componentes, promovendo sistemas baseados em componentes mais flexíveis, com menor tempo de projeto e implementação e diminuindo o acoplamento entre agentes [Griss, 2001]. Do mesmo modo que modelos, colaborações, padrões e programação orientada a aspectos auxiliam na construção de componentes mais robustos e flexíveis, as mesmas técnicas podem ser aplicadas para agentes e sistemas baseados em agentes [Griss, 2001]. Assim, pesquisas [Chen, 2000], [Griss, 2000], [Griss, 2002], [Griss, 2002a] estão sendo realizadas na área de comércio eletrônico, direcionadas em simulação, comunicação de agentes, dispositivos móveis e sistemas multi-agentes. Estas pesquisas estão interessadas em questões relacionadas a como os agentes são definidos e construídos, como ocorre a comunicação entre estes e como a colaboração entre grupos de agentes pode ser estabelecida combinados e a significantes, controlada. workflows, além a dos já Estes fim agentes de estão oferecer conhecidos sendo benefícios relacionados a componentes. 2.7.3 Programação Orientada a Aspectos A Programação Orientada a Objetos (POO) foi apresentada como um paradigma que poderia, fundamentalmente, auxiliar a engenharia de software, uma vez que um determinado programa pode resolver um problema do mundo real através de um conjunto de abstrações bem definidas, cada uma simulando um fenômeno específico Entretanto, técnicas da de um problema existem alguns orientação a capturar [Kiczales, 1997]. do mundo problemas objetos não real de [Kienzle, programação são 2002]. que suficientes as para 32 Capítulo 2 – Engenharia de Software Baseada em Componentes Além disso, o paradigma da orientação a objetos tem algumas limitações, como o entrelaçamento e o espalhamento de código com diferentes propósitos, por exemplo, o entrelaçamento de código de negócio com código de apresentação, e o espalhamento de código de acesso a dados em diversos módulos do sistema [Kiczales, 2001]. Assim, extensões do paradigma programação orientada a programação adaptativa orientado aspectos a objetos, [Kiczales, [Lieberherr, como 1997] 1994], vêm e sendo pesquisadas, a fim de solucionar as limitações do paradigma orientado a objetos. A Programação Orientada a Aspectos (POA) [Kiczales, 1997], [Elrad, 2001], [Duclos, 2002] é uma destas técnicas que vêm obtendo grande destaque. POA foi proposta como uma técnica para melhorar a separação de conceitos no desenvolvimento de software, evitando o entrelaçamento e o espalhamento de código com diferentes modularidade propósitos. separando Desta código forma, que POA aumenta implementa a funções específicas, que afetam diferentes partes do sistema, chamadas preocupações ortogonais (crosscutting concern). Exemplos destas preocupações ortogonais são persistência, distribuição, controle de concorrência e tratamento de exceções [Soares, 2002]. Trazendo os princípios de POA para o desenvolvimento baseado em componentes, tem-se que um sistema pode ser separado em dois segmentos: requisitos funcionais e não-funcionais. Dos requisitos funcionais resulta um conjunto de componentes, expressos em uma linguagem de programação, como, por exemplo, Java [Horstmann, 2001]. Os requisitos não-funcionais resultam um conjunto afetam o utilização manipulados de aspectos comportamento de POA, sem os relacionados do sistema. requisitos causar impacto não no às propriedades Deste modo, funcionais código com podem de que a ser negócio (requisitos funcionais), uma vez que estes códigos não estão 33 Capítulo 2 – Engenharia de Software Baseada em Componentes entrelaçados Assim, e POA espalhados possibilita em diversas o partes desenvolvimento do de sistema. sistemas utilizando aspectos, o que inclui refinamentos das técnicas de DBC, como isolamento, composição e reutilização de código dos aspectos e introduz velhos problemas de DBC, como a busca de aspectos em grandes repositórios. 2.8 Resumo Este capítulo software apresentou baseada em uma visão geral componentes, da engenharia discutindo, de de forma detalhada, desde os princípios de reutilização até as duas etapas que compreendem o modelo de processo: a Engenharia de Domínio e o Desenvolvimento introduziu os literatura e principais os Baseado métodos mecanismos em Componentes. de DBC essenciais no Também relatados na processo de engenharia de software baseada em componentes: a utilização de um repositório para armazenamento e busca dos componentes e a utilização de COTS. Por fim, foram relatados e discutidos os principais tópicos de pesquisa que estão começando a ser explorados e evidenciados na área de DBC. O capítulo seguinte descreverá os Padrões de Software, que fazem parte do objetivo deste trabalho e que possuem como distribuição e acesso a banco de dados. base os padrões para Capítulo 3 Padrões de Software 3.1 Introdução Segundo Gamma [1995], o conceito de padrões foi proposto pelo arquiteto Alexander [1977], para construção de arquiteturas e planejamento urbano. Na área de software, foram recentemente popularizados para apoiar uma larga variedade de domínios, relacionados às atividades de desenvolvimento de projetos. A utilização de padrões em sistemas complexos de software permite que soluções, previamente testadas, sejam reutilizadas, tornando o sistema mais compreensível, flexível, fácil de desenvolver e manter. O objetivo do uso de padrões de software é a disseminação das soluções de desenvolvimento de software já existentes [Johnson, 1992]. Gamma [1995] propõe o uso de padrões de projeto de software como um novo mecanismo para expressar soluções na elaboração de projetos orientados a objetos. Padrões de projeto fornecem uma linguagem comum, que irá facilitar a comunicação entre desenvolvedores e projetistas; os padrões também melhoram o aprendizado de jovens desenvolvedores, incrementando a padronização do desenvolvimento, permitindo a construção de software reutilizável, que se comporta como blocos de construção para sistemas mais complexos. Gamma apresenta os conceitos básicos sobre os padrões, as formas para selecionálos e utilizá-los. Como estudo de caso, um editor de texto, 35 Capítulo 3 – Padrões de Software denominado Lexi, foi desenvolvido para solucionar vários problemas de projeto existentes, com o uso dos padrões. Seus autores respondem de forma prática a questões do tipo: como reconhecer um problema e como escolher e utilizar um padrão de projeto. É também projeto, organizado apresentado segundo um dois catálogo de padrões de critérios: a) propósito - indica o que o padrão de projeto faz; b) escopo - especifica se o padrão de projeto é aplicável a classes ou objetos. Quanto ao propósito, os padrões de projeto são divididos em três categorias: criacionais, estruturais e comportamentais. Padrões de projeto criacionais organizam o processo de criação de objetos. composição Padrões de comportamentais de classes projeto ou estruturais objetos. caracterizam as demonstram Padrões formas como a de projeto os objetos interagem entre si. Em geral, um padrão é definido através de quatro elementos essenciais [Gamma, 1995], [Yoder, 2002]: • nome: uma designação que descreve com propriedade um problema de projeto, suas soluções e conseqüências em uma palavra ou duas; • problema: descreve o problema e o contexto em que o mesmo ocorre. Pode conter um conjunto de condições que devem ser satisfeitas para a aplicação do padrão de projeto; • solução: descreve necessários para os elementos a construção (classes do e objetos) projeto, seus relacionamentos, responsabilidades e colaborações. Esta solução não é restrita a um caso em particular, e sim genérica o suficiente para ser aplicada a diferentes situações; • conseqüências: são os resultados, positivos e negativos, ao se utilizar padrões de projeto. As conseqüências permitem analisar os custos e benefícios da aplicação de um determinado padrão de projeto. 36 Capítulo 3 – Padrões de Software No projeto Baseado em da Abordagem Componentes de Desenvolvimento Distribuídos são de Software utilizados padrões para distribuição dos componentes e acesso à banco de dados relacional. Estes padrões são apresentados a seguir. 3.2 Distributed Adapters Pattern (DAP) O Distributed Adapters Pattern (DAP) [Alves, 2001], [Alves, 2001a] foi desenvolvido com a proposta de refinar as camadas de distribuição atualmente, é numa uma arquitetura combinação do distribuída. Facade, Adapter O e DAP, Factory design patterns [Gamma, 1995]. O DAP é um comunicação padrão remota que entre está dois inserido no componentes. contexto De maneira de a resolver esta tarefa, componentes em um cenário distribuído comunicam-se com outros por meio de algum mecanismo interprocesso. Os componentes podem se comunicar entre si ou delegar esta função a outros componentes. A primeira alternativa requer menos componentes; isto conduz a aplicações, onde o núcleo da funcionalidade dos componentes é realizado através de tarefas de comunicação. Deste modo, as aplicações dependem de um mecanismo particular de comunicação e os componentes se tornam difíceis de serem reutilizados e estendidos [Alves, 2001a]. A segunda alternativa (DAP) permite obter aplicações modulares com um conjunto de componentes interoperáveis. Como o desenvolvimento da aplicação é mais fácil de manter e estender, estes componentes podem ser facilmente reutilizados em outras aplicações [Alves, 2001a]. Assim, o DAP oferece os seguintes benefícios [Alves, 2001]: • um componente pode acessar serviços remotos, oferecidos por outros componentes; • os componentes são independentes de Programming Interfaces (API) de comunicação; Application 37 Capítulo 3 – Padrões de Software • as modificações no código dos componentes, para oferecer suporte à comunicação, são minimizadas; • as mudanças no mecanismo de comunicação se tornam uma tarefa facilitada, minimizando o impacto no código de negócio. A técnica adotada funcionalidades objetos pelo mencionadas adaptadores, desacoplamento DAP, dos para acima, é visando componentes oferecer todas introduzir um conseguir dentro de um uma estas par de melhor arquitetura distribuída. Os adaptadores, basicamente, encapsulam a API, que é necessária para permitir o acesso distribuído ou remoto para objetos de negócio. Deste modo, a camada de negócio de uma aplicação torna-se independente em relação à camada de distribuição e as mudanças nesta camada não causam impactos. No padrão, existem dois tipos de adaptadores: Source Adapter e Target Adapter. Em uma interação típica, um objeto que possua a interface do usuário em uma máquina solicita serviços de um source adapter localizado na mesma máquina. O source adapter, em seguida, solicita os serviços de um correspondente target adapter, residido em uma máquina remota. Finalmente, o target adapter solicita serviços de um objeto Facade, co- localizado com o target adapter. A Figura 2 [Alves, 2001a] mostra este exemplo. Source Adapter <<Source>> User Interface Machine A Target Adapter <<Target>> Facade Machine B Figura 2 - Um exemplo do DAP. Os Adaptadores Source e Adapter provêem um nível de abstração maior que stubs e skeletons. Os adaptadores isolam a interface 38 Capítulo 3 – Padrões de Software do usuário e o código de negócio da API de distribuição, visto que os stubs e skeletons isolam a interface do usuário e o código de negócio da implementação dos aspectos de distribuição, mas não da API de distribuição. Source Adapter delega baixo nível de distribuição através do empacotamento para os stubs, e os Target Adapter delegam esta questão para os skeletons. A Figura 3 [Alves, 2001] detalha a estrutura do DAP através de um Diagrama de Classes. Figura 3 - Estrutura do Padrão DAP. As classes Source e Target abstraem os componentes de negócio, conforme foi mencionado anteriormente. A interface TargetInterface abstrai o comportamento da classe Target em um cenário distribuído. De qualquer modo, esta interface e as classes, Source e Target, não possuem código de comunicação. Estes três elementos constituem uma camada padrão de independente de distribuição. Os principais elementos do distribuição são SourceAdapter e TargetAdapter. Estes elementos estão ligados a uma API específica de distribuição e encapsulam os detalhes de 39 Capítulo 3 – Padrões de Software comunicação. SourceAdapter é um adaptador que isola a classe Source do código de distribuição. Este reside na mesma máquina que o Source e trabalha como um proxy para o TargetAdapter. Este último reside em outra máquina, isolando a classe Target do código de distribuição. Como SourceAdapter e TargetAdapter, usualmente, residem em máquinas diferentes, e não interagem diretamente: TargetAdapter implementa RemoteInterface, da qual SourceAdapter depende [Alves, 2001]. A classe NameService possui para operações registrar e efetuar lookup em um objeto remoto; ambos adaptadores usam esta classe, a qual representa um serviço genérico de nomes e é comum em muitas plataformas de distribuição. A classe Initializer reside na mesma máquina que as classes Target e TargetAdapter, e é responsável por criar objetos TargetAdapter e Target. 3.3 Padrões para o mapeamento de Objetos de negócio para Banco de Dados relacional Desenvolvedores de sistemas orientados a objetos que utilizam banco de dados parcela de relacional tempo persistência dos gastam, realizando objetos. usualmente, tarefas Isto uma grande relacionadas ocorre devido à à incompatibilidade de tipos entre os dois paradigmas, uma vez que os objetos são definidos pelos dados e comportamento e, geralmente, composição podem e estar relacionados associação. Já um através banco de de dados herança, relacional consiste de tabelas, relações e funções básicas de predicados para retornar os valores desejados [Yoder, 1998]. Uma alternativa para evitar a incompatibilidade entre objetos e relações é utilizar um banco de dados orientado a objetos. Entretanto, objetos política os em um da relacional em sistemas, banco de empresa é lugar de geralmente, dados a um de necessitam relacional. utilizar orientado a um Outras banco objetos. armazenar vezes, de a dados Assim, um 40 Capítulo 3 – Padrões de Software sistema que armazena objetos em um banco de dados relacional necessita prover um mecanismo que realize esta integração entre os dois paradigmas. Uma solução para resolver este problema é a utilização de uma camada de persistência, Persistence Layer [Yoder, 1998], que isola o desenvolvedor dos detalhes de implementação de persistência e protege as aplicações de mudanças de código ou banco de dados. Assim, foi proposto em [Yoder, 1998], um catálogo de padrões com esta finalidade. O catálogo é composto de doze padrões, sendo que, no desenvolvimento deste trabalho, apenas quatro foram utilizados, a saber: Persistence Layer, CRUD, Connection Manager e Table Manager. 3.3.1 Persistence Layer A construção de sistemas orientados a objetos, que efetuam o armazenamento de objetos em banco de dados relacional, consome uma grande parcela de tempo efetuando as operações necessárias para persistência. Caso este processo de mapeamento não seja cuidadosamente sistema, realizado, necessita cada conhecer programador, a sintaxe trabalhando Structured no Query Language (SQL) e, além disso, o código pode vir a se tornar restrito a um particular tipo de banco de dados. Deste modo, perde-se muito tempo caso ocorra, por exemplo, uma migração de um sistema que utilize o Microsoft Access para um IBM DB2. Assim, torna-se necessário um mecanismo responsável por separar o conhecimento do domínio do conhecimento de como os objetos são armazenados em banco de dados, a fim de proteger as atividades de desenvolvimento com estas possíveis mudanças [Yoder, 1998]. Neste contexto, encaixa-se o Persistence Layer. Este é um padrão que provê uma camada persistente, capaz de realizar o mapeamento de objetos para banco de dados relacional, de forma transparente aos desenvolvedores. Através do padrão, todos os objetos persistentes utilizam uma interface comum do 41 Capítulo 3 – Padrões de Software Persistence Layer. armazenamento dos Desta dados forma, sofra caso o alterações, mecanismo somente a de camada persistente necessita ser mudada. 3.3.2 CRUD (Create, Read, Update, Delete) Qualquer objeto persistente necessita de operações para ser lido e escrito em um banco de dados. Algumas vezes, estes objetos também podem ser excluídos do meio de armazenamento persistente. Assim, é importante prover um conjunto mínimo de operações para criar, ler, atualizar e excluir informações [Yoder, 1998]. A solução Update, adotada Delete) persistência quantidade é dos através do oferecer objetos. suficiente as O de padrão CRUD (Create, Read, operações básicas para ponto importante operações, é prover necessárias a para instanciar objetos de um banco de dados e armazenar objetos recentemente criados ou alterados. 3.3.3 Connection Manager Quando um objeto persistente está sendo lido ou escrito num banco de dados, uma conexão com o banco de dados deve ser realizada. Nesta conexão, as informações usualmente necessárias são: o nome do banco de dados, usuário, senha e outras informações relativas a configurações. Estas informações podem ser consultadas ao usuário cada vez que uma determinada conexão é realizada; porém, esta interação pode vir a sistema tornar-se e, além altamente disso, frustrante muitas vezes para essas os usuários informações do são desconhecidas. Uma possível solução seria a de capturar o nome e a senha do usuário no momento de início do sistema e construir um esquema de conexão onde estas informações seriam encaminhadas para o código. Entretanto, este mecanismo faz com que uma grande quantidade de informação extra, não necessária 42 Capítulo 3 – Padrões de Software naquele momento, também seja transmitida. A solução mais propícia, a fim de resolver estas questões, é a de construir um gerente de conexão, sendo este o responsável por armazenar as informações globais e as utilizar no momento exato de realizar um acesso ao banco de dados. Assim, o padrão Connection Manager cria um objeto que armazena todas as informações necessárias para utilizar uma conexão com o banco de dados [Yoder, 1998]. As informações comuns são, usualmente: nome do usuário, senha, driver de banco de dados, usuário atual do sistema e outras informações necessárias para efetuar operações de auditoria e controle de transações. Deste modo, quando uma aplicação necessita manter uma cópia de alguma informação deste tipo, a mesma utiliza um objeto do geralmente, tipo Singleton armazenado em [Gamma, um 1995]. único O esquema Singleton de é, localização global, como um atributo de uma classe ou uma própria classe, evitando, assim, que qualquer mudança dessas informações seja impactuada na aplicação. 3.3.4 Table Manager O mecanismo de armazenamento persistente, no qual os objetos são mapeados, pode sofrer evoluções com o decorrer do tempo, seja por uma mudança de produto ou uma simples atualização de versão. Um gerente de tabelas descreve o mapeamento de tabelas e colunas para o banco de dados, mantendo estes detalhes transparentes ao desenvolvedor. Deste modo, mudanças podem ser realizadas no esquema de banco de dados sem afetar o desenvolvimento das aplicações [Yoder, 1998]. Neste contexto, encaixa-se o padrão Table Manager. Este provê um local para recuperar os nomes das colunas e tabelas necessárias para persistência dos objetos. Assim, quando um objeto está sendo armazenado, este consulta as informações num Table Manager. Por possuir um mecanismo que define estas informações em somente um local, as modificações e os testes 43 Capítulo 3 – Padrões de Software podem ser realizados de maneira mais simples e eficiente, sendo transparente a outros segmentos da aplicação. 3.4 Resumo Este capítulo apresentou os padrões de software, vistos como um mecanismo projetos para orientados vocabulário comum, expressar a experiências objetos. reduzindo Estes a na padrões complexidade elaboração de fornecem um do sistema utilizando abstrações, constituindo uma base de experiência para o desenvolvimento de software reutilizável. Foram relatados os princípios e os padrões que são utilizados na Abordagem de Desenvolvimento de Software Baseado em Componentes Distribuídos, objetivo de pesquisa deste trabalho. O capítulo seguinte apresenta, em detalhes, a evolução da computação centralizada, passando pelas redes locais, até chegar aos chamados objetos distribuídos, um dos requisitos essenciais deste trabalho. Capítulo 4 Computação Distribuída e Objetos Distribuídos 4.1 Introdução Uma aplicação distribuída é uma aplicação na qual os componentes de software residem em mais de um computador na rede, com esta composta tipicamente por diversos computadores e sistemas operacionais (uma rede heterogênea) [Mitre, 1998]. Em [Souza, 2001], é apresentada a evolução da computação distribuída, fases. A dividida primeira por Hampshire delas, [1999] conhecida como em três Primeira grandes Onda, ocorrida por volta de 1975, referiu-se aos chamados sistemas monolíticos ou centralizados, protagonizada pelos computadores de grande porte (mainframes). Nessa primeira fase, todos os programas e dados eram fortemente interdependentes, o que tornava muito difícil a modelagem e a reutilização dos códigos e das informações corporativas. Não existia a possibilidade de se compartilhar software, exceto dados os com outros pertencentes sistemas àquele de próprio hardware e mainframe. Essas aplicações monolíticas eram ineficientes, não flexíveis e de alto custo. Com a disponibilidade das redes de computadores, PCs de baixo custo e interfaces gráficas, surgiu, por volta de 1982, o que se chamou de Segunda Onda. Nessa fase, também conhecida como Era da Arquitetura Cliente/Servidor, era possível modelar as 45 Capítulo 4 – Computação Distribuída informações e criar repositórios de dados, passíveis de serem acessados por múltiplos programas, e, dessa forma, simplificar o desenvolvimento e a manutenção de sistemas mais complexos. Em outras palavras, as aplicações podiam ser particionadas ou divididas em implementavam componentes a lógica de do lado cliente, apresentação e os quais continham grande parte da lógica de negócio, e componentes do lado servidor, contendo a lógica de negócio na forma de stored procedures e triggers. Um cliente é definido como um solicitador de serviços e um servidor é definido máquina simples como pode um ser fornecedor tanto de cliente serviços. como Uma servidor dependendo da configuração do software [Orfali, 1998]. Mesmo nessa fase, a reutilização de código ainda era difícil [Emmerich, 2002]. Além disso, a dificuldade em se escalar tal arquitetura para a Internet arquitetura cliente/servidor, necessidade do levou que desenvolvimento a mudanças passou de a no ser aplicações foco a da grande corporativas integradas com transações Web. Chegou-se, então, no ano de 1990, ao que é chamado de Terceira Onda, ou ObjectWeb (Objetos Distribuídos + Web). A união da orientação a objetos com sistemas distribuídos originou a área de Objetos Distribuídos. A base para o modelo de objetos distribuídos é o conceito fundamental de objetos, que são definidos como entidades que possuem comportamentos específicos e atributos, fornecendo uma maneira simples de combiná-los. Os atributos permitem que se recuperem ou que se definam dados para um objeto. Os objetos podem receber operações ou invocações. Uma operação identifica uma ação que pode ser executada em um objeto, dado um conjunto especificado de argumentos [Otte, 1996]. Os objetos podem ser clientes, servidores, ou ambos. Um objeto está na função de cliente quando é o originador de uma invocação em um outro objeto e 46 Capítulo 4 – Computação Distribuída está na função de servidor quando é o receptador de uma invocação [Mowbray, 1995], [Souza, 2001]. Na realidade, as aplicações com objetos distribuídos representam um caso particular das aplicações cliente/servidor multicamadas. Outros exemplos de aplicações cliente/servidor multicamadas incluem os monitores de transações e a própria Web [Orfali, 1998], [Souza, 2001]. As aplicações representam cliente/servidor uma cliente/servidor de evolução duas multicamada natural camadas (multi-tier) das (two-tier). aplicações Neste ponto, basicamente, cria-se uma camada adicional, intermediária, com toda a lógica necessária para acesso aos dados, retirando-se do cliente essa tarefa. Dessa forma, tem-se o que se chama de cliente magro (thin client), responsável, principalmente, pela lógica de apresentação ao usuário final, não sendo preciso ter no cliente nenhum driver ou outra facilidade para acesso às bases de dados. Embora esse tipo de aplicação multicamadas represente uma série de novas funcionalidades, inexistentes na Segunda Onda, o tipo de aplicação multicamadas responsável pela nova revolução é a aplicação com objetos distribuídos [Emmerich, 2002]. Há uma variedade de maneiras de se implementar esta camada intermediária. Entre elas, pode-se citar: monitores de transações, servidores de mensagens, servidores de aplicação, e frameworks [Otte, 1996], [Souza, 2001]. A próxima seção descreve, detalhadamente, essa camada intermediária, também conhecida como middleware. 4.2 Middleware Diferentemente das arquiteturas cliente/servidor de duas camadas, onde o cliente identifica e se sincroniza diretamente com o servidor requisitado, o conceito de middleware assume o papel da camada adicional entre o cliente e o servidor nas 47 Capítulo 4 – Computação Distribuída aplicações multicamadas e nas aplicações com objetos distribuídos descritas na seção anterior. Eckerson [1995] conectividade define que middleware consiste de um como um software conjunto de de serviços disponíveis que permite que múltiplos processos, executando em uma ou mais máquinas, interajam através de uma rede. O middleware, que evoluiu rapidamente durante os anos 90 para fornecer interoperabilidade, é considerado essencial para a migração de aplicações cliente/servidor e mainframes distribuídas, e para para aplicações prover comunicação entre plataformas heterogêneas. Colocado de forma mais técnica, o middleware é uma API de fácil utilização, que se localiza entre a aplicação e os recursos que a aplicação necessita. Pode-se citar o exemplo de um applet Java que acessa uma base de dados; neste caso, é necessário usar as classes Java DataBase Connectivity (JDBC) para acessar programador as as informações. diversas Essas classes complexidades da removem base de do dados utilizada e permitem que os applets utilizem qualquer número de bases de dados, sem conhecer as características nativas de cada uma delas. Utilizando uma API comum, o middleware realiza todo o trabalho [Linthicum, 1997], [Souza, 2001]. Segundo Bernstein [Bernstein, 1996], os middlewares fornecem serviços, os serviços de middleware, para auxiliarem na resolução de problemas de heterogeneidade e interoperabilidade entre aplicações. O autor define que um serviço de middleware é um serviço de propósito geral que se localiza entre as aplicações e as plataformas de hardware, conforme mostra a Figura 4. serviços Por de plataforma, baixo nível define-se e como elementos de um conjunto de processamento, definidos por uma arquitetura de processador e por uma API de sistema operacional, tais como Intel x86 e Win32, SPARCStation e SunOS, IBM RS/6000 e AIX, entre outras. Sun 48 Capítulo 4 – Computação Distribuída Figura 4 – Serviços de Middleware. Um serviço de middleware deve possuir implementações que executam em diversas plataformas de hardware. Caso contrário, ele será considerado como um serviço de plataforma de hardware específico [Emmerich, 2002]. Pode-se citar, como exemplo, os SGBDs, que funcionam independência de em diversas plataforma permite plataformas. que os Esta serviços de middleware abranjam uma parte maior de aplicações que dependam deles. Se, além interoperabilidade disso, pode o ser serviço melhorada é com distribuído, as aplicações a em diferentes plataformas, utilizando o serviço para se comunicar e/ou trocar dados. Para uma boa cobertura de plataformas, os serviços de middleware são programados para serem portáveis, porque, dessa forma, eles podem ser transferidos para outras plataformas com mínimas, ou até mesmo nenhuma modificação [Souza, 2001]. Segundo Bray [1997], os middlewares podem ser classificados de diversas formas: Transaction Processing Monitors (TPs), que controlam aplicações de transações e executam computações de negócios e atualizações em bancos de dados; Remote Procedure Calls (RPCs), que permitem que clientes de uma aplicação chamem funções para acessar servidores em sistemas remotos; Remote Method Invocation (RMI), que estendem RPC para acesso remoto a métodos (de objetos implementados); Message-Oriented Middlewares (MOMs), que residem em ambas as partes de uma arquitetura cliente/servidor e suportam chamadas assíncronas 49 Capítulo 4 – Computação Distribuída entre as aplicações; e os Object Request Brokers (ORBs), que permitem que objetos que compõem uma aplicação sejam distribuídos em redes heterogêneas. A seção seguinte apresenta e discute os middlewares do tipo Object Request Broker. 4.2.1 Object Request Broker (ORB) Object Request Broker, ou simplesmente ORB, é uma tecnologia que gerencia a comunicação e a troca de dados entre objetos. Em outras palavras, o ORB provê interoperabilidade em sistemas de objetos distribuídos. Ele permite a construção de sistemas pelo agrupamento de objetos que se comunicam entre si através dele. Os detalhes da implementação do ORB, geralmente, não são importantes para os desenvolvedores de sistemas distribuídos. Os desenvolvedores devem se preocupar apenas com os detalhes da interface do objeto [Orfali, 1998]. A tecnologia diferentes ORB permite máquinas, a comunicação diferentes de software objetos e entre diferentes fornecedores. Um ORB provê um diretório de serviços e auxilia a estabelecer conexões entre clientes e esses serviços. Um ORB deve suportar muitas funções, com o objetivo de operar consistente funções e são efetivamente, e, transparentes ao responsabilidade do ORB além disso, usuário fornecer a muitas do ORB. dessas É de transparência de localidade, ou seja, fazer com que o objeto requisitado pareça local para o cliente, enquanto que, na realidade, ele se localiza em processos ou máquinas diferentes [Orfali, 1998]. Portanto, um ORB fornece um barramento para a comunicação entre objetos em diferentes sistemas. Este é o primeiro passo para alcançar a interoperabilidade em sistemas de objetos distribuídos [Souza, 2001]. O passo seguinte é a comunicação de objetos entre plataformas. Um ORB permite aos objetos ocultar seus detalhes de implementação dos clientes. Isto inclui linguagens de programação, sistemas operacionais, hardware, e localização de 50 Capítulo 4 – Computação Distribuída objetos. Cada um desses itens deve ser pensado como uma transparência, e diferentes tecnologias de ORBs podem suportar diferentes transparências, fazendo com que os benefícios da orientação a objetos entre plataformas e canais de comunicação sejam estendidos [Wang, 2001]. O funcionamento de um ORB foi descrito por Otte [1996]. Um ORB atua como um elemento intermediário para as requisições que os clientes enviam para os servidores. É responsável por todos os mecanismos necessários para encontrar a implementação de um objeto, preparar a implementação para receber a requisição e comunicar os dados na requisição. Hampshire [1999] cita os principais padrões utilizados para computação distribuída e que utilizam a tecnologia ORB: • Common Object Request Broker Architecture (CORBA); • Distributed Component Object Model (DCOM) [Microsoft, 2002]; • A Java Remote Method Invocation (Java RMI) [SUN, 2002a]. seção a seguir descreve, em detalhes, a plataforma distribuída CORBA. 4.2.1.1 Common Object Request Broker Architecture Common Object Request Broker Architecture (CORBA) [Ben-Natan, 1995], [OMG, 1996], [Orfali, 1998] é a especificação de uma arquitetura objetos. padrão Esta desenvolvam para sistemas arquitetura ORBs, interoperabilidade que entre padrão distribuídos permite suportem aplicações baseado que empresas portabilidade escritas em em e diferentes linguagens, compiladas para diversas plataformas e sistemas operacionais, e que se comuniquem com outras implementações de ORBs. A especificação CORBA foi desenvolvida pelo OMG, o qual é um consórcio de centenas de empresas dentro do campo de objetos 51 Capítulo 4 – Computação Distribuída distribuídos, ferramentas. inicial incluindo O OMG surgiu aplicações foi em fundado 1992. em Desde e desenvolvedores 1988 e a então, de especificação ela vem sendo aperfeiçoada e, hoje, se encontra na versão 3.0. Conforme a especificação CORBA [OMG, 1996]: ″Utilizando um ORB-CORBA, um cliente pode invocar transparentemente um método no objeto servidor, o qual pode estar na mesma máquina ou distribuído na rede. O ORB intercepta a chamada, e é responsável por encontrar um objeto que possa atender a requisição, passando-lhe os parâmetros, invocando invocação. seus O métodos, cliente e não retornando deve saber os onde resultados o objeto da está localizado, qual é a sua linguagem de programação, qual é o sistema operacional, ou qualquer outro aspecto que não seja parte da interface do objeto″. Outros autores consideram que CORBA pode ser definida como um barramento de comunicação para objetos cliente e servidor [Wang, 2001]. Deste ponto de vista, CORBA pode ser pensada como uma generalização da RPC, incluindo refinamentos, tais como [Ben-Natan, 1995], [Orfali, 1998]: • uma linguagem de definição de interface mais abstrata e poderosa; e • suporte direto para uma variedade de conceitos de orientação a objetos. 4.2.1.2 Arquitetura CORBA O paradigma básico do CORBA é solicitar serviços de um objeto distribuído. Para oferecer suporte a este paradigma, a arquitetura CORBA possui três objetivos principais: abstração, localização e [Orfali, 1998]. acesso transparente, e interoperabilidade 52 Capítulo 4 – Computação Distribuída Dessa forma, o OMG partiu para a especificação de uma interface comum aos objetos, que possa ser gerada a partir de diferentes linguagens. Assim, não existe uma linguagem padrão, e seus elementos podem ser desenvolvidos em COBOL, Eifell, Smalltalk, entre outras. C, As C++, Java, interfaces dos objetos são definidas em uma linguagem neutra, a Interface Definition Language (IDL). Assim, os componentes, ou objetos, escritos em IDL, são portados através de linguagens, ferramentas e sistemas operacionais. Deste modo, através da IDL, a arquitetura abstrai a implementação. Localização e acesso transparente são os meios através dos quais os componentes CORBA, estando em qualquer ponto da rede, podem enviar uma mensagem para outro, onde aquele não precisa saber onde este se encontra e sua invocação é idêntica a uma chamada de serviço local. Um objeto cliente não precisa conhecer detalhes de implementação dos servidores. Além disto, um só componente pode funcionar ora como cliente, ora como servidor. Para isto, basta que os objetos tenham interfaces especificadas de acordo com a IDL. Este mecanismo de localização e acesso transparente é implementado pelo ORB, o qual localiza o objeto remoto, comunica a solicitação para este objeto, espera por resultados e os envia de volta para o cliente. A Figura 5 [Orfali, 1998] mostra a estrutura do ORB. Figura 5 – Estrutura de um ORB. 53 Capítulo 4 – Computação Distribuída A figura acima mostra os dois lados de um ORB CORBA: o lado do cliente e o lado do servidor. Orfali [1998] também descreveu a função de cada componente do ORB: • Client IDL Stubs: provêem interfaces estáticas para os acessos aos objetos remotos. Estes stubs pré-compilados definem como o cliente invoca serviços nos servidores. Do ponto de vista do cliente, os stubs agem como um proxy para o objeto remoto do servidor. Os serviços são definidos utilizando-se a IDL e os stubs; para os clientes e servidores, são gerados pelo compilador IDL. Um cliente deve possuir um stub para cada interface que ele utiliza no servidor. Os stubs também incluem código para realizar o marshalling decodificação dos mensagens formatos com métodos e (codificação e parâmetros em seus padrões). Ele também inclui código para acesso a outras linguagens de alto nível, como C, C++; • Dynamic Invocation Interface (DII): permite descobrir métodos de servidores remotos em tempo de execução. CORBA define APIs para a localização de meta-dados, que definem as interfaces dos servidores para a geração dos parâmetros, para invocação remota e para o retorno dos dados; • Interface Repository APIs (IR): permitem obter e modificar a descrição registrados, parâmetros de todas os que as métodos eles interfaces dos que suportam eles utilizam. O componentes e os Repositório de Interfaces é uma base de dados distribuída, que contém as definições das interfaces no formato da IDL; • ORB Interface: locais, exemplo, que consiste podem CORBA em ser fornece algumas úteis APIs para serviços a para para serviços aplicação. Por converter uma referência de um objeto em uma string, e vice-versa. 54 Capítulo 4 – Computação Distribuída O suporte para invocações estáticas e dinâmicas oferece um alto poder de programação para a computação distribuída de CORBA. As invocações estáticas são mais fáceis de programar e possuem um desempenho melhor [Orfali, 1998]. As invocações dinâmicas fornecem uma alta flexibilidade, embora sejam mais difíceis na programação; são muito úteis para se descobrir serviços em tempo de execução. Os servidores não podem estabelecer a diferença entre as invocações estáticas ou dinâmicas, pois ambas possuem a mesma semântica. Em ambos os casos, o ORB localiza o adaptador do objeto remoto, transmite os parâmetros, e transfere o controle para a implementação do objeto, através dos stubs do servidor (skeletons). O lado do servidor [Orfali, 1998] possui a seguinte estrutura: • Server IDL Stubs (Static Skeletons): fornecem interfaces estáticas para cada serviço exportado pelo servidor. Esses stubs também são criados pelo compilador IDL; • Dynamic Skeleton Interface (DSI): foi introduzida com a versão CORBA 2.0 e fornece mecanismos de ligação (binding) em tempo de execução, para servidores que necessitam manipular requisições de objetos, que não possuem stubs nem skeletons compilados. O DSI do serviços de servidor é equivalente ao DII do cliente; • Object Adapter: localiza-se no topo dos comunicação do ORB e recebe as requisições dos serviços antes dos objetos do servidor. Ele provê um ambiente de execução para a instanciação dos objetos dos servidores, para a passagem das requisições e para a atribuição de identificadores únicos para cada objeto; • Implementation Repository (IR): fornece um repositório de informações sobre as classes que um objeto suporta, os objetos que estão instanciados e os identificadores únicos de cada um. É utilizado, também, para armazenar informações adicionais, associadas com as 55 Capítulo 4 – Computação Distribuída implementações de cada ORB, entre elas: segurança, dados administrativos, entre outras; • ORB Interface: consiste em algumas APIs para serviços locais, que são idênticas àquelas fornecidas para o cliente. Como mencionado anteriormente, a interoperabilidade em CORBA se apresenta através do sistema operacional, rede e linguagem de programação. A macro arquitetura das aplicações CORBA, conhecida como Object Management Architecture (OMA), foi a forma adotada pela OMG para dividir a complexidade da arquitetura inicial, sendo assim estabelecida, a divisão, em quatro grupos diferentes: o ORB, os Objetos de Serviços, as Facilidades Comuns e os Objetos de Aplicação. A Figura 6 mostra esta arquitetura. Objetos de Aplicação Facilidades Comuns ORB Objetos de Serviços Figura 6 – Object Management Architecture. Além do ORB, que já foi descrito anteriormente, os objetos de serviços possuem coleções de complexas, grande componentes determinando importância definidos um nível com na arquitetura. interfaces superior nos IDL graus São mais de complexidade dos objetos CORBA. Pode-se pensar em um objeto de serviço como sendo um complemento às funcionalidades de um 56 Capítulo 4 – Computação Distribuída ORB. Estas IDLs mais complexas são conhecidas como CORBAservices [OMG, 1996], [Orfali, 1998]. Os objetos de serviço são utilizados para criar componentes, atribuir-lhes nomes, inicializá-los, entre outras coisas. Em princípio, o número aumentou já OMG definiu para onze serviços-padrão. dezesseis. A seguir, Hoje, são este listados esses serviços [Orfali, 1998]: • Nomeação (Naming): permite que componentes localizem outros componentes através do nome. Este serviço também permite que objetos sejam registrados em diretórios existentes na rede, incluindo X.500, DCE, NIS+, Novell NDS e Internet LDAP; • Eventos (Event): permite que objetos registrem, dinamicamente, o interesse em eventos específicos do ambiente. O serviço define um objeto chamado de Event Channel, que coleta e distribui eventos entre os componentes da rede; • Ciclo de Vida (Life Cycle): define operações para a criação, cópia, movimentação e exclusão de componentes no ambiente; • Persistência (Persistence): armazenar, fornece persistentemente, uma interface componentes para em uma variedade de servidores de armazenamento – incluindo Bancos de Dados Orientados a Objetos (ODBMS), Bancos de dados Relacionais (RDBMS) e arquivos simples; • Transação (Transaction): objetos define recuperáveis, efetivação em assegurando duas as baseado fases a coordenação no (aninhadas propriedades de entre protocolo e de agrupadas), atomicidade, consistência, isolação e durabilidade; • Controle de Concorrência (Concurrency Control): provê um gerenciador de bloqueio, que bloqueia componentes para threads ou transações; recursos ou 57 Capítulo 4 – Computação Distribuída • Relacionamento (Relationship): fornece uma maneira de se criar associações entre componentes. Provê, também, mecanismos para se percorrer associações de grupos de componentes. Pode-se usar este serviço para reforçar restrições de integridade referencial, entre outros; • Externalização (Externalization): fornece um mecanismo padrão para transferência de dados entre componentes, utilizando streams; • Consulta (Query): fornece operações de consultas para objetos. É um super conjunto do padrão SQL. É baseado na especificação SQL3 e na Object Query Language (OQL), do grupo Object Database Management Group (ODMG); • Licença (Licensing): provê operações para a medição do uso de componentes, para garantir a compensação de seu uso. O serviço suporta qualquer modelo de controle de uso em qualquer ponto do ciclo de vida do componente; • Propriedades (Properties): fornece operações que permitem associar valores nominais (ou propriedades) com qualquer componente. A utilização deste serviço permite a associação dinâmica de uma propriedade com o estado de um componente; • Tempo (Time): fornece interfaces para a sincronização de tempo em um ambiente de objetos distribuídos. Também oferece operação para se definir e gerenciar eventos disparados por tempo; • Segurança (Security): fornece um framework completo para a segurança autenticação, de objetos listas confidenciabilidade. de Também distribuídos. controle gerencia de a Suporta acesso e delegação de credenciais entre objetos; • Negociação (Trading): possibilita a localização de objetos através dos tipos de serviços oferecidos; 58 Capítulo 4 – Computação Distribuída • Coleção (Collection): criação e fornece manipulação interfaces das coleções CORBA para a mais comuns, genericamente; • Notificação (Notification): é uma extensão do serviço de eventos que inclui refinamentos, como qualidade de enriquece o serviço, filtros, entre outros. A utilização de todos esses serviços comportamento de objetos em um ambiente distribuído. O terceiro grupo CORBAFacilities, que define as são, por facilidades definição, comuns, ou coleções de componentes que proporcionam serviços para serem utilizados diretamente pelos complexidade objetos dos de objetos aplicações. de Não negócios, possuem mas a englobam funcionalidades mais ricas do que as dos objetos de serviço [Orfali, 1998]. As facilidades comuns, que estão atualmente em desenvolvimento, incluem agentes móveis, comunicação de dados, fluxo de negócios. trabalho, As firewalls facilidades e frameworks comuns constituem para um objetos projeto de sem término. O projeto continuará até que o OMG defina todas as interfaces para cada serviço distribuído, até que se tenha conhecimento e para outros que ainda serão desenvolvidos [Souza, 2001]. Os objetos de aplicações são componentes específicos para aplicações, voltadas ao usuário final. Assim, os objetos definidos com base na IDL ficam disponíveis no ORB, para serem utilizados diretamente na construção dos aplicativos. Apesar de sua similaridade com as facilidades comuns, os objetos de negócios são mais complexos, conseguindo representar objetos reais existentes no dia-a-dia de um usuário final. Orfali [1998] cita alguns exemplos de objetos de negócios: cliente, ordem de pagamento, dinheiro, carro, paciente, conta corrente, entre outros. 59 Capítulo 4 – Computação Distribuída 4.3 Resumo Este capítulo apresentou um breve estudo da evolução da computação distribuída, desde a utilização dos mainframes, até a época atual, integrados à com a utilização Internet. Também dos sistemas introduziu distribuídos conceitos, como middleware, e descreveu, de forma detalhada, o tipo específico de middleware, conhecido como ORB. O ORB é o principal componente das aplicações distribuídas nos dias de hoje e é o elemento chave de diversas plataformas existentes. Por último, foi apresentada, em detalhes, a plataforma distribuída CORBA, discutindo seus princípios, sua arquitetura e seus principais elementos. O capítulo seguinte descreverá as ferramentas CASE, considerada como um elemento essencial a fim de automatizar as tarefas de desenvolvimento, em especial, o desenvolvimento de software baseado em componentes distribuídos. Capítulo 5 Ferramentas CASE 5.1 Introdução O Instituto de Engenharia de Software americano [SEI, 1999c] relata que, desde os primeiros desenvolvimento de necessidade utilização engenheiro de de software, software já de dias existia das atividades de uma consciência da ferramentas na otimização para de auxiliar suas o tarefas. Inicialmente, a concentração estava em ferramentas de suporte à execução montadores dos e programas, processadores como de tradutores, macro. compiladores, Entretanto, com o crescimento dos recursos computacionais aliados à complexidade do software, ferramentas motivou-se com novas a necessidade de funcionalidades. expansão Em dessas particular, a utilização de sistemas interativos de tempo compartilhado no desenvolvimento de software, encorajou a criação de editores de programas, debuggers e analisadores de código [SEI, 1999c]. À medida que os computadores iam se tornando mais confiáveis e mais utilizados, a necessidade desenvolvimento de software desenvolvimento de software de uma tornava-se passou a ampla aparente. ser visto noção do Assim, o como [SEI, 1999c]: • Uma atividade significativos, projetar uma de a larga fim solução escala de que envolve identificar apropriada, os esforços requisitos, implementar esta 61 Capítulo 5 – Ferramentas CASE solução, testa-lá e, finalmente, documentar as funcionalidades do produto final antes de se colocar em produção; • Um processo a longo prazo, no qual o seu principal produto, o software, necessita de melhorias contínuas durante todo o seu ciclo de vida. As implicações dessa visão são que a estrutura do software deve permitir a inclusão de novas funcionalidades de forma facilitada e, além disso, as informações referentes aos requisitos, projeto, implementação e testes, devem ser armazenadas e disponibilizadas de forma detalhada, a fim de auxiliar as tarefas de manutenção. Adicionalmente, as diversas versões dos artefatos produzidos durante todo o projeto devem ser mantidas, de modo que qualquer informação necessária para o grupo de desenvolvimento possa ser obtida sem maiores problemas; e, finalmente, como • Uma atividade coletiva, que envolve a interação entre um grupo de participantes durante cada etapa do ciclo de vida. Assim, esses participantes devem poder cooperar entre si, de maneira controlada, e possuir visões consistentes de determinados aspectos do projeto. A visão de desenvolvimento de software como um processo de larga escala e a longo prazo resultou no desenvolvimento de uma variedade tarefa de [Humphrey, limitadas, não ferramentas 1989]. oferecendo que ofereciam Inicialmente, muitos as recursos suporte a esta ferramentas eram a este suporte. Entretanto, dois importantes avanços resultaram na melhoria das funcionalidades dessas ferramentas, a saber [SEI, 1999c]: • Pesquisas na área de processos de desenvolvimento de software, as quais deram origem ao crescimento do número de métodos de projeto (por exemplo, programação e análise estruturada), que passaram a ser utilizados como base para o desenvolvimento. Esses métodos foram 62 Capítulo 5 – Ferramentas CASE idealmente, apropriados para serem automatizados por ferramentas de suporte, em cada etapa de sua execução, tendo notações gráficas associadas e uma grande variedade de artefatos associados (diagramas, anotações e documentações), necessários para serem armazenados e documentados. • Os recursos computacionais oferecidos pelas máquinas. Com o avanço destes recursos, começou-se a explorar, efetivamente, a capacidade de armazenamento de dados, o aumento do poder de processamento e os recursos mais sofisticados, visualização oferecidos gráfica, pelos capazes mecanismos de exibir para gráficos, modelos de análise e projeto e uma série de diagramas. A partir das funcionalidades obtidas com a utilização destas ferramentas, pôde-se obter uma definição mais precisa do termo ferramenta CASE. Segundo Pressman [2001], ferramentas de engenharia de software apoiadas por computador (Computer-Aided Software Engineering, CASE) auxiliam gerentes e profissionais de engenharia de software em todas atividades associadas com o processo de desenvolvimento. Automatizam as atividades de gestão de projetos, gerenciam todos os artefatos produzidos ao longo do processo e assistem aos engenheiros de software em seu trabalho de análise, projeto, implementação e teste. A área de CASE conseqüentemente, descrever toolkits, maneira estas tem se desenvolvido diferentes terminologias ferramentas. workbenches inconsistente. e Termos ambientes Assim, muito uma têm são usadas como sido taxonomia CASE torna-se extremamente necessária. rapidamente e, para ferramentas, utilizados de de ferramentas 63 Capítulo 5 – Ferramentas CASE Diversas taxonomias podem ser encontradas na literatura. Em [SEI, 1999c], os autores dividem as ferramentas em três grupos: • Ferramentas de natureza interativa (por exemplo, uma ferramenta que ofereça suporte a um determinado método de desenvolvimento) categoria classes CASE, (por são, e as exemplo, algumas enquanto que que não se encaixam um compilador). vezes, chamadas as últimas As de são nesta primeiras ferramentas chamadas de ferramentas de desenvolvimento. • Ferramentas que oferecem suporte as atividades iniciais do ciclo de vida do projeto de software (como análise de requisitos) e as que são utilizadas em fases posteriores do ciclo de vida (como compiladores e ferramentas de teste). As primeiras classes são, algumas vezes, chamadas de ferramentas CASE front-end, enquanto que as últimas são chamadas de back-end. • Ferramentas que são utilizadas para uma etapa específica do ciclo de vida de desenvolvimento (como, por exemplo, uma ferramenta de análise de requisitos ou codificação) e as que são comuns a uma série de etapas do ciclo de vida (como, por exemplo, ferramentas de documentação e gerenciamento de configuração). Sommerville [2000] e Pressman [2001] definem uma taxonomia de ferramentas CASE mais abrangente, utilizando como base o critério de função. A partir deste critério, as ferramentas são agrupadas incluindo gestão de de engenharia processo, acordo de com processo análise de dezesseis de funcionalidades, negócio, risco, entre modelagem outras. e Esse critério é o que será utilizado neste trabalho. A seção seguinte apresenta a ferramenta MVCASE que se encaixa na taxonomia de análise e projeto, segundo o critério de 64 Capítulo 5 – Ferramentas CASE função, e que oferece suporte ao desenvolvimento de software baseado em componentes distribuídos. 5.2 Ferramentas de Análise e Projeto Segundo Pressman [2001], as ferramentas de análise e projeto permitem ao engenheiro de software criar modelos do sistema a ser construído. Os modelos contêm uma representação dos dados, funções e comportamento caracterizações do (referentes projeto de à análise) dados, e informações arquiteturais, e descrições dos componentes e interfaces. 5.2.1 MVCASE A ferramenta MVCASE [Barrére, 1999], [Prado, 2000], [Prado, 2001], [Almeida, 2002], [Almeida, 2002a] é uma ferramenta que provê técnicas gráficas e textuais para o engenheiro de software. Com efeito, este especifica o sistema, em um alto nível de abstração, e gera código dessas especificações, por exemplo, em linguagens como Java, usando os benefícios da UML, a qual permite ao desenvolvedor trabalhar com diferentes em descrições visões no desenvolvimento de sistemas. As especificações criadas são armazenadas textuais em uma linguagem de modelagem. Estas descrições são as representações dos modelos do sistema, contendo cada parte do mesmo. A ferramenta MVCASE é totalmente escrita na linguagem Java, usando a tecnologia Java 2, da Sun Microsystems, e a Java Foundation Classes (JFC), a qual oferece suporte a interface livre de plataforma. No estágio atual, a MVCASE suporta técnicas para persistência e criação de objetos distribuídos, em uma arquitetura de três camadas. Usando desenvolvedor objetos pode contendo os três separar regras de níveis os da objetos negócio e em especificação, objetos objetos o clientes, que provêem serviços, como um banco de dados. Estes objetos podem ser 65 Capítulo 5 – Ferramentas CASE distribuídos em diferentes plataformas, criando aplicações cliente e servidor em um alto nível de abstração. Componentes Distribuídos podem ser criados com a tecnologia Enterprise Java Beans (EJB) [Sun, 2002], suportada pela ferramenta. Esta tecnologia permite desenvolver aplicações reutilizando componentes, deixando tarefas como conectividade, segurança e transações gerenciadas pelo servidor, o qual as realiza de forma transparente, para o usuário ou o desenvolvedor. Segue-se uma apresentação das principais notações UML suportadas pela MVCASE. 5.2.2 Notações UML suportadas pela MVCASE Segundo os autores da UML [Rumbaugh, 1999], os diagramas podem ser divididos em dois grupos: estruturais e comportamentais, conforme mostram, respectivamente, as Tabelas 2 e 3. Tabela 2 - Diagramas Estruturais. Diagramas Estruturais Diagrama de Classes Diagrama de Objetos Diagrama de Componentes Diagrama de Implantação Tabela 3 - Diagramas Comportamentais. Diagramas Comportamentais Diagrama de Caso de Uso Diagrama de Seqüência Diagrama de Colaboração Diagrama de Estados Diagrama de Atividades Os diagramas estruturais são utilizados para visualizar, especificar, construir e documentar os aspectos estáticos de um sistema. Os aspectos estáticos de um sistema podem ser 66 Capítulo 5 – Ferramentas CASE encarados como uma representação de seu esqueleto e estruturas relativamente estáveis [Rumbaugh, 1999]. Os diagramas comportamentais são utilizados para visualizar, especificar, construir e documentar os aspectos dinâmicos de um sistema. Os aspectos dinâmicos de um sistema são considerados como uma representação de suas partes que sofrem alterações [Rumbaugh, 1999]. Dentre os principais diagramas estruturais suportados pela Ferramenta MVCASE, destacam-se: o Diagrama de Classes e o Diagrama de Componentes. O Diagrama de Classes representa um conjunto de classes, interfaces e colaborações e seus relacionamentos. A Figura 7 mostra um exemplo deste diagrama. Figura 7 - Diagrama de Classes. O Diagrama de Componentes mostra um conjunto de componentes, interfaces e seus relacionamentos. exemplo deste diagrama. A Figura 8 mostra um 67 Capítulo 5 – Ferramentas CASE Figura 8 - Diagrama de Componentes. No grupo dos diagramas comportamentais, podem ser citados como primordiais para o desenvolvimento de aplicações, o Diagrama de Caso de Uso e o Diagrama de Seqüência. O Diagrama de Caso de Uso mostra um conjunto de casos de uso e atores e seus relacionamentos, enquanto o Diagrama de Seqüência tem por objetivo mostrar os cenários de execução das operações ao longo do tempo e modelar as conexões de mensagens entre os objetos [Rumbaugh, 1999]. A Figura 9 mostra um exemplo de Diagrama de Caso de Uso e o seu correspondente Diagrama de Seqüência do curso normal. Figura 9 - Diagrama de Caso de Uso e Seqüência. 68 Capítulo 5 – Ferramentas CASE 5.3 Resumo Este capítulo introduziu as ferramentas CASE consideradas como um elemento primordial no desenvolvimento de software, auxiliando o engenheiro de software em todas as atividades associadas introduziu com a o processo taxonomia dessas de desenvolvimento. ferramentas, em Também especial, a baseada no critério de função como elemento chave. Por fim, foi apresentada a ferramenta MVCASE, onde se apóia toda a abordagem de desenvolvimento de software baseado em componentes distribuídos, objetivo deste trabalho. O capítulo seguinte apresenta, em detalhes, a abordagem proposta. Capítulo 6 Uma Abordagem para o Desenvolvimento de Software Baseado em Componentes Distribuídos 6.1 Introdução Há muito vem se formando uma consciência na comunidade de engenharia de software de que, a fim de se obter produtos com alta qualidade e que sejam economicamente viáveis, torna-se extremamente necessário um conjunto sistemático de processos, técnicas e ferramentas. Nesse conjunto, a reutilização está entre as técnicas mais relevantes. Parte-se do princípio, de que, reutilizando partes bem especificadas, desenvolvidas e testadas, maior pode-se construir confiabilidade. técnicas têm sido Ao software longo propostas em dos para menor últimos favorecer a tempo anos, e com muitas reutilização. Dentre estas técnicas, destacam-se: a engenharia de domínio, frameworks, padrões e componentes. Entretanto, o o desenvolvimento que falta nesse baseado contexto é em uma maneira sistemática e progressiva de realizar a reutilização. Assim, motivado principalmente reutilização e apresenta resultados os distribuição de de pelos objetos, pesquisa e a princípios este proposta de capítulo de uma 70 Capítulo 6 – Abordagem de DBCD Abordagem para o Desenvolvimento de Software Baseado em Componentes Distribuídos (DBCD). 6.2 Mecanismos da Abordagem Após a pesquisa de diferentes métodos, técnicas e ferramentas disponíveis na literatura [D’Souza, 1999], [Perspective, 2000], [Cheesman, 2000], [Jacobson, 2001], [Rational, 2001], [Objecteering, 2001], decidiu-se pela utilização de Catalysis, como método Middleware, de como desenvolvimento camada baseado adicional entre em componentes; o cliente e o servidor; framework e padrões, para facilitar a distribuição dos componentes e o acesso ao banco de dados. Esses mecanismos foram integrados numa abordagem, orientando o engenheiro de software tanto no processo de desenvolvimento dos componentes desenvolvimento de das um domínio aplicações do que problema os quanto reutilizam. no Para automatizar parte das tarefas de desenvolvimento, a abordagem utiliza a ferramenta MVCASE, sobre a qual se apóiam o desenvolvimento e a reutilização dos componentes. 6.2.1 Método Catalysis A abordagem de DBCD proposta baseia-se no método Catalysis, principalmente, pela clara distinção entre as funcionalidades dos seus três níveis: Domínio do Problema, onde é dada ênfase no entendimento do problema, especificando-se “o quê” o sistema deve atender para solucionar o problema; Especificação dos Componentes, onde é descrito o comportamento do sistema de uma forma não ambígua; e, Projeto Interno dos Componentes, onde se define “como” serão implementados os requisitos especificados para os componentes, além da forte ênfase nos conceitos de abstração e refinamento, utilizados para representar os relacionamentos essenciais entre os diversos artefatos do sistema, obtidos durante o processo de desenvolvimento. A ênfase no refinamento dos artefatos cria 71 Capítulo 6 – Abordagem de DBCD uma série de fatorações, extensões e transformações que visam o rastreamento dos requisitos até o código. A integração de Catalysis na abordagem de DBCD foi feita através da definição de passos para o desenvolvimento dos componentes, correspondentes a cada um destes níveis, conforme resume a Tabela 4. Tabela 4 - Catalysis versus Abordagem de DBCD. Níveis do Método Catalysis Passos da Abordagem de DBCD Domínio do Problema Definir Problema Especificação dos Componentes Especificar Componentes Projeto Interno dos Componentes Projetar Componentes Implementar Componentes Cada um destes passos da abordagem serão apresentados, em detalhes, na seção 6.3. 6.2.2 Middleware Conforme foi apresentado no capítulo 4, sobre computação distribuída, diferentemente das arquiteturas cliente/servidor de duas camadas, onde o cliente identifica e se sincroniza diretamente com o servidor requisitado, o conceito de middleware assume o papel da camada adicional entre o cliente e o servidor nas aplicações multicamadas e nas aplicações com objetos distribuídos. A abordagem de DBCD utiliza o middleware como uma camada intermediária, para permitir a distribuição dos componentes através da rede e oferecer uma estrutura para sua localização e comunicação, ocultando detalhes de linguagem de programação, sistema operacional e hardware. 6.2.3 Framework e Padrões A fim de construir componentes de software mais seguros, confiáveis, fáceis de manter e de reutilizar, a abordagem de DBCD utiliza um framework baseado em padrões. Esse framework foi desenvolvido com objetivo de orientar o processo de acesso a banco de dados relacional e evitar o entrelaçamento de 72 Capítulo 6 – Abordagem de DBCD código com diferentes propósitos, neste caso, código de negócio com código de acesso a banco de dados. 6.2.3.1 Framework Persistence Utilizando os princípios dos padrões apresentados em [Yoder, 1998], para mapeamento de objetos de negócio para banco de dados relacional, desenvolveu-se o framework Persistence. Esse framework é composto, basicamente, de quatro componentes específicos e de outros componentes pertencentes à biblioteca da linguagem Java. A Figura 10 mostra os 4 componentes específicos e suas dependências. O componente ConnectionPool, através de sua interface IConnectionPool, realiza a gerência e conexão com componente o banco de DriversUtil, dados com utilizado base em na aplicação. definições O eXtensible Markup Language (XML) [W3C, 2001], contém as informações dos drivers de banco de dados suportados, disponibilizadas através de sua interface IDriverUtil. O componente TableManager gerencia o mapeamento de um objeto para tabelas do banco de dados, disponibilizando ITableManager. O seus componente métodos persistente pela interface da estrutura FacadePersistent, através de sua interface IPersistentObject, disponibiliza os valores que devem ser adicionados ao banco de dados, passando parâmetros ao componente TableManager. Figura 10 - Framework Persistence. 73 Capítulo 6 – Abordagem de DBCD A utilização de padrões em sistemas complexos de software permite que soluções previamente testadas sejam reutilizadas, tornando o sistema mais compreensível, flexível, fácil de desenvolver e manter. Deste modo, a fim relacionadas à utiliza padrão o de facilitar distribuição a dos realização componentes, Distributed Adapters de a tarefas abordagem Pattern (DAP), apresentado, anteriormente, no capítulo 3. 6.2.4 Ferramenta MVCASE Ferramentas CASE têm sido empregadas, com sucesso, no projeto ou reprojeto de sistemas a serem reconstruídos. Dentre as ferramentas CASE, destaca-se, neste trabalho, a MVCASE, que suporta a especificação do sistema usando a notação UML e foi estendida para oferecer suporte a abordagem de utiliza a ferramenta DBCD aqui MVCASE para apresentada. A abordagem construir e de DBCD reutilizar os componentes de um domínio do problema, através de um middleware. Uma vez especificados os componentes de especificações especificamente um em domínio, uma Java, pode-se linguagem tornando-os gerar código orientada a disponíveis dessas objetos, em um a este repositório de componentes para posterior reutilização. O estágio inicial da ferramenta MVCASE, anterior trabalho, permitia ao engenheiro de software especificar os diagramas Componentes de Caso e de de Uso, Seqüência, Implantação. Porém, Classes, para Estados, modelar os componentes, conforme o método de DBC Catalysis, tornava-se necessária a adição de outros artefatos, específicos de DBC, ainda não disponíveis na ferramenta. Assim, estes artefatos foram desenvolvidos, permitindo a especificação do Modelo de Colaboração, Framework de Modelos e Modelo de Aplicação do Framework, conforme previsto em Catalysis, e essencial para a abordagem proposta. 74 Capítulo 6 – Abordagem de DBCD 6.2.4.1 Modelo de Colaboração A Figura 11 mostra um Modelo de Colaboração [D’Souza, 1999], representando a coleção de objetos participantes e as ações. Em Catalysis, os informações e representar um objetos representam funcionalidades, evento, um conjunto as ações enquanto tarefa, mensagem ou de podem atividade, relacionada ao objeto. No Modelo de Colaboração da Figura 11, o retângulo (Manager e Customer) corresponde aos objetos e as elipses representam KeepEmployee, às ações (KeepTask, ConsultTaskAccomplished, KeepCustomer, ConsultTaskPending, KeepServiceOrder). Figura 11 - Modelo de Colaboração. 6.2.4.2 Framework de Modelos e Modelo de Aplicação do Framework O método nível, Catalysis como particionadas considera especificações e e reutilizadas, que descrições projetos, ao de também contrário da mais alto podem ser convencional reutilização de código. Esses elementos reutilizáveis de mais alto nível são chamados de Framework de Modelos. 75 Capítulo 6 – Abordagem de DBCD Um Framework de Modelos genérico, que contém possui alguns a tipos estrutura e suas de um pacote características. Esses tipos e características podem ser definidos por meio de placeholders, representados pelos sinais de <>, que consistem em definições aplicação do genéricas domínio a serem [D’Souza, instanciadas 1999], conforme [Gimenes, a 2000]. A Figura 12 mostra este framework com os seus tipos genéricos. Figura 12 - Framework de Modelos. Quando um Framework de Modelos é aplicado, os tipos com placeholders são substituídos, para que se possa obter uma versão do framework especializado para a aplicação desejada. O artefato disponibilizado a partir dessa aplicação do Framework de Modelos é o Modelo de Aplicação do Framework. A Figura 13 mostra este modelo, onde os tipos genéricos foram substituídos pelos tipos específicos, Employee e Task. no caso, Customer, ServiceOrder, 76 Capítulo 6 – Abordagem de DBCD Figura 13 - Modelo de Aplicação do Framework. 6.2.4.3 Wizard para Geração de Código dos Componentes Outra extensão realizada na ferramenta MVCASE foi a adição de recursos, para implementação auxiliar dos engenheiro componentes desenvolvido um processo DBCD, de o wizard para realizando de software distribuídos. Assim, automatizar parcialmente a de geração código na foi o dos componentes e suas respectivas interfaces, assim como o código dos stubs e skeletons. A Figura 14 mostra este wizard. Inicialmente, o engenheiro de software seleciona os componentes do domínio disponíveis na ferramenta. Em seguida, especifica-se os componentes correspondentes a estrutura do padrão DAP, ou seja, os adaptadores origem e destino (SourceAdapter e TargetAdapter) e o Facade. Uma vez realizados esses passos, gera-se o código Java e IDL dos componentes e suas interfaces. compilados componentes. a fim Por de fim, se os obter códigos a em Java implementação e IDL são final dos 77 Capítulo 6 – Abordagem de DBCD Figura 14 - Wizard para geração de código dos componentes. 6.3 Abordagem de Desenvolvimento de Software Baseado em Componentes Distribuídos Integrando as técnicas princípios de middleware, Distributed definiu-se Adapters uma do método o Pattern abordagem Catalysis framework (DAP), que na suporta de Persistence ferramenta o DBC, os e o MVCASE, Desenvolvimento de Software Baseado em Componentes Distribuídos (DBCD). A abordagem foi dividida em duas etapas, conforme mostra a Figura 15, utilizando a notação SADT [Ross, 1977]. Numa primeira etapa, a abordagem parte dos requisitos de um domínio do problema e produz os componentes numa linguagem orientada a objetos (desenvolvimento para a reutilização). Uma vez implementados, os componentes são armazenados num repositório para posterior engenheiro componentes de de reutilização. software, um na domínio Numa etapa ferramenta do subseqüente, MVCASE, problema consulta disponíveis o os no repositório. Após a identificação dos componentes necessários, constroem-se as aplicações que os reutilizam (desenvolvimento 78 Capítulo 6 – Abordagem de DBCD com reutilização). Conforme mostra a Figura 15, os principais mecanismos da abordagem são: a ferramenta MVCASE e o engenheiro de software. A abordagem é orientada pelo framework Persistence, DAP, um por técnicas Middleware e, do método Catalysis, finalmente, pelo pelo padrão repositório de cada da componentes. Segue-se uma apresentação detalhada de etapa abordagem. Figura 15 - Abordagem de DBCD. 6.3.1 Desenvolver Componentes Distribuídos Nesta etapa, que corresponde ao padrão Distributed Component Development Pattern (DCDP) [Almeida, 2002b], os componentes do domínio do problema são construídos em quatro passos: Definir Problema, Especificar Componentes, Projetar Componentes e Implementar Componentes, conforme mostra a Figura 16. Os três primeiros passos correspondem, em parte, aos três primeiros níveis de Catalysis, conforme é mostrado à direita da figura. 79 Capítulo 6 – Abordagem de DBCD No último passo, a implementação física dos componentes é realizada. Figura 16 - Passos do Desenvolvimento dos Componentes Distribuídos. Segue-se uma apresentação de cada passo da etapa Desenvolver Componentes Distribuídos. Para facilitar o entendimento das entradas, saídas e controles de cada passo, será utilizado como exemplo um Domínio do Problema de Ordem de Serviços (OS) de uma empresa do ramo de computação. As aplicações do domínio de Ordem de Serviços se dividem em três grandes módulos: o primeiro, Clientes, é responsável pelo cadastro e notificação dos clientes de uma determinada ordem de serviço; o segundo, Funcionários, é responsável pelo cadastro de funcionários e controle das tarefas da ordem de serviço; o terceiro, Relatórios, é responsável pela emissão de relatórios para a gerência, relacionados com a consulta de tarefas realizadas e pendentes, ordens de serviços de determinado cliente, e dos funcionários responsáveis por cada tarefa. 80 Capítulo 6 – Abordagem de DBCD 6.3.1.1 Definir Problema Neste primeiro passo entendimento do componentes devem Inicialmente, usando problema, são técnicas da atender abordagem dada especificando-se para identificados como é os storyboards no quê” os “o solucionar o requisitos ou ênfase do mind-maps problema. domínio, [Pressman, 2001], visando representar as diferentes situações e cenários do domínio do problema. Em identificados são especificados em seguida, os requisitos Modelos de Colaborações, representando a coleção de ações e os objetos participantes. Finalmente, os Modelos de Colaborações são refinados em Modelos de Casos de Uso. A Figura 17 resume o primeiro passo da abordagem, onde um mind-map, definido na identificação dos requisitos do domínio Ordem de Serviços, é especificado num Modelo de Colaboração, e, posteriormente, refinado e particionado em um Modelo de Casos de Uso, visando diminuir a complexidade e melhorar o entendimento do domínio do problema. Figura 17 - Primeiro Passo da Abordagem: Definir Problema. 81 Capítulo 6 – Abordagem de DBCD 6.3.1.2 Especificar Componentes Este passo corresponde ao segundo nível de Catalysis, onde é descrito o comportamento externo do sistema de uma forma não ambígua. Na ferramenta CASE, o engenheiro de software refina as especificações do passo anterior, visando obter as modelos do especificações dos componentes. Esse passo domínio do tem início problema. O com o refinamento Modelo de Tipos dos é especificado, conforme mostra a Figura 18, mostrando atributos e operações dos tipos de objetos, sem se preocupar com a implementação. Ainda neste passo, pode-se utilizar o dicionário de dados, para especificar cada tipo encontrado, e a Object Constraint Language (OCL) [OMG, 2001], para detalhar o comportamento dos objetos, sem ambigüidades. Figura 18 - Modelo de Tipos do passo Especificar Componentes. Uma vez identificados e especificados, os tipos são agrupados em Framework de Modelos. Framework de Modelos são projetados em um alto genérico nível que de pode abstração, ser estabelecendo importado, com um esquema substituições e extensões, de modo a gerar aplicações específicas [D’Souza, 1999]. A concebido artefato Figura como um 19 mostra Framework reutilizável da este de fase framework. Modelos, de Adicionalmente este projeto. se Como torna o um projeto representa a maior parte das decisões que vão estar no código 82 Capítulo 6 – Abordagem de DBCD final, pode-se especificar esses frameworks num alto nível de abstração e oferecer um processo para refiná-los até o nível de um conjunto de componentes interoperáveis [D’Souza, 1999]. Figura 19 - Framework de Modelos do domínio Ordem de Serviços. Os tipos com nomes entre os sinais <> são definidos como placeholders. Esses tipos podem ser substituídos em aplicações específicas. O conceito é similar ao de extensibilidade de classes no paradigma orientado a objetos. O Framework de Modelos do domínio Ordem de Serviços pode ser reutilizado em diversas aplicações do domínio. A Figura 20 mostra o Modelo de Aplicação do Framework deste domínio. Neste framework, os tipos com placeholders são substituídos pelos seus respectivos tipos. Figura 20 - Modelo de Aplicação do Framework. 83 Capítulo 6 – Abordagem de DBCD Ainda neste passo, os Modelos de Casos de Uso do passo anterior são refinados em Modelos de Interações, representados pelos diagramas de seqüências, para detalhar os cenários de utilização dos componentes nas diferentes aplicações do domínio do problema. Em resumo, as atividades deste passo, realizadas pelo engenheiro de software, na ferramenta MVCASE, compreendem a especificação do: a) Modelo de Tipos; b) Framework de Modelos; c) Modelo de Aplicação do Framework; d) Modelos de Interações, representados pelos diagramas de seqüência, baseados nos Modelos de Casos de Uso. Estes modelos são utilizados no próximo passo da abordagem, para obter o projeto interno dos componentes. 6.3.1.3 Projetar Componentes Neste passo, interno dos Catalysis, o engenheiro componentes, e especifica de software conforme outros o realiza terceiro requisitos não o projeto nível de funcionais, destacando-se: arquitetura distribuída, tolerância a falhas, caching e persistência. Inicialmente, os Modelos de Tipos são refinados em Modelos de Classes, onde são modeladas as classes e seus relacionamentos, levando em consideração a definição dos componentes com suas interfaces. A Figura 21 mostra parte do Modelo de Classes do domínio de representados Ordem de através Serviços. dos Os Modelos diagramas de de Interações, seqüência, são refinados para mostrar detalhes de projeto dos comportamentos dos métodos em cada classe. 84 Capítulo 6 – Abordagem de DBCD Figura 21 - Modelo de Classes obtido do Modelo de Tipos. A partir do Modelo de Classes, utiliza-se o Distributed Adapters Pattern (DAP) para projetar o Modelo de Componentes, onde a organização e as dependências entre os componentes são definidas. 6.3.1.3.1 Aplicando o DAP A Figura 22 mostra o projeto do Modelo de Componentes após a aplicação abstraem interface do as DAP. regras Os componentes de ICustomer negócio abstrai o Source do e domínio comportamento CustomerTarget do do problema. A componente CustomerTarget num cenário distribuído. Tanto esta interface como os componentes, Source e CustomerTarget, não possuem código de distribuição. Esses três elementos constituem uma camada independente de distribuição, conforme é mostrado na parte superior da Figura. Os demais componentes estão conectados a uma API específica de distribuição e encapsulam os detalhes de comunicação. 85 Capítulo 6 – Abordagem de DBCD Figura 22 - Modelo de Componentes após aplicar o DAP. Uma vez projetados os componentes, pode-se projetar outros requisitos não funcionais. 6.3.1.3.2 Outros requisitos não funcionais Os adaptadores anteriormente apresentados tratam com detalhes básicos de distribuição e ocultam estes detalhes do código de negócio e de interface. Estes podem, também, adicionar outros requisitos não funcionais, mantendo a integridade da camada independente de distribuição. Nesta seção, será mostrado como os adaptadores podem realizar a adição destes requisitos, que podem ser úteis para projetar componentes distribuídos [Alves, 2001a]. i. Tolerância a Falhas. O componente SourceAdapter não possui mecanismo de tolerância a falhas. Assim, se ocorrer um erro de comunicação simplesmente, ou se gera o uma servidor exceção estiver de indisponível, comunicação. No este, entanto, este componente pode, adicionalmente, implementar mecanismos de tolerância a falhas. 86 Capítulo 6 – Abordagem de DBCD Se o componente SourceAdapter recebe uma exceção remota quando interage com o TargetAdapter, ele pode implementar a política de tentar contactar o TargetAdapter novamente durante um certo período de tempo, ou tentar contactar outro TargetAdapter. Esta política pode ser implementada pelo SourceAdapter de maneira transparente à camada independente de distribuição. ii. Caching. Algumas operações podem retornar uma considerável quantidade de dados, entretanto somente parte deles será útil em determinado momento. Enviar todos os dados de uma só vez para o cliente pode não ser desejável, uma vez que pode causar um impacto negativo de performance na rede. Uma possível solução é enviar um cache com parte dos dados necessários e transferir mais dados à medida em que uma falha ocorra. Um componente SourceAdapter pode implementar este comportamento de caching. Quando uma operação de consulta retorna muitas entradas, parte destas são utilizadas para inicializar um SourceAdapter. Um cliente, por exemplo, um Servlet, pode obter as entradas deste adaptador. Quando uma falha ocorre num SourceAdapter, este contacta o TargetAdapter, a fim de obter mais entradas. Este comportamento de caching é implementado pelo SourceAdapter de forma totalmente transparente ao cliente. iii. Persistência dos Dados. A fim de facilitar o acesso a banco de dados, o engenheiro de software pode reutilizar os componentes do Framework Persistence, apresentado, anteriormente, na seção 6.2. Em resumo, os principais artefatos e a seqüência de atividades do passo Projetar Componentes incluem: a) Refinamento dos Modelos de Tipos em Modelos de Classes; b) Refinamento dos Modelos de Interações; e c) Criação do Modelo de Componentes. 87 Capítulo 6 – Abordagem de DBCD 6.3.1.4 Implementar Componentes Neste passo, o engenheiro de software define a tecnologia de distribuição e, então, utiliza o gerador de código, da MVCASE, para otimizar projetados. as tarefas Nesta de implementação situação, CORBA dos foi componentes escolhida como tecnologia de distribuição, porém, outras tecnologias, como RMI, JAMP [Trevelin, 2001] e JINI [Sun, 2002b], também poderiam ser utilizadas. Assim, para cada componente, têm-se os stubs, skeletons e as interfaces que disponibilizam os seus serviços. Esses componentes são customizados pelo engenheiro de software e, em seguida, são armazenados no repositório de componentes, a fim de serem reutilizados no desenvolvimento das aplicações. Os aspectos envolvendo os testes dos componentes são discutidos na seção 6.4. A Figura 23 mostra o processo de geração de código dos componentes projetados na MVCASE. Figura 23 - Geração de código na ferramenta MVCASE. Uma vez construídos os componentes do domínio do problema, passa-se para a segunda etapa da abordagem de DBCD, onde o 88 Capítulo 6 – Abordagem de DBCD engenheiro de software desenvolve as aplicações que reutilizam estes componentes. 6.3.2 Desenvolver Aplicações Distribuídas A Figura 24 mostra os passos para o desenvolvimento das aplicações. Parte-se dos requisitos da aplicação e procede-se com o ciclo Especificar de desenvolvimento Aplicação, Projetar normal, Aplicação que compreende: e Implementar Aplicação. Os componentes construídos, do domínio do problema, ficam disponíveis componentes. Do para mesmo reutilização modo que no no repositório desenvolvimento de dos componentes, a MVCASE é o principal mecanismo para auxiliar o engenheiro de software durante o desenvolvimento. Figura 24 - Desenvolvimento das Aplicações Distribuídas. Para melhor compreensão destas etapas, é apresentada uma aplicação que registra, via Web, um cliente do domínio Ordem de Serviços, cujos componentes foram construídos. 89 Capítulo 6 – Abordagem de DBCD 6.3.2.1 Especificar Aplicação Este passo tem início com o entendimento do problema, identificando-se os requisitos da aplicação. Antes de iniciar a especificação dos requisitos da aplicação, na MVCASE, o engenheiro de software importa os componentes do domínio do problema, no caso Ordem de Serviços, que estão disponíveis no repositório, para reutilização. Em seguida, os requisitos são especificados em Modelos de Casos de Uso e Digramas de Seqüência. 6.3.2.2 Projetar Aplicação As especificações do passo anterior são refinadas pelo engenheiro de software, a fim de obter o projeto da aplicação. Neste passo, arquitetura os requisitos distribuída e não à funcionais, persistência relacionados dos dados, à são especificados. Assim, continuando o processo de modelagem, o engenheiro de software especifica o modelo de componentes da aplicação. Neste caso, o componente ServletAddCustomer foi desenvolvido, de modo a reutilizar os serviços dos componentes do domínio Ordem de Serviços. A Figura 25 mostra os três componentes reutilizados na aplicação de registro de um cliente. Figura 25 - Componentes Reutilizados para Aplicação Registrar Cliente. 90 Capítulo 6 – Abordagem de DBCD Em seguida, os componentes FacadePersistent, TableManager, DriversUtil e ConnectionPool, do framework Persistence, são adicionados para tratar do acesso ao banco de dados, conforme mostra a Figura 26. Figura 26 - Projeto da Aplicação Distribuída. Uma vez realizado o projeto da aplicação, o engenheiro de software prepara o ambiente para sua execução. 6.3.2.2.1 Preparar Ambiente Para distribuir uma aplicação é necessária a escolha de uma particular plataforma. Para esta plataforma, existem algumas informações de configuração, como localização do servidor, número de porta, entre outras. A Figura 27 estruturada, utilizando mostra através um como da a aplicação extensão middleware, por do distribuída modelo exemplo, CORBA, Object a é Web, fim de acomodar os repositórios de componentes. Na primeira camada, tem-se a HyperText interface da Transfer Protocol enviadas e Web. segunda Na recebidas dos camada, aplicação. (HTTP), Servlets, o Através servidor as da requisições disponíveis web comunicação no são Servidor comunica-se com o 91 Capítulo 6 – Abordagem de DBCD Servidor de Componentes, o qual disponibiliza os componentes do domínio do problema armazenados no repositório. Esta comunicação é realizada via Object Request Broker (ORB). Na terceira camada está o banco de dados com seu servidor. A comunicação entre o Servidor de Componentes e o Servidor de Banco de Dados, via Java Database Connectivity (JDBC), permite o acesso aos serviços de banco de dados. Figura 27 - Modelo Object Web Estendido. 6.3.2.3 Implementar Aplicação Por último, baseado no projeto da aplicação, o engenheiro de software utiliza o gerador de código da MVCASE para realizar sua implementação e, em seguida, realiza as adaptações necessárias. A Figura 28 mostra parte do código gerado para aplicação de registrar um cliente. 92 Capítulo 6 – Abordagem de DBCD Figura 28 - Implementação da Aplicação Registrar Cliente. Uma vez concluído o passo Implementar Aplicação, o engenheiro de software realiza os testes envolvendo as aplicações. 6.4 Testes envolvendo os componentes e as aplicações Os testes dos componentes e aplicações são realizados em três etapas: teste consistência dos com o componentes domínio e individuais, teste das teste de aplicações que reutilizam os componentes desenvolvidos. i. Dentro de um particular domínio, cada componente é testado individualmente através da construção de um simples caso de teste, que permite validar as funcionalidades exercidas pelo componente. ii. Em seguida, são realizados os testes para verificar a consistência interna entre os componentes do domínio. iii. Por fim, antes de serem colocadas em produção, as aplicações são submetidas a uma longa série de testes. O domínio abordagem, de Ordem foi apresentadas. Os de testado testes Serviços, construído servindo-se auxiliaram dessas a utilizando três corrigir a etapas erros em 93 Capítulo 6 – Abordagem de DBCD diferentes fases do processo de desenvolvimento, resultando em melhorias em cada etapa da abordagem e no refinamento dos mecanismos de integração. 6.5 Avaliação da Abordagem Segundo a hipótese levantada por Kitchenham [1995], que ressalta que um bom estudo de caso, apesar de não possuir o rigor dos experimentos formais, pode ser adequado para avaliar os benefícios advindos da utilização de um método ou processo em um determinado contexto, o domínio de Ordem de Serviços foi desenvolvido e analisado. Esta seção descreve este processo, discutindo sua viabilidade e utilidade. 6.5.1 Introdução Conforme Kitchenham [1995], um bom estudo de caso pode prover informações suficientes para auxiliar a julgar se um método específico irá trazer benefícios ou não em um contexto. O estudo de caso descrito neste capítulo está de acordo com a definição dada pela autora para estudo de caso, uma vez que foi aplicado desenvolvimento Ordem de em um de Serviços, projeto típico, componentes e não e que é aplicações apresenta o projeto de no domínio de replicação, o que é necessário no caso de experimentos formais. 6.5.2 A abordagem Para a realização do estudo de caso, seguiu-se a sistemática apresentada em [Kitchenhan, 1995], que sugere três etapas distintas na elaboração de um estudo de caso: • Planejamento: Consiste na definição do estudo de caso, identificando-se os participantes e os objetivos a serem alcançados; 94 Capítulo 6 – Abordagem de DBCD • Monitoração: Refere-se ao acompanhamento da execução de cada etapa do estudo, registrando-se o tempo de duração e os resultados obtidos; • Avaliação dos resultados: Corresponde à descrição dos resultados gerais obtidos no estudo, utilizando os dados da monitoração. 6.5.2.1 Planejamento Um projeto abordagem, piloto com o foi estabelecido objetivo de se para a desenvolver aplicação da componentes e aplicações para o domínio de Ordem de Serviços. Estabeleceu-se que todas as etapas constantes da abordagem seriam realizadas e, ao final, ter-se-ia uma validação, ainda informal, das vantagens e desvantagens oferecidas com a utilização da abordagem. Os mecanismos utilizados pela abordagem foram: a) Java, como linguagem de implementação; b) HTML e Servlets, para criação de interfaces de usuário através da internet; c) MySQL, para persistência dos dados; d) CORBA, como tecnologia de distribuição. Os participantes do processo foram dois estudantes de pósgraduação (E1 e E2), com um ano de experiência nos mecanismos mencionados. 6.5.2.2 Monitoração Durante a fase de monitoração, procurou-se registrar o tempo e os resultados registros obtidos foram feitos de cada com o etapa da objetivo abordagem. de permitir Estes uma avaliação dos resultados deste estudo. Inicialmente, com base nos requisitos do domínio do problema, E1 e E2 realizaram uma análise inicial do domínio, a fim de 95 Capítulo 6 – Abordagem de DBCD obter seu entendimento. Em seguida, já com a abordagem em mãos, estes realizaram sua execução passo a passo. Na etapa Definir Problema, os requisitos do domínio foram identificados, utilizando a técnica de mind-maps. Com base nos requisitos do colaboração domínio, e, em foram seguida, especificados os modelos de os modelos casos de de uso. Primeiramente, um modelo de caso de uso global foi definido e, em seguida, este modelo foi particionado em pacotes, com seus respectivos modelos (ex: pacote cliente, tarefa). A partir do refinamento das especificações do passo anterior, E1 e E2 iniciaram o passo subseqüente. Neste passo, foram desenvolvidos o modelo de tipos, o framework de modelos, o modelo de aplicação do framework e os modelos de interações para cada caso de uso. Após a conclusão da especificação dos componentes, E1 e E2 iniciaram seu projeto. O modelo de tipos da etapa anterior foi, inicialmente, refinado no modelo de classes. O mesmo procedimento de refinamento adotado para os modelos de caso de uso foi adotado. Em seguida, o padrão DAP foi aplicado para cada classe de negócio identificada. Adicionalmente, outros requisitos não funcionais foram projetados, como caching e persistência. Os modelos de interações da etapa anterior foram refinados, adicionando as classes com a estrutura do DAP. Por último, E1 e E2 criaram o modelo de componentes do domínio. Uma vez realizaram Tabela 5 projetados sua resume os componentes implementação os etapa da abordagem. artefatos e, em do domínio, seguida, os disponibilizados E1 e testes. na E2 A primeira 96 Capítulo 6 – Abordagem de DBCD Tabela 5 - Artefatos disponibilizados. Etapa Definir Problema Especificar Componentes Projetar Componentes Implementar Componentes Artefatos Qt. Mind-Map Modelo de Colaboração Modelo de Casos de Uso Modelo de Tipos Dicionário de Dados Framework de Modelos Modelo de Aplicação do Framework Modelo de Interação Modelo de Classes Modelo de Interação Modelo de Componentes Interfaces Componentes 1 1 1 1 1 1 1 18 5 18 5 16 24 Após a conclusão da primeira etapa, E1 e E2 iniciaram a etapa subseqüente. aplicações aplicações através O desenvolvimento resultaram e do 3812 num linhas programa total de wc dos de código (word componentes 24 e suas componentes, desenvolvidas, count) do 18 medidas UNIX, não contabilizando as linhas em branco, comentários e bibliotecas do Java utilizadas. O tempo total de desenvolvimento foi de 60 horas e 13 minutos. 6.5.2.3 Avaliação dos Resultados Após esta avaliação, identificou-se a possibilidade de que, com a utilização da abordagem proposta, a qual orienta o engenheiro de software no desenvolvimento dos componentes e aplicações de um domínio, pode-se obter, ao fim do processo, um software de melhor qualidade, comparada a uma abordagem adhoc. Utilizando a abordagem, obtêm-se os seguintes benefícios: i. Modularidade: a abordagem permite separar, sistematicamente, os aspectos de distribuição e persistência, evitando o entrelaçamento de código com diferentes propósitos; ii. Reutilização: através dos artefatos disponibilizados, a abordagem permite a reutilização desde modelos de alto nível 97 Capítulo 6 – Abordagem de DBCD de abstração (Framework de Modelos) até código, otimizando e melhorando as tarefas de desenvolvimento; iii. Automação parcial: com o suporte da ferramenta MVCASE, grande parte das atividades propostas pela abordagem podem ser executadas automaticamente; iv. Definir componentes de mudanças forma no código minimizada, de através comunicação da dos utilização do padrão DAP. Mesmo com as vantagens listadas acima, as seguintes desvantagens foram identificadas: i. Commercial abordagem foi off-the shelf inicialmente (COTS): projetada o modo não como a considera a possibilidade de utilizar componentes adquiridos de terceiros; ii. Número incremental de componentes: de modo a utilizar o padrão DAP, torna-se necessária a utilização de um par de adaptadores, nomeação. assim Por serem como componentes estruturas de inicialização canônicas, estas podem e ser geradas através da automação parcial utilizando a ferramenta MVCASE. 6.6 Resumo Este capítulo descreveu Software Baseado pesquisa deste em a Abordagem Componentes trabalho, de Desenvolvimento Distribuídos, apresentando os objetivo mecanismos de de que oferecem suporte a sua execução e discutindo, detalhadamente, suas duas grandes etapas. Em seguida, foi apresentada a abordagem utilizada para o processo de teste e, por fim, foi discutido um processo inicial de validação, ao qual a abordagem foi submetida. O capítulo seguinte apresenta um estudo experimental, que analisa a viabilidade de aplicação da abordagem proposta no desenvolvimento distribuídos. de software baseado em componentes Capítulo 7 Estudo Experimental 7.1 Introdução Com o término da década de 90, houve um crescimento acelerado do número de métodos, técnicas e ferramentas, cada uma, oferecendo melhorias em determinadas etapas do software, como no processo adoção de desenvolvimento inadequada e e manutenção. desenfreada desses Entretanto, mecanismos a pode resultar em grandes problemas para os seus usuários finais e empresas. Tendo em vista esses fatores, pesquisas sugerem [Basili, 1986], [Basili, 1993], [Kitchenham, 1995], [Wohlin, 2000] a necessidade de um rigoroso e sistemático processo experimental, a fim de avaliar novas tecnologias e compará-las com outras já existentes, antes de colocá-las em produção, assim como mensurar os seus impactos nas empresas, processos e produtos. Deste modo, este capítulo apresenta um estudo experimental que avalia a viabilidade de utilização da abordagem proposta para o desenvolvimento de software baseado em componentes distribuídos. Antes de discutir o processo experimental adotado, é necessário introduzir algumas definições, de modo a obter um melhor entendimento dos seus elementos. A seção seguinte 99 Capítulo 7 – Estudo Experimental apresenta essas definições e alguns exemplos, a fim de estudar os variáveis de melhorar a sua compreensão. 7.2 Terminologia Utilizada Quando um experimento resultados quando se é realizado, diversificam deseja-se algumas das entrada para um processo. Segundo [Wohlin, 2000], existem dois tipos de variáveis em um experimento: independente e dependente, conforme mostra a Figura 29. Variáveis Independentes Variável Dependente Processo Figura 29 – Tipos de Variáveis em um Experimento. A variável objeto de estudo, a qual se deseja analisar os efeitos de mudanças das variáveis independentes, é chamada de variável dependente ou variável de resposta. Geralmente, existe apenas uma variável dependente em um experimento. Em contrapartida, manipuladas todas e as variáveis controladas, em são um processo, chamadas de que são variáveis independentes. O exemplo a seguir, extraído de [Wohlin, 2000], serve para realçar essas definições. Ex1: Deseja-se estudar os efeitos de um novo método de desenvolvimento sobre a produtividade das pessoas. Assim, é necessário efetuar a escolha para introduzir um método orientado a objetos ou uma abordagem funcional. A variável dependente, neste exemplo, é a produtividade. As variáveis independentes são: o método de desenvolvimento, a experiência das pessoas, as ferramentas de suporte e o ambiente utilizado para execução. Em um experimento, estuda-se o efeito de mudanças de uma ou mais variáveis independentes. Essas variáveis são chamadas de fatores. As demais variáveis independentes são controladas em um nível fixo durante o experimento, permitindo, assim, 100 Capítulo 7 – Estudo Experimental verificar se um esperado. Um fator ou tratamento outra variável causa o efeito é um valor particular do fator. O exemplo a seguir [Wohlin, 2000] permite diferenciar essas duas novas definições. Ex2: O fator no experimento citado em Ex1 é o método de desenvolvimento, uma vez que se deseja estudar os efeitos de sua mudança. tratamentos Ainda para neste o experimento, fator: o velho são e utilizados o novo dois método de através da desenvolvimento. Os tratamentos são inicialmente aplicados combinação de objetos e participantes. Um objeto pode ser, por exemplo, um documento que deve ser revisado com diferentes técnicas de inspeção. As pessoas que aplicam o tratamento são chamadas de participantes. O exemplo três apresenta de forma resumida essas definições [Wohlin, 2000]. Ex3: Os objetos, no experimento descrito anteriormente, são os programas a serem desenvolvidos e os participantes correspondem à equipe responsável pelo desenvolvimento. Um experimento consiste em um conjunto de testes, onde cada teste é uma combinação de tratamentos, objetos e participantes. O exemplo quatro resume essa última definição [Wohlin, 2000]. Ex4: Um teste (participantes) pode utilizam ser o aquele novo em método que de n pessoas desenvolvimento (tratamento) para desenvolver um programa x (objeto). Após a definição das terminologias utilizadas na área de engenharia de software experimental, será apresentado um estudo utilizado para avaliar a viabilidade da abordagem de desenvolvimento de software baseado em componentes distribuídos. 7.3 Estudo Experimental Segundo [Wohlin, 2000], a realização de um estudo experimental pode ser dividida em cinco fases: a definição, o planejamento, 101 Capítulo 7 – Estudo Experimental a execução, a análise e o empacotamento do estudo. A definição é a primeira fase, onde se define o experimento em função do problema, objetivos e metas. O planejamento envolve a descrição do perfil dos participantes, dos instrumentos, do processo de execução e uma avaliação dos problemas que podem vir a ocorrer durante sua execução. A execução consiste na realização do utilizando estudo os experimental instrumentos e pelos o participantes, processo definidos anteriormente. A fase de análise consiste na organização dos resultados gerados pelos participantes durante a execução e a realização de inferências sobre estes resultados. Finalmente, o empacotamento consiste na organização e armazenamento dos artefatos previamente construídos. O plano de experimento apresentado a seguir segue o modelo proposto por [Wohlin, 2000]. As etapas de definição e planejamento, apresentadas nas próximas seções, são descritas em tempo verbal futuro, simbolizando a precedência do plano à execução. 7.3.1 Definição do Estudo Experimental Objeto de Estudo: a utilização da abordagem no projeto de desenvolvimento de software baseado em componentes distribuídos, para avaliação do comportamento deste projeto. Objetivo: abordagem identificar no a viabilidade desenvolvimento de de utilização software da baseado em utilização da componentes distribuídos. Foco de abordagem Qualidade: proposta, os ganhos medidos obtidos através do pela número de modelos, número de classes, número de componentes, número de grupos para classificação dos componentes, número de aplicações, tempo de desenvolvimento e as dificuldades encontradas pelos usuários em seu entendimento e utilização. Perspectiva: o estudo será desenvolvido sob o ponto de vista do pesquisador, avaliando a viabilidade de utilização da 102 Capítulo 7 – Estudo Experimental abordagem, tendo em vista a continuidade no desenvolvimento das pesquisas relacionadas com a mesma. Contexto: o desenvolvimento componentes distribuídos, requisitos especificados de definido pela software em baseado laboratório, equipe de em com definição os do experimento baseado em projetos reais. O estudo será conduzido no formato de múltiplos testes sobre um objeto. Assim, utilizando uma notação baseada em Goal Question Metric Paradigm (GQM) [Basili, 1994], temos: Analisar a utilização da abordagem no desenvolvimento de software baseado em componentes distribuídos Com o propósito de caracterizar a viabilidade de sua utilização e continuidade de desenvolvimento Referente aos ganhos decorrentes de sua utilização de software e as baseado em dificuldades de seu emprego Do ponto de vista do pesquisador No contexto do desenvolvimento componentes distribuídos. Uma vez definido o experimento, a seção seguinte apresenta o seu planejamento. 7.3.2 Planejamento do Estudo Experimental Após a definição do experimento, a fase de planejamento se inicia. A definição do experimento determina a base para o experimento, ou seja, o “porquê” da realização do experimento, enquanto que a fase de planejamento define “como” o experimento será conduzido. Segundo [Wohlin, experimento pode 2000], ser a fase de em seis dividida planejamento passos. de um Baseado na definição do experimento, realiza-se a seleção do contexto, onde é selecionado o ambiente para o qual o experimento será executado. Em seguida, são feitas a formulação da hipótese e a seleção das variáveis independentes e dependentes. A seleção dos participantes é efetuada. O projeto experimental é 103 Capítulo 7 – Estudo Experimental escolhido baseado nas hipóteses e variáveis selecionadas. Em seguida, a etapa de instrumentação realiza a preparação para a implementação do experimento. Por último, a validação é realizada, a fim de viabilizar o experimento. Em seguida, será experimental, apresentado contemplando o planejamento estas seis do etapas estudo definidas anteriormente, adotando a organização apresentada em [Barros, 2002]. Contexto: o objetivo deste estudo é avaliar a viabilidade da utilização da abordagem de desenvolvimento de software baseado em componentes distribuídos. Os participantes do estudo serão requisitados a atuar como engenheiros de software de um mesmo projeto de desenvolvimento, disponibilizados anteriormente. cujos Uma requisitos parte dos serão participantes receberá um treinamento para utilização da abordagem, enquanto os demais utilizarão apenas os conhecimentos adquiridos da indústria ou universidade. Treinamento: o treinamento dos participantes que irão utilizar a abordagem será realizado em sala de aula e em um laboratório de uma universidade, dividido em quatro sessões, com duração estimada de quatro horas cada uma. Na primeira sessão, será apresentada a ferramenta MVCASE, demonstrando todas as suas funcionalidades oferecidas. Em seguida, serão apresentados os principais mecanismos utilizados na abordagem. Concluída esta sessão, a abordagem será exemplificada passo a passo, acompanhada de sua utilização num caso de uso. Por último, na quarta desenvolvimento de sessão, um os projeto participantes de pequeno realizarão porte, o utilizando todo o treinamento ministrado. Projeto Piloto: antes da realização do estudo, será realizado um projeto planejamento. projeto. Um piloto Apenas com a dois participante mesma estrutura participantes receberá o irão definida executar treinamento neste este para utilização da abordagem e utilizará a mesma no desenvolvimento 104 Capítulo 7 – Estudo Experimental do projeto proposto. desenvolvimento com durante sua formação participantes utilizarão documento e irão O base outro em participante seus conhecimentos acadêmica o contar mesmo com um realizará e adquiridos profissional. material descrito acompanhamento o Os neste integral do idealizador do estudo. Deste modo, o projeto piloto será um estudo baseado em observação, servindo para detectar problemas e aprimorar o material planejado antes da sua utilização. Participantes: os participantes do estudo serão um conjunto de desenvolvedores de software. O estudo será executado em um ambiente acadêmico. Instrumentação: cada participante deverá atuar como engenheiro de software, responsável pelo desenvolvimento do projeto. (QT1), Todos a fim experiência. os de Os participantes obter receberão informações participantes sobre treinados um questionário sua na formação utilização e da abordagem irão receber um kit [Almeida, 2002c] contendo um estudo de caso, contemplando todos os passos da abordagem, e a ferramenta MVCASE, para execução da proposta. Este kit ainda inclui um questionário (QT2) para avaliação do nível de satisfação dos participantes na utilização desta abordagem. Estes dois questionários encontram-se no Apêndice deste trabalho. Critérios: o foco de qualidade do estudo exige critérios que avaliem os ganhos proporcionados pela utilização da abordagem de desenvolvimento de software baseado em componentes distribuídos e as dificuldades encontradas pelos usuários na sua utilização. Os ganhos obtidos pela utilização da abordagem serão avaliados quantitativamente (número de modelos, número de classes, número de componentes, número de grupos para classificação dos componentes, número de aplicações e tempo de desenvolvimento). As dificuldades encontradas pelos usuários na utilização da abordagem serão avaliadas através de dados qualitativos, caracterizados no questionário QT2. 105 Capítulo 7 – Estudo Experimental Hipótese Nula, H0: a hipótese nula é uma afirmativa que o estudo experimental tem como objetivo negar. Neste estudo, a hipótese nula determina que a utilização da abordagem para o desenvolvimento de distribuídos produz utilização. não De software acordo baseado benefícios com os que em componentes justifiquem critérios a sua selecionados, as seguintes hipóteses podem ser definidas: H0: µnúmero de modelos sem abordagem = µnúmero de modelos com abordagem H0: µnúmero de classes sem abordagem = µnúmero de classes com abordagem H0: µnúmero de componentes sem abordagem H0: µnúmero de grupos para classificação dos componentes sem abordagem = µnúmero de componentes com abordagem = µnúmero de grupos para classificação dos componentes com abordagem H0: µnúmero H0: µtempo = µnúmero de aplicações sem abordagem de desenvolvimento sem abordagem de aplicações com abordagem = µtempo de desenvolvimento com abordagem Hipótese Alternativa: a hipótese alternativa é uma afirmativa que nega objetivo a hipótese provar a nula. O estudo hipótese experimental alternativa, tem como contrariando a hipótese nula. Neste estudo, a hipótese alternativa determina que os participantes do estudo que utilizarem a abordagem de desenvolvimento de software baseado em componentes distribuídos terão resultados superiores aos participantes que utilizarem uma abordagem ad-hoc. De acordo com os critérios selecionados, as seguintes hipóteses podem ser definidas: H1: µnúmero de modelos sem abordagem < µnúmero de modelos com abordagem H2: µnúmero de classes sem abordagem < µnúmero de classes com abordagem H3: µnúmero de componentes sem abordagem H4: µnúmero de grupos para classificação dos componentes sem abordagem < µnúmero de componentes com abordagem < µnúmero de grupos para classificação dos componentes com abordagem H5: µnúmero H6: µtempo de aplicações sem abordagem < µnúmero de desenvolvimento sem abordagem de aplicações com abordagem > µtempo de desenvolvimento com abordagem Variáveis Independentes: a principal variável independente do estudo é um indicador, que informa se o participante do experimento utilizou ou não a abordagem de desenvolvimento de 106 Capítulo 7 – Estudo Experimental software baseado em componentes distribuídos. A formação e a experiência dos participantes, coletadas através do questionário QT1, também são informações independentes, que poderão ser utilizadas durante a análise, para formação de blocos. Variáveis Dependentes: as variáveis dependentes são número de modelos, número de classes, número de componentes, número de grupos para classificação dos componentes, número de aplicações e tempo de desenvolvimento. Análise Qualitativa: tem o objetivo de avaliar a dificuldade de aplicação da abordagem proposta e a qualidade do material utilizado no estudo. Essa análise será realizada através do questionário QT2. Esse questionário será de suma importância, uma vez que, através de sua utilização, será possível avaliar as dificuldades utilização da abordagem, disponibilizado realizar encontradas e o melhorias do nesses pelos avaliar a treinamento, artefatos, participantes utilização assim a fim com a do material como, permitir de replicar o experimento no futuro. Seleção Randômica: esta técnica pode ser utilizada na seleção dos participantes. Idealmente, os indivíduos que realizarão o estudo devem ser selecionados aleatoriamente dentre o conjunto de candidatos a participantes. Entretanto, a única ressalva que se tem é a de que os mesmos sejam desenvolvedores de software. Balanceamento: participantes durante serão a realização distribuídos em do estudo, quantidade similar os na utilização da abordagem proposta e na utilização da abordagem ad-hoc. Validade Interna do estudo: a validade interna de um estudo é definida como a capacidade de um novo estudo repetir o comportamento do estudo atual, com os mesmos participantes e objetos com os quais este foi executado. A validade interna do estudo é dependente do número de participantes que o executam. 107 Capítulo 7 – Estudo Experimental Neste estudo, deseja-se contar com, pelo menos, oito participantes, o que garante um bom nível de validação interna [Barros, 2002]. Certamente, um número maior de participantes melhoraria a validade interna do estudo. Outro ponto que pode influenciar o resultado é a troca de informações entre os participantes. A fim de evitar este problema, requisitou-se, explicitamente, que os participantes não troquem informações a respeito do projeto. Validade Externa do estudo: a validade externa do estudo mede sua capacidade de ser afetada com a generalização [Wohlin, 2000], ou seja, essa validade mede a capacidade de refletir o mesmo comportamento em outros grupos de pesquisas, além daquele em que o estudo foi aplicado. A validade externa do estudo é avaliar considerada a suficiente, viabilidade desenvolvimento distribuídos. de de aplicação software Demonstrada visto que este da abordagem baseado esta em viabilidade, objetiva de componentes novos estudos podem ser planejados, a fim de refinar e melhorar a abordagem. Validade de Construção do estudo: a validade de construção do estudo se refere à relação entre a teoria que se deseja provar e os instrumentos e participantes do estudo [Wohlin, 2000]. Neste estudo, relativamente assim, a foi escolhido conhecido utilização e da de um fácil experiência domínio do problema entendimento, evitando, dos participantes no domínio. Esta escolha evita que experiências anteriores gerem uma interpretação incorreta do impacto da abordagem proposta. Validade de Conclusão do estudo: a validade de conclusão do estudo mede a determinando, conclusões relação assim, [Wohlin, entre a o tratamento capacidade 2000]. Esta do e o estudo conclusão será resultado, de gerar traçada a partir da utilização do procedimento paramétrico de análise estatística baseado na distribuição T [Wohlin, 2000]. 108 Capítulo 7 – Estudo Experimental 7.3.3 Projeto Utilizado no Estudo Experimental O projeto utilizado no estudo experimental foi o desenvolvimento de componentes e aplicações para um domínio de comércio eletrônico, restringido para operações de compra e venda de livros através da Internet, conforme resume a Figura 30. A livraria NewTime, especializada em livros de matemática, computação, física e química, deseja informatizar o seu processo de compra e venda de livros, atuando através da Internet. A livraria necessita de um software que permita realizar as seguintes funcionalidades: • Cadastro, alteração, exclusão e consulta de seus clientes; • Cadastro, alteração, exclusão e consulta de seus livros com os respectivos gêneros associados; • Cadastro, alteração, exclusão e consulta de seus fornecedores; • Compra de livros pelo cliente, desde que o mesmo esteja previamente cadastrado. Caso a livraria não possua o livro em estoque, é enviada uma requisição aos fornecedores e a compra é colocada no estado de espera até que ocorra uma notificação por parte dos fornecedores. Uma vez realizada essa notificação, a compra é efetuada; • Emissão de relatórios para gerência, informando os livros vendidos e sua respectiva quantidade; Emissão de histórico das compras de um cliente. • Figura 30 - Descrição do Projeto de Desenvolvimento. 7.3.4 Instanciação do Estudo Experimental Seleção dos Participantes: para a execução do estudo, foram selecionados os participantes dentre os alunos dos cursos de Graduação em Ciência da Computação e Engenharia de Computação, e Mestrado em Ciência da Computação da Universidade Federal de São Carlos, na linha de pesquisa de Sistemas Distribuídos. Estes participantes indicadas, visto participantes representando atendem que são foram um às restrições desenvolvedores selecionados subconjunto não de por aleatório previamente software. Os conveniência, do universo de alunos. Capacidade Aleatória: a seleção dos participantes do estudo não foi indivíduos aleatória, para o pois considerou estudo. De a disponibilidade posse dos nomes dos dos 109 Capítulo 7 – Estudo Experimental participantes, os alunos de Graduação ficaram incumbidos de utilizar a abordagem e os alunos de sistemas distribuídos usariam os conhecimentos adquiridos ao longo de sua formação acadêmica e profissional. Mecanismos de Análise: para avaliação das hipóteses do estudo serão utilizados mecanismos de estatísticas descritivas, como, por exemplo, a Média. 7.3.5 Execução do Estudo Experimental Realização: o estudo experimental foi realizado durante parte de um curso Distribuídos, 2002, na de graduação durante o Universidade e segundo pós-graduação semestre Federal de do São em Sistemas ano letivo Carlos. O de prazo estipulado para execução do estudo foi de 1 mês. Treinamento: os participantes que realizaram o estudo experimental utilizando a abordagem foram treinados antes da realização do estudo. O treinamento durou 20 horas, sendo dividido em quatro sessões de 4 horas, ocupando quatro aulas do referido curso de graduação. Participantes: os participantes incluíram os alunos da graduação e os alunos do programa de pós-graduação em Sistemas Distribuídos. Dos 8 participantes, constavam 6 alunos de Mestrado e 2 alunos de Graduação. Cinco participantes possuíam experiência de desenvolvimento, ou em ambiente acadêmico ou industrial, enquanto os demais participantes possuíam pouca experiência. A Tabela 6 apresenta um resumo da formação e da experiência dos participantes do estudo experimental. 110 Capítulo 7 – Estudo Experimental Tabela 6 - Perfil dos Participantes do Estudo Experimental. ID Utilizou a Abordagem Formação Experiência de Desenvolvimento 1 Sim Mestrando Academia (3 projetos) 2 Sim Mestrando Indústria (3 projetos) 3 Sim Graduando Academia (2 projetos) 4 Sim Graduando Academia (1 projeto) 5 Não Mestrando Academia (1 projeto) 6 Não Mestrando Academia (3 projetos) 7 Não Mestrando Indústria (3 projetos) 8 Não Mestrando Academia (1 projeto) Custo do Estudo: como os participantes do estudo experimental foram alunos da própria Universidade e os equipamentos utilizados foram os computadores dos laboratórios, o custo do de realização do estudo experimental se concentrou no custo de planejamento. Custo de Planejamento: o planejamento é, certamente, a etapa mais custosa para realização de um estudo experimental [Travassos, 2002]. O planejamento do estudo de viabilidade da abordagem de DBCD se estendeu durante dois meses e dezoito dias, entre outubro e dezembro do ano de 2002. Durante este período, foram geradas três versões do plano experimental. 7.3.6 Análise dos Resultados do Estudo Experimental Avaliação do Treinamento: o treinamento foi aplicado apenas para os participantes que utilizaram a abordagem no experimento. O treinamento ocupou vinte horas, conforme foi planejado; sendo expositivo, utilizando um conjunto de slides e, ao final, foi realizado um caso de uso de pequeno porte, para um melhor entendimento da abordagem. Um participante (ID 4) sugeriu a necessidade de mais treinamento, em virtude dos diversos mecanismos utilizados na abordagem. 111 Capítulo 7 – Estudo Experimental Avaliação Quantitativa: a análise quantitativa foi separada em seis análises independentes: número de modelos, número de classes, número de componentes, número de aplicações, tempo de desenvolvimento e número de grupos para classificação dos componentes. Cada uma destas análises foi realizada através da utilização de estatísticas descritivas. Estatísticas Descritivas: tendo coletado as informações necessárias, passou-se para a etapa de análise. Inicialmente, foi realizado um agrupamento dos dados obtidos pelos participantes do experimento. As Tabelas 7 e 8 apresentam, respectivamente, os resultados obtidos por cada participante utilizando a abordagem e a abordagem ad-hoc para o desenvolvimento de software. Tabela 7 - Resultados obtidos por cada participante utilizando a abordagem. ID Modelos Classes Componentes Aplicações Tempo Num. Grupos 1 17 21 15 19 12h 2 2 17 20 15 19 9h 26m 2 3 17 20 15 19 20h 46m 2 4 17 20 15 19 20h 52m 2 Tabela 8 - Resultados obtidos por cada participante utilizando a abordagem ad-hoc. ID Modelos Classes Componentes Aplicações Tempo Num. Grupos 5 0 3 3 19 27h 15m 1 6 0 3 3 19 26h 1 7 0 3 3 19 13h 50m 1 8 2 3 3 19 41h 1 Após o agrupamento, a média foi aplicada para os dois conjuntos de dados e analisada, conforme mostra a Tabela 9. O desvio padrão foi desconsiderado em virtude do pequeno número de participantes, o que o tornaria inexpressivo. 112 Capítulo 7 – Estudo Experimental Tabela 9 - Média dos resultados obtidos pelos dois grupos. Artefatos Média Abordagem Ad-Hoc Modelos 17 0,5 Classes Componentes Aplicações 20,25 3 15 3 19 19 Tempo 15h 46m 27h 12m Num. Grupos 2 1 i. Modelos. A média dos modelos obtidos (Mind-Maps, Modelo de Colaboração, Modelo de Casos de Uso, Modelo de Tipos, Framework de Modelos, Modelo de Aplicação do Framework, Modelo de Classes e Modelo participantes que de Componentes) utilizaram a especificada abordagem pelos (17), foi extremamente superior aos que utilizaram a abordagem ad-hoc (0,5). Isto se desenvolvimento etapa. Com deve ao desses a fato da artefatos, utilização da abordagem explicitar progressivamente, abordagem ad-hoc, a o cada apenas um participante (ID 8) especificou os modelos de casos de uso e de classes, mesmo sendo um dos menos experientes. Os demais participantes partiram logo para a tomada de decisões relativas a implementação, descartando as tarefas de análise. ii. Classes e Componentes. A média dos participantes que utilizaram a abordagem, também foi superior, no que se refere ao número de classes e componentes. Este critério é extremamente importante, uma vez que existia o interesse em identificar as estruturas de análise, projeto e implementação resultantes. Em relação às classes, um grande problema pode ser notado com a utilização da abordagem ad-hoc. As classes especificadas (3) estavam altamente entrelaçadas com códigos de diferentes propósitos, neste caso, código de distribuição, tratamento de exceções e acesso a banco de dados, dificultando a distinção entre classes de análise e projeto. Por outro lado, com a utilização da abordagem, as classes 113 Capítulo 7 – Estudo Experimental (aproximadamente através da 20) tinham utilização do suas padrão funções DAP com bem definidas, suas classes de negócio e de distribuição e do framework Persistence com as classes de acesso a banco de dados. A mesma análise se aplica aos componentes. iii. Aplicações e Tempo de Desenvolvimento. Os dois grupos desenvolveram a mesma média de aplicações (19) reutilizando os componentes. Porém, mesmo com uma série de etapas a serem realizadas, com a utilização da abordagem (quatro no desenvolvimento dos componentes e três no desenvolvimento das aplicações), a média obtida do tempo de desenvolvimento (aproximadamente 15 horas e 46 minutos) foi inferior ao da abordagem ad-hoc (aproximadamente 27 horas e 12 minutos). Este fato pode ser explicado pela orientação dada de como proceder com questões relativas a especificação dos requisitos, projeto dos componentes, distribuição, acesso a banco de dados e como desenvolver as aplicações reutilizando os componentes. iv. Grupos para classificação dos componentes. Com a utilização da abordagem, obtêm-se, ao fim do processo, uma clara distinção entre dois tipos de componentes: de negócio e de infra-estrutura (componentes de acesso a banco de dados e distribuição), facilitando as possíveis tarefas de manutenção. Por outro lado, devido ao entrelaçamento de código, com a utilização da abordagem ad-hoc, ficou difícil a classificação dos componentes seguindo um determinado critério. Assim, os componentes foram classificados apenas como de uma categoria, neste caso, de negócio. Conclusão: embora os testes estatísticos não tenham sido conclusivos, estes indicam que a abordagem de desenvolvimento de software baseado em componentes distribuídos pode ser viável no auxílio do engenheiro de software no desenvolvimento de suas tarefas. Entretanto, além de outros estudos, conforme o descrito neste capítulo, são necessários melhorias no sentido de facilitar a utilização da abordagem proposta. A 114 Capítulo 7 – Estudo Experimental seguir é apresentada uma análise qualitativa, realizada com o intuito de apresentar novas direções de pesquisa e de aprimoramento da abordagem. Avaliação Qualitativa: a seguir, são resumidos os resultados da análise qualitativa sobre a utilidade da abordagem proposta e sobre a qualidade experimental. Esta do material análise se utilizado baseia nas no estudo respostas ao questionário QT2, apresentado no apêndice. Utilidade da Abordagem: dos 4 participantes que aplicaram a abordagem no indicaram que desenvolvimento a abordagem do projeto utilizada proposto, foi útil todos para sua conclusão. Um participante (ID 4) ressaltou a necessidade de que, na etapa, estrutura do Projetar padrão DAP Componentes, já estejam as classes disponíveis, a com fim a de evitar sua criação repetidamente disponibilizando, assim, um template para reutilização. Qualidade do Material: apenas um participante ressaltou que o treinamento ministrado foi suficiente para aplicação da abordagem. Os demais participantes ressaltaram a necessidade de mais treinamento, principalmente, o desenvolvimento de um projeto completo, não apenas de um caso de uso de aplicação. Além disso, três participantes requisitaram melhorias no Kit de Treinamento, particularmente, na etapa de implementação dos componentes e aplicações. 7.3.7 Lições Aprendidas Em uma replicação do experimento, alguns pontos devem ser considerados, vistos como limitações de sua primeira execução. Aprimoramento do Treinamento: sugere-se, para uma replicação do experimento, o desenvolvimento de um projeto completo, sendo executado, passo a passo, pelos participantes, antes da execução do experimento. Além de exibir maiores detalhes de implementação e configuração dos componentes e aplicações, que não ficaram completamente claros nessa primeira versão. 115 Capítulo 7 – Estudo Experimental Instrumentação: alguns participantes expressaram a ocorrência de determinados problemas com a ferramenta MVCASE, no momento de desenvolvimento do projeto. Assim, sugere-se, numa replicação do experimento, a execução de um projeto real, a fim de evitar problemas durante o andamento do experimento. Por fim, dois participantes explicitaram a necessidade de um help on-line, disponível pela ferramenta, a fim de auxiliar em determinadas tarefas. 7.4 Resumo Este capítulo apresentou o planejamento, a execução e a análise dos resultados de um estudo experimental que avaliou a viabilidade de utilização da abordagem de desenvolvimento de software baseado em componentes distribuídos. O estudo analisou a capacidade de engenheiros de software concluírem um projeto hipotético com características mais favoráveis do que sem o auxílio da abordagem. Apesar de possuir uma população reduzida (8 participantes), a análise dos resultados mostra indícios de que a utilização da abordagem pode ser viável, assim como aponta algumas direções em que a pesquisa deve evoluir. Entretanto, replicações deste estudo, em diferentes contextos, são ainda necessárias para a efetiva identificação de problemas e aprimoramento da abordagem. O capítulo seguinte apresenta as considerações finais sobre o trabalho, assim como suas principais contribuições, trabalhos relacionados e algumas perspectivas de trabalhos futuros. Capítulo 8 Conclusões 8.1 Sobre o Trabalho Este projeto de Desenvolvimento pesquisa de resultou Software numa Baseado Abordagem em de Componentes Distribuídos, que integra diversos mecanismos, orientando o engenheiro de software tanto no desenvolvimento, quanto na reutilização dos componentes de um domínio do problema. A integração dos mecanismos, na ferramenta MVCASE, tornou possível o desenvolvimento dos componentes e aplicações numa plataforma distribuída. Embora estes mecanismos existam na literatura, ainda existe uma carência de métodos e ferramentas que integrem e desenvolvimento auxiliem de o software engenheiro baseado de software em no componentes distribuídos, automatizando parte de suas tarefas. Adicionalmente, um estudo experimental foi definido, planejado, executado e analisado, mostrando a viabilidade de utilização da abordagem proposta. Outra contribuição deste projeto foi a extensão do modelo de distribuição Object Web, abordando a utilização de servidores de componentes com seus repositórios, permitindo uma maior reutilização no desenvolvimento das aplicações, não tratado no modelo original. 117 Capítulo 8 – Conclusões 8.2 Principais Contribuições Embora existam diferentes métodos de DBC disponíveis na literatura, conforme foi apresentado no Capítulo 2 (vide seção 2.4.4), este permitir ao trabalho engenheiro diferencia-se, principalmente, por de desenvolvimento dos software o componentes e das aplicações de forma incremental, integrando os princípios padrões, além de de reutilização, permitir o middleware, acréscimo de frameworks requisitos e não funcionais, como distribuição, tolerância à falhas, caching e persistência, à medida que se tornem necessários. As principais contribuições desta dissertação podem ser divididas em três categorias: a definição de uma abordagem de desenvolvimento de software baseado em componentes distribuídos, a extensão da ferramenta MVCASE e a definição, o planejamento e a execução de um estudo experimental para analisar a viabilidade de utilização da abordagem proposta. A seguir, essas contribuições são classificadas segundo estas categorias: i. Definição de uma Abordagem de Desenvolvimento de Software Baseado em Componentes Distribuídos - a definição de uma abordagem de desenvolvimento de software baseado em componentes distribuídos, integrada numa ferramenta CASE, automatizando parte das suas tarefas; - um padrão para o desenvolvimento dos componentes distribuídos [Almeida, 2002b]; - um framework baseado em padrões para tratar o acesso a banco de dados. ii. Extensão da Ferramenta MVCASE - a extensão da específicos de Framework de ferramenta DBC, como Modelos e MVCASE, Modelo Modelo com de de artefatos Colaboração, Aplicação do 118 Capítulo 8 – Conclusões Framework, permitindo a especificação dos componentes, conforme previsto no método Catalysis; - a automatização de parte das atividades de implementação dos componentes, com a utilização de Wizards para geração de código dos componentes e suas respectivas interfaces, assim como o código dos stubs e skeletons. iii. Definição, Planejamento e a Execução de um Estudo Experimental na área de Desenvolvimento de Software Baseado em Componentes Distribuídos - a definição, o planejamento e a execução de um estudo experimental, para análise da viabilidade de aplicação da abordagem de desenvolvimento de software baseado em componentes distribuídos; - o empacotamento do estudo experimental, para análise de viabilidade da abordagem proposta. O pacote do experimento inclui todos os documentos e instrumentos utilizados durante as fases de definição, planejamento e execução, com o objetivo de facilitar sua replicação no futuro. 8.3 Trabalhos Relacionados Alguns trabalhos similares a este existem na literatura. Nesta seção, são apresentados alguns deles, enfatizando suas diferenças e similaridades em relação à abordagem proposta. 8.3.1 A proposta de Guimarães [1999] Em [Guimarães, 1999], os autores descrevem uma estratégia de desenvolvimento de sistemas orientado a objetos distribuídos, dividida em três passos: Especificação do Sistema Distribuído, onde o sistema é modelado usando a notação UML; Distribuição dos Objetos, onde é definida a arquitetura do sistema 119 Capítulo 8 – Conclusões distribuído baseado nos serviços e frameworks disponíveis na plataforma JAMP; e, Implementação do Sistema Distribuído, onde é realizada a sua implementação, a partir das especificações dos passos proposta anteriores. por utilizar Esta abordagem frameworks difere da disponíveis na abordagem plataforma JAMP, onde se apóia toda a estratégia, além de trabalhar com objetos, e não componentes, diminuindo a reutilização no desenvolvimento das aplicações. 8.3.2 A proposta de Clement [2002] Em Clement [2002], desenvolvimento distribuídos, é de apresentada sistemas utilizando uma estratégia baseado Programação em para o componentes Orientada a Aspectos (POA) para descrever e implementar as dependências entre os componentes. Os autores utilizam o processo de modelagem de sistemas baseado em componentes proposto em [Cheesman, 2000]. Este processo foi estendido utilizando POA nas fases de especificação dos componentes e de suas interfaces e durante a implementação dos componentes. Comparada com a proposta de Clement, a abordagem de DBCD define uma abordagem incremental para o desenvolvimento distribuídos, iniciando identificando seus presente de software na fase elementos materialização e em de baseado em componentes concepção do relacionamentos, componentes de domínio, até sua software, independente de tecnologia de distribuição. Por outro lado, a abordagem de DBCD permite a reutilização não apenas de código, como também de modelos de alto nível de abstração (Framework de Modelos). Além disso, a abordagem define, sistematicamente, o modo de se realizar o desenvolvimento das aplicações reutilizando os componentes. 8.3.3 Outras Ferramentas A Rational Rose [Objecteering, [Rational, 2001] são 2001] ferramentas e a CASE Objecteering/UML que oferecem uma 120 Capítulo 8 – Conclusões grande variedade desenvolvimento de recursos, de software de modo baseado a suportar em o componentes distribuídos. Essas ferramentas suportam a especificação do sistema utilizando a notação UML e geram código dessas especificações. Comparada com essas duas ferramentas, a MVCASE difere-se por ter um editor visual, também encontrado em outros ambientes, como o JBuilder [Borland, 2002], permitindo um rápido desenvolvimento das aplicações. Por fim, por ser uma ferramenta acadêmica, a MVCASE é totalmente livre de licença de utilização. 8.4 Trabalhos Futuros Com base nos resultados obtidos no estudo de caso realizado e na análise do relacionadas estudo à necessárias experimental, literatura tanto à além existente, abordagem de constatações algumas proposta quanto melhorias à ferramenta MVCASE foram evidenciadas. Assim, as seguintes direções surgem como perspectivas de trabalhos futuros: i. Commercial-Off-The-Shelf (COTS). Atualmente, a comunidade de engenharia de software adotou o consenso da viabilidade de utilização de COTS no desenvolvimento de sistemas de software. Deste modo, este trabalho sugere uma pesquisa na área de engenharia de requisitos e COTS, a fim de permitir a extensão da abordagem com a utilização de COTS. Assim, será possível ao engenheiro de software desenvolver as aplicações de dois modos: o primeiro, desenvolvendo os componentes a partir dos requisitos do domínio do problema, e, o segundo, adquirindo os componentes de terceiros. ii. Programação Orientada a Aspectos. Mesmo separando os requisitos não funcionais, como distribuição e persistência, através da utilização Persistence, entrelaçamento de padrões identificou-se, de código ao com (DAP) fim e do diferentes do framework processo, um propósitos, 121 Capítulo 8 – Conclusões principalmente, código de tratamento de exceções com código de distribuição e acesso a banco de dados. Deste modo, este projeto sugere um reprojeto da abordagem com a utilização da programação orientada a aspectos, de modo a evitar, com a utilização da abordagem, diferentes propósitos. o entrelaçamento Além disso, de código sugere-se, com também, o desenvolvimento e a utilização de um framework de requisitos não funcionais baseado em aspectos, que permita ao engenheiro de software acrescentar requisitos, como distribuição, controle de concorrência, segurança e acesso a banco de dados, progressivamente, à medida em que se tornem necessários. iii. atual, Aspectos a Relacionados abordagem, à Distribuição. basicamente, utiliza o No seu estado middleware como infraestrutura para localização e comunicação dos componentes. Deste modo, a inclusão de outras características, intrínsecas de distribuição, mostra-se bastante promissoras. Dentre estas, destacam-se: a utilização de mecanismos eficientes de tolerância a falhas, caching e balanceamento de carga. iv. Armazenamento e Busca dos Componentes. O modo atual com que a ferramenta MVCASE efetua o armazenamento dos componentes torna sua reutilização armazenamento artefatos das muito limitada. informações disponibilizados em Por referentes um arquivo utilizar aos de o diversos modelagem, o intercâmbio de informações entre domínios diferentes torna-se extremamente prejudicado. Deste modo, pesquisas devem ser realizadas, a fim de identificar uma infraestrutura para o armazenamento processo de sistemática, de todos os desenvolvimento levando-se em artefatos e produzidos efetuar consideração a busca a durante de o forma necessidade de distribuição. Entretanto, como apresentado anteriormente, no capítulo 2, seção 2.5, a questão de armazenamento e busca de componentes não é um processo trivial. Diversas abordagens 122 Capítulo 8 – Conclusões existentes utilizando agentes, mecanismos para introspecção e engenhos de buscas a visão aspectos: elemento falham, de componente implementacional reutilização efetivo. principalmente, e Deste a devido essencialmente carência modo, as de um a dois como um processo de pesquisas conduzidas nesta área devem levar em consideração estes dois aspectos. v. Padrões de Software. Outra extensão extremamente necessária na ferramenta MVCASE, a fim de otimizar as tarefas de desenvolvimento, é o suporte a padrões de software. Pesquisas devem ser conduzidas para permitir a reutilização de padrões já existentes, como, por exemplo, os padrões do catálogo do Gamma, e oferecer a possibilidade do engenheiro de software desenvolver novos padrões e armazenar estas estruturas para futura reutilização. vi. Estudo Experimental. Por fim, sugere-se a repetição do estudo experimental descrito no Capítulo 7 com um número maior de participantes, em diferentes contextos, considerando as evoluções propostas pelos participantes do estudo previamente realizado. 8.5 Contribuições Acadêmicas O conhecimento adquirido ao longo desse trabalho possibilitou alcançar os seguintes resultados: - [Almeida, 2002] Integradora de Ferramenta Tecnologias MVCase para o - Uma Ferramenta Desenvolvimento de Componentes Distribuídos, In XVI Simpósio Brasileiro de Engenharia de Software, Sessão de Ferramentas, Gramado/RS, 2002. - [Almeida, Tool for 2002a] MVCase: Distributed An Integrating Technologies Component-Based Software Development, In The 6Th Asia-Pacific Network Operations 123 Capítulo 8 – Conclusões and Management Symposium, Proceedings of IEEE, Poster Session, Jeju Island, Korea, 2002. - [Almeida, 2002b] DCDP: Development Pattern, Conference on In Pattern A The Distributed Second Languages Component Latin of American Programming (SugarLoafPlop), Writers Workshops, Itaipava/RJ, 2002. - [Almeida, 2002d] Development Students Distributed Strategy, in In The Object-Oriented Component-Based 12Th Workshop Systems Software for PhD (PhDOOS). In Conjunction With the 16Th European Conference on Object Oriented Programming (ECOOP), Málaga-Espanha. Lecture Notes in Computer Science (LNCS), Springer-Verlag, 2002. - [Almeida, 2002e] Distributed Component-Based Software Development Strategy Integrated by MVCase Tool, In The Second Ibero-American Symposium on Software Engineering and Knowledge Engineering, Salvador/BA, 2002. - [Almeida, 2002f] Desenvolvimento Integrando de Software Tecnologias Baseado em para o Componentes Distribuídos, In Simpósio Brasileiro de Engenharia de Software (SBES) - VII Workshop de Teses em Engenharia de Software (WTES), Gramado/RS, 2002. - [Almeida, 2003] IPM: An Incremental Process Model for Distributed Component-Based Software Development, In The 5th International Conference On Enterprise Information Systems (ICEIS), Angers, França, ACM Press, 2003. - [Almeida, 2003a] Componentes, Engenharia Developers’ CIO de Software Magazine, Baseada pp. em 26-30, janeiro, Brasil, 2003. - [Bianchini, Pervasive 2002a] Computing Devices and Monitoring Software Tool Agents, using In International Conference on Security and Management, Las Vegas, EUA, 2002. - [Bianchini, 2002b] Intelligent Software Devices Agents, Monitoring In XXVIII Tool using Conferência 124 Capítulo 8 – Conclusões Latinoamericana de Informática (CLEI), Montevidéu, Uruguai, 2002. - [Bianchini, Plataform, 2002c] In Distributed International Software Conference on Agents Computer Science Software Engineering Information Technology eBusiness and Applications (CSITeA), Foz do Iguaçu, 2002. Referências Bibliográficas [Alexander, 1977] Alexander, C., et. al. A Pattern Language. New York, Oxford University Press, 1977. [Almeida, 2002] Almeida, E., S., Lucrédio, D., Bianchini, C., P., Prado, A., F., Trevelin, L., C. Ferramenta MVCase - Uma Tecnologias Componentes Ferramenta para o Integradora Desenvolvimento Distribuídos, XVI de de Simpósio Brasileiro de Engenharia de Software, Sessão de Ferramentas, Gramado/RS, 2002. [Almeida, 2002a] Almeida, E., S., Bianchini, C., P., Prado, A., F., Trevelin, L., C. MVCase: An Integrating Technologies Tool for Distributed Component- Based Software Development, In The 6Th Asia Pacific Network Operations and Management Symposium, Proceedings of IEEE, Poster Session, 2002, Jeju Island, Korea. [Almeida, 2002b] Almeida, E., S., Bianchini, C., P., Prado, A., F., Trevelin, L., C. DCDP: A Distributed Component Development Pattern, In The Second Latin American Conference on Pattern Languages of Programming (SugarLoafPlop), Workshops, 2002, Itaipava/RJ, Brazil. Writers 126 Referências Bibliográficas [Almeida, 2002c] Almeida, E., S., Lucrédio, D., Prado, A., F., Trevelin, L., C. Estratégia de Desenvolvimento de Software Baseado em Componentes Distribuídos: Kit de Treinamento, Universidade Federal de São Carlos, Departamento de Computação, Kit Experimental, 2002. [Almeida, 2002d] Almeida, E., S., Bianchini, C., P., Prado, A., F., Trevelin, L., C. Distributed ComponentBased Software Development Strategy, In The 12Th Workshop for PhD Students in Object-Oriented Systems (PhDOOS). In Conjunction With the 16Th European Programming Notes in Conference on (ECOOP), Málaga, Computer Science Object Oriented Espanha. (LNCS) Lecture Springer- Verlag, 2002. [Almeida, 2002e] Almeida, E., S., Bianchini, C., P., Prado, A., F., Trevelin, L., C. Distributed ComponentBased Software Development Strategy Integrated by MVCase Tool, In The Second Ibero-American Symposium on Software Engineering and Knowledge Engineering, Salvador/BA, Brazil, 2002. [Almeida, 2002f] Almeida, E., S., Prado, A., F., Trevelin, L., C. Integrando Tecnologias para o Desenvolvimento de Software Baseado em Componentes Distribuídos, In Simpósio Brasileiro de Engenharia de Software (SBES) - VII Workshop de Teses em Engenharia de Software (WTES), Gramado/RS, Brasil, 2002. [Almeida, 2002g] Almeida, E., S. Desenvolvimento de Software Baseado em Componentes Distribuídos, Exame de Qualificação de Mestrado, Universidade Federal de São Carlos, Departamento de Computação, 2002. [Almeida, 2003] Almeida, E., S., Bianchini, C., P., Prado, A., F., Trevelin, L., C. IPM: An Incremental Process 127 Referências Bibliográficas Model for Distributed Component-Based Software Development, In The 5th International Conference On Enterprise Information Systems (ICEIS), Angers, França, ACM Press, 2003. [Almeida, 2003a] Almeida, E., S., Prado, A., F., Trevelin, L., C. Engenharia de Software Baseada em Componentes, Developers’ CIO Magazine, pp. 2630, janeiro, Brasil, 2003. [Alves, 2001] Alves, V., Borba, P. Distributed Adapters Pattern: A Design Pattern for Object-Oriented Distributed American Applications, Conference Programming on In The Pattern (SugarLoafPlop), First Latin Languages Rio de of Janeiro, Brasil, 2001. [Alves, 2001a] Alves, V., Borba, P. An Implementation Method for Distributed Object-Oriented Applications, XV Simpósio Brasileiro de Engenharia de Software, Rio de Janeiro/RJ, 2001. [Alves, 2001] Alves, C., Castro, J. CRE: A Systematic Method for COTS Brasileiro Components de Selection, Engenharia de XV Software, Simpósio Rio de Janeiro/RJ, 2001. [Barrére, 1999] Barrére, T., S. CASE com Múltiplas Visões de Requisitos Automática de em Software Java – e MVCASE. Implementação Dissertação de Mestrado. Universidade Federal de São Carlos, junho, 1999. [Barros, 2001] Barros, M., O. Gerenciamento de Projetos Baseado em Cenários: Uma Abordagem de Modelagem Dinâmica e Simulação, PhD Thesis, Universidade Federal do Rio de Janeiro, 2001. 128 Referências Bibliográficas [Barros, 2002] Barros, M., O., Werner, C., M., L., Travassos, G., H. Um Estudo Experimental sobre a Utilização de Modelagem e Simulação no Apoio à Gerência de Projetos, XVI Simpósio Brasileiro de Engenharia de Software, Gramado/RS, 2002. [Basili, 1986] Basili, V., Experimentation Transactions on R., Selby, in Software Software R., Hutchens, Engineering, Engineering D. IEEE (invited paper), July 1986. [Basili, 1991] Basili, V., R., Caldiera, G. Methodological and Architectural Issues in the Experience Factory, presented at the Software Eng. Laboratory Workshop, December 1991. [Basili, 1993] Basili, V., R., Rombach, D., Selby, R. The Experimental Paradigm in Software Engineering. (Eds): Experimental Software Engineering Issues: Critical Assessment and Future Directions, International Workshop, Dagstuhl, Germany, 1992. Springer-Verlag, Lecture Notes in Computer Science (LNCS), Number 706, 1993. [Basili, 1994] Basili, V., R., Caldiera, G., Rombach, D. The Experience Factory. Encyclopedia of Software Engineering. Wiley 1994. [Ben-Natan] Ben-Natan, R. CORBA A Guide to the Common Object Request Broker Architecture. Mc-Graw-Hill, 1995. [Bernstein, 1996] Bernstein, P., A., et. al. Middleware: A Model for Distributed Services. Communications of the ACM, volume 39, No. 2, p. 86-97, 1996. [Bianchini, 2002a] Bianchini, C., P., Fontes, D., S., Almeida, E., S., Prado, A., F. Devices Monitoring Tool using Pervasive Computing and Software Agents, 129 Referências Bibliográficas In International Conference on Security and Management, Las Vegas, EUA, 2002. [Bianchini, 2002b] Bianchini, C., P., Almeida, E., S., Prado, A., F. Devices Monitoring Tool using Intelligent Software Agents. In Latinoamericana XXVIII de Conferência Informática (CLEI), Montevidéu, Uruguai, 2002. [Bianchini, 2002c] Bianchini, C., P., Fontes, D., S., Almeida, E., S., Prado, A., F. Distributed Software Agents Plataform, In International Conference on Computer Science Information Software Technology Engineering e-Business and Applications (CSITeA), Foz do Iguaçu, Brazil, 2002. [Boertin, 2001] Boertin, N., Evaluation of Methods, Sixth In Steen, M., Jonkers., H. Component-Based Development CAiSE/IFIP8.1 International Workshop on Evaluation of Modeling Methods in Systems Analysis and Design, 2001. [Booch, 1994] Booch, G. Object-Oriented Analysis and Design with Applications. Benjamin/Cummings, 1994. [Borland, 2002] Borland. JBuilder the Leading Java development solution. Disponivel site Borland, URL: http://www.borland.com/jbuilder/. Consultado em 13/12/2002. [Bray, 1997] Bray, M. Technology Middleware. Review Disponível site Software (January, 1997), URL: http://www.sei.cmu.edu/str/descriptions/middlewa re.html. Consultado em 23/06/2001. [Brown, 1998] Brown, A., Wallnau, K. The Current State of CBSE, IEEE Software, Oct 1998. 130 Referências Bibliográficas [CADA, 2000] Hubbers, J., W., Verhoef, D. CADA CBD Method, In Workshop Component-Based Development. Ordina Institute for Research and Innovation, 2000. [CBSE, 2002] 5th ICSE Workshop Engineering: Assembly, on Component-Based Benchmarks In for conjunction Software Predictable with 24th the International Conference on Software Engineering (ICSE), May 2002. [Cheesman, 2000] Cheesman, J., Daniels, J. UML Components: A Simple Process Software. for Specifying Addison-Wesley. Component-Based USA, 1nd edition, 2000. [Chen, 2000] Chen, Q., et al. Multi-Agent Cooperation, Dynamic Workflow and XML for E-Commerce Automation, In 4th International Conference on Autonomous Agents, Barcelona, Spain, 2000. [Clement, 2002] Clement, P., J., Sánchez, F., Pérez, M., A., 2002. Modeling with UML Component-based and Aspect Oriented Programming Systems, In The 7th Workshop for Component-Oriented Programming. In conjunction with the 16th European Conference on Object-Oriented Programming (ECOOP), 2002. [COMET, 1997] Solberg, A., Berre, A., J. Component Based Methodology Handbook. Norway: SINTEF, 1997. [Councill, 2001] Councill, B., Heineman, G., T. Definition of a Software Component Component-Based and Software its Elements, Engineering: In Putting the Pieces Together, Addison-Wesley, 2001. [CSC, 1995] Catalyst Methodology (Internal Document), Computer Sciences Corporation, 1995. 131 Referências Bibliográficas [D’Souza, 1999] D’Souza, D., F., Wills, Components, and Frameworks C., A. with Objects, UML – The Catalysis Approach. Addison-Wesley, 1999. [Duclos, 2002] Duclos, F., Estublier, J., Morat, P. Describing and Using Non Functional Aspects in Component Based Applications, Conference on In 1st International Aspect-Oriented Software Development, University of Twente, Enschede, The Netherlands, 2002. [Eckerson, 1995] Eckerson, W., Client/Server Scalability, W., et. al. Three Architectures: Performance, Client/Server and Applications. Tier Achieving Efficiency Open in Information Systems, volume 10, No. 1, p. 20, 1995. [Elias, 2002] Elias, G., S. SOS: A Framework for Distribution, Management and Evolution of Component-Based Software Systems over Open Networks. PhD Thesis. Federal University of Pernambuco. June, 2002. [Elrad, 2001] Elrad, T., Filman, R., E., Bader, A. AspectOriented Programming, Communications of the ACM, 2001. [Emmerich, 2002] Emmerich, Technologies and W. their Distributed Software Component Engineering Implications, In 24th International Conference on Software Engineering (ICSE). Orlando, USA, 2002. [Fischer, 1993] Fischer, G. Shared Knowledge in Cooperative Problem-Solving Systems—Integrating Adaptive and Adaptable Components, In M. Schneider- Hufschmidt, T. Kuehme & U. Malinowski (eds.), Adaptive User Interfaces: Principles and 132 Referências Bibliográficas Practice, Elsevier Science Publishers, Amsterdam, pp. 49–68. [Gamma, 1995] Gamma, E., Helm, R., Johnson, R., Vlissides, J. Design Patterns: Elements of Reusable ObjectOriented Software. Addison-Wesley, 1995. [Gimenes, 2000] Gimenes, Carniello, I., A. O Barroca, Processo L., de Huzita, E., Desenvolvimento Baseado em Componentes Através de Exemplos, VIII Escola de Informática da SBC Sul, Editora da UFRGS, 147-178, 2000. [Griss, 1996] Griss, M., Architecture, L. Systematic Process and Software Reuse: Organization are Crucial, Fusion Newsletter, HP Laboratories, Oct 1996. [Griss, 1998] Griss, M., L., et. al, Software Reuse: Nemesis or Nirvana?, Systems, In Languages Object-Oriented and Programming Applications (OOPSLA), Vancouver, British Columbia, Canada, 1998. [Griss, 2000] Griss, M., L. Implementing Product-Line Features by Composing Component Aspects, In First International Software Product-Line Conference, Denver, Aug 2000. [Griss, 2001] Griss, M., L. CBSE Success Factors: Integrating Architecture, Component-Based Process Software and Organization, Engineering: In Putting the Pieces Together, Addison-Wesley, 2001. [Griss, 2001a] Griss, Generation M., L. Software Software Agents Components, In as Next Component- Based Software Engineering: Putting the Pieces Together, Addison-Wesley, 2001. [Griss, 2002] Griss, M., L., Cowan, D. Making Software Agent Technology Available to Enterprise Applications, 133 Referências Bibliográficas In 1st International Workshop on Challenges in Open Agent Systems, AAMAS'02, Bologna, Italy, July 2002. [Griss, 2002a] Griss, M., L., Cowan, D., Kessler, R., Remick, B., Burg, B. A Robust Environment for Agent Deployment, In First International Workshop on Challenges in Open Agent Systems, AAMAS'02, Bologna, Italy, July 2002. [Guimarães, 1999] Guimarães, M., P., Prado, A., F., Trevelin, L., C. Development of Object Oriented Distributed Systems (DOODS) using Frameworks of the JAMP plataform, In First Workshop on Web Engineering, in conjunction with the 19th International Conference in Software Engineering (ICSE), 1999. [Hampshire, 1999] Hampshire, Desenvolvimento P., et al. de Software O Futuro no do Brasil. Developers' CIOMagazine, No. 40, ano 4, p. 1014, 1999. [Heineman, 2001] Heineman, G., T., Council, W., T. ComponentBased Software Engineering: Putting the Pieces Together, Addison-Wesley. 2001. [Heineman, 2001a] Heineman, G., T. Building Instead of Buying: A Rebuttal, Engineering: In Putting Component-Based the Pieces Software Together, Addison-Wesley, 2001. [Hissam, 2002] Hissam, S., A., Seacord, R., C., Lewis, G., A. Building Systems from Commercial Components, In 24th International Engineering USA, 2002. (ICSE), Conference Tutorial on Notes. Software Orlando, 134 Referências Bibliográficas [Horstmann, 2001] Horstmann, C., Cornell, Gary. Core Java 2, Volume II: Advanced Features (5th Edition). Sun Microsystems Press, 2001. [Humphrey, 1989] Humphrey, W., S. CASE Planning and the Software Process. Software Engineering Institute (SEI), Technical Report, May 1989. [ICSR, 2002] 7th International Conference on Software Reuse (ICSR), Austin, Texas, USA. April 2002. [Jacobson, 1992] Jacobson, Software I., et. Engineering – al. Object-Oriented A Use Case-Driven approach, Reading, MA: Addison-Wesley, 1992. [Jacobson, 2001] Jacobson, I., et. al. The Unified Software Development Process. Addison-Wesley. USA, 4nd edition, 2001. [Johnson, 1992] Johnson, Patterns, R. In Documenting Frameworks Object-Oriented Using Programming Systems, Languages, and Applications (OOPSLA), Vancouver, British Columbia, Canada, 1992. [Kiczales, 1997] Kiczales, Programming, In Object-Oriented Notes in G., et. 11th al. European Programming Computer Aspect-Oriented Science Conference (ECOOP), (LNCS), on Lecture Springer- Verlag, Finland, 1997. [Kiczales, 2001] Kiczales, G., et. al. An Overview of AspectJ, In 15th European Conference on Object-Oriented Programming (ECOOP), Lecture Notes in Computer Science (LNCS), Springer-Verlag, Hungary, 2001. [Kienzle, 2002] Kienzle, J., Guerraoui, R. AOP: Does It Make Sense? The Case of Concurrency and Failures, In 16th European Conference on Object-Oriented Programming (ECOOP), Lecture Notes in Computer 135 Referências Bibliográficas Science (LNCS), Springer-Verlag, pp. 37-61. Málaga, Spain, 2002. [Kitchenham, 1995] Kitchenham, B., Pickard, P., Pfleeger, S., L. Case Studies for Method and Tool Evaluation, IEEE Software, vol. 11, no. 4, pp. 52-62, July 1995. [Kobra, 2000] Atkinson, C., et. al. Component-Based Software Engineering:The KobrA International Approach, Workshop on In 3rd Component-based Software Engineering: Reflection on Practice, in conjunction Conference with on the 22th Software International Engineering (ICSE). Limerick, Ireland, 2000. [Krueger, 1992] Krueger, C. Software Reuse. ACM Computing Surveys, v.24, n.2. [Lieberherr, 1994] Lieberherr, Object-Oriented K., J., et. Programming Customization, in al. using Communications Adaptive Graph-Based of the ACM, 1994. [Linthicum, 1997] Linthicum, Middleware. Enterprise D., S. Next Disponível magazine Generation site (September, www.dbmsmag.com/9709d14.html. Intelligent 1997), URL: Consultado em 23/05/2001. [Lipson, 2001] Lipson, H., F., Mead, N., R., Moore, A., P. Can We Ever Build Components?. Survivable Software Systems Engineering from COTS Institute (SEI), Technical Note, 2001. [Mehta, 2002] Mehta, A., Heineman, G., T. Evolving Legacy System Features into Fine-Grained Components, In 24th Internation Conference on Engineering (ICSE). ACM Press, 2002. Software 136 Referências Bibliográficas [Microsoft, 2002] COM: Delivering on the Promises of Component Technology. Disponível site Microsoft Technologies, URL: http://www.microsoft.com/com/. Consultado em 07/11/2002. [Mitre, 1998] MITRE. Recommendations for Using DCE, DCOM, and CORBA from Middleware. Computer Disponível Systems Clearingho, site Engineering SOE Center Information URL: http://dii- sw.ncr.disa.mil/coe/toppics/atd/recommend/all.pd f. Consultado em 17/03/2001. April, 1998. [Mowbray, 1995] Mowbray, CORBA T., Systems J., Zahavi, Integration R. The Using Essential Distributed Objects. John Wiley & Sons, 1995. [Oberndorf, 1997] Oberndorf, P. Facilitating Component-Based Software Engineering: COTS and Open Systems, In Fifth International Symposium on Assessment of Software Tools. June 1997. [Objecteering, 2001] Tool. Objecteering Disponivel Software. site Objecteering/UML Objecteering URL:http://www.objecteering.com. Software, Consultado em 10/07/2002. [OMG, 1996] Object Management Group. The Common Object Request Broker: Architecture and Specification, revision 2.4. Disponível site OMG (1996), URL: http://www.omg.org/technology/documents/formal/c orbaiiop.htm. Consultado em 10/04/2001. [OMG, 2001] Object Management Group. Unified Modeling Language 1.4 specification. Management Disponível Group, site Object URL: http://www.omg.org/technology/documents/formal/u ml.htm. Consultado em 01/12/2002. 137 Referências Bibliográficas [OMG, 2002] Object (CCM) Management 3.0. Group. Disponível Group, Corba site URL: Component Object Model Management http://www.omg.org/cgi- bin/doc?formal/02-06-65. Consultado em 07/11/2002. [Ommering, 2002] Ommering, R., V. Building Product Populations with Software Components, In 24th Internation Conference on Software Engineering (ICSE). Orlando, Flórida. 2002. [Orfali, 1998] Orfali, R., Harkey, D. Client/Server Programming with Java and CORBA. John Wiley & Sons, Second Edition, 1998. [Otte, 1996] Otte, R., CORBA Patrick, The P., Common Roy, M. Object Understanding Request Broker Architecture. Prentice Hall PTR, 1996. [Perspective, 2000] Select Perspective: practical methodology generation applications. Active Archive Princeton for Softech’s delivering Disponível Solutions site Company, next The URL: http://www. princetonsoftech.com. Consultado em 10/06/2002. [Poulin, 2001] Poulin, J., S. Measurement and Metrics for Software Components, In Component-Based Software Engineering: Putting the Pieces Together, Addison-Wesley, 2001. [Prado, 2000] Prado, A, F., Lucrédio, D. MVCASE: Ferramenta CASE Orientada Brasileiro de a Objetos, Engenharia de XIV Simpósio Software, João Pessoa/PB, 2000. [Prado, 2001] Prado, A, F., Lucrédio, D. Ferramenta MVCASE Estágio Construção Atual: de Especificação, Componentes, Projeto XV e Simpósio 138 Referências Bibliográficas Brasileiro de Engenharia de Software, Rio de Janeiro, 2001. [Pressman, 2001] Pressman, R., S. Software Engineering: A Practitioner's Approach. McGraw-Hill 2001. [Prieto-Diaz, 1990] Prieto-Diaz, Analysis and R., Software Arango, System G. Domain Modeling. IEEE Computer Society, Press Tutorial, 1990. [Rational, 2001] Rational the Software Development Company. Rational Rose Tool. Disponível site Rational the Software Development Company, http://www.rational.com/rose. URL: Consultado em 10/07/2001. [Ross, 1977] Ross, D., T. Structured Analysis (SA): A language for communicating Ideas, IEEE Transaction on Software Engineering, 1977. [Rumbaugh, 1991] Rumbaugh, R. Object-Oriented Modeling and Design. Prentice Hall, 1991. [Rumbaugh, 2002] Rumbaugh, J., Jacobson, I., Booch, G. The Unified Modeling Language Reference Manual. Addison-Wesley, 1999. [Sametinger, 1997] Sametinger, J. Software Engineering with Reusable Components. Springer-Verlag, 1997. [Seacord, 1999] Seacord, R., C. Software Engineering Component Repositories, In Component-Based conjunction International Software with the Workshop Engineering, 21th on in International Conference on Software Engineering (ICSE). Los Angeles, USA, 1999. [SEI, 1999a] Software Engineering Institute (SEI). Domain Analysis. Disponível site Software Engineering Institute (SEI), Engineering Practices, URL:http://www.sei.cmu.edu/domain- 1999, 139 Referências Bibliográficas engineering/domain_anal.html. Consultado em 10/07/2001. [SEI, 1999b] Software Engineering Design. Disponível Institute (SEI), Institute site (SEI). Software Engineering Domain Engineering Practices, 1999, URL:http://www.sei.cmu.edu/domainengineering/domain_design.html. Consultado em 10/07/2001. [SEI, 1999c] Software Engineering Institute (SEI). ComputerAided Software Engineering (CASE) Environments. Disponível site Software Engineering Institute (SEI), Engineering Practices, 1999, URL:http://www.sei.cmu.edu/legacy/case/case_what is.html. Consultado em 25/11/2002. [Sharman, 1999] Sharman, T. Development Software E-Commerce Components, Software Online, Vol.7. Development Disponível Online, site URL: http://www.sdmagazine.com/articles/1999/9908/990 8a/9908a.htm. Consultado em 10/08/2002. [Simos, 1996] Simos, M. Organization Domain Modeling (ODM): Domain Engineering Object-Oriented as a Co-Methodology Fusion Techniques. to Newsletter, v.4 1996, Hewlett-Packard Laboratories, pp 1316. [Soares, 2002] Soares, Implementing Aspects with S., Laureano, Distribution AspectJ, In E., and 17th Borba, P. Persistence Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA), ACM Press, 2002. [Sommerville, 2000] Sommerville, I. Software Engineering (6th Edition). Pearson Education, August 2000. 140 Referências Bibliográficas [Souza, 2001] Souza, H, L. Estudo de modelos de serviços para middleware e proposta de extensões à plataforma JAMP. Dissertação de Mestrado. Universidade Federal de São Carlos, junho de 2001. [Stojanovic, 2001] Stojanovic, Z., Dahanayake, A., Sol, H. A Methodology Framework for Component-Based System Development Support, In CAiSE/IFIP8.1 Sixth International Workshop on Evaluation of Modeling Methods in Systems Analysis and Design, 2001. [Sun, 2002] Java Technologies. Disponível site Sun Microsystems, URL: http://java.sun.com/products. Consultado em 07/11/2002. [Sun, 2002a] Java Remote Method Invocation (RMI). Disponível site Sun Microsystems, URL: http:// http://java.sun.com/products/jdk/rmi/index.html. Consultado em 07/11/2002. [Sun, 2002b] Jini Network Technology. Disponível site Microsystems, Sun URL: http://wwws.sun.com/software/jini/. Consultado em 07/11/2002. [Szyperski, 1998] Szyperski, C. Component Software – Beyond Object-Oriented Programming. Addison-Wesley and ACM Press, 1998. [Tran, 1997] Tran, V., Liu, D. A Procurement-centric Model for Engineering Component-based Software Systems. Proceedings of the Fifth International Symposium on Assessment of Software Tool. June 1997. [Travassos, 2002] Travassos, G., H., Gurov, D., Amaral, E. Introdução Experimental. à Engenharia Relatório de Técnico, Federal do Rio de Janeiro. 2002. Software Universidade 141 Referências Bibliográficas [Trevelin, 2001] Trevelin, L., C., Ferreira, M. M., Souza, L. F., H. JAMP - Java Architecture For Multimedia Processing. Universidade Federal de São Carlos. 2001. [Van Solingen, 1999] Van Solingen, R., Berghout, E. The Goal/Question/Metric Method: A Practical Guide for Quality Improvement of Software Development, McGrawn Hill, 1999. [Wang, 2001] Wang, N., Schmidt, D., C., O’Ryan, C. Overview of the CORBA Component Model, in Component-Based Software Engineering: Putting the Pieces Together, Addison-Wesley, 2001. [WCOP, 2002] 7th International Workshop on Component-Oriented Programming (WCOP) in conjunction with the 16th European Conference on Object-Oriented Programming (ECOOP), Málaga, Spain, 2002. [Weinreich, 2001] Weinreich, Models and R., Sametinger, Component Principles, in Engineering: Putting J. Services: Component Concepts Component-Based the and Software Pieces Together, Addison-Wesley, 2001. [Werner, 2000] Werner, C., Desenvolvimento M., L., Baseado em Braga, R., M. Componentes, XIV Simpósio Brasileiro de Engenharia de Software, Minicursos e Tutoriais, João Pessoa/PB, 2000. [Werner, 2000a] Werner, C., M., L., and et. al. Projeto Odyssey. Universidade Federal do Rio de Janeiro, 2000. Disponível site Projeto Odyssey, URL: http://www.cos.ufrj.br/~odyssey/. [Wills, 2001] Wills, Catalysis A., C. Components Techniques Infrastructures, In for and Connectors: Designing Component-Based Component Software 142 Referências Bibliográficas Engineering: Putting the Pieces Together, Addison-Wesley, 2001. [Williams, 2001] Williams, J. The Components, In Engineering: Putting Business Case Component-Based the for Software Pieces Together, Addison-Wesley, 2001. [Wohlin, 2000] Wohlin, C., Runeson, P., Höst, M., Ohlsson, C., Regnell, B., Wesslén, Software Engineering: A. an Experimentation Introduction, in Kluver Academic Publishers, Norwell, MA, 2000. [W3C, 2001] W3C - World Wide Web Consortium. Extensible Markup Language (XML) 1.0 Second Edition. Disponível site W3C - World Wide Web Consortium, URL: http://www.w3.org/TR/2000/REC-xml-2000-10-06. Consultado em 10/07/2001. [Yoder, 1998] Yoder, J., W., Johnson, R., E., Wilson, Q., D. Connecting Databases, Business In Objects Pattern to Languages Relational of Programs (PLoP), Monticello, Illinois, USA,1998. [Yoder, 2002] Yoder, J., W. Software Patterns, In The Second Latin American Conference on Pattern Languages of Programming (SugarLoafPlop), Tutorial Notes, Rio de Janeiro, Brasil, 2002. [Yunwen, 2001] Yunwen, Y. Supporting Component-Based Software Development Systems, PhD with Active Thesis, Component University Repository of Colorado, 2001. [Yunwen, 2002] Yunwen, Y., Fischer, G. Supporting Reuse by Delivering Task-Relevant and Personalized Information, In 24th International Conference on Software Engineering. Orlando, USA, 2002. Referências Bibliográficas 143 [Zelkowitz, 1997] Zelkowitz, M., V., Wallace, D. Experimental Validation in Software Engineering, Conference on Empirical Assessment in Software Engineering, Keele University, Staffordshire, UK, March 1997. Apêndice QT1 - QUESTIONÁRIO INDIVIDUAL PARA PARTICIPANTES DO EXPERIMENTO ID: ______ Técnica utilizada: ( ) Ad-hoc ( ) Abordagem de DBCD Domínio: _____________________________________ Data: ___/___/_______ Curso: ( ) Ciência da Computação ( ) Bacharelado em Informática ( ) Processamento de dados ( ) Outros __________________________ Nível: ( ) Graduação Horário ( ) Diurno ( ) Mestrado ( ) Noturno ( ) Doutorado ( ) Especialização Período atual: _____ do total de ____ semestres Em qual das categorias abaixo você melhor se encaixa, enquanto desenvolvedor? ( ) Não tenho experiência em desenvolvimento de sistemas desse tipo (sistemas comerciais) ( ) Desenvolvi alguns projetos desse tipo durante disciplinas de graduação/pós-graduação, usando análise estruturada/essencial ( ) Desenvolvi alguns projetos desse tipo durante disciplinas de graduação/pós-graduação, usando análise orientada a objetos ( ) Desenvolvi, profissionalmente, alguns projetos nesse domínio (até 3) ( ) Desenvolvi, profissionalmente, muitos projetos nesse domínio (mais de 4) ( ) Outros, especifique: __________________________________________________ Por favor, informe quais disciplinas você já cursou na área de análise de sistemas/engenharia de software ___________________________________________________________________________ 145 Apêndice ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ Conhece linguagens orientadas a objetos? ______ Quais? ____________________________________________ Conhece alguma tecnologia de distribuição? ______ Quais? ____________________________________________ Marque sua experiência ou as atividades (cargos) que já exerceu ou exerce, na área de desenvolvimento de componentes de software: ( ) Desenvolvedor de Componentes ( ) Desenvolvedor de Aplicações (com componentes) ( ) Arquiteto de Software ( ) Gerente de projeto baseado em componentes ( ) Professor (universitário) de informática (disciplinas relacionadas ao DBC) ( ) Outras: ________ Já participou do desenvolvimento de quantas aplicações utilizando alguma técnica de DBC? Grande Complexidade: ( )Nenhum ( ) De 1 a 2 ( ) Entre 3 e 7 ( )Maior que 7 ( ) De 1 a 2 ( ) Entre 3 e 7 ( )Maior que 7 ( ) Entre 3 e 7 ( )Maior que 7 Média Complexidade: ( )Nenhum Pequeno Complexidade: ( )Nenhum ( ) De 1 a 2 Relacione os domínios de aplicações dos projetos que você participou utilizando os conceitos e técnicas de DBC. (Coloque na ordem decrescente de experiência) (Exemplos de domínio de aplicações: educacional, hospitalar, administrativo, financeiro, científico) R._____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ _____________________________________________________________________ Se for o caso, em quais fases do ciclo de vida do desenvolvimento de componentes já participou? ( ) Especificação de Requisitos ( ) Projeto ( ) Implementação ( ) Teste ( ) Manutenção ( ) Outra (especificar):_____ 146 Apêndice Como você classificaria seu entendimento em relação a componentes de software (conceituação, objetivos e viabilidade do componente): ( ) Excelente ( ) Alto ( ) Bom ( ) Médio ( ) Baixo ( ) Nenhum Marque os subitens (e a quantidade a eles referentes), que dizem respeito a seu grau de treinamento relacionados com o desenvolvimento de componentes de software: Cursos (até 8 hs): ( ) Nenhum ( ) De 1 a 2 ( ) Entre 3 e 7 ( ) >7 ( ) De 1 a 2 ( ) Entre 3 e 7 ( ) >7 ( ) Entre 3 e 7 ( ) >7 ( ) Entre 3 e 7 ( ) >7 ( ) Entre 3 e 7 ( ) >7 Cursos (até 40 hs): ( ) Nenhum Cursos (mais de 40 hs): ( ) Nenhum ( ) De 1 a 2 Simpósios/Congressos: ( ) Nenhum ( ) De 1 a 2 Publicações de artigos nacionais: ( ) Nenhum ( ) De 1 a 2 Publicações de artigos internacionais: ( ) Nenhum ( ) De 1 a 2 ( ) Entre 3 e 7 ( ) >7 Qual sua maior área de interesse: ( ) Engenharia de Software ( ) Inteligência Artificial computadores ( ) Computação Gráfica ( ) Redes/Sistemas Distribuídos ( ) Banco de Dados ( ) Hipermídia ( ) Arquitetura de ( ) Outros : _______________________________ Observações ou comentários: (favor anotar no verso, caso o espaço abaixo seja insuficiente) ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ 147 Apêndice Coleta de Tempo para desenvolvimento do projeto Data Início Término Resumo das Atividades: Atividade Tempo (pessoas/hora) Atividades Total de horas Apêndice 148 QT2 – QUESTIONÁRIO INDIVIDUAL PARA PARTICIPANTES DO EXPERIMENTO ID: ______ Técnica utilizada: AD-HOC Quanto ao documento de requisitos do projeto, responda: 1) Você teve alguma dificuldade em entender os requisitos? Quais? ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ 2) Você encontrou algum requisito em duplicidade? Quais? ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ 3) Você encontrou requisitos vagos ou inconsistentes, que merecem ser mais bem detalhados? Quais? ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ 4) Comentários adicionais ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ Quanto à modelagem, projeto e implementação usando a técnica AD-HOC, responda: 5) Quais as dificuldades encontradas na fase de análise (justificar) ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ Apêndice 149 6) Quais as dificuldades encontradas na fase de projeto (justificar) ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ 7) Quais as dificuldades encontradas na fase de implementação? ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ 8) Quais as maiores dificuldades para conclusão do projeto? ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ Outras dificuldades: ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ Apêndice 150 QT2 - QUESTIONÁRIO INDIVIDUAL PARA PARTICIPANTES DO EXPERIMENTO ID: _______ Técnica utilizada: Abordagem de DBCD Quanto ao documento de requisitos do domínio de comércio eletrônico, responda: 1) Você teve alguma dificuldade em entender os requisitos? Quais? ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ 2) Você encontrou algum requisito em duplicidade? Quais? ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ 3) Você encontrou requisitos vagos ou inconsistentes, que merecem ser mais bem detalhados? Quais? ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ 4) Comentários adicionais ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ Quanto à utilização da abordagem de DBCD, responda: 5) Quais as dificuldades encontradas no entendimento da abordagem (justificar) ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ Apêndice 151 6) Quais as dificuldades encontradas para utilização da abordagem? ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ 7) Quais as dificuldades encontradas utilizando a ferramenta MVCASE? Especifique, por exemplo, se o treinamento foi suficiente para cobrir os aspectos necessários para desenvolvimento do projeto? Problemas de instalação, da linguagem, etc... ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ________________________________________________________________________ Outras dificuldades: ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________