Autor: Luís Sousa

Development

O desenvolvimento de software é um trabalho exigente e passível de falhas. Nas abordagens tradicionais de programação a maioria dos erros acontecem durante a fase de compilação. Estas abordagens levam a que bugs sejam detectados numa fase posterior, muitas das vezes quando a aplicação está a ser usada pelo user. É neste contexto que surge o Test Driven Development (TDD). O TDD é uma técnica de desenvolvimento de software, muitas vezes associada a metodologias ágeis, que consiste em pequenas iterações de desenvolvimento onde o caso de teste, que cobre uma funcionalidade da aplicação, é escrito antes de ser implementada a própria funcionalidade. 

O processo de desenvolvimento de software segundo o TDD, também conhecido por ciclo Red/Green/Refactor, resume-se à execução repetida dos passos: escrever um teste unitário que falhe antes de escrever qualquer código funcional (Red); escrever o código funcional até que o teste unitário passe (Green); no final, caso seja necessário, efectuar uma reestruturação do código, remover as redundâncias e melhorando a própria estrutura do mesmo, assegurando que os testes unitários continuam todos a ter sucesso (Refactor).  O TDD recomenda ainda a automatização dos testes de forma que o seu código seja sempre compilado e executado como parte integrante do processo normal de builds. Desta forma, garante-se que a adição de uma nova funcionalidade ou a reestruturação de código não quebram as funcionalidades já implementadas. 

As Vantagens

A abordagem sugerida pelo TDD obriga o programador a focar-se primeiro no resultado final e em segundo nas soluções para o atingir, tornando o próprio desenho da solução mais simples e pragmático. A utilização do TDD diminui o número de bugs e permite que a aplicação final seja mais robusta uma vez que se garante que o código, para o qual se implementou testes, funciona.

O tempo necessário para manutenção da aplicação, resultante da resolução de erros, é menor quando comparado com as abordagens tradicionais onde o código só é testado muito tempo após a implementação. Já com o TDD a implementação de código modular e flexível incentiva a programação em camadas. Isto é, obriga o programador a pensar em pequenos pedaços de código que possam ser testados de forma isolada e independente. Como consequência a própria reestruturação de código torna-se mais fácil de implementar, uma vez que proporciona uma maior segurança de que essa reestruturação não irá quebrar código que funcionava até então. Além disso, a própria quantidade de código funcional é também, por norma, inferior ao das abordagens tradicionais. 

Obstáculos/Dificuldades

Um dos principais obstáculos por parte do programador é a relutância em adoptar esta técnica, argumentando que têm de escrever mais código que o normal e que a implementação de testes é uma perda de tempo. A própria curva de aprendizagem é algo extensa o que poderá contribuir igualmente para essa resistência. Para linguagens de programação para as quais não exista uma framework de testes unitários, implementar o TDD pode-se tornar pesado e difícil.

O TDD é também difícil de implementar quando o software foi desenvolvido em linguagens de programação legadas ou quando não existe documentação de suporte para aplicações muito antigas, existindo o receio de ao alterar o código num sítio que isso possa ter repercussões noutro lado.

As vantagens da utilização do TDD superam fortemente as desvantagens. O argumento de que é necessário implementar mais código do que nas abordagens tradicionais não chega para superar as vantagens de obter um produto final com menos bugs e com períodos de manutenção mais curtos. O TDD não será certamente a solução para todos os problemas, contudo, ajuda os programadores a melhorar a forma como programam, entregando soluções mais fiáveis, modulares, flexíveis, de mais fácil manutenção indo ao encontro dos requisitos do Cliente.