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

Embed Size (px)

Citation preview

Coding Dojo >

Luiz Fernando Ribeiro Perdido
[email protected]
27 de Agosto de 2010

Agile Manifesto

Estamos descobrindo maneiras melhores de desenvolversoftware, fazendo-o ns mesmos e ajudando outros afazerem o mesmo.Atravs deste trabalho, passamos a valorizar:

Indivduos e interaes mais que processos e ferramentasSoftware em funcionamento mais que documentao abrangenteColaborao com o cliente mais que negociao de contratosResponder a mudanas mais que seguir um plano

Ou seja, mesmo havendo valor nos itens direita,valorizamos mais os itens esquerda.

O que mais difcil em programao?

Entender o problema

Estruturar suas ideias

Elaborar uma soluo

Conhecer a plataforma de programao

Digitar o cdigo

Testar o resultado

Programao em pares

Vantagens de programao em pares

Eficincia (duas cabeas pensam melhor que uma)

Feedback instantneo

Propriedade coletiva

Menor fator caminho

Zaphod Beeblebrox

Testes?

Testes unitrios

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....}

Benefcios de TDD

Simplicidade

Modularizao

Extensibilidade

Produtividade

Testes como documentao

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

Coding Dojo

Reunio de programadores para resolver um desafio de programao. Eles esto l para se divertir e, atravs do uso de boas praticas, melhorar suas habilidades.

http://codingdojo.org/

Aprendizado contnuo

Ambiente:

No-competitivo

Colaborativo

Descontrado

Seguro para testar novas ideias

Todos nveis de conhecimento so bem-vindos

Passos de beb

Um par de programadoresUma plateia

Integrantes do par mudam a cada 5 minutos

Regras:

- O par deve descrever em voz alta suas aes- Comentrios somente no verde- Silncio no vermelho- No nos preocupamos em terminar- O foco no aprendizado e descontrao

Click to edit the title text formatClick to edit Master title style

Click to edit the outline text formatSecond Outline LevelThird Outline LevelFourth Outline LevelFifth Outline LevelSixth Outline LevelSeventh Outline LevelEighth Outline Level

Ninth Outline LevelClick to edit Master text styles

Second level

Third level

Fourth level

Fifth level