TTDDDD 
AA EEssssêênncciiaa ddoo MMaannttrraa 
Trilha Agile #TDC2014 
Dionatan Moura 
about.me/dionatanmoura
Sobre o Palestrante. 
● Trabalho como coach ágil nas equipes de desenvolvimento de 
software na PROCERGS, buscando a melhor entrega de valor ao 
cidadão gaúcho. Mestre em Engenharia de Software na UFRGS, 
graduado em Ciência da Computação na UFRGS. Sou generalista 
especialista. Trabalho com Java desde 2006, sou coordenador do 
RSJUG e da trilha Java do TDC Porto Alegre. Ministro palestras 
e facilito Coding Dojos em eventos de métodos ágeis, tais como 
do TDC, GUMA-RS e GUTS-RS. Possuo as certificações SAFe 
Agilist SA, Scrum Master PSM I, Product Owner CSPO, Certified 
Scrum Developer CSD, Java Programmer OCPJP, testes de 
software CTFL, gestão de TI ITILv3 e melhoria de processos 
de software MPS-BR.
Introdução ao TDD 
➔ Extreme Programming 
➔ TDD 
➔ Refatoração 
➔ xUnit 
➔ Clean Code 
➔ Baby Steps 
➔ Patterns para TDD 
➔ Red Bar 
➔ Test 
➔ Green Bar 
➔ Design Patterns 
➔ ATDD 
➔ BDD 
➔ Agile Testing 
➔ Coding Dojos 
➔ Fechamento
“Test-Driven Development (TDD) é uma técnica para 
contrução de software que guia o desenvolvimento de 
software através da escrita de testes. 
http://commons.wikimedia.org/wiki/File:Creador_de_la_metodologia_xp.jpg 
Kent Beck
https://5com1001-0912.wikispaces.com/
EEssttrraattééggiiaa 
PPoorrttffóólliioo 
PPrroodduuttoo 
RReelleeaassee 
IItteerraaççããoo 
DDiiáárriiaa 
http://alisina.org/blog/2013/10/31/taqiyah-is-onion-shaped/ 
TTDDDD
Regras 
I. Escrever novo código somente se 
já existir um teste automatizado 
falhando 
II. Eliminar duplicação
3 Passos 
Escreva um teste 
para o próximo 
pedaço da 
funcionalidade. 
http://www.pro-tools-expert.com
3 Passos 
Escreva um teste 
para o próximo 
pedaço da 
funcionalidade. 
Escreva código 
funcional até o 
teste passar. 
Refatore o código 
novo (e antigo) 
até ficar bem 
estruturado. 
http://www.pro-tools-expert.com
3 Passos 
Escreva um teste 
para o próximo 
pedaço da 
funcionalidade. 
Escreva código 
funcional até o 
teste passar. 
Refatore o código 
novo (e antigo) 
até ficar bem 
estruturado. 
http://www.pro-tools-expert.com
Mantra do TDD 
http://agileinaflash.blogspot.com.br/2009/02/red-green-refactor.html
TDD.equals(TFD + Refatoração);
TDD.equals(TFD + Refatoração); 
TFD 
Test 
First 
Development (code)
TDD.equals(TFD + Refatoração); 
Refatoração 
“Uma mudança feita na 
estrutura interna do 
software para deixá-lo 
mais fácil de entender e 
barato de modificar sem 
mudar seu 
comportamento 
observável.” 
Martin Fowler 
http://martinfowler.com
Refatoração no TDD 
Comportamento 
Observável 
== 
Testes
xUnit para TDD
“O objetivo do TDD é 
escrever clean code que funciona.” 
Ron Jeffries 
https://twitter.com/RonJeffries
Clean Code 
http://programmer.97things.oreilly.com/wiki/index.php/Uncle_Bob
TFD 
previne 
defeitos!
Refatoração 
previne 
defeitos!
TDD 
previne 
defeitos!
Mas como escrever código para rodar o teste, 
e com uma refatoração por vez?
Baby 
Steps 
http://rusbase.com/news/author/williamlearn2ru/learn2-baby-steps/
Mas cuidado! 
https://www.mulberrybush.co.uk/
Lembre-se.
http://agileinaflash.blogspot.com.br/2009/02/red-green-refactor.html
Patterns para TDD
Patterns para TDD 
Test 
Como testar software? 
Escreva um teste automatizado.
Patterns para TDD 
Isolated Test 
Como os testes devem afetar 
uns aos outros? 
De modo algum.
Patterns para TDD 
Test List 
O que testar? 
Comece uma lista com os testes que você 
sabe.
Patterns para TDD 
Test First 
Quando escrever os testes? 
Antes de escrever o código (a ser 
testado).
Patterns para TDD 
Assert First 
Quando escrever os asserts? 
Tente por primeiro.
Patterns para TDD 
Test Data 
Quais dados usar para os 
testes? 
Dados que facilitam a leitura dos testes e a 
continuidade.
Patterns para TDD 
Evident Data 
Como representar o objetivo 
dos dados? 
Com um relacionamento evidente entre 
resultado esperado e resultado real
Red Bar Patterns
Red Bar Patterns 
One Step Test 
Qual teste pegar da lista? 
O que vai te ensinar algo e que se tem 
certeza de implementar.
Red Bar Patterns 
Starter Test 
Com qual caso de teste 
começar? 
Comece por uma variante da operação que 
faz nada.
Red Bar Patterns 
Learning Test 
Quando escrever testes para 
software externo? 
Antes da primeira vez de utilizar uma nova 
funcionalidade externa.
Red Bar Patterns 
Another Test 
Como manter uma discussão 
técnica fora do tópico? 
Adicione na lista e volte ao tópico original.
Red Bar Patterns 
Regression Test 
O que fazer com um defeito 
relatado? 
Escreva o melhor teste que falhe.
Red Bar Patterns 
Break 
O que fazer quando se está 
cansado ou travado? 
Faça uma pausa.
Red Bar Patterns 
Do Over 
O que fazer quando se está 
perdido? 
Jogue fora o código e recomece.
Red Bar Patterns 
Cheap Desk, Nice Chair 
Qual configuração física para 
TDD? 
Tenha uma cadeira muito boa, economizando 
no resto da mobília.
Testing Patterns
Testing Patterns 
Mock Object 
Como testar um objeto com 
recursos caros ou complicados? 
Crie uma versão fake com respostas 
constantes.
Testing Patterns 
Broken Test 
Como deixar uma sessão sozinha 
de programação? 
Deixe o último teste quebrado.
Testing Patterns 
Clean Check-in 
Como deixar uma sessão em time 
de programação? 
Deixe todos os testes rodando.
Green Bar Patterns
Green Bar Patterns 
Fake It 
Qual será a primeira 
implementação do teste? 
Retorne uma constante, e depois refatore 
em variáveis.
Green Bar Patterns 
Triangulate 
Como fazer a maior abstração 
conservativa com testes? 
Abstraia apenas quando houver 2+ testes. 
(Similar à indução matemática)
Green Bar Patterns 
Obvious Implementation 
Como implementar operações 
simples? 
Apenas implemente-as.
Green Bar Patterns 
One to Many 
Como implementar uma operação 
de coleção de objetos? 
Implemente inicialmente sem coleções.
Design Patterns 
bases para TDD
Design Patterns bases
E para não esquecer.
http://agileinaflash.blogspot.com.br/2009/02/red-green-refactor.html
Teste é o foco do 
TDD?
“The focus of TDD is design. 
Test is a (nice) side effect.” 
Marco Trincardi
TDD usa apenas Unit 
Testing?
“O ato de escrever um 
teste de unidade é mais 
um ato de design do 
que de verificação.” 
Uncle Bob (Robert C. Martin) 
http://www.techcn.com.cn
Mas e o ATDD? 
http://greatmiddleway.wordpress.com
<Título> 
Como um <papel de usuário> 
Eu quero <objetivo> 
Para que <razão> 
ATDD 
Acceptance Test-Driven 
Development 
Critério de Aceitação 
Dado que <pré-condição> 
Quando <ação> 
Então <resultado>
ATDD TDD
Ah! E o BDD? 
http://greatmiddleway.wordpress.com
BDD é um processo de dev de SW 
http://blog.bughuntress.com/
TDD é sobre design das funcionalidades 
ATDD é sobre validação das funcionalidades 
BDD é sobre comunicação das funcionalidades
Agile Testing 
http://lisacrispin.com
JUnit Test Infected: 
Programmers Love Writing 
Tests 
http://junit.sourceforge.net/doc/testinfected/testing.htm
Como aprender na prática 
TDD?
DDoojjooss 
http://en.wikipedia.org/wiki/Dojo
Coding Dojos 
● Ambiente de Aprendizado! 
– Sem competição 
– Colaborativo 
– Ambiente divertido 
– Todos níveis de conhecimento são 
bem-vindos 
– Segurança em tentar novas ideias
Coding Dojos 
● Infra 
– Local com cadeiras suficientes 
– Um computador ao menos 
– Projetor
Coding Dojos 
● Diversos estilos 
– Prepared Kata 
– Randori Kata 
– Kake Kata
Coding Dojos 
● Prepared Kata 
– O facilitador mostra como fazer do início, 
com TDD e Baby Steps. 
– Cada passo deve fazer sentido para 
todos. 
– As pessoas devem interromper somente se 
não entenderem.
Coding Dojos 
● Randori Kata 
– O desafio é resolvido em pares (piloto e copiloto) 
– Todos são convidados a ajudar 
– Cada par tem um timebox (5-7 min) 
● Baby Steps 
● TDD 
– Comentários e críticas somente no verde 
– Silêncio no vermelho 
● Ao final, piloto sai do par, copiloto vira piloto 
e entra um novo copiloto
Coding Dojos 
● Kake Kata 
– Nível mais avançado 
– Diversos pares simultâneos 
● Randori Katas em paralelo 
– Alta diversidade 
– Alto nível de aprendizado
Por que Codingo Dojos com 
TDD?
“Ensinar não é transferir 
conhecimento, mas criar 
as possibilidades para a 
sua própria produção ou 
a sua construção.” 
Paulo Freire 
http://aosmestresdaeducacao.blogspot.com.br
RSJUG 
Roman Numerals
RSJUG 
TroLolo 
(FizzBuzz)
RSJUG 
Construindo uma DSL 
com Java e ANTLR
RSJUG 
Testando aplicações 
Java Web fora do 
container
RRSSJJUUGG 
TTeesstteess ddeennttrroo ddoo 
ccoonnttaaiinneerr JJaavvaa ccoomm 
AArrqquuiilllliiaann
UUFFRRGGSS 
CCiiêênncciiaa ddaa CCoommppuuttaaççããoo 
NNúúmmeerrooss RRoommaannooss
UUFFRRGGSS 
CCiiêênncciiaa ddaa CCoommppuuttaaççããoo 
NNúúmmeerrooss RRoommaannooss
UUFFRRGGSS 
CCiiêênncciiaa ddaa CCoommppuuttaaççããoo 
NNúúmmeerrooss RRoommaannooss 
Linha 1 Linha 2 Linha 3 Linha 4 
12 
10 
8 
6 
4 
2 
0 
Coluna 1 
Coluna 2 
Coluna 3
Mas como começar já 
amanhã?
http://www.cakeeventsblog.com
Implicações Sociais 
✔ Menos surpresas desagradáveis 
✔ QA proativo 
✔ Maior colaboração entre o time 
✔ Entrega contínua
E não esqueça:
http://blog.gravypower.net/
http://agileinaflash.blogspot.com.br/2009/02/red-green-refactor.html
Obrigado! 
Obrigado! Obrigado!

TDD: A Essência do Mantra