Your SlideShare is downloading. ×
0
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Dar Ordem ao Caos
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Dar Ordem ao Caos

1,286

Published on

Palestra na faculdade IDEZ em João Pessoa - PB no dia 10/07/2010

Palestra na faculdade IDEZ em João Pessoa - PB no dia 10/07/2010

Published in: Technology, Business
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,286
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
25
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 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
  • 58. Arquitetura de referência Ruby Java php
  • 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
  • 65. Perguntas?

×