View
312
Download
6
Category
Preview:
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
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!
Recommended