TDD: A Essência do Mantra

Post on 13-Jun-2015

312 views 6 download

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.

Transcript of TDD: A Essência do Mantra

TDDTDDA Essência do MantraA Essência do Mantra

Trilha Agile #TDC2014Dionatan 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

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

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

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

EstratégiaEstratégiaPortfólioPortfólio

ProdutoProdutoReleaseRelease

IteraçãoIteraçãoDiáriaDiária

TDDTDD

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

II. Eliminar duplicação

Escreva um teste para o próximo

pedaço da funcionalidade.

3 Passos

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

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

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

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

Mantra do TDD

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

TFDTestFirstDevelopment (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

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

Refatoração no TDD

ComportamentoObservável

==Testes

xUnit para TDD

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

Ron Jeffrieshttps://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 TDDTest

Como testar software?

Escreva um teste automatizado.

Patterns para TDDIsolated Test

Como os testes devem afetar uns aos outros?

De modo algum.

Patterns para TDDTest List

O que testar?

Comece uma lista com os testes que você sabe.

Patterns para TDDTest First

Quando escrever os testes?

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

Patterns para TDDAssert First

Quando escrever os asserts?

Tente por primeiro.

Patterns para TDDTest Data

Quais dados usar para os testes?

Dados que facilitam a leitura dos testes e a continuidade.

Patterns para TDDEvident Data

Como representar o objetivo dos dados?

Com um relacionamento evidente entre resultado esperado e resultado real

Red Bar Patterns

Red Bar PatternsOne Step Test

Qual teste pegar da lista?

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

Red Bar PatternsStarter Test

Com qual caso de teste começar?

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

Red Bar PatternsLearning Test

Quando escrever testes para software externo?

Antes da primeira vez de utilizar uma nova funcionalidade externa.

Red Bar PatternsAnother Test

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

Adicione na lista e volte ao tópico original.

Red Bar PatternsRegression Test

O que fazer com um defeito relatado?

Escreva o melhor teste que falhe.

Red Bar PatternsBreak

O que fazer quando se está cansado ou travado?

Faça uma pausa.

Red Bar PatternsDo Over

O que fazer quando se está perdido?

Jogue fora o código e recomece.

Red Bar PatternsCheap Desk, Nice Chair

Qual configuração física para TDD?

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

Testing Patterns

Testing PatternsMock Object

Como testar um objeto com recursos caros ou complicados?

Crie uma versão fake com respostas constantes.

Testing PatternsBroken Test

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

Deixe o último teste quebrado.

Testing PatternsClean Check-in

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

Deixe todos os testes rodando.

Green Bar Patterns

Green Bar PatternsFake It

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

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

Green Bar PatternsTriangulate

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

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

Green Bar PatternsObvious Implementation

Como implementar operações simples?

Apenas implemente-as.

Green Bar PatternsOne to Many

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

Implemente inicialmente sem coleções.

Design Patternsbases 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>

ATDDAcceptance 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 funcionalidadesATDD é sobre validação das funcionalidadesBDD é 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?

DojosDojos

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

RSJUGRoman Numerals

RSJUGTroLolo

(FizzBuzz)

RSJUGConstruindo uma DSL com Java e ANTLR

RSJUGTestando aplicações Java Web fora do

container

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

ArquillianArquillian

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

Números RomanosNúmeros Romanos

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

Números RomanosNúmeros Romanos

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

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!