SlideShare une entreprise Scribd logo
1  sur  101
Télécharger pour lire hors ligne
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!

Contenu connexe

Tendances

Test driven development teste e design no mundo real by mauricio aniche (z-li...
Test driven development teste e design no mundo real by mauricio aniche (z-li...Test driven development teste e design no mundo real by mauricio aniche (z-li...
Test driven development teste e design no mundo real by mauricio aniche (z-li...
GessdaSilvaMachado
 

Tendances (20)

Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 
1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software
 
Os Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de softwareOs Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de software
 
TDC 2012 TDD e 20 coisas que você precisa saber
TDC 2012 TDD e 20 coisas que você precisa saberTDC 2012 TDD e 20 coisas que você precisa saber
TDC 2012 TDD e 20 coisas que você precisa saber
 
TDD direto das trincheiras
TDD direto das trincheirasTDD direto das trincheiras
TDD direto das trincheiras
 
Como TDD pode influenciar na construção do seu Produto?
Como TDD pode influenciar na construção do seu Produto?Como TDD pode influenciar na construção do seu Produto?
Como TDD pode influenciar na construção do seu Produto?
 
Treinamento TDD - Atech
Treinamento TDD - AtechTreinamento TDD - Atech
Treinamento TDD - Atech
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 
Introdução a TDD
Introdução a TDDIntrodução a TDD
Introdução a TDD
 
Tente desenvolver diferente com TDD
Tente desenvolver diferente com TDDTente desenvolver diferente com TDD
Tente desenvolver diferente com TDD
 
Tdd x testes unidades
Tdd x testes unidadesTdd x testes unidades
Tdd x testes unidades
 
TDD para Java EE
TDD para Java EETDD para Java EE
TDD para Java EE
 
TDD Desenvolvimento orientado ao teste
TDD Desenvolvimento orientado ao testeTDD Desenvolvimento orientado ao teste
TDD Desenvolvimento orientado ao teste
 
Test driven development teste e design no mundo real by mauricio aniche (z-li...
Test driven development teste e design no mundo real by mauricio aniche (z-li...Test driven development teste e design no mundo real by mauricio aniche (z-li...
Test driven development teste e design no mundo real by mauricio aniche (z-li...
 
TDD, introdução sem mágica!
TDD, introdução sem mágica!TDD, introdução sem mágica!
TDD, introdução sem mágica!
 
O que é Teste de Software?
O que é Teste de Software?O que é Teste de Software?
O que é Teste de Software?
 
Boas práticas no desenvolvimento de software através do uso de TDD
Boas práticas no desenvolvimento de software através do uso de TDDBoas práticas no desenvolvimento de software através do uso de TDD
Boas práticas no desenvolvimento de software através do uso de TDD
 
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
 
Automatizando testes em 4 passos
Automatizando testes em 4 passosAutomatizando testes em 4 passos
Automatizando testes em 4 passos
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 

Similaire à TDD: A Essência do Mantra

Palestra de SCRUM em Juazeiro
Palestra de SCRUM em JuazeiroPalestra de SCRUM em Juazeiro
Palestra de SCRUM em Juazeiro
Paulo Furtado
 
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013
Gabriel Rubens
 
Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013
Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013
Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013
Gabriel Rubens
 

Similaire à TDD: A Essência do Mantra (20)

Pesquisa em Métodos Ágeis para o Desenvolvimento de Software
Pesquisa em Métodos Ágeis para o Desenvolvimento de SoftwarePesquisa em Métodos Ágeis para o Desenvolvimento de Software
Pesquisa em Métodos Ágeis para o Desenvolvimento de Software
 
Coding Dojo - Funcionamento
Coding Dojo - FuncionamentoCoding Dojo - Funcionamento
Coding Dojo - Funcionamento
 
Sobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis UberlândiaSobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis Uberlândia
 
Drupal e a Qualidade de Software
Drupal e a Qualidade de SoftwareDrupal e a Qualidade de Software
Drupal e a Qualidade de Software
 
Test First, TDD e outros Bichos
Test First, TDD e outros BichosTest First, TDD e outros Bichos
Test First, TDD e outros Bichos
 
Por quê você deve utilizar TDD?
Por quê você deve utilizar TDD?Por quê você deve utilizar TDD?
Por quê você deve utilizar TDD?
 
DDD + BDD + TDD + Scrum
DDD + BDD + TDD + ScrumDDD + BDD + TDD + Scrum
DDD + BDD + TDD + Scrum
 
Tdd em django sem desculpas versao final
Tdd em django sem desculpas versao finalTdd em django sem desculpas versao final
Tdd em django sem desculpas versao final
 
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
 
Teste automatizados e tdd
Teste automatizados e tddTeste automatizados e tdd
Teste automatizados e tdd
 
Test-Driven Development serve pra mim?
Test-Driven Development serve pra mim?Test-Driven Development serve pra mim?
Test-Driven Development serve pra mim?
 
Palestra de SCRUM em Juazeiro
Palestra de SCRUM em JuazeiroPalestra de SCRUM em Juazeiro
Palestra de SCRUM em Juazeiro
 
UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27
 
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013
 
Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por Testes
 
Coding Dojo - Aplicando Princípios Ágeis
Coding Dojo - Aplicando Princípios ÁgeisCoding Dojo - Aplicando Princípios Ágeis
Coding Dojo - Aplicando Princípios Ágeis
 
5 meses de python o que aprendi
5 meses de python  o que aprendi5 meses de python  o que aprendi
5 meses de python o que aprendi
 
Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013
Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013
Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013
 
Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...
Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...
Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...
 
Vamos falar de DevOps?
Vamos falar de DevOps?Vamos falar de DevOps?
Vamos falar de DevOps?
 

Plus de Dionatan default

Plus de Dionatan default (15)

Trajetória para Scrum Master
Trajetória para Scrum MasterTrajetória para Scrum Master
Trajetória para Scrum Master
 
Técnicas de Priorização de Backlog
Técnicas de Priorização de BacklogTécnicas de Priorização de Backlog
Técnicas de Priorização de Backlog
 
Meetup Uma Introdução ao Estoicismo
Meetup Uma Introdução ao EstoicismoMeetup Uma Introdução ao Estoicismo
Meetup Uma Introdução ao Estoicismo
 
A visão de cima meetup.com/estoicismo
A visão de cima meetup.com/estoicismoA visão de cima meetup.com/estoicismo
A visão de cima meetup.com/estoicismo
 
Meetup Mantra da Produtividade - Como Estoicismo pode te ajudar na Produtivid...
Meetup Mantra da Produtividade - Como Estoicismo pode te ajudar na Produtivid...Meetup Mantra da Produtividade - Como Estoicismo pode te ajudar na Produtivid...
Meetup Mantra da Produtividade - Como Estoicismo pode te ajudar na Produtivid...
 
TDD Flow: The Mantra in Action
TDD Flow: The Mantra in ActionTDD Flow: The Mantra in Action
TDD Flow: The Mantra in Action
 
Os Nove Registros da Eficiência no Desenvolvimento de Software
Os Nove Registros da Eficiência no Desenvolvimento de SoftwareOs Nove Registros da Eficiência no Desenvolvimento de Software
Os Nove Registros da Eficiência no Desenvolvimento de Software
 
Métodos Ágeis para Desenvolvimento de Software Livre
Métodos Ágeis para Desenvolvimento de Software LivreMétodos Ágeis para Desenvolvimento de Software Livre
Métodos Ágeis para Desenvolvimento de Software Livre
 
Lean Thinking: Mentalidade Enxuta para Desenvolvimento Ágil de Software
Lean Thinking: Mentalidade Enxuta para Desenvolvimento Ágil de SoftwareLean Thinking: Mentalidade Enxuta para Desenvolvimento Ágil de Software
Lean Thinking: Mentalidade Enxuta para Desenvolvimento Ágil de Software
 
Test First com TDD: Mãos na massa!
Test First com TDD: Mãos na massa!Test First com TDD: Mãos na massa!
Test First com TDD: Mãos na massa!
 
Como Management 3.0 pode potencializar a Agilidade?
Como Management 3.0 pode potencializar a Agilidade?Como Management 3.0 pode potencializar a Agilidade?
Como Management 3.0 pode potencializar a Agilidade?
 
Desenvolvimento Orgânico de Software com User Stories #AgileBR
Desenvolvimento Orgânico de Software com User Stories #AgileBRDesenvolvimento Orgânico de Software com User Stories #AgileBR
Desenvolvimento Orgânico de Software com User Stories #AgileBR
 
Chega de Trabalhar!
Chega de Trabalhar!Chega de Trabalhar!
Chega de Trabalhar!
 
Lean para potencializar a qualidade no software
Lean para potencializar a qualidade no softwareLean para potencializar a qualidade no software
Lean para potencializar a qualidade no software
 
Desenvolvimento Orgânico de Software com User Stories
Desenvolvimento Orgânico de Software com User StoriesDesenvolvimento Orgânico de Software com User Stories
Desenvolvimento Orgânico de Software com User Stories
 

TDD: A Essência do Mantra