Post on 16-Apr-2017
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!!!!!
luizfar@gmail.comlribeiro@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