Transcript
Page 1: Introdução ao TDD (Test-Driven Development) - #guma10anos

Introdução ao TDDDionatan Mouraabout.me/dionatanmoura

#guma10anosAbril de 2014

Page 2: Introdução ao TDD (Test-Driven Development) - #guma10anos

Introdução ao TDD➔ Extreme Programming➔ TDD➔ Refatoração➔ xUnit➔ Baby Steps➔ Clean Code➔ Patterns para TDD

➔ Red Bar➔ Test➔ Green Bar➔ Design Patterns

➔ Agile Testing➔ ATDD➔ Dojos

Page 3: Introdução ao TDD (Test-Driven Development) - #guma10anos
Page 4: Introdução ao TDD (Test-Driven Development) - #guma10anos

http://commons.wikimedia.org/wiki/File:Creador_de_la_metodologia_xp.jpg

“Test-Driven Development (TDD) é uma técnica para contrução de software que guia o desenvolvimento de

software através da escrita de testes.Kent Beck

Page 5: Introdução ao TDD (Test-Driven Development) - #guma10anos
Page 6: Introdução ao TDD (Test-Driven Development) - #guma10anos

https://5com1001-0912.wikispaces.com/

Page 7: Introdução ao TDD (Test-Driven Development) - #guma10anos

http://alisina.org/blog/2013/10/31/taqiyah-is-onion-shaped/

EstratégiaEstratégiaPortfólioPortfólio

ProdutoProdutoReleaseRelease

IteraçãoIteraçãoDiáriaDiária

TDDTDD

Page 8: Introdução ao TDD (Test-Driven Development) - #guma10anos

RegrasI. Escrever novo código somente se já existir um teste automatizado falhando

II. Eliminar duplicação

Page 9: Introdução ao TDD (Test-Driven Development) - #guma10anos

Escreva um teste para o próximo

pedaço da funcionalidade.

3 Passos

http://www.pro-tools-expert.com

Page 10: Introdução ao TDD (Test-Driven Development) - #guma10anos

Escreva um teste para o próximo

pedaço da funcionalidade.

3 PassosEscreva código funcional até o teste passar.

Refatore o código novo (e antigo) até ficar bem estruturado.

http://www.pro-tools-expert.com

Page 11: Introdução ao TDD (Test-Driven Development) - #guma10anos

Escreva um teste para o próximo

pedaço da funcionalidade.

3 PassosEscreva código funcional até o teste passar.

Refatore o código novo (e antigo) até ficar bem estruturado.

http://www.pro-tools-expert.com

Page 12: Introdução ao TDD (Test-Driven Development) - #guma10anos

http://agileinaflash.blogspot.com.br/2009/02/red-green-refactor.html

Mantra do TDD

Page 13: Introdução ao TDD (Test-Driven Development) - #guma10anos

TDD.equals(TFD + Refatoração);

Page 14: Introdução ao TDD (Test-Driven Development) - #guma10anos

TFDTestFirstDevelopment (code)

TDD.equals(TFD + Refatoração);

Page 15: Introdução ao TDD (Test-Driven Development) - #guma10anos

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

TDD.equals(TFD + Refatoração);

Page 16: Introdução ao TDD (Test-Driven Development) - #guma10anos

Refatoração no TDD

ComportamentoObservável

==Testes

Page 17: Introdução ao TDD (Test-Driven Development) - #guma10anos

xUnit para TDD

Page 18: Introdução ao TDD (Test-Driven Development) - #guma10anos

Como escrever código simples para rodar o teste, e com uma refatoração por vez?

Page 19: Introdução ao TDD (Test-Driven Development) - #guma10anos

Baby Steps

http://rusbase.com/news/author/williamlearn2ru/learn2-baby-steps/

Page 20: Introdução ao TDD (Test-Driven Development) - #guma10anos

Mas cuidado!

https://www.mulberrybush.co.uk/

Page 21: Introdução ao TDD (Test-Driven Development) - #guma10anos

“O objetivo do TDD éescrever clean code que funciona.”

Ron Jeffrieshttps://twitter.com/RonJeffries

Page 22: Introdução ao TDD (Test-Driven Development) - #guma10anos

Clean Code

http://programmer.97things.oreilly.com/wiki/index.php/Uncle_Bob

Page 23: Introdução ao TDD (Test-Driven Development) - #guma10anos
Page 24: Introdução ao TDD (Test-Driven Development) - #guma10anos

Lembre-se...

Page 25: Introdução ao TDD (Test-Driven Development) - #guma10anos

