101
TDD TDD A Essência do Mantra A Essência do Mantra Trilha Agile #TDC2014 Dionatan Moura about.me/dionatanmoura

TDD: A Essência do Mantra

Embed Size (px)

DESCRIPTION

Descrição da palestra no TDC 2014 Poa: http://www.thedevelopersconference.com.br/tdc/2014/portoalegre/trilha-agile TDD (Test-driven development) é uma técnica para construção de software que guia o desenvolvimento de software através da escrita de testes. Muito se falou nesse ano, mas pouco se aprendeu. Mas qual é essência real do TDD? A resposta é simples, a essência está em seu mantra: Red / Green / Refactor. O TDD será destilado, explicando seus detalhes além do seu mantra. Será mostrado o TDD no eXtreme Programming (XP), a importância da refatoração para o TDD, frameworks xUnit, como solucionar problemas complexos com Baby Steps, o valor do Clean Code, e como isso é importante para Coding Dojos. Patterns do TDD serão apresentados, dando a base para a essência do TDD. As relações do TDD com Agile Testing, ATDD e BDD também serão discutidas.

Citation preview

Page 1: TDD: A Essência do Mantra

TDDTDDA Essência do MantraA Essência do Mantra

Trilha Agile #TDC2014Dionatan Moura

about.me/dionatanmoura

Page 2: TDD: A Essência do Mantra

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.

Page 3: TDD: A Essência do Mantra

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

Page 4: TDD: A Essência do Mantra
Page 5: TDD: A Essência do Mantra

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 6: TDD: A Essência do Mantra
Page 7: TDD: A Essência do Mantra

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

Page 8: TDD: A Essência do Mantra

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

EstratégiaEstratégiaPortfólioPortfólio

ProdutoProdutoReleaseRelease

IteraçãoIteraçãoDiáriaDiária

TDDTDD

Page 9: TDD: A Essência do Mantra

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

II. Eliminar duplicação

Page 10: TDD: A Essência do Mantra

Escreva um teste para o próximo

pedaço da funcionalidade.

3 Passos

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

Page 11: TDD: A Essência do Mantra

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: TDD: A Essência do Mantra

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 13: TDD: A Essência do Mantra

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

Mantra do TDD

Page 14: TDD: A Essência do Mantra

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

Page 15: TDD: A Essência do Mantra

TFDTestFirstDevelopment (code)

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

Page 16: TDD: A Essência do Mantra

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 17: TDD: A Essência do Mantra

Refatoração no TDD

ComportamentoObservável

==Testes

Page 18: TDD: A Essência do Mantra

xUnit para TDD

Page 19: TDD: A Essência do Mantra

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

Ron Jeffrieshttps://twitter.com/RonJeffries

Page 20: TDD: A Essência do Mantra

Clean Code

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

Page 21: TDD: A Essência do Mantra
Page 22: TDD: A Essência do Mantra

TFD previne defeitos!

Page 23: TDD: A Essência do Mantra

Refatoração previne defeitos!

Page 24: TDD: A Essência do Mantra

TDD previne defeitos!

Page 25: TDD: A Essência do Mantra

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

Page 26: TDD: A Essência do Mantra

Baby Steps

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

Page 27: TDD: A Essência do Mantra

Mas cuidado!

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

Page 28: TDD: A Essência do Mantra

Lembre-se.

Page 29: TDD: A Essência do Mantra

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

Page 30: TDD: A Essência do Mantra

Patterns para TDD

Page 31: TDD: A Essência do Mantra

Patterns para TDDTest

Como testar software?

Escreva um teste automatizado.

Page 32: TDD: A Essência do Mantra

Patterns para TDDIsolated Test

Como os testes devem afetar uns aos outros?

De modo algum.

Page 33: TDD: A Essência do Mantra

Patterns para TDDTest List

O que testar?

Comece uma lista com os testes que você sabe.

Page 34: TDD: A Essência do Mantra

Patterns para TDDTest First

Quando escrever os testes?

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

Page 35: TDD: A Essência do Mantra

Patterns para TDDAssert First

Quando escrever os asserts?

Tente por primeiro.

Page 36: TDD: A Essência do Mantra

Patterns para TDDTest Data

Quais dados usar para os testes?

Dados que facilitam a leitura dos testes e a continuidade.

Page 37: TDD: A Essência do Mantra

Patterns para TDDEvident Data

Como representar o objetivo dos dados?

Com um relacionamento evidente entre resultado esperado e resultado real

Page 38: TDD: A Essência do Mantra

Red Bar Patterns

Page 39: TDD: A Essência do Mantra

Red Bar PatternsOne Step Test

Qual teste pegar da lista?

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

Page 40: TDD: A Essência do Mantra

Red Bar PatternsStarter Test

Com qual caso de teste começar?

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

Page 41: TDD: A Essência do Mantra

Red Bar PatternsLearning Test

Quando escrever testes para software externo?

Antes da primeira vez de utilizar uma nova funcionalidade externa.

Page 42: TDD: A Essência do Mantra

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 43: TDD: A Essência do Mantra

Red Bar PatternsRegression Test

O que fazer com um defeito relatado?

Escreva o melhor teste que falhe.

Page 44: TDD: A Essência do Mantra

Red Bar PatternsBreak

O que fazer quando se está cansado ou travado?

Faça uma pausa.

Page 45: TDD: A Essência do Mantra

Red Bar PatternsDo Over

O que fazer quando se está perdido?

Jogue fora o código e recomece.

