O meu trabalho, no LabMOL, é cuidar de um compilador, feito em Java, para uma linguagem ainda em desenvolvimento. Não estou a trabalhar neste compilador há muito tempo. Tem uma base de código com alguma dimensão, aproximadamente, 80 classes.
Durante esta semana, tenho estado a actualizar o compilador para estar de acordo com a última especificação da linguagem. Isto implica a alteração de regras sintáticas, forma como são escritos programas nessa linguagem, e alteração de regras semânticas, o significado dos programas feitos nessa linguagens mudou.
Para ajudar-me a conhecer o código e agilizar a forma como são verificada a qualidade do compilador, tenho utilizado o TDD. Tenho seguido o procedimento à risca:
- criar testes antes da implementação
- passar os testes
- refabricação
Não me canso de achar que o TDD é espectacular. Obriga-me a ver como funcionam todas as classes, gradualmente. Obriga-me a testar todas as classes, relacionadas com um comportamento. Obriga-me a usar o meu código exaustivamente, o que me faz dar nomes a métodos/variáveis com mais sentido. Obriga-me a escrever código mais desacopulado e limpo. Obriga-me a isolar código testado, reduzindo a minha preocupação com secções de uma aplicação, o que me ajuda a concentrar melhor na próxima alteração.
Assim que tiver algum tempinho, coloco o meu relatório do trabalho de final de curso em-linha, onde explico este procedimento com mais alguma profundidade.