Revolucao Agile - UFSCar

Embed Size (px)

Citation preview

A revoluo Agile >

Luiz Fernando Ribeiro Perdido
26 de Agosto de 2010

Por que voc est aqui?

Agenda

Sobre a ThoughtWorks

Modelos tradicionais de desenvolvimento

Agile manifesto

Descendo o nvel...

Sobre a ThoughtWorks

Pioneira e totalmente focada em Agile

Referncia em prticas geis

8 pases, 21 cidades

Open Source: Cruise Control, Selenium, outros

Martin Fowler

Agile funciona!

Mas o que Agile mesmo?

Modelos tradicionais de desenvolvimento

Caractersticas

- Previsibilidade- BDUF (engenharia)- Documentao abrangente- Orientado a processo e a ferramentas

Quais os problemas desses modelos?

Baixo ndice de interao

Pouca comunicao entre pessoas trabalhando em diferentes nveis de abstrao

Baixo ndice de interaoCiclo de Feedback muito longo

Como sabemos se estamos indo no caminho certo?

Baixo ndice de interaoCiclo de Feedback muito longoProteo contra o cliente

Qual o valor por trs disso tudo?

Baixo ndice de interaoCiclo de Feedback muito longoProteo contra o clienteDificuldade de mudana

Change requests, change requests...

Baixo ndice de interaoCiclo de Feedback muito longoProteo contra o clienteDificuldade de mudanaPrevisibilidade a longo prazo

The Standish Group International, The CHAOS Report ,

Baixo ndice de interaoCiclo de Feedback muito longoProteo contra o clienteDificuldade de mudanaPrevisibilidade a longo prazoBaixa motivao

Trate as pessoas como macaquinhosMacaquinhos elas sero

Agile Manifesto

Agile Manifesto

Estamos descobrindo maneiras melhores de desenvolversoftware, fazendo-o ns mesmos e ajudando outros afazerem o mesmo.

Agile Manifesto

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

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 ferramentas

Foco no processoXFoco nos indivduos

Linha de montagem

Aprendizado

Desenvolvimento de software=Atividade intelectual, criativa

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 abrangente

Design sessionsWhiteboardFotosDocumentao como ferramenta

X

Documentao como fim

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 contratos

Documento de requisitosXComunicao constante

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

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.

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.

Baixo ndice de interaoCiclo de Feedback muito longoProteo contra o clienteDificuldade de mudanaPrevisibilidade a longo prazoBaixa motivao

Mudana de mentalidade

Adaptao

Esvazie sua mente. Seja sem forma, como a gua. Voc coloca gua em uma caneca, ela se torna a caneca. Voc coloca gua em uma garrafa, ela se torna a garrafa A gua pode fluir ou pode destruir!Seja gua, meu amigo. Bruce Lee

Pessoas

+

Confiana

Descendo o nvel....

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); }}

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

PessoasAdaptaoColaboraoFeedbackSoftware

Mentalidade

Mais perguntas?

Obrigado!!!!!

[email protected]@thoughtworks.com(51) 8105-1520

Bora tomar uma cerveja?

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