SlideShare uma empresa Scribd logo
1 de 65
Baixar para ler offline
Agilidade no Mundo Real
   O que funcionou nos
    últimos 2 anos em
  consultorias da Milfont
   Consulting... e como
         melhorar!

Christiano Milfont
2010, João Pessoa-PB
Copyleft 2010 Milfont.org
Milfont Consulting




2006 - 2008




     Desenvolvimento – Treinamento - Mentoring
        Resgate de Projetos - Code Review
O que é agilidade?




Estamos descobrindo maneiras
melhores de desenvolver software
fazendo-o nós mesmos e ajudando
outros a fazê-lo.
O que é agilidade?
O que é agilidade?




             Ciclo de vida de um Software

Desenvolvimento   Manutenção
O que é agilidade?




             Ciclo de vida de um Software

Desenvolvimento   Manutenção




1º Deploy - Transição
O que é agilidade?


Process Disciplines             Inception Elaboration           Construction          Transition

          Business Modeling
               Requirements
           Analysis & Design
             Implementation
                       Test
                Deployment
                                Preliminary    Iter.   Iter.   Iter.    Iter. Iter.   Iter.    Iter.
                                Iteration(s)   #1      #2       #n     #n+1 #n+2      #m      #m+1

                                                           Iterations
O que é agilidade?


Process Disciplines              Inception Elaboration           Construction          Transition

           Business Modeling
                Requirements
            Analysis & Design
               Implementation
                         Test
                  Deployment
                                 Preliminary    Iter.   Iter.   Iter.    Iter. Iter.   Iter.    Iter.
                                 Iteration(s)   #1      #2       #n     #n+1 #n+2      #m      #m+1

                                                            Iterations



   Business Requirements Analysis Design Implementation Test Deployment
O que é agilidade?


Process Disciplines              Inception Elaboration           Construction          Transition

           Business Modeling
                Requirements
            Analysis & Design
               Implementation
                         Test
                  Deployment
                                 Preliminary    Iter.   Iter.   Iter.    Iter. Iter.   Iter.    Iter.
                                 Iteration(s)   #1      #2       #n     #n+1 #n+2      #m      #m+1

                                                            Iterations



   Business Requirements Analysis Design Implementation Test Deployment
O que é agilidade?


Process Disciplines              Inception Elaboration           Construction          Transition

           Business Modeling
                Requirements
            Analysis & Design
               Implementation
                         Test
                  Deployment
                                 Preliminary    Iter.   Iter.   Iter.    Iter. Iter.   Iter.    Iter.
                                 Iteration(s)   #1      #2       #n     #n+1 #n+2      #m      #m+1

                                                            Iterations



   Business Requirements Analysis Design Implementation Test Deployment

         Se mudar ou o processo for compreendido de forma errada?
O que é agilidade?


Process Disciplines              Inception Elaboration           Construction          Transition

           Business Modeling
                Requirements
            Analysis & Design
               Implementation
                         Test
                  Deployment
                                 Preliminary    Iter.   Iter.   Iter.    Iter. Iter.   Iter.    Iter.
                                 Iteration(s)   #1      #2       #n     #n+1 #n+2      #m      #m+1

                                                            Iterations



   Business Requirements Analysis Design Implementation Test Deployment

              Nunca há tempo suficiente ou está funcionando!
O que é agilidade?


Process Disciplines             Inception Elaboration           Construction          Transition

          Business Modeling
               Requirements
           Analysis & Design
             Implementation
                       Test
                Deployment
                                Preliminary    Iter.   Iter.   Iter.    Iter. Iter.   Iter.    Iter.
                                Iteration(s)   #1      #2       #n     #n+1 #n+2      #m      #m+1

                                                           Iterations
O que é agilidade?


Process Disciplines             Inception Elaboration           Construction          Transition

          Business Modeling
               Requirements
           Analysis & Design
             Implementation
                       Test
                Deployment
                                Preliminary    Iter.   Iter.   Iter.    Iter. Iter.   Iter.    Iter.
                                Iteration(s)   #1      #2       #n     #n+1 #n+2      #m      #m+1

                                                           Iterations
O que é agilidade?


Process Disciplines             Inception Elaboration           Construction          Transition

                       Test
          Business Modeling
               Requirements
           Analysis & Design
             Implementation
                Deployment
                                Preliminary    Iter.   Iter.   Iter.    Iter. Iter.   Iter.    Iter.
                                Iteration(s)   #1      #2       #n     #n+1 #n+2      #m      #m+1

                                                           Iterations
O que é agilidade?




                      Ciclo de vida de um Software

  Desenvolvimento           Manutenção
Deploy    Deploy   Deploy
 Deploy Deploy Deploy
    Deploy   Deploy




         Fronteira de
      Transição não faz
        mais sentido
O que é agilidade?


Process Disciplines             Inception Elaboration           Construction          Transition




                Requirements
          Test
            Analysis & Design
           Business Modeling
       Implementation
                Deployment

                                Preliminary    Iter.   Iter.   Iter.    Iter. Iter.   Iter.    Iter.
                                Iteration(s)   #1      #2       #n     #n+1 #n+2      #m      #m+1

                                                           Iterations
Dar Ordem ao Caos
O que é difícil?
                              Pair Programming
               Energized
                 Work

Single Code BaseWhole Team
 Share Code     Move People
   Sit Together   Around


                                      Stories

                                      Informative
                                       Worspace
Dar Ordem ao Caos
       Trabalho Energizado
Pair Programming

“Não é adequado para trabalhos
repetitivos”
“Não é adequado a todo
momento”
Pair Programming

“Não é adequado para trabalhos
repetitivos”
“Não é adequado a todo
momento”
- 2 horas produtivas por dia, - R$



                             Development


Commit
 Push                         Deploy
       Create,
       Insert...
Trabalhos repetitivos, aonde?



                            Development


Commit
 Push                       Deploy
       Create,
       Insert...
Trabalhos repetitivos, aonde?



                                Development


    Commit
Merge from Hell                 Deploy
     Push    Create,
             Insert...
Começou
[cmilfont] /projetos/agilidadenomundoreal (master)
$ git pull origin master

