Revista Perspectiva Amazônica Ano 3 N° 5 p.109-118 ARQUITETURA EM CAMADAS: REUTILIZAÇÃO E ADAPTAÇÃO DE COMPONENTES DE SOFTWARE NO DESENVOLVIMENTO DE UM SISTEMA PARA GERENCIAR ATIVOS DE REDE Luciano Parintins Viana¹, Rafael Brelaz², Antônio Fabrício Guimarães de Sousa³, Amanda Monteiro Sizo Lino4 RESUMO Este artigo descreve o processo de desenvolvimento de um sistema de controle de ativos de redes, o SIAR, e como a reutilização de uma arquitetura de software consolidada interferiu na qualidade do produto final. Como importante contribuição, o artigo apresenta uma análise a cerca das vantagens e desvantagens alcançadas com a adaptação da Arquitetura da UFRN para a construção do sistema citado. ABSTRACT This paper describes the process of developing a control system for active networks, the SIAR, and as reuse of a software architecture consolidated interfered in final product quality. As major contribution, the paper presents an analysis about the advantages and disadvantages achieved with the adaptation of Architecture UFRN for the construction of system. ¹ Centro de Tecnologia da Informação e Comunicação (CTIC) – Universidade Federal do Oeste do Pará (UFOPA) Santarém – PA – Brasil; ² Centro de Tecnologia da Informação e Comunicação (CTIC) – Universidade Federal do Oeste do Pará (UFOPA) Santarém – PA – Brasil; ³ Centro de Tecnologia da Informação e Comunicação (CTIC) – Universidade Federal do Oeste do Pará (UFOPA) Santarém – PA – Brasil; 4 Centro de Tecnologia da Informação e Comunicação (CTIC) – Universidade Federal do Oeste do Pará (UFOPA) Santarém – PA – Brasil. 109 Revista Perspectiva Amazônica Ano 3 N° 5 p.109-118 I. Introdução A reutilização de componentes (JACOBSON et al., 1997) tem sido tema de crescente pesquisa como uma alternativa para as organizações reduzirem tempo e custos envolvidos no processo de desenvolvimento de software. Nesse contexto, diversas abordagens que tratam do reuso têm sido definidas como: Arquitetura de Software (SHAW AND DARLAN, 1996), Middleware (DASHOFY, 1998), Padrões de Projeto (GAMMA et al., 2000) e Desenvolvimento Baseado em Componentes (ALVES, 2001), etc. Dentre essas abordagens a reutilização da Arquitetura de Software merece atenção, pois permite reuso em níveis que vão desde o estilo arquitetural até o padrão de projeto adotado. De acordo com Vasconcelos (2004), a capacidade de reutilização vem representando um fator de qualidade cada vez mais requerido em artefatos de software, a fim de atender a construção de sistemas grandes e complexos, compatíveis com as atuais exigências do mercado consumidor. Nesse contexto, várias arquiteturas de software como Tiboni (2009) e Pinhão (2012) consolidaramse no meio acadêmico e corporativo e estão sendo largamente reutilizadas como forma de atingir uma qualidade satisfatória no produto final. Com essa visão, a UFOPA (Universidade Federal do Oeste do Pará) optou por utilizar a arquitetura da UFRN (Universidade Federal do Rio Grande do Norte), com algumas adaptações, para desenvolver um sistema de maneira rápida e segura além de propiciar o estudo da arquitetura para melhor entendimento dos sistemas da UFRN adquiridos pela UFOPA. Dessa forma, pretende-se prover interoperabilidade entre os sistemas desenvolvidos na universidade e os demais sistemas implementados nas instituições cooperadas, atendendo assim os requisitos de interoperabilidade sugerida pelo governo federal, em e-PING (CEGE, 2012). Para validar as alterações feitas na arquitetura foi desenvolvido um sistema de controle de ativos de redes, o SIAR (Sistema de Ativos de Rede). Esse sistema tem como objetivo gerenciar as informações sobre todos os componentes da rede (servidores, usuários) e sua localização dentro da instituição, no caso a UFOPA. Como principal contribuição, esse artigo apresenta uma avaliação qualitativa sobre a influência na reutilização de uma arquitetura de software na qualidade do produto final. Na parte final do artigo, os dois últimos tópicos mais precisamente, são apresentadas algumas considerações em relação as vantagens e desvantagens encontradas na utilização da arquitetura da UFRN para a criação do SIAR e o que essa parceria contribuiu em termos profissionais e práticos para os desenvolvedores que participaram desse processo. II. Trabalhos correlatos 110 Segundo Simão (2002), a reutilização de módulos preexistentes pode Revista Perspectiva Amazônica substituir ou pelo menos, diminuir a atividade de construção desses módulos, reduzindo o tempo e o custo do desenvolvimento, e aumentando a produtividade e a qualidade. Essa opinião é compartilhada por muitos autores da área de reutilização, Ano 3 N° 5 p.109-118 podendo ser encontrada em relatórios de empresas (BAUER, 1993; GRISS, 1994; JOOS, 1994), “pesquisas informais” (FRAKES; ISODA, 1994) e estudos empíricos (MORISIO et al., 2002; ROTHENBERGER et al., 2003). Todos esses trabalhos mostraram que adotar um processo de reutilização pode ser uma maneira efetiva de se alcançar benefícios na construção de software. Algumas pesquisas apresentam arquiteturas de software que já são amplamente reutilizadas, como a plataforma Demoiselle (TIBONE, 2009), desenvolvido pelo SERPRO (Serviço Federal de Processamento de Dados) que é uma arquitetura totalmente livre que visa garantir a interoperabilidade e facilidade de manutenção dos sistemas das diferentes instituições do governo federal. No site da plataforma Pinhão (PINHÃO, 2012) é descrita a arquitetura de software desenvolvida na CELEPAR (Companhia de Informática do Paraná) que é composta por uma metodologia de desenvolvimento baseada nos padrões de mercado e por várias aplicações que tratam determinadas classes de problemas. Em Xavier (2001) padrões arquiteturais são selecionados para um domínio comparando-se os atributos de qualidade desejados no domínio com a probabilidade em se obter estes atributos por meio da utilização de um determinado padrão arquitetural. Apesar de vasta pesquisa na área, poucas foram as arquiteturas apresentadas no âmbito de instituições de ensino, sendo a da UFRN a mais consolidada. III. Reutilização da arquitetura de software A Arquitetura de Software reutilizada nessa pesquisa permite abstrair a complexidade da implementação de sistemas Java Enteprise Edition (JEE), como também definir padrões de codificação, visualização, navegação para sistemas WEB. A arquitetura reutilizada neste trabalho utiliza a abordagem de separação em camadas. O intuito é não misturar as responsabilidades dos componentes dos sistemas, onde cada componente deve ter suas responsabilidades bem definidas. As camadas são utilizadas para realizar esta organização, agrupando os componentes com funcionalidades afins em camadas semelhantes, conforme ilustra a FIGURA 1. FIGURA 1 Arquitetura em camadas 111 Revista Perspectiva Amazônica Ano 3 N° 5 p.109-118 As camadas são organizadas em forma de pilhas e obedecem uma hierarquia. Em geral, as camadas mais acima da hierarquia dependem das camadas mais abaixo. Apenas as camadas adjacentes podem se comunicar entre si e uma camada inferior não pode depender de uma camada superior. De acordo com o Wiki ( 2012), cada camada representa: 1. Apresentação: utilizada para a exibição de informações em janelas ou páginas HTML. É nela que há a manipulação de requisições do usuário e de requisições HTTP. Considerando os componentes do desenvolvimento web, podemos listar Managed Bean, Actions, JSPs, Servlets; 2. Aplicação: delega trabalho da camada de apresentação para a camada de domínio. Adiciona serviços (transações, por exemplo) ao sistema. Componentes: Façades, EJB Commands; 3. Domínio/Negócio: representa a lógica de negócio dos sistemas. Componentes: classes de domínio e processadores (realizam a persistência); 4. Persistência: permite a comunicação com a base de dados, disponibiliza serviços de mensagens, etc. Assim, espera-se alcançar a padronização de alguns processos e procedimentos a partir da reutilização de código, pois todas as funcionalidades comuns encontravam-se na arquitetura, alem do aumento da produtividade dos desenvolvedores devido à abstração de complexidades e das regras de desenvolvimento. III.1. Adaptação da arquitetura Durante a fase de análise da arquitetura da UFRN foi verificado que não haviam mecanismos que facilitassem a criação de novos módulos usando os componentes arquiteturais disponíveis. Sendo assim foram necessárias algumas alterações na arquitetura da UFRN para aproveitar parte de sua estrutura. Conforme visto na FIGURA 1, a arquitetura da UFRN é composta por 4 (quatro) camadas separadas de acordo com as responsabilidades definidas para cada uma. Para o desenvolvimento do SIAR foram feitas algumas alterações visando aproveitar os componentes da arquitetura do SIG da UFRN e diminuir sua complexidade. A figura 2 apresenta uma visão das camadas da arquitetura da UFRN juntamente com as adaptações efetuadas na mesma afim de atender o esquema proposto na elaboração do SIAR. O fluxo proposto na arquitetura da UFRN inicia na camada de Apresentação onde é utilizado o padrão de projeto MVC (Model, View e Controller) (GLEEN 1988). O usuário interage com a View e então o Controller faz a comunicação com o Model para verificar as regras de negócio da aplicação. Na camada de Aplicação o comando é 112 recebido e então faz-se o preparo do movimento para a camada de negócio. O papel de Controller fica a cargo da classe AbstractController. Essa classe possui funções para controle de navegação e também de comunicação com a camada de Aplicação. Essa comunicação é feita utilizando o padrão EJB Command (ALUR, 2003) que se encarrega Revista Perspectiva Amazônica de movimentar os comandos entre as camadas da arquitetura. Ano 3 N° 5 p.109-118 FIGURA 2 Arquitetura adaptada e a Arquitetura do SIGs da UFRN No modelo proposto para o SIAR o fluxo da camada de Apresentação, que é controlado pelos Managed Beans que extendem a classe AbstractController, se diferencia da arquitetura da UFRN, pois ele não utiliza o padrão EJB Command para pegar o comando e fazer o movimento pelas camadas. Desta forma, o SIAR não utilizou a camada de Aplicação e foi direto para a camada de Domínio/Negócio, onde utilizou apenas os componentes de Domínio já que a parte do Negócio da arquitetura da UFRN é encarregada justamente de receber os comandos da camada de Aplicação. Da camada de Domínio os dados vão para a camada de Persistência onde foram realizadas algumas customizações nas classes responsáveis pelos DAOs. DAO (Data Access Object) é um padrão de projeto criado para fazer o intermédio entre uma aplicação e uma base de dados, que pode ser de diferentes origens. Ele encapsula e abstrai todo o acesso ao banco (ORACLE, 2012). Novos DAO's foram criadas por conta da grande complexidade e da dificuldade em adequar o código da arquitetura da UFRN à arquitetura do SIAR. Foram criados a classe SiarGenericDAO e SiarFilter. A função da SiarGenericDAO é permitir a manipulação dos dados de forma simples, fazendo as operações de salvar, atualizar, deletar e buscar por determinada informação no banco. O SiarFilter implementa o padrão OpenSessionInView (HIBERNATE, 2012). Tivemos que refazer esta classe por conta também da complexidade e da grande mudança que teríamos que fazer adequando código. Ele cuida em abrir uma Session do Hibernate (BAUER, 2005) que é a classe responsável pelas transações com o banco. A cada requisição feita pela página do SIAR é aberta uma Session e ao final da requisição essa Session é fechada, para que esta sempre esteja disponível para consultas no banco. 113 Revista Perspectiva Amazônica Ano 3 N° 5 p.109-118 IV. Sistema de Ativos de Rede (SIAR) O SIAR foi criado devido a uma demanda da coordenação de serviços do Centro de Tecnologia da Informação e Comunicação (CTIC) da UFOPA para gerenciar os ativos de rede da instituição. O contexto de desenvolvimento do sistema, usando a arquitetura da UFRN, leva em conta a requisição dos clientes que solicitaram o desenvolvimento do software juntamente com a necessidade da equipe de desenvolvimento de sistemas da UFOPA em estudar e entender a arquitetura dos SIGs adquiridos por meio do termo de cooperação com a UFRN, conforme (DIÁRIO OFICIAL DA UNIÃO, 2010). O objetivo do SIAR é controlar os ativos de rede da UFOPA armazenando informações relativas aos servidores, serviços, senhas, bem como a localização física, associações entre permissões/usuários/servidores, acessos ao sistema, equipamentos, entre outras. Desta forma os funcionários dos setores de serviços e rede podem gerenciar melhor seus equipamentos tendo facilmente acesso às informações como localização, usuários responsáveis, informações adicionais (como IP, máscara, identificação do tipo de servidor: virtual ou físico) dentre outras, para administrar de maneira mais eficiente os ativos da Universidade. A FIGURA 3 apresenta a tela principal do SIAR, com os links para as várias funcionalidades do sistema, onde o usuário tem acesso ao realizar o login. FIGURA 3 Tela principal do SIAR A FIGURA 4 é apresenta a página com a listagem dos usuários e algumas informações como login, senha, tipo de permissão, bem como os acessos e equipamentos associados a este. No lado direito podem ser vistos os ícones de alteração, representado pelo item amarelo, e de deletar, caso seja preciso apagar o registro inserido no SIAR juntamente com suas associações nas tabelas correspondentes no banco de dados. 114 Revista Perspectiva Amazônica FIGURA 4 Lista de usuários Ano 3 N° 5 p.109-118 Vistas as permissões de acesso disponíveis para o usuário, é possível voltar à tela anterior clicando no link Lista de Usuários próximo ao canto superior esquerdo da página e então acessar a lista de equipamentos que o usuário em questão pode gerenciar, administrar ou ter acesso, conforme pode ser visto na FIGURA 6. Neste caso, o usuário seleciona os equipamentos e em seguida pode clicar no botão com as setas para esquerda se quiser associar os equipamentos ao usuário, e caso queira desfazer essa associação basta clicar no botão com setas para direita. FIGURA 5 Lista de Acessos V. Resultados Com o desenvolvimento do SIAR por meio de uma arquitetura de software consolidada foi possível obter alguns resultados como: 1. Reutilização de componentes: muitas funcionalidades e padrões de projeto foram aproveitados, o que minimizou as chances de cometer erros em situações onde já tinham sido encontradas soluções de projeto previamente analisadas; 2. Minimização do tempo gasto no desenvolvimento: devido ao fato de que não foi necessário começar um sistema e sim partir de um ponto adiante, apenas entendendo o que foi feito para desenvolver na plataforma já criada; 3. Aprendizado da estrutura arquitetural dos SIGs da UFRN: foi possível 115 Revista Perspectiva Amazônica Ano 3 N° 5 p.109-118 entender melhor a arquitetura da UFRN e ter conhecimento prático de como funcionam alguns de seus sub sistemas; 4. Um sistema de ativo de redes com uma base sólida e robusta que poderá ser incorporado aos SIGs com alguns ajustes. Em contra partida foram encontradas algumas dificuldades na utilização da arquitetura, entre elas: 1. Falta de mecanismos apropriados para facilitar a incorporação de módulos aos SIGs: foi necessário aprofundar as análises nas camadas inferiores para entender o funcionamento da arquitetura como um todo e ir subindo para fazer alterações nas camadas posteriores; 2. Análise de extensa documentação: esta dificuldade é decorrente da anterior devido a ausência de meios para facilitar o uso da arquitetura. As mudanças realizadas no fluxo entre as camadas foram realizadas para tentar diminuir a complexidade no caminho dos dados, já que por se tratar de um sistema relativamente pequeno em relação ao conjunto de funcionalidades disponível nos SIGs não seria interessante adotar alguns padrões. O uso de padrões de projeto em sistemas simples muitas vezes acaba por prejudicar o produto final (GAMMA et al., 2000) ao invés de melhorá-lo, incrementando assim maior complexidade e etapas desnecessárias. VI. Considerações finais A utilização de arquiteturas de software tende a ajudar bastante no desenvolvimento evitando retrabalho e aproveitando soluções eficientes já consolidadas e implantadas por meio de padrões de projeto para dar maior robustez ao sistema. No entanto para que isso seja possível é necessário que a arquitetura esteja preparada para atender as necessidades de seus usuários de um modo prático e fácil com simples chamadas e incorporações de propriedades disponíveis, o que não aconteceu nesta abordagem, visto que a arquitetura da UFRN não foi desenvolvida com o objetivo de ser amplamente utilizada por outros sistemas e sim para servir de plataforma para os SIGs que estão incorporados a ela. O sistema desenvolvido com base na arquitetura da UFRN está em fase de teste e finalização de algumas funcionalidades como geração de relatório e gerenciamento de usuários. A experiência no desenvolvimento de software baseado na arquitetura da UFRN foi interessante do ponto de vista profissional pois ajudou a compreender melhor os sistemas que a UFOPA utiliza. Do ponto de vista prático, no entanto, apresentou questões que dificultaram o uso da arquitetura devido ao fato desta não ter sido criada propriamente para o fim que foi usada no SIAR, ou seja, servir de base para qualquer sistema e não apenas sub sistemas da UFRN. 116 Revista Perspectiva Amazônica Ano 3 N° 5 p.109-118 Agradecimentos Agradecemos ao professor Mestre Enoque Calvino Melo Alves pela proposta de utilizar a arquitetura da UFRN no desenvolvimento do SIAR para a UFOPA, pois foi a partir desta que surgiu a ideia de elaborar o trabalho em questão. E ao Mestre Davi Junio Silva de Oliveira por ter participado na elaboração dos requisitos do sistema com a criação de diagramas de Banco de dados que ajudaram a equipe de desenvolvimento do SIAR a entender melhor o problema a ser solucionado com o software em questão. Referências ALUR, D.; CRUPI J.; MALKS D. 2003 Core J2EE Patterns: Best Practices and Design Strategies. Prentice Hall, 2ª Edição. ALVES, C. E. 2001 Seleção de Produtos de Software Utilizando uma Abordagem Baseada em Engenharia de Requisitos. Dissertação de Mestrado. Universidade Federal de Pernambuco, Brasil. BAUER C.; KING G. 2005 Hibernate In Action, Editora Manning. BAUER, D. 1993 A reusable parts center. IBM Systems Journal, Vol. 32, n. 04. CEGE, Executive Committee for Electronic Government Disponível em: http://www.governoeletronico.gov.br/o-gov.br/legislacao/portaria-no-05de-14-de julho-de-2005. Acesso em 11 Set. 2012. DASHOFY, N.; MEDVIDOVIC AND R. TAYLOR 1998 Using Off-The-Shelf Middleware to Implement Connectors in Distributed Software . DIÁRIO OFICIAL DA UNIÃO http://www.in.gov.br/imprensa/visualiza/index.jsp?jornal=3&pagina=80& data=03/12/2010. Acessado em 27 Set. 2012. FRAKES,W. B.; ISODA, S. 1994 Success factors of systematic software reuse”. IEEE Software, Vol.11, Nº1. GAMMA, E.; HELM, R.; JOHNSON, R.; VLISSIDES, J. 2000 Padrões de Projeto: Soluções Reutilizáveis de Software Orientado a Objetos. GRISS, M. 1994 Software reuse experience at Hewlett-Packard. In: 16th International Conference on Software Engineering (ICSE). Sorrento, Italy: IEEE/CS Press. HIBERNATE Open Session in View: Hibernate Jboss Comunity. https://community.jboss.org/wiki/OpenSessionInView. Acesso em 28 Set. 2012. 117 Revista Perspectiva Amazônica Ano 3 N° 5 p.109-118 JACOBSON, M. GRISS AND P. JONSSON 1997 “Software Reuse – Architecture, Process and Organization for Business Success”, Addison-Wesley. JOOS R. 1994 Software reuse at Motorola. IEEE Software, Vol.11, n. 05. ORACLE Core J2EE Patterns: Data Access Object. http://www.oracle.com/technetwork/java/dataaccessobject-138824.html. Acesso em 27 Set. 2012 MORISIO, M.; EZRAN, M.; TULLY, C. 2002 Success and failure factors in software reuse. IEEE Transactions on Software Engineering, Vol.28, n. 04. PINHÃO Sítio Oficial da Plataforma Pinhão Paraná. Disponível em: http://www.frameworkpinhao.pr.gov.br/modules/conteudo/conteudo.php? conteudo=5#pfc_CelRUP_arquitetura.pdf. Acesso em 10 Set. 2012 ROTHENBERGER, M. A. et al. 2003 Strategies for software reuse: A principal component analysis of reuse practices”. IEEE Transactions on Software Engineering, Vol.29, n. 09. SHAW, M.; D. GARLAN. 1996 Software Architecture: Perspectives on an Emerging Discipline. New Jersey: Prentice Hall. SIMÃO, R. P. S. 2002 Características de qualidade para componentes de software. Dissertação apresentada ao curso de mestrado em informática aplicada da universidade de Fortaleza. TIBONI, A. C.; LISBOA, F. G. S.; MOTA, L. C. 2009 Uma plataforma livre para padronização do desenvolvimento de sistemas no Governo Federal. In: XXIX Congresso da Sociedade Brasileira de Computação, I Workshop de Computação Aplicada em Governo Eletrônico. Bento Gonçalves/ RS. VASCONCELOS, A. P. V. 2004 Uma abordagem para recuperação de arquitetura de software visando sua reutilização em domínios específicos. Exame de Qualificação, COPPE. Rio de Janeiro: UFRJ. WIKI Arquitetura UFRN. http://info.ufrn.br/wikisistemas/doku.php?id=desenvolvimento:arquitetura :documentacao_desenvolvimento, Acesso em 05 Set. 2012. XAVIER, J. R 2001 Criação e instanciação de arquiteturas de software específicas de domínio no contexto de uma infra-estrutura de reutilização. Dissertação de mestrado do Programa de Engenharia de Sistemas e Computação. Rio de Janeiro: COPPE/UFRJ. 118