Dar Ordem ao Caos
-
date post
19-Oct-2014 -
Category
Technology
-
view
1.840 -
download
6
Embed Size (px)
description
Transcript of Dar Ordem ao Caos
Agilidade no Mundo Real
Christiano Milfont2010, Joo Pessoa-PBCopyleft 2010 Milfont.org
O que funcionou nos ltimos 2 anos em
consultorias da Milfont Consulting... e como
melhorar!
Milfont Consulting
2006 - 2008
Desenvolvimento Treinamento - MentoringResgate de Projetos - Code Review
O que agilidade?
Estamos descobrindo maneiras melhores de desenvolver software fazendo-o ns mesmos e ajudando outros a faz-lo.
O que agilidade?
O que agilidade?
Ciclo de vida de um Software
DesenvolvimentoDesenvolvimento ManutenoManuteno
O que agilidade?
Ciclo de vida de um Software
DesenvolvimentoDesenvolvimento ManutenoManuteno
1 Deploy - Transio
O que agilidade?
Business Modeling
ImplementationTest
Analysis & Design
Preliminary Iteration(s)
Iter.#1
Process Disciplines
Iterations
Iter.#2
Iter.#n
Iter.#n+1
Iter.#n+2
Iter.#m
Iter.#m+1
Deployment
Requirements
Elaboration TransitionInception Construction
O que agilidade?
Business Modeling
ImplementationTest
Analysis & Design
Preliminary Iteration(s)
Iter.#1
Process Disciplines
Iterations
Iter.#2
Iter.#n
Iter.#n+1
Iter.#n+2
Iter.#m
Iter.#m+1
Deployment
Requirements
Elaboration TransitionInception Construction
BusinessBusiness RequirementsRequirements AnalysisAnalysis DesignDesign ImplementationImplementation TestTest DeploymentDeployment
O que agilidade?
Business Modeling
ImplementationTest
Analysis & Design
Preliminary Iteration(s)
Iter.#1
Process Disciplines
Iterations
Iter.#2
Iter.#n
Iter.#n+1
Iter.#n+2
Iter.#m
Iter.#m+1
Deployment
Requirements
Elaboration TransitionInception Construction
BusinessBusiness RequirementsRequirements AnalysisAnalysis DesignDesign ImplementationImplementation TestTest DeploymentDeployment
O que agilidade?
Business Modeling
ImplementationTest
Analysis & Design
Preliminary Iteration(s)
Iter.#1
Process Disciplines
Iterations
Iter.#2
Iter.#n
Iter.#n+1
Iter.#n+2
Iter.#m
Iter.#m+1
Deployment
Requirements
Elaboration TransitionInception Construction
BusinessBusiness RequirementsRequirements AnalysisAnalysis DesignDesign ImplementationImplementation TestTest DeploymentDeployment
Se mudar ou o processo for compreendido de forma errada?
O que agilidade?
Business Modeling
ImplementationTest
Analysis & Design
Preliminary Iteration(s)
Process Disciplines
Deployment
Requirements
Elaboration TransitionInception Construction
BusinessBusiness RequirementsRequirements AnalysisAnalysis DesignDesign ImplementationImplementation TestTest DeploymentDeployment
Nunca h tempo suficiente ou est funcionando!
Iter.#1
Iterations
Iter.#2
Iter.#n
Iter.#n+1
Iter.#n+2
Iter.#m
Iter.#m+1
O que agilidade?
Business Modeling
ImplementationTest
Analysis & Design
Preliminary Iteration(s)
Iter.#1
Process Disciplines
Iterations
Iter.#2
Iter.#n
Iter.#n+1
Iter.#n+2
Iter.#m
Iter.#m+1
Deployment
Requirements
Elaboration TransitionInception Construction
O que agilidade?
Business Modeling
ImplementationTest
Analysis & Design
Preliminary Iteration(s)
Iter.#1
Process Disciplines
Iterations
Iter.#2
Iter.#n
Iter.#n+1
Iter.#n+2
Iter.#m
Iter.#m+1
Deployment
Requirements
Elaboration TransitionInception Construction
O que agilidade?
Business Modeling
Implementation
Test
Analysis & Design
Preliminary Iteration(s)
Iter.#1
Process Disciplines
Iterations
Iter.#2
Iter.#n
Iter.#n+1
Iter.#n+2
Iter.#m
Iter.#m+1
Deployment
Requirements
Elaboration TransitionInception Construction
O que agilidade?
Ciclo de vida de um Software
DesenvolvimentoDesenvolvimento ManutenoManuteno
Fronteira de Transio no faz
mais sentido
Deploy Deploy DeployDeploy Deploy
Deploy DeployDeploy
O que agilidade?
Business ModelingImplementation
TestAnalysis & Design
Preliminary Iteration(s)
Iter.#1
Iterations
Iter.#2
Iter.#n
Iter.#n+1
Iter.#n+2
Iter.#m
Iter.#m+1
Deployment
Requirements
Elaboration TransitionInception ConstructionProcess Disciplines
Dar Ordem ao Caos
InformativeWorspace
Sit Together
Pair Programming
Whole Team
Energized Work
Move People Around
Stories
Share Code
O que difcil?
Single Code Base
Dar Ordem ao CaosTrabalho Energizado
Pair Programming
No adequado para trabalhos repetitivosNo adequado a todo momento
Pair Programming
No adequado para trabalhos repetitivosNo adequado a todo momento
DeployCreate, Insert...
Commit Push
Development
- 2 horas produtivas por dia, - R$
DeployCreate, Insert...
Commit Push
Development
Trabalhos repetitivos, aonde?
Deploy
Trabalhos repetitivos, aonde?
Create, Insert...
Commit Push
Development
Merge from Hell
Comeou[cmilfont] /projetos/agilidadenomundoreal (master)$ git pull origin master
[cmilfont] /projetos/agilidadenomundoreal (master)$ git checkout -b feature-1 mastercodificando...[cmilfont] /projetos/agilidadenomundoreal (feature-1)$ git commit -a -m bla bla blacodificando...[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-1codificando...[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 padro[cmilfont] /projetos/agilidadenomundoreal (master)$ git pull origin master
[cmilfont] /projetos/agilidadenomundoreal (master)$ git checkout -b feature-1 mastercodificando...[cmilfont] /projetos/agilidadenomundoreal (feature-1)$ git commit -a -m bla bla blacodificando...[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-1codificando...[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 blacodificando...[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
[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
Identifico outra
[cmilfont] /projetos/agilidadenomundoreal (feature-1)$ sink
[cmilfont] /projetos/agilidadenomundoreal (feature-1)$ ship
Automatizo de novo
Automatizado[cmilfont] /projetos/agilidadenomundoreal (master)$ hack feature-1
codificando...[cmilfont] /projetos/agilidadenomundoreal (feature-1)$ git commit -a -m bla bla blacodificando...[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 blacodificando...[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
Deploy
Trabalhos repetitivos, aonde?
Create, Insert...
Commit Push
Development
Merge from Hell i h8 SQL
Insano[cmilfont] /projetos/agilidadenomundoreal (master)$ script/servercodificando...falhou por no existir empresa como dependncia...[cmilfont] /projetos/agilidadenomundoreal (master)$ script/consoleLoading development environment (Rails 2.3.5)>>empresa = Empresa.new :razao_social => Milfont Consulting, :nome_fantasia => Milfont Consulting=> #>> empresa.save!=> true>> exit[cmilfont] /projetos/agilidadenomundoreal (master)$ script/servercodificando...
Perdedores de tempo
[cmilfont] /projetos/agilidadenomundoreal (master)$ pg_restore -h localhost -p 5432 -U postgres -d agilidade_development -l "/home/cmilfont/agilidade.backup"codificando...
No consigo reproduzir, me passa o
banco!
Ok, vou colocar na pasta X
Ganhadores de tempo
[cmilfont] /projetos/agilidadenomundoreal (master)$ sink && rake db:reset && rake db:seed
No consigo reproduzir, me passa o
banco!
Faz pull, roda o seed pois atualizei os dados
Deploy
Trabalhos repetitivos, aonde?
Create, Insert...
Commit Push
Development
Merge from Hell i h8 SQL Feedback
Daily Deployment
Deploy
Continuous Deployment
Daily Deployment
Deploy
Continuous Deployment
XP
Daily Deployment
Real Customer [and user] Involved
Deploy
Continuous Deployment
Vou deployar
[cmilfont] ~$ ssh [email protected]@milfont.org's password: Last login: Mon Jun 28 16:18:25 2010 from 192.168.0.10
[email protected]:/home/cmilfont$ cd /projeto
[email protected]:/projeto$ git pull
[email protected]:/projeto$ rake war
[email protected]:/projeto$ /etc/init.d/jetty stop
[email protected]:/projeto$ mysqldump --user=root --password=root --result-file=projeto.sql projeto
[email protected]:/projeto$ mv projeto.war /opt/webapps/
[email protected]:/projeto$ /etc/init.d/jetty start
Vou deployar
[cmilfont] ~$ ssh [email protected]@milfont.org's password: Last login: Mon Jun 28 16:18:25 2010 from 192.168.0.10
[email protected]:/home/cmilfont$ cd /projeto
[email protected]:/projeto$ git pull
[email protected]:/projeto$ rake war
[email protected]:/projeto$ /etc/init.d/jetty stop
[email protected]:/projeto$ mysqldump --user=root --password=root --result-file=projeto.sql projeto
[email protected]:/projeto$ mv projeto.war /opt/webapps/
[email protected]:/projeto$ /etc/init.d/jetty start
H quem
faa pi
or
Vou deployar
[cmilfont] ~$ cd /projeto
[cmilfont] ~/projeto (master)$ cap deploy
Deploy
Trabalhos repetitivos, aonde?
Create, Insert...
Commit Push
Development
Merge from Hell i h8 SQL
U need tests
Feedback
Se voc no testa, est errado em todas as metodologias conhecidas
Testa
Codifica
TDD aumenta o tempo de entrega e o time tende a se desmotivar
Refatora
Testa
Codifica
BDD facilita o Test First mas no faz milagres
Refatora
Teste de Aceitao
Codifica Refatora
BDD fcil de adotar mas ...
# language: ptFuncionalidade: Selecionar curriculo Como um empregador Eu quero selecionar um curriculo Para que eu possa organizar e listar os currculos recebidos que preferi
Contexto: Dado um curriculo enviado de "Christiano Milfont"
Cenrio: Selecionar currculos Dado que eu estou logado como empregador E eu clicar em "Vagas abertas" E eu clicar em "Programador Rails" E eu clicar em "Currculos encaminhados" Quando eu selecionar o curriculo de "Christiano Milfont" Ento o curriculo de "Christiano Milfont" deve estar na lista de selecionados
Testa
Codifica
Test First continua difcil
Refatora
Teste de Aceitao
Codifica Refatora
Fosso
Testa
Codifica
Test First continua difcil
Refatora
Teste de Aceitao
Codifica Refatora
Fosso
Imanutenvel
No h tempo suficiente
Princpio da Cobertura 100% de Clavius Tales
Quero 100%
Feature entregue
Cliente satisfeito
Done
100% cobertura
Feature em produo
Automatizar
Forar testes
} Feedback dirio
Pair Programming
No adequado para trabalhos repetitivosNo adequado a todo momento
Trabalho Energizado
cap deployrake db:seed
Hack, Sink, ship
rake rcov:all
2 Features por dia, 40 por ms, + R$
Dar Caos a Ordem
phpJavaRuby
Arquitetura de referncia
PhpDrupal
Plugins/temas
JavaJasper
Solr
RubyRails
Sunspot
Site com artigos, busca textual e relatrios
PhpDrupal
Plugins/temas
JavaJasper
Solr
RubyRails
Sunspot
Site com artigos, busca textual e relatrios possivel?
+ +
PMBOK de Jeans
Rup / XP / Scrum / Whatever
PMBOK
CMMi
PMBOK de Jeans
Rup / XP / Scrum / Whatever
PMBOK
CMMi
Rup / XP / Scrum / Whatever
Iterao
Release e Iteration Planning
ReleaseCondies de satisfao (user stories, budget, schedule)
Release Planning
Condies de satisfao (user stories + Acceptance Tests)
Iteration Planning Desenvolvimento
Incremento no produto
Release e Iteration Planning
# language: ptFuncionalidade: Selecionar curriculo Como um empregador Eu quero selecionar um curriculo Para que eu possa organizar e listar os currculos recebidos que preferi
Contexto: Dado um curriculo enviado de "Christiano Milfont"
Cenrio: Selecionar currculos Dado que eu estou logado como empregador E eu clicar em "Vagas abertas" E eu clicar em "Programador Rails" E eu clicar em "Currculos encaminhados" Quando eu selecionar o curriculo de "Christiano Milfont" Ento o curriculo de "Christiano Milfont" deve estar na lista de selecionados
Perguntas?
Slide 1Slide 2Slide 3Slide 4Slide 5Slide 6Slide 7Slide 8Slide 9Slide 10Slide 11Slide 12Slide 13Slide 14Slide 15Slide 16Slide 17Slide 18Slide 19Slide 20Slide 21Slide 22Slide 23Slide 24Slide 25Slide 26Slide 27Slide 28Slide 29Slide 30Slide 31Slide 32Slide 33Slide 34Slide 35Slide 36Slide 37Slide 38Slide 39Slide 40Slide 41Slide 42Slide 43Slide 44Slide 45Slide 46Slide 47Slide 48Slide 49Slide 50Slide 51Slide 52Slide 53Slide 54Slide 55Slide 56Slide 57Slide 58Slide 59Slide 60Slide 61Slide 62Slide 63Slide 64Slide 65