© Casa do Código
Todos os direitos reservados e protegidos pela Lei nº9.610, de 10/02/1998.
Nenhuma parte deste livro poderá ser reproduzida, nem transmitida, sem auto-
rização prévia por escrito da editora, sejam quais forem os meios: fotográficos,
eletrônicos, mecânicos, gravação ou quaisquer outros.
Casa do Código
Livros para o programador
Rua Vergueiro, 3185 - 8º andar
04101-300 Vila Mariana São Paulo SP Brasil
Casa do Código
Agradecimentos
Essa talvez seja a seção mais difícil de se escrever, pois a quantidade de pessoas que participaram direta ou indiretamente do livro é muito grande.
Vou começar agradecimento meu pai, mãe e irmão, que a todo momento me
apoiaram na decisão de fazer um mestrado, entender como ciência deve ser feita,
e que sofreram junto comigo nos momentos de grande stress (que todo mestrado
proporciona!).
Agradeço também ao meu orientador de mestrado e doutorado, prof. Dr. Marco
Aurelio Gerosa, que me ensinou como as coisas funcionam do lado de lá. Sem
ele, acho que esse livro seria muito diferente; seria mais apaixonado, porém menos
verdadeiro. Se meu texto olha TDD de maneira fria e imparcial, a culpa é dele.
Os srs. Paulo Silveira e Adriano Almeida também merecem uma lembrança.
Mesmo na época em que a Casa do Código não existia de fato, eles já haviam aceitado
a ideia do livro de TDD. Obrigado pela confiança.
Todas as pessoas das últimas empresas em que atuei também me ajudaram muito
com as incontáveis conversas de corredor sobre o assunto. Isso com certeza enrique-
ceu muito o texto.
Agradeço também aos amigos José Donizetti, Guilherme Moreira e Rafael Fer-
reira, que gastaram tempo lendo o livro e me dando sugestões de como melhorar.
Por fim, obrigado a você que está lendo esse livro. Espero que ele ajude.
i
Casa do Código
Quem sou eu?
Meu nome é Mauricio Aniche, e trabalho com desenvolvimento de software há por
volta de 10 anos. Em boa parte desses 10 anos, atuei como consultor para diferentes
empresas do mercado brasileiro e internacional. Com certeza, as linguagens mais
utilizadas por mim ao longo da minha carreira foram Java, C# e C.
Como sempre pulei de projeto em projeto (e, por consequência, de tecnologia
em tecnologia), nunca fui a fundo em nenhum delas. Pelo contrário, sempre foquei
em entender princípios que pudessem ser levados de uma para outra, para que no
fim, o código saísse com qualidade, independente da tecnologia.
Em meu último ano da graduação, 2007, comecei a ler mais sobre a ideia de
testes automatizados e TDD. Achei muito interessante e útil a ideia de se escrever
um programa para testar seu programa, e decidi praticar TDD, por conta própria,
para entender melhor como ela funcionava.
Gostei muito do que vi. De 2007 em diante, resolvi praticar, pesquisar e divulgar
melhor minhas ideias sobre o assunto. Comecei devagar, apenas blogando o que
estava na minha cabeça e que gostaria de feedback de outros desenvolvedores. Mas
para fazer isso de maneira mais decente, resolvi ingressar no programa de Mestrado
da Universidade de São Paulo. Lá, pesquisei sobre os efeitos da prática de TDD no
design de classes.
Ao longo desse tempo participei da grande maioria dos eventos relacionados
ao assunto. Palestrei nos principais eventos de métodos ágeis do país (como Agile
Brazil, Encontro Ágil), de desenvolvimento de software (QCON SP e DNAD), entre
outros menores. Cheguei a participar de eventos internacionais também; fui o único
palestrante brasileiro no Primeiro Workshop Internacional sobre TDD, em 2010, na
cidade de Paris. Isso mostra também que tenho participado dos eventos acadêmicos.
Em 2011, apresentei um estudo sobre TDD no WBMA (Workshop Brasileiro de Mé-
todos Ágeis), e em 2012, no maior simpósio brasileiro sobre engenharia de software,
o SBES.
iii
Casa do Código
Atualmente trabalho pela Caelum, como consultor e instrutor. Também sou
aluno de doutorado pela Universidade de São Paulo, onde continuo a pesquisar sobre
a relação dos testes de unidade e qualidade do código.
Portanto, esse é meu relacionamento com TDD. Nos últimos anos tenho olhado
ele de todos os pontos de vista possíveis: de praticante, de acadêmico, de pesquisador, de apaixonado, de frio.
Esse livro é o relato de tudo que aprendi nesses últimos anos.
iv
Casa do Código
Prefácio
TDD é uma das práticas de desenvolvimento de software sugeridas por diversas me-
todologias ágeis, como XP. A ideia é fazer com que o desenvolvedor escreva testes
automatizados de maneira constante ao longo do desenvolvimento. Mas, diferen-
temente do que estamos acostumados, TDD sugere que o desenvolvedor escreva o
teste antes mesmo da implementação.
Essa simples inversão no ciclo traz diversos benefícios para o projeto. Baterias de
testes tendem a ser maiores, cobrindo mais casos, e garantindo uma maior qualidade
externa. Além disso, escrever testes de unidade forçará o desenvolvedor a escrever
um código de maior qualidade pois, como veremos ao longo do livro, para escrever