De que se trata o artigo:

O artigo aborda a prática do desenvolvimento orientado a testes, descreve seus conceitos e apresenta um exemplo introdutório para ilustrar. Alem disso, discute seus benefícios, implicações e alguns outros aspectos relevantes.


Para que serve:

O desenvolvimento orientado a testes sistematiza o processo de concepção, escrita e verificação do código de forma integrada e simultânea. A prática ajuda o programador a ter controle sobre o design de seu código e a mantê-lo com um nível de qualidade ótimo ao longo de todo o processo.

Em que situação o tema útil:

É útil em qualquer tipo de desenvolvimento de software, especialmente para equipes e projetos sobrecarregados por gambiarras e bugs recorrentes, onde as equipes gastam mais tempo consertando problemas que gerando valor real para seus usuários.

Desenvolvimento Orientado a Testes:

A prática do Desenvolvimento Orientado a Testes é um dos pilares fundamentais da metodologia XP e, portanto uma das fundações do movimento ágil como um todo. Esse artigo aborda de forma introdutória a prática, apresentando seus conceitos, desenvolvendo um exemplo e discutindo seus principais efeitos e desafios. A intenção aqui é apenas apresentar a prática, criar interesse e abrir as portas do leitor para a pesquisa mais aprofundada sobre o assunto.

Saber programar, conhecer as tecnologias, frameworks e ferramentas, é apenas uma pequena parte do que é necessário para transformar boas ideias em grandes softwares. Entendimento do problema, planejamento, coordenação, projeto técnico, implementação, testes e suporte são alguns dos aspectos observados pela disciplina da Engenharia de Software.

Essa disciplina, em seus pouco mais que 40 anos de desenvolvimento, partiu das fases iniciais de desestruturação completa e chegou à época dos grandes processos, bem definidos, estruturados e orientados por modelos formais de qualidade. Pulando de um extremo para o outro, baseou-se em processos tão pesados e burocráticos que fizeram emergir a mudança de paradigmas pelo qual estamos passando nesse exato momento.

O movimento das Metodologias Ágeis de Desenvolvimento de Software vem ganhando força nos últimos anos, buscando o equilíbrio por meio da reformulação de seus princípios fundamentais. Relações humanas, colaboração, pragmatismo e adaptabilidade são algumas palavras chave dessa mudança, muito bem expressa pelos dizeres do que seria a pedra fundamental do movimento: o manifesto ágil, reproduzido na Figura 1.

Figura 1. O manifesto ágil.

Extreme Programming (XP) é uma das mais características metodologias dessa família, foi popularizada por Kent Beck durante a década de 90, e fundamenta-se sobre cinco grandes valores: Simplicidade, Comunicação, Feedback, Respeito e Coragem.

A prática do Desenvolvimento Orientado a Testes (Test-Driven Development) é a mais minuciosa das técnicas que compõem o XP. Ela expressa os princípios ágeis no nível das microtarefas do processo de criação de código, a cada linha de código escrita. Além disso, TDD induz o design incremental sustentável do código, que é o que viabiliza tecnicamente a abordagem iterativa e adaptativa do planejamento como um todo – um dos pontos mais característicos nos métodos ágeis.

Em seguida serão apresentados os conceitos básicos da automação de testes e o processo de desenvolvimento baseado neles. Logo após, veremos um exemplo introdutório, para ilustrar o processo mais de perto, e então serão discutidos os benefícios e as implicações da técnica.

Testes pra quê?

Sendo a prática do TDD baseada no conceito de testes, podemos começar refletindo sobre sua função no processo de desenvolvimento. Classicamente, testes de software são escritos com a finalidade de avaliar a qualidade do software final produzido e de encontrar defeitos.

O Desenvolvimento Orientado a Testes amplia essa interpretação e dá aos testes outras funções: especificar o comportamento do software a ser criado, orientar as atividades de programação e dar feedback rápido sobre cada pequena decisão de design tomada.

Em outras palavras, os testes passam a ser instrumento de design, uma ferramenta de modelagem, cuja função agora passa a se assemelhar mais a elementos como UML e design patterns.

Testes automáticos

A automação é talvez a característica que mais diferencia os testes em TDD dos testes de software em sua concepção mais tradicional, como estamos acostumados a estudar.

Os testes passam a ser não mais uma atividade específica que alguém realiza, avaliando um programa manualmente usando um software e anotando eventuais anomalias. Um teste aqui se trata de um pequeno trecho de código (um método ou procedimento, por exemplo) que executa o programa sendo testado e avalia os resultados automaticamente, sem intervenção humana, como ilustrado na Figura 2.

Figura 2. Testes automáticos.

Note que nesse caso, o próprio teste, além de executar o programa, avalia os resultados produzidos em relação a valores esperados. Ele é auto-verifiável. Não precisa de nenhum tipo de intervenção humana para decidir se o nosso programa está ou não funcionando corretamente.

Com o tempo, é possível acumular os testes e executar todos eles em segundos, com o apertar de um botão. Essa coleção de testes (ou suite) testa o código em retrospecto, varrendo trechos de código que foram escritos há meses atrás, ganhando por isso a denominação de ‘suite de regressão’.

...
Quer ler esse conteúdo completo? Tenha acesso completo