Informações Principais
     Resumo
     Abstract
     Introdução
     Conclusão
     Download
  
  
  
 
Introdução
 
 
Acadêmico(a): Eduardo Mafra
Título: Testes de Unidade para Programação Orientada a Aspectos em Delphi
 
Introdução:
A qualidade hoje em dia é valorizada em vários setores e conduz a uma evolução natural. Assim como todos os setores, a informática busca aprimorar a qualidade de seus produtos e serviços. O tema central da engenharia de software é a produção de um software de alta qualidade. A engenharia de software permite que se controle o processo de desenvolvimento, fornecendo ao engenheiro de software as bases para a construção de um software de alta qualidade (PARRINGTON; ROPER, 1989, p. 9, tradução nossa; INTHURN, 2001, p. 11). Um dos critérios indispensáveis na medição da qualidade de software é a verificação de confiabilidade e funcionalidade de sistema. Segundo Pressman (2002, p. 724), qualidade de software é definida como \\\'conformidade a requisitos funcionais e de desempenho explicitamente declarados, padrões de desenvolvimento claramente documentados e a características implícitas que são esperadas de todo software profissionalmente desenvolvido.\\\' Parrington e Roper (1989, p. 9, tradução nossa) afirmam que \\\'fatores que contribuem para a qualidade do software são: especificações formais, análise de sistemas, linguagens de programação mais avançadas e ferramentas de suporte. Porém, o fator chave que determina a qualidade do software são os testes.\\\' Devido aos altos custos de manutenibilidade, as empresas investem cada vez mais na qualidade de seus sistemas antes de os mesmos entrarem em funcionamento comercialmente. Freqüentemente, gasta-se muito tempo e dinheiro em testes e na correção dos erros encontrados. Teste de software é por si só, uma atividade muito dispendiosa e o custo de não testar é potencialmente muito maior (PARRINGTON; ROPER, 1989, p. 14, tradução nossa; INTHURN, 2001, p. 52). O processo de teste é uma parte integral de qualquer programa de qualidade e, para um produto ficar estável em seu ciclo de vida conforme almeja-se, o mesmo deve ser testado (PARRINGTON; ROPER, 1989, p. 26, tradução nossa). \\\'O teste deve ser considerado uma atividade necessária de coleta de informações, de modo a permitir que avaliemos nosso trabalho com eficiência\\\' (HETZEL, 1987, pg. 7). O teste de software não pode ser considerado uma fase ou etapa do ciclo de desenvolvimento, mas uma atividade abrangendo todo o ciclo de desenvolvimento. Para Pol, Teunissen e Veenendaal (2002, p. 5, tradução nossa), \\\'teste é apenas um dos muitos esforços para a qualidade de software sendo que o objetivo principal é prevenção e não a detecção de defeitos do produto final.\\\' Durante o processo de desenvolvimento de um software existem atividades que procuram garantir a qualidade do produto final; entretanto, apesar dos métodos, técnicas e ferramentas utilizadas, falhas no produto ainda podem ocorrer. Assim, a etapa de teste, a qual representa uma das atividades de garantia de qualidade, é de grande importância para a identificação e eliminação de falhas, representando assim o último passo no desenvolvimento do software. (INTHURN, 2001, p. 51). O estudo dos métodos de testes visa estabelecer um método apropriado para reduzir as taxas de erro em programas de uma maneira mais eficaz e em um tempo considerável, melhorando a qualidade do software. O surgimento da técnica de Programação Orientada a Objetos (POO) abriu portas para a produção de softwares com maior qualidade. A mesma propôs uma mudança radical na maneira de se conceber softwares e facilitou a aplicação dos métodos de testes, sobretudo os testes de unidade. Os testes de unidade têm por objetivo verificar um elemento que possa ser logicamente tratado como uma unidade de implementação, assegurando assim, que esta unidade de implementação opera de forma correta. Em produtos implementados com a tecnologia de POO, uma unidade é tipicamente uma classe (PAULA FILHO, 2001, p. 185). Porém, com o crescimento dos sistemas e o respectivo aumento de sua complexidade, observou-se o surgimento de problemas como, por exemplo, entrelaçamento e espalhamento de código, que as técnicas de POO são incapazes de resolver (KICZALES, et al., 1997). Assim nasceu a Programação Orientada a Aspectos (POA), com o intuito de apresentar soluções para estes problemas. Para Resende e Silva (2005, p. 12), \\\'a POA tem por objetivo separar os níveis de preocupação durante o desenvolvimento de software. [...] e a proposta é poder desenvolver as partes do sistema sem se preocupar com as demais partes.\\\' Este trabalho de separar os níveis de preocupação denomina-se separação de interesses. A POA é uma nova técnica de programação concebida para permitir o uso mais efetivo do princípio da separação de interesses no desenvolvimento de softwares. Contudo, até agora, a maioria das discussões sobre POA tem focado nos conceitos básicos sobre a mesma, deixando para um segundo momento os problemas relacionados com o desenvolvimento de software orientado a aspectos (LEMOS et al., p. 55). A POA é reconhecida como uma técnica que facilita a manutenção dos diferentes interesses e a legibilidade de código, gerando assim, sistemas com melhores arquiteturas. Entretanto, a sua simples utilização não evita que erros sejam introduzidos ao longo do desenvolvimento do software e, dessa maneira, técnicas de verificação, validação e teste continuam sendo importantes no processo de desenvolvimento de software orientado a aspectos (LEMOS et al., p. 55). Em Oliveira (2006), foi desenvolvido um protótipo de um weaver para geração de código na linguagem Object Pascal com suporte a programação orientada a aspectos. O weaver recebe como entrada um projeto Delphi, e um ou mais programas de aspectos em uma linguagem própria da ferramenta para especificação dos mesmos. Como saída, a ferramenta gera um projeto Delphi que mescla as funcionalidades dos programas de aspectos com o projeto Delphi fornecidos como entrada. O ambiente de desenvolvimento Delphi não possui suporte nativo a testes de unidade. Para suprir tal necessidade, o framework DUnit oferece um conjunto de classes que permite ao desenvolvedor implementar classes de testes para automatizar a execução dos testes de unidade. O DUnit não automatiza a criação dos testes de unidade, o mesmo apenas fornece uma estrutura para a implementação dos testes e executa as classes implementadas pelo desenvolvedor a partir do plano de testes, revelando o sucesso ou falha do código testado. Este trabalho permite que o desenvolvedor elabore e automatize os testes de unidade em Object Pascal com suporte do DUnit. Considerando a importância da técnica de testes de unidade e a não existência da mesma no ambiente Delphi e considerando a inserção da técnica de POA neste mesmo ambiente, observa-se a necessidade de estender a ferramenta de Oliveira (2006) criando funcionalidades que auxiliem o desenvolvedor a elaborar os testes unitários nos aspectos e nas classes aspectadas .