http://agileinaflash.blogspot.com.br/2009/02/red-green-refactor.html

Page 26: Introdução ao TDD (Test-Driven Development) - #guma10anos

Patterns para TDD

Page 27: Introdução ao TDD (Test-Driven Development) - #guma10anos

Patterns para TDDTest

Como testar software?

Escreva um teste automatizado.

Page 28: Introdução ao TDD (Test-Driven Development) - #guma10anos

Patterns para TDDIsolated Test

Como os testes devem afetar uns aos outros?

De modo algum.

Page 29: Introdução ao TDD (Test-Driven Development) - #guma10anos

Patterns para TDDTest List

O que testar?

Comece uma lista com os testes que você sabe.

Page 30: Introdução ao TDD (Test-Driven Development) - #guma10anos

Patterns para TDDTest First

Quando escrever os testes?

Antes de escrever o código (a ser testado).

Page 31: Introdução ao TDD (Test-Driven Development) - #guma10anos

Patterns para TDDAssert First

Quando escrever os asserts?

Tente por primeiro.

Page 32: Introdução ao TDD (Test-Driven Development) - #guma10anos

Patterns para TDDTest Data

Quais dados usar para os testes?

Dados que facilitam a leitura dos testes e a continuidade.

Page 33: Introdução ao TDD (Test-Driven Development) - #guma10anos

Patterns para TDDEvident Data

Como representar o objetivo dos dados?

Com um relacionamento evidente entre resultado esperado e resultado real

Page 34: Introdução ao TDD (Test-Driven Development) - #guma10anos

Red Bar Patterns

Page 35: Introdução ao TDD (Test-Driven Development) - #guma10anos

Red Bar PatternsOne Step Test

Qual teste pegar da lista?

O que vai te ensinar algo e que se tem certeza de implementar.

Page 36: Introdução ao TDD (Test-Driven Development) - #guma10anos

Red Bar PatternsStarter Test

Com qual caso de teste começar?

Comece por uma variante da operação que faz nada.

Page 37: Introdução ao TDD (Test-Driven Development) - #guma10anos

Red Bar PatternsLearning Test

Quando escrever testes para software externo?

Antes da primeira vez de utilizar uma nova funcionalidade externa.

Page 38: Introdução ao TDD (Test-Driven Development) - #guma10anos

Red Bar PatternsAnother Test

Como manter uma discussão técnica fora do tópico?

Adicione na lista e volte ao tópico original.

Page 39: Introdução ao TDD (Test-Driven Development) - #guma10anos

Red Bar PatternsRegression Test

O que fazer com um defeito relatado?

Escreva o melhor teste que falhe.

Page 40: Introdução ao TDD (Test-Driven Development) - #guma10anos

Red Bar PatternsBreak

O que fazer quando se está cansado ou travado?

Faça uma pausa.

Page 41: Introdução ao TDD (Test-Driven Development) - #guma10anos

Red Bar PatternsDo Over

O que fazer quando se está perdido?

Jogue fora o código e recomece.

Page 42: Introdução ao TDD (Test-Driven Development) - #guma10anos

Red Bar PatternsCheap Desk, Nice Chair

Qual configuração física para TDD?

Tenha uma cadeira muito boa, economizando no resto da mobília.

Page 43: Introdução ao TDD (Test-Driven Development) - #guma10anos

Testing Patterns

Page 44: Introdução ao TDD (Test-Driven Development) - #guma10anos

Testing PatternsMock Object

Como testar um objeto com recursos caros ou complicados?

Crie uma versão fake com respostas constantes.

Page 45: Introdução ao TDD (Test-Driven Development) - #guma10anos

Testing PatternsBroken Test

Como deixar uma sessão sozinha de programação?

Deixe o último teste quebrado.

Page 46: Introdução ao TDD (Test-Driven Development) - #guma10anos

Testing PatternsClean Check-in

Como deixar uma sessão em time de programação?

Deixe todos os testes rodando.

Page 47: Introdução ao TDD (Test-Driven Development) - #guma10anos

Green Bar Patterns

Page 48: Introdução ao TDD (Test-Driven Development) - #guma10anos

Green Bar PatternsFake It

Qual será a primeira implementação do teste?

Retorne uma constante, e depois refatore em variáveis.

Page 49: Introdução ao TDD (Test-Driven Development) - #guma10anos

Green Bar PatternsTriangulate

Como fazer a maior abstração conservativa com testes?

Abstraia apenas quando houver 2+ testes.(Similar à indução matemática)