[cmilfont] /projetos/agilidadenomundoreal (master)
$ git checkout -b feature-1 master
codificando...
[cmilfont] /projetos/agilidadenomundoreal (feature-1)
$ git commit -a -m “bla bla bla”
codificando...
[cmilfont] /projetos/agilidadenomundoreal (feature-1)
$ git commit -a -m “bla bla bla”

[cmilfont] /projetos/agilidadenomundoreal (feature-1)
$ git checkout master

[cmilfont] /projetos/agilidadenomundoreal (master)
$ git pull origin master

[cmilfont] /projetos/agilidadenomundoreal (master)
$ git checkout feature-1

[cmilfont] /projetos/agilidadenomundoreal (feature-1)
$ git rebase master feature-1
codificando...
[cmilfont] /projetos/agilidadenomundoreal (feature-1)
$ git commit -a -m “bla bla bla”
Agora vai terminar
[cmilfont] /projetos/agilidadenomundoreal (feature-1)
$ git checkout master

[cmilfont] /projetos/agilidadenomundoreal (master)
$ git pull origin master

[cmilfont] /projetos/agilidadenomundoreal (master)
$ git checkout feature-1

[cmilfont] /projetos/agilidadenomundoreal (feature-1)
$ git rebase master feature-1

[cmilfont] /projetos/agilidadenomundoreal (feature-1)
$ git checkout master

[cmilfont] /projetos/agilidadenomundoreal (master)
$ git merge --squash feature-1

[cmilfont] /projetos/agilidadenomundoreal (master)
$ git commit -a -v

[cmilfont] /projetos/agilidadenomundoreal (master)
$ git push origin master
Identificar padrão
[cmilfont] /projetos/agilidadenomundoreal (master)
$ git pull origin master

[cmilfont] /projetos/agilidadenomundoreal (master)
$ git checkout -b feature-1 master
codificando...
[cmilfont] /projetos/agilidadenomundoreal (feature-1)
$ git commit -a -m “bla bla bla”
codificando...
[cmilfont] /projetos/agilidadenomundoreal (feature-1)
$ git commit -a -m “bla bla bla”

[cmilfont] /projetos/agilidadenomundoreal (feature-1)
$ git checkout master

[cmilfont] /projetos/agilidadenomundoreal (master)
$ git pull origin master

[cmilfont] /projetos/agilidadenomundoreal (master)
$ git checkout feature-1

[cmilfont] /projetos/agilidadenomundoreal (feature-1)
$ git rebase master feature-1
codificando...
[cmilfont] /projetos/agilidadenomundoreal (feature-1)
$ git commit -a -m “bla bla bla”
Automatizar
[cmilfont] /projetos/agilidadenomundoreal (master)
$ hack feature-1



codificando...
[cmilfont] /projetos/agilidadenomundoreal (feature-1)
$ git commit -a -m “bla bla bla”
codificando...
[cmilfont] /projetos/agilidadenomundoreal (feature-1)
$ git commit -a -m “bla bla bla”



[cmilfont] /projetos/agilidadenomundoreal (feature-1)
$ sink




codificando...
[cmilfont] /projetos/agilidadenomundoreal (feature-1)
$ git commit -a -m “bla bla bla”
Já tenho parte Automatizada
[cmilfont] /projetos/agilidadenomundoreal (feature-1)
$ git checkout master

[cmilfont] /projetos/agilidadenomundoreal (master)
$ git pull origin master

[cmilfont] /projetos/agilidadenomundoreal (master)
$ git checkout feature-1

[cmilfont] /projetos/agilidadenomundoreal (feature-1)
$ git rebase master feature-1

[cmilfont] /projetos/agilidadenomundoreal (feature-1)
$ git checkout master

[cmilfont] /projetos/agilidadenomundoreal (master)
$ git merge --squash feature-1

[cmilfont] /projetos/agilidadenomundoreal (master)
$ git commit -a -v

[cmilfont] /projetos/agilidadenomundoreal (master)
$ git push origin master
Identifico outra
[cmilfont] /projetos/agilidadenomundoreal (feature-1)
$ sink




[cmilfont] /projetos/agilidadenomundoreal (feature-1)
$ git checkout master

[cmilfont] /projetos/agilidadenomundoreal (master)
$ git merge --squash feature-1

[cmilfont] /projetos/agilidadenomundoreal (master)
$ git commit -a -v

[cmilfont] /projetos/agilidadenomundoreal (master)
$ git push origin master
Automatizo de novo
[cmilfont] /projetos/agilidadenomundoreal (feature-1)
$ sink




[cmilfont] /projetos/agilidadenomundoreal (feature-1)
$ ship
Automatizado
[cmilfont] /projetos/agilidadenomundoreal (master)
$ hack feature-1

codificando...
[cmilfont] /projetos/agilidadenomundoreal (feature-1)
$ git commit -a -m “bla bla bla”
codificando...
[cmilfont] /projetos/agilidadenomundoreal (feature-1)
$ git commit -a -m “bla bla bla”

[cmilfont] /projetos/agilidadenomundoreal (feature-1)
$ sink

[cmilfont] /projetos/agilidadenomundoreal (feature-1)
$ rake spec

[cmilfont] /projetos/agilidadenomundoreal (feature-1)
$ ship

[cmilfont] /projetos/agilidadenomundoreal (master)
$ hack feature-2

codificando...
[cmilfont] /projetos/agilidadenomundoreal (feature-1)
$ git commit -a -m “bla bla bla”
Automatizado
[cmilfont] /projetos/agilidadenomundoreal (master)
$ hack feature-1

codificando...
[cmilfont] /projetos/agilidadenomundoreal (feature-1)
$ git commit -a -m “bla bla bla”
codificando...
[cmilfont] /projetos/agilidadenomundoreal (feature-1)
$ git commit -a -m “bla bla bla”

[cmilfont] /projetos/agilidadenomundoreal (feature-1)
$ sink

[cmilfont] /projetos/agilidadenomundoreal (feature-1)
$ rake spec

[cmilfont] /projetos/agilidadenomundoreal (feature-1)
$ ship

