coding dojo e tdd

Post on 20-Aug-2015

2.498 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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