coding dojo e tdd

67
Coding Dojo e TDD Alex Tercete Matos 11 de setembro de 2009

Upload: alex-tercete

Post on 20-Aug-2015

2.496 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Coding Dojo e TDD

Coding Dojo e TDD

Alex Tercete Matos

11 de setembro de 2009

Page 2: Coding Dojo e TDD

Antes de começar. . .

Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 2 / 26

Page 3: Coding Dojo e 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)

Page 4: Coding Dojo e 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)

Page 5: Coding Dojo e 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)

Page 6: Coding Dojo e 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

Page 7: Coding Dojo e TDD

Motivação

Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 5 / 26

Programadores não

treinam!

Page 8: Coding Dojo e TDD

Motivação

Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 5 / 26

Programadores não

treinam!

Por que?

Page 9: Coding Dojo e TDD

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.

Page 10: Coding Dojo e TDD

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ê

Page 11: Coding Dojo e TDD

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ê

Page 12: Coding Dojo e TDD

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ê

Page 13: Coding Dojo e TDD

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ê

Page 14: Coding Dojo e TDD

Regras gerais

Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 8 / 26

Page 15: Coding Dojo e TDD

Regras gerais

Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 8 / 26

• Computador + Projetor

Page 16: Coding Dojo e TDD

Regras gerais

Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 8 / 26

• Computador + Projetor

• Par + Platéia

Page 17: Coding Dojo e TDD

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)

Page 18: Coding Dojo e TDD

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

Page 19: Coding Dojo e TDD

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

Page 20: Coding Dojo e TDD

O formato Randori

Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 9 / 26

• Programação em pares

Page 21: Coding Dojo e TDD

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)

Page 22: Coding Dojo e TDD

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

Page 23: Coding Dojo e TDD

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

Page 24: Coding Dojo e TDD

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

Page 25: Coding Dojo e TDD

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

Page 26: Coding Dojo e TDD

Objetivo

Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 11 / 26

• Praticar

• Ensinar

• Aprender

• Discutir com bases sobre codigo!

Page 27: Coding Dojo e TDD

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

Page 28: Coding Dojo e TDD

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

Page 29: Coding Dojo e TDD

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

Page 30: Coding Dojo e TDD

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

Page 31: Coding Dojo e TDD

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

Page 32: Coding Dojo e TDD

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

Page 33: Coding Dojo e TDD

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

Page 34: Coding Dojo e TDD

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

Page 35: Coding Dojo e TDD

Test-driven Development

(TDD)

Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 14 / 26

Page 36: Coding Dojo e TDD

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.

Page 37: Coding Dojo e TDD

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.

Page 38: Coding Dojo e TDD

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.

Page 39: Coding Dojo e TDD

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

Page 40: Coding Dojo e TDD

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

Page 41: Coding Dojo e TDD

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

Page 42: Coding Dojo e TDD

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

Page 43: Coding Dojo e TDD

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

Page 44: Coding Dojo e TDD

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

Page 45: Coding Dojo e TDD

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

Page 46: Coding Dojo e TDD

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

Page 47: Coding Dojo e TDD

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

Page 48: Coding Dojo e TDD

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

Page 49: Coding Dojo e TDD

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.

Page 50: Coding Dojo e TDD

TDD na prática!

Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 20 / 26

Page 51: Coding Dojo e TDD

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

Page 52: Coding Dojo e TDD

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

Page 53: Coding Dojo e TDD

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

Page 54: Coding Dojo e TDD

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

Page 55: Coding Dojo e TDD

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

Page 56: Coding Dojo e TDD

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

Page 57: Coding Dojo e TDD

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

∗ . . .

Page 58: Coding Dojo e TDD

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

∗ . . .

Page 59: Coding Dojo e TDD

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

∗ . . .

Page 60: Coding Dojo e TDD

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

∗ . . .

Page 61: Coding Dojo e TDD

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

∗ . . .

Page 62: Coding Dojo e TDD

Considerações finais

Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 23 / 26

Page 63: Coding Dojo e TDD

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!

Page 64: Coding Dojo e TDD

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!

Page 65: Coding Dojo e TDD

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!

Page 66: Coding Dojo e TDD

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

Page 67: Coding Dojo e TDD

Obrigado pela presença!

Grupo de Gestão do Conhecimento Coding Dojo e Test-driven Development – 26 / 26