AGILIDADE NO DESENVOLVIMENTO DE SOFTWARE COM REUSO SISTEMÁTICO Marcos Aurélio Pedroso Leandro, Marcos Antonio Quináia (Orientador - Dep. de Ciência da Computação/UNICENTRO), e-mail: [email protected] Palavras-Chave: reuso, reuso sistemático, agilidade. Resumo: Este trabalho mostra como a agilidade no desenvolvimento de software pode estar diretamente ligada ao reuso. Para isto são comparados dois protótipos construídos para uma mesma aplicação, sendo um deles sem reuso e outro com reuso. Esta comparação procura esclarecer as principais características do ciclo de vida de um software quando este é feito com reuso sistemático. Introdução O reuso propõe o desenvolvimento de sistemas a partir de produtos de software preexistentes, de modo que semelhanças entre requisitos e arquiteturas de diversos sistemas possam ser melhor exploradas. A identificação dessas semelhanças pode resultar, entre outras coisas, significativas reduções de custo e tempo em longo prazo, isto é, aumento de produtividade para as empresas desenvolvedoras. Além disso, a cada uso do produto, sua eficiência e validade são verificadas, garantindo, assim, maior qualidade e redução de erros nos produtos finais [2]. Estas características deixam claro que o desenvolvimento de software não só deve atender a demanda de hoje como também estar preparado para as mudanças futuras. O reuso, então, pode ser encarado como um forte aliado de quem busca ser ágil. Para demonstrar este ganho na prática foram feitos dois protótipos, ambos para a mesma aplicação, onde um deles foi construído sem reuso e o outro com reuso. A partir destes dois protótipos, traçou-se um comparativo destacando as principais diferenças encontradas durante e após o desenvolvimento. Materiais e Métodos Esta seção descreve as origens do reuso e suas principais técnicas, bem como a agilidade e como este conceito é entendido dentro do escopo deste trabalho. Desde 1967 o termo reuso vem se desenvolvendo como um novo paradigma da área de Engenharia de Software. A partir daí esse conceito começou a ter grande importância e é altamente reconhecido pelas empresas desenvolvedoras de software. Existem alguns custos e problemas associados com o reuso, que podem inibir a introdução desse método e significar que as reduções no custo total de desenvolvimento serão menores que as previstas. Essas dificuldades significam que o reuso sistemático não acontece por acaso, mas tem de ser planejado e introduzido por meio de um programa de reuso empregado por toda a organização. Isso não significa dizer que o reuso não sistematizado não caracterize reuso, porém, a aplicação desordenada do reuso torna os procedimentos sem resultados efetivos e requer que a empresa seja bem gerenciada e madura [2]. Quanto ao desenvolvimento ágil, é importante ressaltar que existe um grande empenho em pesquisas que resultam em metodologias de desenvolvimento, e estas são cada vez mais difundidas e usadas nos mais diferentes ambientes organizacionais. Porém, a essência desta habilidade pode ser resumida no seu conceito: “a agilidade é a característica de quem se adapta rapidamente às mudanças, devido à flexibilidade e equilíbrio” [3]. É através desta definição de agilidade que pode-se traçar um paralelo entre ser ágil e fazer reuso. Nota-se uma intersecção entre estes conceitos, ambos buscam a flexibilidade no desenvolvimento de novos sistemas. Para este trabalho, foram usadas algumas técnicas de reuso, as quais são mostradas no decorrer desta seção. São apresentadas TOOs (Técnicas Orientadas a Objeto), Padrões de Projeto e Frameworks. Dentre as TOO utilizadas, destacam-se: Herança, Polimorfismo e Reescrita de Métodos. Estas técnicas são constantemente utilizadas, mesmo que não caracterize a sistematização do reuso. Elas foram utilizadas no desenvolvimento dos dois protótipos, o que leva a crer que neste ponto os protótipos se equivalem. Os padrões de software tiveram maior atenção no desenvolvimento do protótipo com reuso. Dentre eles destacam-se o MVC (Modelo-Visão-Controlador) e o DAO (Data Access Object). MVC é um padrão arquitetural e por isso foi escolhido para ser a fundação do desenvolvimento da aplicação. O uso deste padrão trouxe uma nova perspectiva para o desenvolvimento, já que possibilitou a divisão da aplicação em camadas. As vantagens de se ter uma arquitetura baseada em camadas é porque facilita tanto na hora do desenvolvimento como, principalmente, na manutenção de um sistema. O padrão DAO torna possível isolar totalmente a aplicação da responsabilidade de persistir os dados. Colocar código SQL dentro das classes de lógica além de dificultar a manutenção do código, é algo nem um pouco elegante. A idéia é remover o código de acesso ao banco de dados das classes de lógica e colocá-lo em uma classe responsável pelo acesso ao mesmo. Assim o código de acesso ao banco de dados fica em um lugar só, ficando mais fácil dar manutenção ao mesmo. Com relação aos frameworks, foram utilizados dois: Hibernate e Spring. O Hibernate abstrai o código SQL da aplicação e permite escolher o tipo de banco de dados enquanto o programa está executando, permitindo mudar sua base sem alterar nada no seu código Java [1]. Spring é um framework open-source criado para direcionar a complexidade no desenvolvimento de aplicações. Qualquer aplicação Java pode se beneficiar do Spring em termos de simplicidade, testabilidade e flexibilidade. Este framework chamou atenção porque possui uma implementação para o MVC, integra o Hibernate que por sua vez dá apoio ao desenvolvimento com o DAO. Resultados e Discussão As diferenças entre o protótipo sem reuso e com reuso, são apresentadas a seguir. Ao desenvolver o primeiro protótipo, sem reuso, a modelagem feita levou ao uso do padrão MVC, uma vez que separou as responsabilidades da aplicação conforme este padrão propõe. Portanto não houve diferença entre as aplicações neste aspecto. Para o acesso ao banco de dados, no protótipo com reuso, foi adotado o padrão DAO. Dessa forma a aplicação não mais fica “amarrada” às atividades desenvolvidas pelo banco de dados. Ao contrário disso, o protótipo sem reuso possui um forte acoplamento entre a lógica de negócios e o banco de dados. O problema do forte acoplamento pode ser visto quando a base de dados precisar ser trocada, ou até mesmo se uma nova base for adicionada para trabalhar juntamente com a base existente. Neste caso a aplicação precisará ser alterada também. Além das camadas que o MVC separa, uma nova camada foi definida para o acesso aos dados. É entre esta camada e a camada de negócios (Modelo no MVC) que o padrão DAO deve agir, servindo de interface entre aplicação e banco de dados. Mais uma vez, a aplicação feita sem reuso, perde em questão de performance por manter o forte acoplamento. Com relação às técnicas de reuso, os frameworks foram também adotados, com a finalidade de deixar a aplicação ainda mais robusta. Foi utilizado o Hibernate como Sistema Gerenciador de Banco de Dados. Para a aplicação como um todo, o padrão Spring mostrou-se um grande aliado e foi, portanto, também adotado no desenvolvimento. Todo o esforço envolvido no desenvolvimento de tabelas de banco de dados e seus relacionamentos, no protótipo sem reuso, foi poupado no desenvolvimento com reuso devido ao uso do Hibernate. O Spring, no entanto, colaborou diminuindo o acoplamento entre as classes. Toda a parte de instanciação de objetos fica sob responsabilidade do Spring, além de implementar o MVC e integrar o Hibernate. Conclusões Cada técnica utilizada contribui de alguma forma, até mesmo complementando outras utilizadas anteriormente. Neste trabalho, a agilidade pode ser notada quando uma grande mudança aconteceu e o sistema adaptou-se rapidamente, sem precisar realizar grandes alterações no código. O reuso pode ser feito de várias formas, por isso é fundamental ter conhecimento sobre cada uma dessas formas para que o reuso seja mais efetivo. Desenvolvedores que pensam em seus projetos com reuso estão preocupados em produzir software de qualidade que possa ser reutilizado mais tarde por eles mesmos ou por outros desenvolvedores. Referências Bibliográficas [1] CAELUM, Empresa de treinamentos Java, disponível na web em: http://www.caelum.com.br, acessado em: 10/09/2007. [2] EDUARDO, A.; JORGE, M.; FERNANDO, P.o; BRITTO, R.; GOMES, Z. Reusabilidade. Disponível na web em: http://www.dei.unicap.br/~almir/seminarios/2002.2/ns06/Reusabilidade/metricas.html. Acessado em: 22/04/2007. [3] RETAMAL, Adail Muniz, Metodologias de Desenvolvimento: Histórico e Comparação, disponível na web em: http://www.heptagon.com.br/?q=node/5, acessado em 16/06/2007.