Coding Dojo e TDD
Alex Tercete Matos
11 de setembro de 2009
Antes de começar. . .
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 2 / 26
Quem sou eu?
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 3 / 26
• CEFET/RJ
− 9o período, Engenharia de Controle e Automação
• Chemtech
− 11 meses, Projeto Planta Piloto de Biorreator
• Interesses
− Software Livre, GNU/Linux, Python
− Scrum, Extreme Programming (XP), Test-driven
Development (TDD)
Quem sou eu?
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 3 / 26
• CEFET/RJ
− 9o período, Engenharia de Controle e Automação
• Chemtech
− 11 meses, Projeto Planta Piloto de Biorreator
• Interesses
− Software Livre, GNU/Linux, Python
− Scrum, Extreme Programming (XP), Test-driven
Development (TDD)
Quem sou eu?
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 3 / 26
• CEFET/RJ
− 9o período, Engenharia de Controle e Automação
• Chemtech
− 11 meses, Projeto Planta Piloto de Biorreator
• Interesses
− Software Livre, GNU/Linux, Python
− Scrum, Extreme Programming (XP), Test-driven
Development (TDD)
Coding Dojo
(baseado nos slides de Danilo Sato e Rodolfo Carvalho)
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 4 / 26
Motivação
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 5 / 26
Programadores não
treinam!
Motivação
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 5 / 26
Programadores não
treinam!
Por que?
Origens
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 6 / 26
• Kata → Coding Dojo
• Definição: (http:// odingdojo.org)
Reunião na qual um grupo de pessoas se junta para trabalhar
em um desafio de programação. Eles estão lá para se divertir e,
engajados no uso de boas práticas, melhorar suas habilidades.
Princípios
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 7 / 26
• Aprendizado contínuo
• Ambiente seguro
− Não-competitivo
− Colaborativo
− Inclusivo
• Falha e redundância
• Passos de bebê
Princípios
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 7 / 26
• Aprendizado contínuo
• Ambiente seguro
− Não-competitivo
− Colaborativo
− Inclusivo
• Falha e redundância
• Passos de bebê
Princípios
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 7 / 26
• Aprendizado contínuo
• Ambiente seguro
− Não-competitivo
− Colaborativo
− Inclusivo
• Falha e redundância
• Passos de bebê
Princípios
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 7 / 26
• Aprendizado contínuo
• Ambiente seguro
− Não-competitivo
− Colaborativo
− Inclusivo
• Falha e redundância
• Passos de bebê
Regras gerais
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 8 / 26
Regras gerais
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 8 / 26
• Computador + Projetor
Regras gerais
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 8 / 26
• Computador + Projetor
• Par + Platéia
Regras gerais
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 8 / 26
• Computador + Projetor
• Par + Platéia
• TDD (vermelho → verde → refatoração)
Regras gerais
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 8 / 26
• Computador + Projetor
• Par + Platéia
• TDD (vermelho → verde → refatoração)
• Todos devem entender
Regras gerais
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 8 / 26
• Computador + Projetor
• Par + Platéia
• TDD (vermelho → verde → refatoração)
• Todos devem entender
• Sempre começa do zero
O formato Randori
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 9 / 26
• Programação em pares
O formato Randori
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 9 / 26
• Programação em pares
• Turnos time-boxed (5 a 7 minutos)
O formato Randori
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 9 / 26
• Programação em pares
• Turnos time-boxed (5 a 7 minutos)
• Rodízio: após cada turno. . .
− O co-piloto vira piloto
− O piloto volta pra platéia
− Um novo co-piloto é convidado da platéia
O formato Randori
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 9 / 26
• Programação em pares
• Turnos time-boxed (5 a 7 minutos)
• Rodízio: após cada turno. . .
− O co-piloto vira piloto
− O piloto volta pra platéia
− Um novo co-piloto é convidado da platéia
• Comentários e críticas somente no verde
O formato Randori
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 9 / 26
• Programação em pares
• Turnos time-boxed (5 a 7 minutos)
• Rodízio: após cada turno. . .
− O co-piloto vira piloto
− O piloto volta pra platéia
− Um novo co-piloto é convidado da platéia
• Comentários e críticas somente no verde
• Silêncio no vermelho
Retrospectiva
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 10 / 26
• Ao final de cada sessão
− O que aprendemos?
− O que gostamos?
− O que pode melhorar?
− Comentários
Objetivo
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 11 / 26
• Praticar
• Ensinar
• Aprender
• Discutir com bases sobre codigo!
O que não faremos
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 12 / 26
• Correr para terminar o problema
• Resolver problemas “reais”
• Entrar em flame wars nas discussões
• Competir com os outros participantes
• Deixar pessoas sem entender
O que não faremos
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 12 / 26
• Correr para terminar o problema
• Resolver problemas “reais”
• Entrar em flame wars nas discussões
• Competir com os outros participantes
• Deixar pessoas sem entender
O que não faremos
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 12 / 26
• Correr para terminar o problema
• Resolver problemas “reais”
• Entrar em flame wars nas discussões
• Competir com os outros participantes
• Deixar pessoas sem entender
O que não faremos
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 12 / 26
• Correr para terminar o problema
• Resolver problemas “reais”
• Entrar em flame wars nas discussões
• Competir com os outros participantes
• Deixar pessoas sem entender
O que não faremos
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 12 / 26
• Correr para terminar o problema
• Resolver problemas “reais”
• Entrar em flame wars nas discussões
• Competir com os outros participantes
• Deixar pessoas sem entender
Podemos. . .
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 13 / 26
• Experimentar novas idéias
• Nos divertir
• Começar!
− Coding Dojo Chemtech
Segunda-feira, 21 de setembro de 2009 – 17:30-19:00
Podemos. . .
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 13 / 26
• Experimentar novas idéias
• Nos divertir
• Começar!
− Coding Dojo Chemtech
Segunda-feira, 21 de setembro de 2009 – 17:30-19:00
Podemos. . .
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 13 / 26
• Experimentar novas idéias
• Nos divertir
• Começar!
− Coding Dojo Chemtech
Segunda-feira, 21 de setembro de 2009 – 17:30-19:00
Test-driven Development
(TDD)
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 14 / 26
Testes unitários e o framework xUnit
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 15 / 26
• Método de verificação e validação do funcionamento de
pequenas porções de código
• xUnit: framework que visa facilitar a criação,
agrupamento e execução de testes unitários
− assertEquals(eleva_quadrado(3), 9)
− assertTrue(numero_par(4))− assertEquals(inverte('texto'), 'otxet')
− etc.
Testes unitários e o framework xUnit
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 15 / 26
• Método de verificação e validação do funcionamento de
pequenas porções de código
• xUnit: framework que visa facilitar a criação,
agrupamento e execução de testes unitários
− assertEquals(eleva_quadrado(3), 9)
− assertTrue(numero_par(4))− assertEquals(inverte('texto'), 'otxet')
− etc.
Testes unitários e o framework xUnit
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 15 / 26
• Método de verificação e validação do funcionamento de
pequenas porções de código
• xUnit: framework que visa facilitar a criação,
agrupamento e execução de testes unitários
− assertEquals(eleva_quadrado(3), 9)
− assertTrue(numero_par(4))− assertEquals(inverte('texto'), 'otxet')
− etc.
O que é TDD?
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 16 / 26
• Técnica de desenvolvimento que estimula o uso
constante de testes unitários e refatoração
• Quebra de paradigmas!
− O teste é escrito antes do código
− Escrever mais não é desperdício de tempo, é um
investimento
− A implementação não é tão importante
O que é TDD?
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 16 / 26
• Técnica de desenvolvimento que estimula o uso
constante de testes unitários e refatoração
• Quebra de paradigmas!
− O teste é escrito antes do código
− Escrever mais não é desperdício de tempo, é um
investimento
− A implementação não é tão importante
O que é TDD?
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 16 / 26
• Técnica de desenvolvimento que estimula o uso
constante de testes unitários e refatoração
• Quebra de paradigmas!
− O teste é escrito antes do código
− Escrever mais não é desperdício de tempo, é um
investimento
− A implementação não é tão importante
O que é TDD?
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 16 / 26
• Técnica de desenvolvimento que estimula o uso
constante de testes unitários e refatoração
• Quebra de paradigmas!
− O teste é escrito antes do código
− Escrever mais não é desperdício de tempo, é um
investimento
− A implementação não é tão importante
Por que desenvolver guiado por testes?
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 17 / 26
• Feedback instantâneo sobre falhas de software
− Falhas descobertas tarde custam muito caro!
• Ajuda a desenvolver menos, de forma mais simples e
focada
• Os testes servem como documentação atualizada do
funcionamento do código
• Aumenta a confiança do desenvolvedor na hora de
refatorar, e evita o problema do “cobertor curto”
• Atividades mais criativas e menos repetitivas
Por que desenvolver guiado por testes?
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 17 / 26
• Feedback instantâneo sobre falhas de software
− Falhas descobertas tarde custam muito caro!
• Ajuda a desenvolver menos, de forma mais simples e
focada
• Os testes servem como documentação atualizada do
funcionamento do código
• Aumenta a confiança do desenvolvedor na hora de
refatorar, e evita o problema do “cobertor curto”
• Atividades mais criativas e menos repetitivas
Por que desenvolver guiado por testes?
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 17 / 26
• Feedback instantâneo sobre falhas de software
− Falhas descobertas tarde custam muito caro!
• Ajuda a desenvolver menos, de forma mais simples e
focada
• Os testes servem como documentação atualizada do
funcionamento do código
• Aumenta a confiança do desenvolvedor na hora de
refatorar, e evita o problema do “cobertor curto”
• Atividades mais criativas e menos repetitivas
Por que desenvolver guiado por testes?
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 17 / 26
• Feedback instantâneo sobre falhas de software
− Falhas descobertas tarde custam muito caro!
• Ajuda a desenvolver menos, de forma mais simples e
focada
• Os testes servem como documentação atualizada do
funcionamento do código
• Aumenta a confiança do desenvolvedor na hora de
refatorar, e evita o problema do “cobertor curto”
• Atividades mais criativas e menos repetitivas
Por que desenvolver guiado por testes?
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 17 / 26
• Feedback instantâneo sobre falhas de software
− Falhas descobertas tarde custam muito caro!
• Ajuda a desenvolver menos, de forma mais simples e
focada
• Os testes servem como documentação atualizada do
funcionamento do código
• Aumenta a confiança do desenvolvedor na hora de
refatorar, e evita o problema do “cobertor curto”
• Atividades mais criativas e menos repetitivas
O ciclo do desenvolvimento guiado por testes
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 18 / 26
(Re)Escreva
um teste
Veja se ele
falhou
Escreva
código
Rode todos
os testes
Refatore
Testefalhou
Testepassou
Todos ostestes
passaram
Um oumais testesfalharam
Repita
TDD na sua linguagem
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 19 / 26
• Java → jUnit
• .NET → nUnit
• Python → unittest
• Ruby → Test::Unit
• PHP → SimpleTest• Javas ript → jsUnit
− jQuery → QUnit• etc.
TDD na prática!
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 20 / 26
Python
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 21 / 26
• Sintaxe elegante, simples e clara
• Multiparadigma (OO, procedural, funcional)
• Interpretável
• Tipagem dinâmica, porém forte
• Estruturas de dados de alto nível
− tuplas, listas e dicionários
• Blocos de código são delimitados por endentação
Python
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 21 / 26
• Sintaxe elegante, simples e clara
• Multiparadigma (OO, procedural, funcional)
• Interpretável
• Tipagem dinâmica, porém forte
• Estruturas de dados de alto nível
− tuplas, listas e dicionários
• Blocos de código são delimitados por endentação
Python
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 21 / 26
• Sintaxe elegante, simples e clara
• Multiparadigma (OO, procedural, funcional)
• Interpretável
• Tipagem dinâmica, porém forte
• Estruturas de dados de alto nível
− tuplas, listas e dicionários
• Blocos de código são delimitados por endentação
Python
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 21 / 26
• Sintaxe elegante, simples e clara
• Multiparadigma (OO, procedural, funcional)
• Interpretável
• Tipagem dinâmica, porém forte
• Estruturas de dados de alto nível
− tuplas, listas e dicionários
• Blocos de código são delimitados por endentação
Python
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 21 / 26
• Sintaxe elegante, simples e clara
• Multiparadigma (OO, procedural, funcional)
• Interpretável
• Tipagem dinâmica, porém forte
• Estruturas de dados de alto nível
− tuplas, listas e dicionários
• Blocos de código são delimitados por endentação
Python
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 21 / 26
• Sintaxe elegante, simples e clara
• Multiparadigma (OO, procedural, funcional)
• Interpretável
• Tipagem dinâmica, porém forte
• Estruturas de dados de alto nível
− tuplas, listas e dicionários
• Blocos de código são delimitados por endentação
O problema
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 22 / 26
• Obter a lista de números primos até um determinado
valor (ex.: 10 → 2, 3, 5, 7)
• Crivo de Eratóstenes
− Gerar lista → 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
− Remover 0 e 1 → 2, 3, 4, 5, 6, 7, 8, 9, 10
− Para cada numero, remover seus múltiplos da lista,
com exceção dele mesmo
∗ 2 → 2, 3, 5, 7, 9
∗ 3 → 2, 3, 5, 7
∗ . . .
O problema
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 22 / 26
• Obter a lista de números primos até um determinado
valor (ex.: 10 → 2, 3, 5, 7)
• Crivo de Eratóstenes
− Gerar lista → 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
− Remover 0 e 1 → 2, 3, 4, 5, 6, 7, 8, 9, 10
− Para cada numero, remover seus múltiplos da lista,
com exceção dele mesmo
∗ 2 → 2, 3, 5, 7, 9
∗ 3 → 2, 3, 5, 7
∗ . . .
O problema
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 22 / 26
• Obter a lista de números primos até um determinado
valor (ex.: 10 → 2, 3, 5, 7)
• Crivo de Eratóstenes
− Gerar lista → 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
− Remover 0 e 1 → 2, 3, 4, 5, 6, 7, 8, 9, 10
− Para cada numero, remover seus múltiplos da lista,
com exceção dele mesmo
∗ 2 → 2, 3, 5, 7, 9
∗ 3 → 2, 3, 5, 7
∗ . . .
O problema
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 22 / 26
• Obter a lista de números primos até um determinado
valor (ex.: 10 → 2, 3, 5, 7)
• Crivo de Eratóstenes
− Gerar lista → 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
− Remover 0 e 1 → 2, 3, 4, 5, 6, 7, 8, 9, 10
− Para cada numero, remover seus múltiplos da lista,
com exceção dele mesmo
∗ 2 → 2, 3, 5, 7, 9
∗ 3 → 2, 3, 5, 7
∗ . . .
O problema
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 22 / 26
• Obter a lista de números primos até um determinado
valor (ex.: 10 → 2, 3, 5, 7)
• Crivo de Eratóstenes
− Gerar lista → 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
− Remover 0 e 1 → 2, 3, 4, 5, 6, 7, 8, 9, 10
− Para cada numero, remover seus múltiplos da lista,
com exceção dele mesmo
∗ 2 → 2, 3, 5, 7, 9
∗ 3 → 2, 3, 5, 7
∗ . . .
Considerações finais
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 23 / 26
E agora?
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 24 / 26
• Seres humanos não gostam de mudanças
− Mudanças devem ser gradativas
• Coding Dojo: experimentação sem cobranças!
E agora?
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 24 / 26
• Seres humanos não gostam de mudanças
− Mudanças devem ser gradativas
• Coding Dojo: experimentação sem cobranças!
E agora?
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 24 / 26
• Seres humanos não gostam de mudanças
− Mudanças devem ser gradativas
• Coding Dojo: experimentação sem cobranças!
Você só sabe o que há
atrás de uma porta depois
que a atravessa!
Referências
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 25 / 26
• http:// odingdojo.org/
• http://dojorio.org/, http://dojosp.org/• Test-Driven Development: By Example – Kent Beck
• http://improveit. om.br/xp/prati as/tdd
• http://junit.sour eforge.net/do /faq/faq.htm
Obrigado pela presença!
Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 26 / 26
Top Related