[cmilfont] /projetos/agilidadenomundoreal (master)
$ hack feature-2

codificando...
[cmilfont] /projetos/agilidadenomundoreal (feature-1)
$ git commit -a -m “bla bla bla”
Trabalhos repetitivos, aonde?



                                Development


    Commit
Merge from Hell i h8 SQL        Deploy
     Push    Create,
             Insert...
Insano
[cmilfont] /projetos/agilidadenomundoreal (master)
$ script/server
codificando...
falhou por não existir empresa como dependência...
[cmilfont] /projetos/agilidadenomundoreal (master)
$ script/console
Loading development environment (Rails 2.3.5)
>>empresa = Empresa.new :razao_social => “Milfont
Consulting”, :nome_fantasia => “Milfont Consulting”
=> #<Empresa id: 1, razao_social: “Milfont Consulting”,
nome_fantasia: “Milfont Consulting”, endereco: nil,
created_at: "2010-06-22 19:39:36", updated_at:
"2010-06-22 19:39:36">
>> empresa.save!
=> true
>> exit
[cmilfont] /projetos/agilidadenomundoreal (master)
$ script/server
codificando...
Perdedores de tempo
                              Não consigo
                         reproduzir, me passa o
                                banco!




                           Ok, vou colocar na
                                pasta X



[cmilfont] /projetos/agilidadenomundoreal (master)
$ pg_restore -h localhost -p 5432 -U postgres -d agilidade_development -l
"/home/cmilfont/agilidade.backup"
codificando...
Ganhadores de tempo
                              Não consigo
                         reproduzir, me passa o
                                banco!




                          Faz pull, roda o seed
                         pois atualizei os dados




[cmilfont] /projetos/agilidadenomundoreal (master)
$ sink && rake db:reset && rake db:seed
Trabalhos repetitivos, aonde?



                                Development


    Commit
Merge from Hell i h8 SQL        Feedback
                                Deploy
     Push    Create,
             Insert...
Deploy


  Daily Deployment



Continuous Deployment
Deploy


  Daily Deployment




          XP
Continuous Deployment
Deploy


        Daily Deployment



     Continuous Deployment



Real Customer [and user] Involved
Vou deployar

[cmilfont] ~
$ ssh cmilfont@192.168.0.10
chrismilfont@milfont.org's password:
Last login: Mon Jun 28 16:18:25 2010 from 192.168.0.10

cmilfont@192.168.0.10:/home/cmilfont$ cd /projeto

cmilfont@192.168.0.10:/projeto$ git pull

cmilfont@192.168.0.10:/projeto$ rake war

cmilfont@192.168.0.10:/projeto$ /etc/init.d/jetty stop

cmilfont@192.168.0.10:/projeto$ mysqldump --user=root
--password=root --result-file=projeto.sql projeto

cmilfont@192.168.0.10:/projeto$ mv projeto.war /opt/webapps/

cmilfont@192.168.0.10:/projeto$ /etc/init.d/jetty start
Vou deployar

[cmilfont] ~
$ ssh cmilfont@192.168.0.10
chrismilfont@milfont.org's password:
Last login: Mon Jun 28 16:18:25 2010 from 192.168.0.10

cmilfont@192.168.0.10:/home/cmilfont$ cd /projeto

                                       ior
cmilfont@192.168.0.10:/projeto$ git pull
                                     p
                             fa ça
cmilfont@192.168.0.10:/projeto$ rake war

                   uem
              áq
cmilfont@192.168.0.10:/projeto$ /etc/init.d/jetty stop
           H
cmilfont@192.168.0.10:/projeto$ mysqldump --user=root
--password=root --result-file=projeto.sql projeto

cmilfont@192.168.0.10:/projeto$ mv projeto.war /opt/webapps/

cmilfont@192.168.0.10:/projeto$ /etc/init.d/jetty start
Vou deployar




[cmilfont] ~
$ cd /projeto

[cmilfont] ~/projeto (master)
$ cap deploy
Trabalhos repetitivos, aonde?



                            U need tests
                               Development


    Commit
Merge from Hell i h8 SQL        Feedback
                                Deploy
     Push    Create,
             Insert...
Se você não testa, está errado em
todas as metodologias conhecidas
TDD aumenta o tempo de entrega
 e o time tende a se desmotivar




            Testa


     Codifica       Refatora
BDD facilita o Test First
            mas não faz milagres

            Teste de Aceitação


                    Testa


           Codifica         Refatora

Codifica                               Refatora
BDD é fácil de adotar mas ...

# language: pt
Funcionalidade: Selecionar curriculo
 Como um empregador
 Eu quero selecionar um curriculo
 Para que eu possa organizar e listar os currículos recebidos que preferi

 Contexto:
   Dado um curriculo enviado de "Christiano Milfont"

 Cenário: Selecionar currículos
  Dado que eu estou logado como empregador
  E eu clicar em "Vagas abertas"
  E eu clicar em "Programador Rails"
  E eu clicar em "Currículos encaminhados"
  Quando eu selecionar o curriculo de "Christiano Milfont"
  Então o curriculo de "Christiano Milfont" deve estar na lista de
selecionados
Test First continua
                   difícil

            Teste de Aceitação
                  Fosso
                  Testa


           Codifica       Refatora

Codifica                             Refatora
Test First continua
                   difícil

              Imanutenível
            Teste de Aceitação
                  Fosso
                  Testa


           Codifica       Refatora

Codifica                             Refatora
Não há tempo suficiente
Princípio da Cobertura
100% de Clavius Tales




  Quero 100%
Done

Feature entregue Automatizar


100% cobertura Forçar testes




                     }
Cliente satisfeito
                         Feedback
                         diário
  Feature em
   produção
Pair Programming

 “Não é adequado para trabalhos
 repetitivos”
 “Não é adequado a todo
 momento”


Trabalho Energizado
2 Features por dia, 40 por mês, + R$



                             rake rcov:all


Hack,
Sink,                        cap deploy
ship        rake db:seed
Dar Caos a Ordem
Arquitetura de referência




Ruby             Java              php
Site com artigos, busca textual e relatórios




 Ruby               Java               Php
 Rails             Jasper            Drupal