Page 46: TDD: A Essência do Mantra

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 47: TDD: A Essência do Mantra

Testing Patterns

Page 48: TDD: A Essência do Mantra

Testing PatternsMock Object

Como testar um objeto com recursos caros ou complicados?

Crie uma versão fake com respostas constantes.

Page 49: TDD: A Essência do Mantra

Testing PatternsBroken Test

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

Deixe o último teste quebrado.

Page 50: TDD: A Essência do Mantra

Testing PatternsClean Check-in

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

Deixe todos os testes rodando.

Page 51: TDD: A Essência do Mantra

Green Bar Patterns

Page 52: TDD: A Essência do Mantra

Green Bar PatternsFake It

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

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

Page 53: TDD: A Essência do Mantra

Green Bar PatternsTriangulate

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

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

Page 54: TDD: A Essência do Mantra

Green Bar PatternsObvious Implementation

Como implementar operações simples?

Apenas implemente-as.

Page 55: TDD: A Essência do Mantra

Green Bar PatternsOne to Many

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

Implemente inicialmente sem coleções.

Page 56: TDD: A Essência do Mantra

Design Patternsbases para TDD

Page 57: TDD: A Essência do Mantra

Design Patterns bases

Page 58: TDD: A Essência do Mantra
Page 59: TDD: A Essência do Mantra

E para não esquecer.

Page 60: TDD: A Essência do Mantra

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

Page 61: TDD: A Essência do Mantra

Teste é o foco do TDD?

Page 62: TDD: A Essência do Mantra

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

Marco Trincardi

Page 63: TDD: A Essência do Mantra

TDD usa apenas Unit Testing?

Page 64: TDD: A Essência do Mantra

“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 65: TDD: A Essência do Mantra

Mas e o ATDD?

http://greatmiddleway.wordpress.com

Page 66: TDD: A Essência do Mantra

<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 67: TDD: A Essência do Mantra

ATDD TDD

Page 68: TDD: A Essência do Mantra

Ah! E o BDD?

http://greatmiddleway.wordpress.com

Page 69: TDD: A Essência do Mantra
Page 70: TDD: A Essência do Mantra

BDD é um processo de dev de SW

http://blog.bughuntress.com/

Page 71: TDD: A Essência do Mantra

TDD é sobre design das funcionalidadesATDD é sobre validação das funcionalidadesBDD é sobre comunicação das funcionalidades

Page 72: TDD: A Essência do Mantra
Page 73: TDD: A Essência do Mantra

Agile Testing

http://lisacrispin.com

Page 74: TDD: A Essência do Mantra
Page 75: TDD: A Essência do Mantra

JUnit Test Infected: Programmers Love Writing

Tests

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

Page 76: TDD: A Essência do Mantra

Como aprender na prática TDD?

Page 77: TDD: A Essência do Mantra

DojosDojos

http://en.wikipedia.org/wiki/Dojo

Page 78: TDD: A Essência do Mantra

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

Page 79: TDD: A Essência do Mantra

Coding Dojos● Infra

– Local com cadeiras suficientes– Um computador ao menos– Projetor

Page 80: TDD: A Essência do Mantra

Coding Dojos● Diversos estilos

– Prepared Kata– Randori Kata– Kake Kata

Page 81: TDD: A Essência do Mantra

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.

Page 82: TDD: A Essência do Mantra

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

Page 83: TDD: A Essência do Mantra

Coding Dojos● Kake Kata

– Nível mais avançado

– Diversos pares simultâneos● Randori Katas em paralelo

– Alta diversidade

– Alto nível de aprendizado

Page 84: TDD: A Essência do Mantra

Por que Codingo Dojos com TDD?

Page 85: TDD: A Essência do Mantra

“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 86: TDD: A Essência do Mantra
Page 87: TDD: A Essência do Mantra

RSJUGRoman Numerals

Page 88: TDD: A Essência do Mantra

RSJUGTroLolo

(FizzBuzz)

Page 89: TDD: A Essência do Mantra

RSJUGConstruindo uma DSL com Java e ANTLR

Page 90: TDD: A Essência do Mantra

RSJUGTestando aplicações Java Web fora do

container

Page 91: TDD: A Essência do Mantra

RSJUGRSJUGTestes dentro do Testes dentro do container Java com container Java com

ArquillianArquillian

Page 92: TDD: A Essência do Mantra

UFRGSUFRGSCiência da ComputaçãoCiência da Computação

Números RomanosNúmeros Romanos

Page 93: TDD: A Essência do Mantra

UFRGSUFRGSCiência da ComputaçãoCiência da Computação

Números RomanosNúmeros Romanos

Page 94: TDD: A Essência do Mantra

Linha 1 Linha 2 Linha 3 Linha 40

2

4

6

8

10

12

Coluna 1

Coluna 2

Coluna 3

UFRGSUFRGSCiência da ComputaçãoCiência da Computação

Números RomanosNúmeros Romanos

Page 95: TDD: A Essência do Mantra

Mas como começar já amanhã?

Page 96: TDD: A Essência do Mantra

http://www.cakeeventsblog.com

Page 97: TDD: A Essência do Mantra

Implicações Sociais

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

Page 98: TDD: A Essência do Mantra

E não esqueça:

Page 99: TDD: A Essência do Mantra

http://blog.gravypower.net/

Page 100: TDD: A Essência do Mantra

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

Page 101: TDD: A Essência do Mantra

Obrigado!

Obrigado!Obrigado!