Page 50: Introdução ao TDD (Test-Driven Development) - #guma10anos

Green Bar PatternsObvious Implementation

Como implementar operações simples?

Apenas implemente-as.

Page 51: Introdução ao TDD (Test-Driven Development) - #guma10anos

Green Bar PatternsOne to Many

Como implementar uma operação de coleção de objetos?

Implemente inicialmente sem coleções.

Page 52: Introdução ao TDD (Test-Driven Development) - #guma10anos

Design Patternsbases para TDD

Page 53: Introdução ao TDD (Test-Driven Development) - #guma10anos

Design Patterns bases

Page 54: Introdução ao TDD (Test-Driven Development) - #guma10anos
Page 55: Introdução ao TDD (Test-Driven Development) - #guma10anos

E para não esquecer...

Page 56: Introdução ao TDD (Test-Driven Development) - #guma10anos

http://agileinaflash.blogspot.com.br/2009/02/red-green-refactor.html

Page 57: Introdução ao TDD (Test-Driven Development) - #guma10anos

Teste é o foco do TDD?

Page 58: Introdução ao TDD (Test-Driven Development) - #guma10anos

“The focus of TDD is design.Test is a (nice) side effect.”

Marco Trincardi

Page 59: Introdução ao TDD (Test-Driven Development) - #guma10anos

TDD usa apenas Unit Testing?

Page 60: Introdução ao TDD (Test-Driven Development) - #guma10anos

“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

Page 61: Introdução ao TDD (Test-Driven Development) - #guma10anos

Agile Testing

http://lisacrispin.com

Page 62: Introdução ao TDD (Test-Driven Development) - #guma10anos
Page 63: Introdução ao TDD (Test-Driven Development) - #guma10anos

Mas e o tal de ATDD?

http://greatmiddleway.wordpress.com

Page 64: Introdução ao TDD (Test-Driven Development) - #guma10anos

<Título>Como um <papel de usuário>Eu quero <objetivo> Para que <razão>

ATDDAcceptance Test-Driven

Development Critério de Aceitação Dado que <pré-condição> Quando <ação> Então <resultado>

Page 65: Introdução ao TDD (Test-Driven Development) - #guma10anos

ATDD TDD

Page 66: Introdução ao TDD (Test-Driven Development) - #guma10anos

TDD é sobre quando e como codificarATDD é sobre o que codificar

Page 67: Introdução ao TDD (Test-Driven Development) - #guma10anos
Page 68: Introdução ao TDD (Test-Driven Development) - #guma10anos

JUnit Test Infected: Programmers Love Writing

Tests

http://junit.sourceforge.net/doc/testinfected/testing.htm

Page 69: Introdução ao TDD (Test-Driven Development) - #guma10anos

Como aprender TDD?

Page 70: Introdução ao TDD (Test-Driven Development) - #guma10anos

Por que Dojos com TDD?

Page 71: Introdução ao TDD (Test-Driven Development) - #guma10anos

“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

Page 72: Introdução ao TDD (Test-Driven Development) - #guma10anos
Page 73: Introdução ao TDD (Test-Driven Development) - #guma10anos

RSJUGRoman Numerals

Page 74: Introdução ao TDD (Test-Driven Development) - #guma10anos

RSJUGTroLolo

(FizzBuzz)

Page 75: Introdução ao TDD (Test-Driven Development) - #guma10anos

RSJUGConstruindo uma DSL com Java e ANTLR

Page 76: Introdução ao TDD (Test-Driven Development) - #guma10anos

RSJUGTestando aplicações Java Web fora do

container

Page 77: Introdução ao TDD (Test-Driven Development) - #guma10anos

Mas como começar já nessa segunda-feira?

Page 78: Introdução ao TDD (Test-Driven Development) - #guma10anos

http://www.cakeeventsblog.com

Page 79: Introdução ao TDD (Test-Driven Development) - #guma10anos

Implicações Sociais

✔ Menos surpresas desagradáveis✔ QA proativo✔ Maior colaboração entre o time✔ Entrega contínua

Page 80: Introdução ao TDD (Test-Driven Development) - #guma10anos

E não esqueça:

Page 81: Introdução ao TDD (Test-Driven Development) - #guma10anos

http://blog.gravypower.net/

Page 82: Introdução ao TDD (Test-Driven Development) - #guma10anos

http://agileinaflash.blogspot.com.br/2009/02/red-green-refactor.html

Page 83: Introdução ao TDD (Test-Driven Development) - #guma10anos

Obrigado!

Obrigado!Obrigado!


Recommended