Sunspot             Solr          Plugins/temas
Site com artigos, busca textual e relatórios
                É possivel?




 Ruby               Java              Php
 Rails       +     Jasper      +    Drupal
Sunspot             Solr         Plugins/temas
PMBOK de Jeans

          CMMi

         PMBOK



 Rup / XP / Scrum / Whatever
PMBOK de Jeans
          CMMi

         PMBOK



Rup / XP / Scrum / Whatever




                          Rup / XP / Scrum / Whatever
Release e Iteration Planning

Release
  Condições de
  satisfação (user
  stories, budget,
  schedule)


                         Release
                         Planning



    Iteração
           Condições de
           satisfação (user
           stories + Acceptance
           Tests)


                       Iteration                      Incremento
                                    Desenvolvimento
                       Planning                       no produto
Release e Iteration Planning


  # language: pt
  Funcionalidade: Selecionar curriculo
   Como um empregador
   Eu quero selecionar um curriculo
   Para que eu possa organizar e listar os currículos recebidos que preferi

   Contexto:
         Dado um curriculo enviado de "Christiano Milfont"

   Cenário: Selecionar currículos
    Dado que eu estou logado como empregador
    E eu clicar em "Vagas abertas"
    E eu clicar em "Programador Rails"
    E eu clicar em "Currículos encaminhados"
    Quando eu selecionar o curriculo de "Christiano Milfont"
    Então o curriculo de "Christiano Milfont" deve estar na lista de
  selecionados
Perguntas?

Mais conteúdo relacionado

Destaque (15)

May Day
May DayMay Day
May Day
 
BDD com Cucumber, Selenium e Rails
BDD com Cucumber, Selenium e RailsBDD com Cucumber, Selenium e Rails
BDD com Cucumber, Selenium e Rails
 
Domain driven design
Domain driven designDomain driven design
Domain driven design
 
Combinando OO e Funcional em javascript de forma prática
Combinando OO e Funcional em javascript de forma práticaCombinando OO e Funcional em javascript de forma prática
Combinando OO e Funcional em javascript de forma prática
 
Oxente BDD
Oxente BDDOxente BDD
Oxente BDD
 
Sead 29 09 2006 Usabilidade Com Ajax
Sead 29 09 2006 Usabilidade Com AjaxSead 29 09 2006 Usabilidade Com Ajax
Sead 29 09 2006 Usabilidade Com Ajax
 
OpenSocial CCT
OpenSocial CCTOpenSocial CCT
OpenSocial CCT
 
MVC Model 3
MVC Model 3MVC Model 3
MVC Model 3
 
I TDD my jQuery code without Browser
I TDD my jQuery code without BrowserI TDD my jQuery code without Browser
I TDD my jQuery code without Browser
 
Beagajs
BeagajsBeagajs
Beagajs
 
Cct Dsl
Cct DslCct Dsl
Cct Dsl
 
Tw Course Ajax 2007 Ap03
Tw Course Ajax 2007 Ap03Tw Course Ajax 2007 Ap03
Tw Course Ajax 2007 Ap03
 
S t patrick
S t patrickS t patrick
S t patrick
 
Saint Valentine
Saint ValentineSaint Valentine
Saint Valentine
 
Lecture Session 4
Lecture Session 4Lecture Session 4
Lecture Session 4
 

Semelhante a Dar Ordem ao Caos

BaixadaTech 2012 - Qualidade de Software
BaixadaTech 2012 - Qualidade de SoftwareBaixadaTech 2012 - Qualidade de Software
BaixadaTech 2012 - Qualidade de SoftwareAdriano Bertucci
 
thedevconference-summit-ai-saopaulo-2024.pdf
thedevconference-summit-ai-saopaulo-2024.pdfthedevconference-summit-ai-saopaulo-2024.pdf
thedevconference-summit-ai-saopaulo-2024.pdfBrunoLusadaCosta
 
Encontro Locaweb
Encontro  LocawebEncontro  Locaweb
Encontro LocawebFabio Akita
 
Encontro Locaweb Curitiba
Encontro  Locaweb CuritibaEncontro  Locaweb Curitiba
Encontro Locaweb CuritibaFabio Akita
 
Segurança no Desenvolvimento de Software
Segurança no Desenvolvimento de SoftwareSegurança no Desenvolvimento de Software
Segurança no Desenvolvimento de SoftwareMarcelo Fleury
 
Agilidade e Qualidade: Lados da Mesma Moeda
Agilidade e Qualidade: Lados da Mesma MoedaAgilidade e Qualidade: Lados da Mesma Moeda
Agilidade e Qualidade: Lados da Mesma MoedaAdail Retamal
 
Qualidade de Software com Visual Studio 2012
Qualidade de Software com Visual Studio 2012Qualidade de Software com Visual Studio 2012
Qualidade de Software com Visual Studio 2012Adriano Bertucci
 
I Forum GSTI - Marcos Andre
I Forum GSTI - Marcos AndreI Forum GSTI - Marcos Andre
I Forum GSTI - Marcos AndreMarcos Andre
 
Desenvolvimento Iterativo-Incremental
Desenvolvimento Iterativo-IncrementalDesenvolvimento Iterativo-Incremental
Desenvolvimento Iterativo-IncrementalRuan Carvalho
 
