SlideShare uma empresa Scribd logo
1 de 26
Coding Dojo > Luiz Fernando Ribeiro “Perdido” [email_address] 27 de Agosto de 2010
Agile Manifesto Estamos descobrindo maneiras melhores de desenvolver software, fazendo-o nós mesmos e ajudando outros a fazerem o mesmo. Através deste trabalho, passamos a valorizar:  Indivíduos e interações  mais que processos e ferramentas Software em funcionamento  mais que documentação abrangente Colaboração com o cliente  mais que negociação de contratos Responder a mudanças  mais que seguir um plano Ou seja, mesmo havendo valor nos itens à direita, valorizamos mais os itens à esquerda.
O que é mais difícil em programação? ,[object Object]
Estruturar suas ideias
Elaborar uma solução
Conhecer a plataforma de programação
Digitar o código
Testar o resultado
Programação em pares
Vantagens de programação em pares ,[object Object]
Feedback instantâneo
Propriedade coletiva
Menor “fator caminhão” Zaphod Beeblebrox
Testes?
Testes unitários
package  calculator; public   class  Calculator { public   float  divide( float  dividend,  float  divisor) { if  (divisor == 0) { throw   new  CalculatorException( "Can't divide by zero." ); } return  dividend / divisor; } // other methods.... }
package  calculator; import   static  org.junit.Assert. assertEquals ; import  org.junit.Test; public   class  CalculatorTests { @Test public   void  divideShouldReturnTheDivisionQuotient() { float  result =  new  Calculator().divide(56, 8); assertEquals (7, result, 0.0); } @Test public   void  divideShouldReturnDecimalPartsOfNonExactDivisions()  throws  Exception { float  result =  new  Calculator().divide(5, 2); assertEquals (2.5, result, 0.0); } @Test (expected = CalculatorException. class ) public   void  divideShouldThrowACalculatorExceptionWhenDividingByZero()  throws  Exception { new  Calculator().divide(5, 0); } }
Test-driven development (TDD)
package  calculator; import   static  org.junit.Assert. assertEquals ; import  org.junit.Test; public   class  CalculatorTests { @Test public   void  divideShouldReturnTheDivisionQuotient() { int  result =  new  Calculator().divide(56, 8); assertEquals (7, result); } } package  calculator; public   class  Calculator { public   int  divide( int  n1,  int  n2) { return  n1 / n2; } }
package  calculator; import   static  org.junit.Assert. assertEquals ; import  org.junit.Test; public   class  CalculatorTests { @Test public   void  divideShouldReturnTheDivisionQuotient() { float  result =  new  Calculator().divide(56, 8); assertEquals (7, result, 0.0); } @Test public   void   divideShouldReturnDecimalPartsOfNonExactDivisions ()  throws  Exception { float  result =  new  Calculator().divide(5, 2); assertEquals (2.5, result, 0.0); } }
package  calculator; public   class  Calculator { public   float  divide( float  dividend,  float  divisor) { return  dividend / divisor; } // other methods.... }
package  calculator; import   static  org.junit.Assert. assertEquals ; import  org.junit.Test; public   class  CalculatorTests { @Test public   void  divideShouldReturnTheDivisionQuotient() { float  result =  new  Calculator().divide(56, 8); assertEquals (7, result, 0.0); } @Test public   void  divideShouldReturnDecimalPartsOfNonExactDivisions()  throws  Exception { float  result =  new  Calculator().divide(5, 2); assertEquals (2.5, result, 0.0); } @Test (expected = CalculatorException. class ) public   void  divideShouldThrowACalculatorExceptionWhenDividingByZero()  throws  Exception { new  Calculator().divide(5, 0); } }
package  calculator; public   class  Calculator { public   float  divide( float  dividend,  float  divisor) { if  (divisor == 0) { throw   new  CalculatorException( "Can't divide by zero." ); } return  dividend / divisor; } // other methods.... }
Benefícios de TDD ,[object Object]
Modularização
Extensibilidade

Mais conteúdo relacionado

Mais procurados

TDD - Algumas lições aprendidas com o livro GOOS
TDD - Algumas lições aprendidas com o livro GOOSTDD - Algumas lições aprendidas com o livro GOOS
TDD - Algumas lições aprendidas com o livro GOOSFábio Miranda
 
Desenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com JunitDesenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com JunitAdolfo Neto
 
Adianti Framework PHPConf 2013
Adianti Framework PHPConf 2013Adianti Framework PHPConf 2013
Adianti Framework PHPConf 2013Pablo Dall'Oglio
 
Implementando Testes Unitários em Java - Manoel Pimentel
Implementando Testes Unitários em Java - Manoel PimentelImplementando Testes Unitários em Java - Manoel Pimentel
Implementando Testes Unitários em Java - Manoel PimentelManoel Pimentel Medeiros
 
As novidades do PHP5 (2005)
As novidades do PHP5 (2005)As novidades do PHP5 (2005)
As novidades do PHP5 (2005)Pablo Dall'Oglio
 
Clean Code e Object Calisthenics - Aplicados no PHP
Clean Code e Object Calisthenics - Aplicados no PHPClean Code e Object Calisthenics - Aplicados no PHP
Clean Code e Object Calisthenics - Aplicados no PHPRafael Neris
 
Testes de Unidade com JUnit
Testes de Unidade com JUnitTestes de Unidade com JUnit
Testes de Unidade com JUnitelliando dias
 
Palestra Testes Unidade Com JUnit
Palestra Testes Unidade Com JUnitPalestra Testes Unidade Com JUnit
Palestra Testes Unidade Com JUnitRobinson Castilho
 
Como conectar programas em linguagem java a bases de dados
Como conectar programas em linguagem java  a bases de dadosComo conectar programas em linguagem java  a bases de dados
Como conectar programas em linguagem java a bases de dadosHenrique Fernandes
 
Web2py: Desenvolvimento Ágil de Aplicações Web com Python
Web2py: Desenvolvimento Ágil de Aplicações Web com PythonWeb2py: Desenvolvimento Ágil de Aplicações Web com Python
Web2py: Desenvolvimento Ágil de Aplicações Web com Pythonchackero
 
Atividades de Teste e Cobertura de Código em Java
Atividades de Teste e Cobertura de Código em JavaAtividades de Teste e Cobertura de Código em Java
Atividades de Teste e Cobertura de Código em Javaaceiro
 
Aplicando CDI em aplicações Java
Aplicando CDI em aplicações JavaAplicando CDI em aplicações Java
Aplicando CDI em aplicações JavaMichel Graciano
 
Construindo ERP's com PHP: Desafios em design, manutenção segurança e perf...
Construindo ERP's com PHP: Desafios em design, manutenção segurança e perf...Construindo ERP's com PHP: Desafios em design, manutenção segurança e perf...
Construindo ERP's com PHP: Desafios em design, manutenção segurança e perf...Pablo Dall'Oglio
 

Mais procurados (18)

TDD - Algumas lições aprendidas com o livro GOOS
TDD - Algumas lições aprendidas com o livro GOOSTDD - Algumas lições aprendidas com o livro GOOS
TDD - Algumas lições aprendidas com o livro GOOS
 
JUnit
JUnitJUnit
JUnit
 
Desenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com JunitDesenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com Junit
 
Adianti Framework PHPConf 2013
Adianti Framework PHPConf 2013Adianti Framework PHPConf 2013
Adianti Framework PHPConf 2013
 
Implementando Testes Unitários em Java - Manoel Pimentel
Implementando Testes Unitários em Java - Manoel PimentelImplementando Testes Unitários em Java - Manoel Pimentel
Implementando Testes Unitários em Java - Manoel Pimentel
 
As novidades do PHP5 (2005)
As novidades do PHP5 (2005)As novidades do PHP5 (2005)
As novidades do PHP5 (2005)
 
Clean Code e Object Calisthenics - Aplicados no PHP
Clean Code e Object Calisthenics - Aplicados no PHPClean Code e Object Calisthenics - Aplicados no PHP
Clean Code e Object Calisthenics - Aplicados no PHP
 
Testes de Unidade com JUnit
Testes de Unidade com JUnitTestes de Unidade com JUnit
Testes de Unidade com JUnit
 
Palestra Testes Unidade Com JUnit
Palestra Testes Unidade Com JUnitPalestra Testes Unidade Com JUnit
Palestra Testes Unidade Com JUnit
 
Refactoring - Design no Código
Refactoring - Design no CódigoRefactoring - Design no Código
Refactoring - Design no Código
 
Como conectar programas em linguagem java a bases de dados
Como conectar programas em linguagem java  a bases de dadosComo conectar programas em linguagem java  a bases de dados
Como conectar programas em linguagem java a bases de dados
 
Web2py: Desenvolvimento Ágil de Aplicações Web com Python
Web2py: Desenvolvimento Ágil de Aplicações Web com PythonWeb2py: Desenvolvimento Ágil de Aplicações Web com Python
Web2py: Desenvolvimento Ágil de Aplicações Web com Python
 
Junit
JunitJunit
Junit
 
Atividades de Teste e Cobertura de Código em Java
Atividades de Teste e Cobertura de Código em JavaAtividades de Teste e Cobertura de Código em Java
Atividades de Teste e Cobertura de Código em Java
 
Junit 4.0
Junit 4.0Junit 4.0
Junit 4.0
 
Aplicando CDI em aplicações Java
Aplicando CDI em aplicações JavaAplicando CDI em aplicações Java
Aplicando CDI em aplicações Java
 
Trabalhando com as views do Web2Py
Trabalhando com as views do Web2PyTrabalhando com as views do Web2Py
Trabalhando com as views do Web2Py
 
Construindo ERP's com PHP: Desafios em design, manutenção segurança e perf...
Construindo ERP's com PHP: Desafios em design, manutenção segurança e perf...Construindo ERP's com PHP: Desafios em design, manutenção segurança e perf...
Construindo ERP's com PHP: Desafios em design, manutenção segurança e perf...
 

Destaque

Case simbo
Case simboCase simbo
Case simboHyves
 
Case BlackBerry Music
Case BlackBerry MusicCase BlackBerry Music
Case BlackBerry MusicHyves
 
Agil como Bruce Lee
Agil como Bruce LeeAgil como Bruce Lee
Agil como Bruce LeeLuiz Ribeiro
 
Hyves kids insight event sept 2012
Hyves kids insight event sept 2012Hyves kids insight event sept 2012
Hyves kids insight event sept 2012Hyves
 

Destaque (7)

Case simbo
Case simboCase simbo
Case simbo
 
Case BlackBerry Music
Case BlackBerry MusicCase BlackBerry Music
Case BlackBerry Music
 
Presentacion
PresentacionPresentacion
Presentacion
 
Agil como Bruce Lee
Agil como Bruce LeeAgil como Bruce Lee
Agil como Bruce Lee
 
Hyves kids insight event sept 2012
Hyves kids insight event sept 2012Hyves kids insight event sept 2012
Hyves kids insight event sept 2012
 
Blue talk
Blue talkBlue talk
Blue talk
 
6tos 2011
6tos 20116tos 2011
6tos 2011
 

Semelhante a Dojo de programação - Dia de Java - UFSCar

Revolucao Agile - UFSCar
Revolucao Agile - UFSCarRevolucao Agile - UFSCar
Revolucao Agile - UFSCarLuiz Ribeiro
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHGiovanni Bassi
 
Qualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitQualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitDiego Tremper
 
Testes de unidade na prática
Testes de unidade na práticaTestes de unidade na prática
Testes de unidade na práticaTiago Furtado
 
Fazendo Injeção de dependência com Unity 1.2
Fazendo Injeção de dependência com Unity 1.2Fazendo Injeção de dependência com Unity 1.2
Fazendo Injeção de dependência com Unity 1.2Giovanni Bassi
 
Por quê você deve utilizar TDD?
Por quê você deve utilizar TDD?Por quê você deve utilizar TDD?
Por quê você deve utilizar TDD?Wellington Moreira
 
TDC2016 Boas Práticas SQL em Banco Relacional para Desenvolvedores
TDC2016 Boas Práticas SQL em Banco Relacional para DesenvolvedoresTDC2016 Boas Práticas SQL em Banco Relacional para Desenvolvedores
TDC2016 Boas Práticas SQL em Banco Relacional para DesenvolvedoresFernando Franquini
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Androidtdc-globalcode
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Androidtdc-globalcode
 
Introdução a testes unitários automatizados com JUnit e NUnit
Introdução a testes unitários automatizados com JUnit e NUnitIntrodução a testes unitários automatizados com JUnit e NUnit
Introdução a testes unitários automatizados com JUnit e NUnitelliando dias
 
Paletra sobre TDD, ocorrida no #DevDojo
Paletra sobre TDD, ocorrida no #DevDojoPaletra sobre TDD, ocorrida no #DevDojo
Paletra sobre TDD, ocorrida no #DevDojoflavio1110
 
Programando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkProgramando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkPablo Dall'Oglio
 

Semelhante a Dojo de programação - Dia de Java - UFSCar (20)

Test driven development
Test driven developmentTest driven development
Test driven development
 
Revolucao Agile - UFSCar
Revolucao Agile - UFSCarRevolucao Agile - UFSCar
Revolucao Agile - UFSCar
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BH
 
Minicurso de TDD
Minicurso de TDDMinicurso de TDD
Minicurso de TDD
 
Qualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitQualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnit
 
Testes: Por onde Começar?
Testes: Por onde Começar?Testes: Por onde Começar?
Testes: Por onde Começar?
 
Testes de unidade na prática
Testes de unidade na práticaTestes de unidade na prática
Testes de unidade na prática
 
Testes de Unidade com JUnit
Testes de Unidade com JUnitTestes de Unidade com JUnit
Testes de Unidade com JUnit
 
Java 12
Java 12Java 12
Java 12
 
Fazendo Injeção de dependência com Unity 1.2
Fazendo Injeção de dependência com Unity 1.2Fazendo Injeção de dependência com Unity 1.2
Fazendo Injeção de dependência com Unity 1.2
 
Por quê você deve utilizar TDD?
Por quê você deve utilizar TDD?Por quê você deve utilizar TDD?
Por quê você deve utilizar TDD?
 
TDC2016 Boas Práticas SQL em Banco Relacional para Desenvolvedores
TDC2016 Boas Práticas SQL em Banco Relacional para DesenvolvedoresTDC2016 Boas Práticas SQL em Banco Relacional para Desenvolvedores
TDC2016 Boas Práticas SQL em Banco Relacional para Desenvolvedores
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Android
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Android
 
Programação Defensiva
Programação DefensivaProgramação Defensiva
Programação Defensiva
 
Introdução a testes unitários automatizados com JUnit e NUnit
Introdução a testes unitários automatizados com JUnit e NUnitIntrodução a testes unitários automatizados com JUnit e NUnit
Introdução a testes unitários automatizados com JUnit e NUnit
 
Paletra sobre TDD, ocorrida no #DevDojo
Paletra sobre TDD, ocorrida no #DevDojoPaletra sobre TDD, ocorrida no #DevDojo
Paletra sobre TDD, ocorrida no #DevDojo
 
JUnit Sample
JUnit SampleJUnit Sample
JUnit Sample
 
Testes com JUnit
Testes com JUnitTestes com JUnit
Testes com JUnit
 
Programando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkProgramando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um Framework
 

Dojo de programação - Dia de Java - UFSCar

  • 1. Coding Dojo > Luiz Fernando Ribeiro “Perdido” [email_address] 27 de Agosto de 2010
  • 2. Agile Manifesto Estamos descobrindo maneiras melhores de desenvolver software, fazendo-o nós mesmos e ajudando outros a fazerem o mesmo. Através deste trabalho, passamos a valorizar: Indivíduos e interações mais que processos e ferramentas Software em funcionamento mais que documentação abrangente Colaboração com o cliente mais que negociação de contratos Responder a mudanças mais que seguir um plano Ou seja, mesmo havendo valor nos itens à direita, valorizamos mais os itens à esquerda.
  • 3.
  • 6. Conhecer a plataforma de programação
  • 10.
  • 13. Menor “fator caminhão” Zaphod Beeblebrox
  • 16. package calculator; public class Calculator { public float divide( float dividend, float divisor) { if (divisor == 0) { throw new CalculatorException( "Can't divide by zero." ); } return dividend / divisor; } // other methods.... }
  • 17. package calculator; import static org.junit.Assert. assertEquals ; import org.junit.Test; public class CalculatorTests { @Test public void divideShouldReturnTheDivisionQuotient() { float result = new Calculator().divide(56, 8); assertEquals (7, result, 0.0); } @Test public void divideShouldReturnDecimalPartsOfNonExactDivisions() throws Exception { float result = new Calculator().divide(5, 2); assertEquals (2.5, result, 0.0); } @Test (expected = CalculatorException. class ) public void divideShouldThrowACalculatorExceptionWhenDividingByZero() throws Exception { new Calculator().divide(5, 0); } }
  • 19. package calculator; import static org.junit.Assert. assertEquals ; import org.junit.Test; public class CalculatorTests { @Test public void divideShouldReturnTheDivisionQuotient() { int result = new Calculator().divide(56, 8); assertEquals (7, result); } } package calculator; public class Calculator { public int divide( int n1, int n2) { return n1 / n2; } }
  • 20. package calculator; import static org.junit.Assert. assertEquals ; import org.junit.Test; public class CalculatorTests { @Test public void divideShouldReturnTheDivisionQuotient() { float result = new Calculator().divide(56, 8); assertEquals (7, result, 0.0); } @Test public void divideShouldReturnDecimalPartsOfNonExactDivisions () throws Exception { float result = new Calculator().divide(5, 2); assertEquals (2.5, result, 0.0); } }
  • 21. package calculator; public class Calculator { public float divide( float dividend, float divisor) { return dividend / divisor; } // other methods.... }
  • 22. package calculator; import static org.junit.Assert. assertEquals ; import org.junit.Test; public class CalculatorTests { @Test public void divideShouldReturnTheDivisionQuotient() { float result = new Calculator().divide(56, 8); assertEquals (7, result, 0.0); } @Test public void divideShouldReturnDecimalPartsOfNonExactDivisions() throws Exception { float result = new Calculator().divide(5, 2); assertEquals (2.5, result, 0.0); } @Test (expected = CalculatorException. class ) public void divideShouldThrowACalculatorExceptionWhenDividingByZero() throws Exception { new Calculator().divide(5, 0); } }
  • 23. package calculator; public class Calculator { public float divide( float dividend, float divisor) { if (divisor == 0) { throw new CalculatorException( "Can't divide by zero." ); } return dividend / divisor; } // other methods.... }
  • 24.
  • 29. def "project can't be deleted if it has expenses" () { given: currentUserIsProjectOwner() projectHasExpenses() projectHasNoActivities() when: tryToDeleteProject() then: projectIsNotDeleted() } // Taken from: http://www.aqris.com/display/DEV/2010/01/19/Testing+with+Spock
  • 31. Reunião de programadores para resolver um desafio de programação. Eles estão lá para se divertir e, através do uso de boas praticas, melhorar suas habilidades. http://codingdojo.org/
  • 32.
  • 33.
  • 34.
  • 35.
  • 37. Um par de programadores Uma plateia
  • 38. Integrantes do par mudam a cada 5 minutos
  • 39.  
  • 40. Regras: - O par deve descrever em voz alta suas ações - Comentários somente no verde - Silêncio no vermelho - Não nos preocupamos em terminar - O foco é no aprendizado e descontração
  • 41.