Aplicando testes unitários com dublês de testes - Revista Engenharia de Software Magazine 59
Este artigo estuda técnicas e ferramentas que auxiliam no desenvolvimento de testes automatizados e aplica em um estudo de caso, mostrando como implementar esses testes, as vantagens de utilizá-los e as dificuldades encontradas.
Recursos especiais neste artigo:
Conteúdo sobre Arquitetura.
Autores: Douglas Miranda da Silva, Renan Domingues de Siqueira e Rodrigo Martins Pagliares
Alguma das principais preocupações no desenvolvimento de um software é garantir que ele funcione de maneira correta cumprindo todas as regras pelo qual ele foi desenvolvido. Uma vez que requisitos mudam consideravelmente durante o desenvolvimento, é necessário que o desenvolvedor seja capaz de fazer as alterações necessárias sem medo de que elas possam causar erros inesperados. Com isso, testes são inseridos no processo de desenvolvimento para a garantia da sua qualidade.
Teste de software é o processo de execução de um produto para determinar se ele atingiu suas especificações e funcionou corretamente no ambiente para o qual foi projetado. O seu objetivo é revelar falhas em um produto, para que as causas dessas falhas sejam identificadas e possam ser corrigidas pela equipe de desenvolvimento antes da entrega final. Por conta dessa característica das atividades de teste, dizemos que sua natureza é “destrutiva”, e não “construtiva”, pois visa ao aumento da confiança de um produto através da exposição de seus problemas, porém antes de sua entrega ao usuário final.
Este artigo estuda técnicas e ferramentas que auxiliam no desenvolvimento de testes automatizados e aplica em um estudo de caso, mostrando como implementar esses testes, as vantagens de utilizá-los e as dificuldades encontradas no decorrer da implementação.
Muitos conceitos fundamentais de como testar um sistema orientado a objetos utilizando testes unitários serão apresentados. Os testes unitários focam em uma única classe. Existem para certificar de que o código funciona. Eles controlam todos os aspectos no contexto em que a classe é testada, através de substituição de colabores reais por dublês.
Em que situação o tema é útil
Algumas das principais preocupações no desenvolvimento de um
software são aumentar a garantia da sua qualidade e confiabilidade com menores
custos. Uma das maneiras de aumentar as garantias de que um software funciona
corretamente é através de testes. Testes não automatizados são normalmente
dispendiosos por serem repetitivos, é necessário que o desenvolvedor ou
testador execute todo o processo de teste passo a passo para certificar que o
software estará funcionando corretamente. Assim, essa é uma tarefa muito
propensa a erros.
Testes de software podem ser definidos como o processo de avaliar um sistema ou um componente de um sistema por meios manuais ou automáticos para verificar se ele satisfaz os requisitos especificados ou identificar diferenças entre resultados esperados e obtidos. O objetivo é identificar as falhas de um projeto de software, possibilitando às equipes de desenvolvimento corrigirem as não conformidades antes da entrega do produto final e poder estimar a confiabilidade e a qualidade do produto.
Testes manuais são normalmente dispendiosos por serem repetitivos. É necessário que o desenvolvedor ou testador execute todo o processo de teste passo a passo. Com isso, frameworks para testes foram desenvolvidos em várias linguagens de programação para automatizar o processo que era feito de forma manual através de depuradores. Estes frameworks permitem que os testes sejam escritos apenas uma vez e executados inúmeras vezes. Como os testes automatizados são executados pelo computador, então os resultados são verificados sem falha, e como principal vantagem, executam milhares deles em um curto período de tempo.
Este artigo demonstra como aplicar técnicas de testes unitários para testar sistemas orientados a objetos, isolando suas classes de suas dependências. Para a aplicação dessas técnicas, foi adotado como estudo de caso um sistema de ponto de venda. Este sistema é o PDV ProxyGER. Um sistema PDV é uma aplicação usada (em parte) para registrar vendas e cuidar de pagamentos; é tipicamente usada por lojas de varejo.
O que são testes unitários com dublês de testes?
Testes unitários focam em uma única classe. Eles existem para certificar que o código funciona. Eles controlam todos os aspectos no contexto em que a classe é testada através da substituição de colaboradores reais por dublês. O teste unitário não tem conhecimento de nenhum sistema externo ou outras camadas do próprio sistema. Cada parte deve ser testada de maneira isolada.
A maneira correta de garantir que uma classe está apresentando um comportamento correto é testar seus métodos de maneira isolada. Porém, em sistemas construídos em linguagens orientadas a objetos, diversas classes se relacionam e seus métodos dependem de serviços realizados por métodos de outras classes, o que dificulta o isolamento da mesma de dependências externas. Essas dependências causam as chamadas entradas e saídas indiretas.
As dependências vão afetar diretamente o modo como os testes serão desenvolvidos e para isto, dois conceitos serão apresentados segundo:
· SUT (System Under Test): a parte do sistema que está sendo testada (sistema sobre teste).
· DOC (Depend On Component): qualquer componente exigido pelo SUT para cumprir as suas funções, ou seja, as suas dependências."
[...] continue lendo...Artigos relacionados
-
Artigo
-
Vídeo
-
Vídeo
-
DevCast
-
DevCast