Site Reliability Engineering - Descubra a nova era para (Infraestrutura|Opera...
Site Reliability Engineering - Descubra a nova era para (Infraestrutura|Opera...Site Reliability Engineering - Descubra a nova era para (Infraestrutura|Opera...
Site Reliability Engineering - Descubra a nova era para (Infraestrutura|Opera...Pery Lemke
 
Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...
Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...
Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...Marcio Miyamoto
 
Da Gestão 1.0 A Gestão 2.0
Da Gestão 1.0 A Gestão 2.0Da Gestão 1.0 A Gestão 2.0
Da Gestão 1.0 A Gestão 2.0Juan Bernabó
 
AGILE ALM usando SCRUM e Team Foundation Server 2010
AGILE ALM usando SCRUM e Team Foundation Server 2010AGILE ALM usando SCRUM e Team Foundation Server 2010
AGILE ALM usando SCRUM e Team Foundation Server 2010Ramon Durães
 
Modernização de Aplicações
Modernização de AplicaçõesModernização de Aplicações
Modernização de AplicaçõesMarcio Sete
 
Verificação, Validação e Teste de Software
Verificação, Validação e Teste de SoftwareVerificação, Validação e Teste de Software
Verificação, Validação e Teste de SoftwareCamilo Almendra
 

Semelhante a Dar Ordem ao Caos (20)

BaixadaTech 2012 - Qualidade de Software
BaixadaTech 2012 - Qualidade de SoftwareBaixadaTech 2012 - Qualidade de Software
BaixadaTech 2012 - Qualidade de Software
 
thedevconference-summit-ai-saopaulo-2024.pdf
thedevconference-summit-ai-saopaulo-2024.pdfthedevconference-summit-ai-saopaulo-2024.pdf
thedevconference-summit-ai-saopaulo-2024.pdf
 
Aula2 paradigmas
Aula2 paradigmasAula2 paradigmas
Aula2 paradigmas
 
Engenharia Ágil
Engenharia ÁgilEngenharia Ágil
Engenharia Ágil
 
Encontro Locaweb
Encontro  LocawebEncontro  Locaweb
Encontro Locaweb
 
Encontro Locaweb Curitiba
Encontro  Locaweb CuritibaEncontro  Locaweb Curitiba
Encontro Locaweb Curitiba
 
Curso Scrum
Curso ScrumCurso Scrum
Curso Scrum
 
Segurança no Desenvolvimento de Software
Segurança no Desenvolvimento de SoftwareSegurança no Desenvolvimento de Software
Segurança no Desenvolvimento de Software
 
Agilidade e Qualidade: Lados da Mesma Moeda
Agilidade e Qualidade: Lados da Mesma MoedaAgilidade e Qualidade: Lados da Mesma Moeda
Agilidade e Qualidade: Lados da Mesma Moeda
 
Qualidade de Software com Visual Studio 2012
Qualidade de Software com Visual Studio 2012Qualidade de Software com Visual Studio 2012
Qualidade de Software com Visual Studio 2012
 
I Forum GSTI - Marcos Andre
I Forum GSTI - Marcos AndreI Forum GSTI - Marcos Andre
I Forum GSTI - Marcos Andre
 
Desenvolvimento Iterativo-Incremental
Desenvolvimento Iterativo-IncrementalDesenvolvimento Iterativo-Incremental
Desenvolvimento Iterativo-Incremental
 
Site Reliability Engineering - Descubra a nova era para (Infraestrutura|Opera...
Site Reliability Engineering - Descubra a nova era para (Infraestrutura|Opera...Site Reliability Engineering - Descubra a nova era para (Infraestrutura|Opera...
Site Reliability Engineering - Descubra a nova era para (Infraestrutura|Opera...
 
Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...
Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...
Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...
 
Just java 2011
Just java   2011Just java   2011
Just java 2011
 
Da Gestão 1.0 A Gestão 2.0
Da Gestão 1.0 A Gestão 2.0Da Gestão 1.0 A Gestão 2.0
Da Gestão 1.0 A Gestão 2.0
 
AGILE ALM usando SCRUM e Team Foundation Server 2010
AGILE ALM usando SCRUM e Team Foundation Server 2010AGILE ALM usando SCRUM e Team Foundation Server 2010
AGILE ALM usando SCRUM e Team Foundation Server 2010
 
Modernização de Aplicações
Modernização de AplicaçõesModernização de Aplicações
Modernização de Aplicações
 
Aula1 introducao engsw
Aula1 introducao engswAula1 introducao engsw
Aula1 introducao engsw
 
Verificação, Validação e Teste de Software
Verificação, Validação e Teste de SoftwareVerificação, Validação e Teste de Software
Verificação, Validação e Teste de Software
 

Mais de Milfont Consulting

Mais de Milfont Consulting (18)

Continuous integration e continuous delivery para salvar o seu projeto!
Continuous integration e continuous delivery para salvar o seu projeto!Continuous integration e continuous delivery para salvar o seu projeto!
Continuous integration e continuous delivery para salvar o seu projeto!
 
Equipes sem Líderes formais e realmente autogeridas
Equipes sem Líderes formais e realmente autogeridasEquipes sem Líderes formais e realmente autogeridas
Equipes sem Líderes formais e realmente autogeridas
 
Engine de template em Javascript com HTML Sprites
Engine de template em Javascript com HTML SpritesEngine de template em Javascript com HTML Sprites
Engine de template em Javascript com HTML Sprites
 
Dar caos à ordem
Dar caos à ordemDar caos à ordem
Dar caos à ordem
 
Construindo WebApps ricas com Rails e Sencha
Construindo WebApps ricas com Rails e SenchaConstruindo WebApps ricas com Rails e Sencha
Construindo WebApps ricas com Rails e Sencha
 
Mare de Agilidade - BDD e TDD
Mare de Agilidade - BDD e TDDMare de Agilidade - BDD e TDD
Mare de Agilidade - BDD e TDD
 
Apresentando Extreme Programming
Apresentando Extreme ProgrammingApresentando Extreme Programming
Apresentando Extreme Programming
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
 
Behaviour Driven Development
Behaviour Driven DevelopmentBehaviour Driven Development
Behaviour Driven Development
 
Primeiro Dia Livre Opensocial
Primeiro Dia Livre OpensocialPrimeiro Dia Livre Opensocial
Primeiro Dia Livre Opensocial
 
Tw Dwr 2007 Ap01
Tw Dwr 2007 Ap01Tw Dwr 2007 Ap01
Tw Dwr 2007 Ap01
 
Course Hibernate 2008
Course Hibernate 2008Course Hibernate 2008
Course Hibernate 2008
 
Opensocial
OpensocialOpensocial
Opensocial
 
Frameworks Ajax
Frameworks AjaxFrameworks Ajax
Frameworks Ajax
 
Ajaxificando
AjaxificandoAjaxificando
Ajaxificando
 
Integração Contínua 3FCSL
Integração Contínua 3FCSLIntegração Contínua 3FCSL
Integração Contínua 3FCSL
 
Extreme Programming
Extreme ProgrammingExtreme Programming
Extreme Programming
 
Tw Course Ajax 2007 Ap04
Tw Course Ajax 2007 Ap04Tw Course Ajax 2007 Ap04
Tw Course Ajax 2007 Ap04
 

Dar Ordem ao Caos

  • 1. Agilidade no Mundo Real O que funcionou nos últimos 2 anos em consultorias da Milfont Consulting... e como melhorar! Christiano Milfont 2010, João Pessoa-PB Copyleft 2010 Milfont.org
  • 2. Milfont Consulting 2006 - 2008 Desenvolvimento – Treinamento - Mentoring Resgate de Projetos - Code Review
  • 3. O que é agilidade? Estamos descobrindo maneiras melhores de desenvolver software fazendo-o nós mesmos e ajudando outros a fazê-lo.
  • 4. O que é agilidade?
  • 5. O que é agilidade? Ciclo de vida de um Software Desenvolvimento Manutenção
  • 6. O que é agilidade? Ciclo de vida de um Software Desenvolvimento Manutenção 1º Deploy - Transição
  • 7. O que é agilidade? Process Disciplines Inception Elaboration Construction Transition Business Modeling Requirements Analysis & Design Implementation Test Deployment Preliminary Iter. Iter. Iter. Iter. Iter. Iter. Iter. Iteration(s) #1 #2 #n #n+1 #n+2 #m #m+1 Iterations
  • 8. O que é agilidade? Process Disciplines Inception Elaboration Construction Transition Business Modeling Requirements Analysis & Design Implementation Test Deployment Preliminary Iter. Iter. Iter. Iter. Iter. Iter. Iter. Iteration(s) #1 #2 #n #n+1 #n+2 #m #m+1 Iterations Business Requirements Analysis Design Implementation Test Deployment
  • 9. O que é agilidade? Process Disciplines Inception Elaboration Construction Transition Business Modeling Requirements Analysis & Design Implementation Test Deployment Preliminary Iter. Iter. Iter. Iter. Iter. Iter. Iter. Iteration(s) #1 #2 #n #n+1 #n+2 #m #m+1 Iterations Business Requirements Analysis Design Implementation Test Deployment
  • 10. O que é agilidade? Process Disciplines Inception Elaboration Construction Transition Business Modeling Requirements Analysis & Design Implementation Test Deployment Preliminary Iter. Iter. Iter. Iter. Iter. Iter. Iter. Iteration(s) #1 #2 #n #n+1 #n+2 #m #m+1 Iterations Business Requirements Analysis Design Implementation Test Deployment Se mudar ou o processo for compreendido de forma errada?
  • 11. O que é agilidade? Process Disciplines Inception Elaboration Construction Transition Business Modeling Requirements Analysis & Design Implementation Test Deployment Preliminary Iter. Iter. Iter. Iter. Iter. Iter. Iter. Iteration(s) #1 #2 #n #n+1 #n+2 #m #m+1 Iterations Business Requirements Analysis Design Implementation Test Deployment Nunca há tempo suficiente ou está funcionando!
  • 12. O que é agilidade? Process Disciplines Inception Elaboration Construction Transition Business Modeling Requirements Analysis & Design Implementation Test Deployment Preliminary Iter. Iter. Iter. Iter. Iter. Iter. Iter. Iteration(s) #1 #2 #n #n+1 #n+2 #m #m+1 Iterations
  • 13. O que é agilidade? Process Disciplines Inception Elaboration Construction Transition Business Modeling Requirements Analysis & Design Implementation Test Deployment Preliminary Iter. Iter. Iter. Iter. Iter. Iter. Iter. Iteration(s) #1 #2 #n #n+1 #n+2 #m #m+1 Iterations
  • 14. O que é agilidade? Process Disciplines Inception Elaboration Construction Transition Test Business Modeling Requirements Analysis & Design Implementation Deployment Preliminary Iter. Iter. Iter. Iter. Iter. Iter. Iter. Iteration(s) #1 #2 #n #n+1 #n+2 #m #m+1 Iterations
  • 15. O que é agilidade? Ciclo de vida de um Software Desenvolvimento Manutenção Deploy Deploy Deploy Deploy Deploy Deploy Deploy Deploy Fronteira de Transição não faz mais sentido
  • 16. O que é agilidade? Process Disciplines Inception Elaboration Construction Transition Requirements Test Analysis & Design Business Modeling Implementation Deployment Preliminary Iter. Iter. Iter. Iter. Iter. Iter. Iter. Iteration(s) #1 #2 #n #n+1 #n+2 #m #m+1 Iterations
  • 17. Dar Ordem ao Caos
  • 18. O que é difícil? Pair Programming Energized Work Single Code BaseWhole Team Share Code Move People Sit Together Around Stories Informative Worspace
  • 19. Dar Ordem ao Caos Trabalho Energizado
  • 20. Pair Programming “Não é adequado para trabalhos repetitivos” “Não é adequado a todo momento”
  • 21. Pair Programming “Não é adequado para trabalhos repetitivos” “Não é adequado a todo momento”
  • 22. - 2 horas produtivas por dia, - R$ Development Commit Push Deploy Create, Insert...
  • 23. Trabalhos repetitivos, aonde? Development Commit Push Deploy Create, Insert...
  • 24. Trabalhos repetitivos, aonde? Development Commit Merge from Hell Deploy Push Create, Insert...
  • 25. Começou [cmilfont] /projetos/agilidadenomundoreal (master) $ git pull origin master [cmilfont] /projetos/agilidadenomundoreal (master) $ git checkout -b feature-1 master codificando... [cmilfont] /projetos/agilidadenomundoreal (feature-1) $ git commit -a -m “bla bla bla” codificando... [cmilfont] /projetos/agilidadenomundoreal (feature-1) $ git commit -a -m “bla bla bla” [cmilfont] /projetos/agilidadenomundoreal (feature-1) $ git checkout master [cmilfont] /projetos/agilidadenomundoreal (master) $ git pull origin master [cmilfont] /projetos/agilidadenomundoreal (master) $ git checkout feature-1 [cmilfont] /projetos/agilidadenomundoreal (feature-1) $ git rebase master feature-1 codificando... [cmilfont] /projetos/agilidadenomundoreal (feature-1) $ git commit -a -m “bla bla bla”
  • 26. Agora vai terminar [cmilfont] /projetos/agilidadenomundoreal (feature-1) $ git checkout master [cmilfont] /projetos/agilidadenomundoreal (master) $ git pull origin master [cmilfont] /projetos/agilidadenomundoreal (master) $ git checkout feature-1 [cmilfont] /projetos/agilidadenomundoreal (feature-1) $ git rebase master feature-1 [cmilfont] /projetos/agilidadenomundoreal (feature-1) $ git checkout master [cmilfont] /projetos/agilidadenomundoreal (master) $ git merge --squash feature-1 [cmilfont] /projetos/agilidadenomundoreal (master) $ git commit -a -v [cmilfont] /projetos/agilidadenomundoreal (master) $ git push origin master
  • 27. Identificar padrão [cmilfont] /projetos/agilidadenomundoreal (master) $ git pull origin master [cmilfont] /projetos/agilidadenomundoreal (master) $ git checkout -b feature-1 master codificando... [cmilfont] /projetos/agilidadenomundoreal (feature-1) $ git commit -a -m “bla bla bla” codificando... [cmilfont] /projetos/agilidadenomundoreal (feature-1) $ git commit -a -m “bla bla bla” [cmilfont] /projetos/agilidadenomundoreal (feature-1) $ git checkout master [cmilfont] /projetos/agilidadenomundoreal (master) $ git pull origin master [cmilfont] /projetos/agilidadenomundoreal (master) $ git checkout feature-1 [cmilfont] /projetos/agilidadenomundoreal (feature-1) $ git rebase master feature-1 codificando... [cmilfont] /projetos/agilidadenomundoreal (feature-1) $ git commit -a -m “bla bla bla”
  • 28. Automatizar [cmilfont] /projetos/agilidadenomundoreal (master) $ hack feature-1 codificando... [cmilfont] /projetos/agilidadenomundoreal (feature-1) $ git commit -a -m “bla bla bla” codificando... [cmilfont] /projetos/agilidadenomundoreal (feature-1) $ git commit -a -m “bla bla bla” [cmilfont] /projetos/agilidadenomundoreal (feature-1) $ sink codificando... [cmilfont] /projetos/agilidadenomundoreal (feature-1) $ git commit -a -m “bla bla bla”
  • 29. Já tenho parte Automatizada [cmilfont] /projetos/agilidadenomundoreal (feature-1) $ git checkout master [cmilfont] /projetos/agilidadenomundoreal (master) $ git pull origin master [cmilfont] /projetos/agilidadenomundoreal (master) $ git checkout feature-1 [cmilfont] /projetos/agilidadenomundoreal (feature-1) $ git rebase master feature-1 [cmilfont] /projetos/agilidadenomundoreal (feature-1) $ git checkout master [cmilfont] /projetos/agilidadenomundoreal (master) $ git merge --squash feature-1 [cmilfont] /projetos/agilidadenomundoreal (master) $ git commit -a -v [cmilfont] /projetos/agilidadenomundoreal (master) $ git push origin master
  • 30. Identifico outra [cmilfont] /projetos/agilidadenomundoreal (feature-1) $ sink [cmilfont] /projetos/agilidadenomundoreal (feature-1) $ git checkout master [cmilfont] /projetos/agilidadenomundoreal (master) $ git merge --squash feature-1 [cmilfont] /projetos/agilidadenomundoreal (master) $ git commit -a -v [cmilfont] /projetos/agilidadenomundoreal (master) $ git push origin master
  • 31. Automatizo de novo [cmilfont] /projetos/agilidadenomundoreal (feature-1) $ sink [cmilfont] /projetos/agilidadenomundoreal (feature-1) $ ship
  • 32. Automatizado [cmilfont] /projetos/agilidadenomundoreal (master) $ hack feature-1 codificando... [cmilfont] /projetos/agilidadenomundoreal (feature-1) $ git commit -a -m “bla bla bla” codificando... [cmilfont] /projetos/agilidadenomundoreal (feature-1) $ git commit -a -m “bla bla bla” [cmilfont] /projetos/agilidadenomundoreal (feature-1) $ sink [cmilfont] /projetos/agilidadenomundoreal (feature-1) $ rake spec [cmilfont] /projetos/agilidadenomundoreal (feature-1) $ ship [cmilfont] /projetos/agilidadenomundoreal (master) $ hack feature-2 codificando... [cmilfont] /projetos/agilidadenomundoreal (feature-1) $ git commit -a -m “bla bla bla”
  • 33. Automatizado [cmilfont] /projetos/agilidadenomundoreal (master) $ hack feature-1 codificando... [cmilfont] /projetos/agilidadenomundoreal (feature-1) $ git commit -a -m “bla bla bla” codificando... [cmilfont] /projetos/agilidadenomundoreal (feature-1) $ git commit -a -m “bla bla bla” [cmilfont] /projetos/agilidadenomundoreal (feature-1) $ sink [cmilfont] /projetos/agilidadenomundoreal (feature-1) $ rake spec [cmilfont] /projetos/agilidadenomundoreal (feature-1) $ ship [cmilfont] /projetos/agilidadenomundoreal (master) $ hack feature-2 codificando... [cmilfont] /projetos/agilidadenomundoreal (feature-1) $ git commit -a -m “bla bla bla”
  • 34. Trabalhos repetitivos, aonde? Development Commit Merge from Hell i h8 SQL Deploy Push Create, Insert...
  • 35. Insano [cmilfont] /projetos/agilidadenomundoreal (master) $ script/server codificando... falhou por não existir empresa como dependência... [cmilfont] /projetos/agilidadenomundoreal (master) $ script/console Loading development environment (Rails 2.3.5) >>empresa = Empresa.new :razao_social => “Milfont Consulting”, :nome_fantasia => “Milfont Consulting” => #<Empresa id: 1, razao_social: “Milfont Consulting”, nome_fantasia: “Milfont Consulting”, endereco: nil, created_at: "2010-06-22 19:39:36", updated_at: "2010-06-22 19:39:36"> >> empresa.save! => true >> exit [cmilfont] /projetos/agilidadenomundoreal (master) $ script/server codificando...
  • 36. Perdedores de tempo Não consigo reproduzir, me passa o banco! Ok, vou colocar na pasta X [cmilfont] /projetos/agilidadenomundoreal (master) $ pg_restore -h localhost -p 5432 -U postgres -d agilidade_development -l "/home/cmilfont/agilidade.backup" codificando...
  • 37. Ganhadores de tempo Não consigo reproduzir, me passa o banco! Faz pull, roda o seed pois atualizei os dados [cmilfont] /projetos/agilidadenomundoreal (master) $ sink && rake db:reset && rake db:seed
  • 38. Trabalhos repetitivos, aonde? Development Commit Merge from Hell i h8 SQL Feedback Deploy Push Create, Insert...
  • 39. Deploy Daily Deployment Continuous Deployment
  • 40. Deploy Daily Deployment XP Continuous Deployment
  • 41. Deploy Daily Deployment Continuous Deployment Real Customer [and user] Involved
  • 42. Vou deployar [cmilfont] ~ $ ssh cmilfont@192.168.0.10 chrismilfont@milfont.org's password: Last login: Mon Jun 28 16:18:25 2010 from 192.168.0.10 cmilfont@192.168.0.10:/home/cmilfont$ cd /projeto cmilfont@192.168.0.10:/projeto$ git pull cmilfont@192.168.0.10:/projeto$ rake war cmilfont@192.168.0.10:/projeto$ /etc/init.d/jetty stop cmilfont@192.168.0.10:/projeto$ mysqldump --user=root --password=root --result-file=projeto.sql projeto cmilfont@192.168.0.10:/projeto$ mv projeto.war /opt/webapps/ cmilfont@192.168.0.10:/projeto$ /etc/init.d/jetty start
  • 43. Vou deployar [cmilfont] ~ $ ssh cmilfont@192.168.0.10 chrismilfont@milfont.org's password: Last login: Mon Jun 28 16:18:25 2010 from 192.168.0.10 cmilfont@192.168.0.10:/home/cmilfont$ cd /projeto ior cmilfont@192.168.0.10:/projeto$ git pull p fa ça cmilfont@192.168.0.10:/projeto$ rake war uem áq cmilfont@192.168.0.10:/projeto$ /etc/init.d/jetty stop H cmilfont@192.168.0.10:/projeto$ mysqldump --user=root --password=root --result-file=projeto.sql projeto cmilfont@192.168.0.10:/projeto$ mv projeto.war /opt/webapps/ cmilfont@192.168.0.10:/projeto$ /etc/init.d/jetty start
  • 44. Vou deployar [cmilfont] ~ $ cd /projeto [cmilfont] ~/projeto (master) $ cap deploy
  • 45. Trabalhos repetitivos, aonde? U need tests Development Commit Merge from Hell i h8 SQL Feedback Deploy Push Create, Insert...
  • 46. Se você não testa, está errado em todas as metodologias conhecidas
  • 47. TDD aumenta o tempo de entrega e o time tende a se desmotivar Testa Codifica Refatora
  • 48. BDD facilita o Test First mas não faz milagres Teste de Aceitação Testa Codifica Refatora Codifica Refatora
  • 49. BDD é fácil de adotar mas ... # language: pt Funcionalidade: Selecionar curriculo Como um empregador Eu quero selecionar um curriculo Para que eu possa organizar e listar os currículos recebidos que preferi Contexto: Dado um curriculo enviado de "Christiano Milfont" Cenário: Selecionar currículos Dado que eu estou logado como empregador E eu clicar em "Vagas abertas" E eu clicar em "Programador Rails" E eu clicar em "Currículos encaminhados" Quando eu selecionar o curriculo de "Christiano Milfont" Então o curriculo de "Christiano Milfont" deve estar na lista de selecionados
  • 50. Test First continua difícil Teste de Aceitação Fosso Testa Codifica Refatora Codifica Refatora
  • 51. Test First continua difícil Imanutenível Teste de Aceitação Fosso Testa Codifica Refatora Codifica Refatora
  • 52. Não há tempo suficiente
  • 53. Princípio da Cobertura 100% de Clavius Tales Quero 100%
  • 54. Done Feature entregue Automatizar 100% cobertura Forçar testes } Cliente satisfeito Feedback diário Feature em produção
  • 55. Pair Programming “Não é adequado para trabalhos repetitivos” “Não é adequado a todo momento” Trabalho Energizado
  • 56. 2 Features por dia, 40 por mês, + R$ rake rcov:all Hack, Sink, cap deploy ship rake db:seed
  • 57. Dar Caos a Ordem
  • 59. Site com artigos, busca textual e relatórios Ruby Java Php Rails Jasper Drupal Sunspot Solr Plugins/temas
  • 60. Site com artigos, busca textual e relatórios É possivel? Ruby Java Php Rails + Jasper + Drupal Sunspot Solr Plugins/temas
  • 61. PMBOK de Jeans CMMi PMBOK Rup / XP / Scrum / Whatever
  • 62. PMBOK de Jeans CMMi PMBOK Rup / XP / Scrum / Whatever Rup / XP / Scrum / Whatever
  • 63. Release e Iteration Planning Release Condições de satisfação (user stories, budget, schedule) Release Planning Iteração Condições de satisfação (user stories + Acceptance Tests) Iteration Incremento Desenvolvimento Planning no produto
  • 64. Release e Iteration Planning # language: pt Funcionalidade: Selecionar curriculo Como um empregador Eu quero selecionar um curriculo Para que eu possa organizar e listar os currículos recebidos que preferi Contexto: Dado um curriculo enviado de "Christiano Milfont" Cenário: Selecionar currículos Dado que eu estou logado como empregador E eu clicar em "Vagas abertas" E eu clicar em "Programador Rails" E eu clicar em "Currículos encaminhados" Quando eu selecionar o curriculo de "Christiano Milfont" Então o curriculo de "Christiano Milfont" deve estar na lista de selecionados