O documento apresenta uma palestra sobre Python Ágil realizada por Ramiro Batista da Luz no IV Encontro GITEC em 2011. A palestra discute conceitos como metodologias ágeis, padrões de projeto em Python como decorators, iterators e generators, e técnicas como TDD e BDD. O documento inclui links para slides e códigos de exemplo apresentados na palestra.
9. A avestruz e o gato!
Veloz X Ágil:
Fonte: http://va.mu/JK27 Fonte: http://va.mu/JK3C
Ramiro Batista da Luz Python gil
10. O que é agilidade?
Capacidade de mudar de direção rapidamente.
Ramiro Batista da Luz Python gil
11. O que é agilidade?
Capacidade de mudar de direção rapidamente.
Habilidade de adaptar-se a mudanças com eficiência.
Ramiro Batista da Luz Python gil
12. O que é linguagem de programação?
Sequencia de instruções “transformadas” em programas,
software aplicativo, sistemas operacionais.
Ramiro Batista da Luz Python gil
13. O que é linguagem de programação?
Sequencia de instruções “transformadas” em programas,
software aplicativo, sistemas operacionais.
Algumas linguagens: C, C++, Visual Basic, Smalltalk, Haskell,
Lua e Python.
Ramiro Batista da Luz Python gil
14. O que é Python?
Linguagem de programação dinâmica, orientada a objetos,
simples e prática.
Ramiro Batista da Luz Python gil
15. O que é Python?
Linguagem de programação dinâmica, orientada a objetos,
simples e prática.
Usada para criar os sistemas do Interlegis.
Ramiro Batista da Luz Python gil
16. O que é Python?
Linguagem de programação dinâmica, orientada a objetos,
simples e prática.
Usada para criar os sistemas do Interlegis.
Usada desde a infraestrutura de servidores até a web, passando
por pesquisas científicas e desenvolvimento de jogos bem como
linguagem de extenso.
Ramiro Batista da Luz Python gil
17. O que são metodologias ágeis?
Metodologia de desenvolvimento.
Ramiro Batista da Luz Python gil
18. O que são metodologias ágeis?
Metodologia de desenvolvimento.
Alta participação do(s) cliente(s).
Ramiro Batista da Luz Python gil
19. O que são metodologias ágeis?
Metodologia de desenvolvimento.
Alta participação do(s) cliente(s).
Adaptação rápida à mudanças.
Ramiro Batista da Luz Python gil
20. O que são metodologias ágeis?
Metodologia de desenvolvimento.
Alta participação do(s) cliente(s).
Adaptação rápida à mudanças.
Software funcionando entregue com grande frequência.
Ramiro Batista da Luz Python gil
21. O que são metodologias ágeis?
Metodologia de desenvolvimento.
Alta participação do(s) cliente(s).
Adaptação rápida à mudanças.
Software funcionando entregue com grande frequência.
Exemplos: Extreme Programming (XP), Scrum, Crystal, Lean,
Feature Driven Development (FDD), Agile Unified Process (Agile
UP or AUP), Dynamic Systems Development Method (DSDM).
Ramiro Batista da Luz Python gil
22. Por que Python Ágil?
Python é fácil para integrar(Bindings C).
Ramiro Batista da Luz Python gil
23. Por que Python Ágil?
Python é fácil para integrar(Bindings C).
Possui muitas bibliotecas fáceis de aprender.
Ramiro Batista da Luz Python gil
24. Por que Python Ágil?
Python é fácil para integrar(Bindings C).
Possui muitas bibliotecas fáceis de aprender.
Flexível, se adapta ao ambiente(IronPython, Jython, PyPy).
Ramiro Batista da Luz Python gil
25. Segurança
Para mudar, para evoluir.
Ramiro Batista da Luz Python gil
26. Segurança
Para mudar, para evoluir.
Confiabilidade(Testes de integração).
Ramiro Batista da Luz Python gil
27. Segurança
Para mudar, para evoluir.
Confiabilidade(Testes de integração).
Aceitação de funcionalidades(Testes funcionais).
Ramiro Batista da Luz Python gil
28. A metodologia XGH - eXtreme Go Horse
http://va.mu/BcW
Ramiro Batista da Luz Python gil
29. A metodologia XGH - eXtreme Go Horse
http://va.mu/BcW
1 Pensou, não é XGH.
Ramiro Batista da Luz Python gil
30. A metodologia XGH - eXtreme Go Horse
http://va.mu/BcW
1 Pensou, não é XGH.
2 Existem 3 formas de se resolver um problema, a correta, a errada
e a XGH, que é igual à errada, só que mais rápida.
Ramiro Batista da Luz Python gil
31. A metodologia XGH - eXtreme Go Horse
http://va.mu/BcW
1 Pensou, não é XGH.
2 Existem 3 formas de se resolver um problema, a correta, a errada
e a XGH, que é igual à errada, só que mais rápida.
3 Quanto mais XGH você faz, mais vai precisar fazer.
Ramiro Batista da Luz Python gil
32. A metodologia XGH - eXtreme Go Horse
http://va.mu/BcW
1 Pensou, não é XGH.
2 Existem 3 formas de se resolver um problema, a correta, a errada
e a XGH, que é igual à errada, só que mais rápida.
3 Quanto mais XGH você faz, mais vai precisar fazer.
4 XGH é totalmente reativo.
Ramiro Batista da Luz Python gil
33. TDD - Test Driven Development
http://va.mu/JjxN
Ramiro Batista da Luz Python gil
34. TDD - Test Driven Development
http://va.mu/JjxN
Adicione um teste
Ramiro Batista da Luz Python gil
35. TDD - Test Driven Development
http://va.mu/JjxN
Adicione um teste
Execute todos os testes e veja se algum deles falha
Ramiro Batista da Luz Python gil
36. TDD - Test Driven Development
http://va.mu/JjxN
Adicione um teste
Execute todos os testes e veja se algum deles falha
Escrever código
Ramiro Batista da Luz Python gil
37. TDD - Test Driven Development
http://va.mu/JjxN
Adicione um teste
Execute todos os testes e veja se algum deles falha
Escrever código
Execute os testes automatizados e veja-os executarem com
sucesso
Ramiro Batista da Luz Python gil
38. TDD - Test Driven Development
http://va.mu/JjxN
Adicione um teste
Execute todos os testes e veja se algum deles falha
Escrever código
Execute os testes automatizados e veja-os executarem com
sucesso
Refatorar código
Ramiro Batista da Luz Python gil
39. TDD - Test Driven Development
http://va.mu/JjxN
Adicione um teste
Execute todos os testes e veja se algum deles falha
Escrever código
Execute os testes automatizados e veja-os executarem com
sucesso
Refatorar código
Repita tudo
Ramiro Batista da Luz Python gil
40. BDD - Behavior Driven Development
http://va.mu/Jjxa
Ramiro Batista da Luz Python gil
41. BDD - Behavior Driven Development
http://va.mu/Jjxa
Envolver as partes interessadas no processo através de
Outside-in Development (Desenvolvimento de Fora pra Dentro)
Ramiro Batista da Luz Python gil
42. BDD - Behavior Driven Development
http://va.mu/Jjxa
Envolver as partes interessadas no processo através de
Outside-in Development (Desenvolvimento de Fora pra Dentro)
Usar exemplos para descrever o comportamento de uma
aplicação ou unidades de código
Ramiro Batista da Luz Python gil
43. BDD - Behavior Driven Development
http://va.mu/Jjxa
Envolver as partes interessadas no processo através de
Outside-in Development (Desenvolvimento de Fora pra Dentro)
Usar exemplos para descrever o comportamento de uma
aplicação ou unidades de código
Automatizar os exemplos para prover um feedback rápido e testes
de regresso
Ramiro Batista da Luz Python gil
44. BDD - Behavior Driven Development
http://va.mu/Jjxa
Envolver as partes interessadas no processo através de
Outside-in Development (Desenvolvimento de Fora pra Dentro)
Usar exemplos para descrever o comportamento de uma
aplicação ou unidades de código
Automatizar os exemplos para prover um feedback rápido e testes
de regresso
Usar deve (should em inglês) na hora de descrever o
comportamento de software para ajudar esclarecer
responsabilidades e permitir que funcionalidades do software
sejam questionadas
Ramiro Batista da Luz Python gil
45. BDD - Behavior Driven Development
http://va.mu/Jjxa
Envolver as partes interessadas no processo através de
Outside-in Development (Desenvolvimento de Fora pra Dentro)
Usar exemplos para descrever o comportamento de uma
aplicação ou unidades de código
Automatizar os exemplos para prover um feedback rápido e testes
de regresso
Usar deve (should em inglês) na hora de descrever o
comportamento de software para ajudar esclarecer
responsabilidades e permitir que funcionalidades do software
sejam questionadas
Usar dublês de teste (mocks, stubs, fakes, dummies, spies) para
auxiliar na colaboração entre módulos e códigos que ainda no
foram escritos
Ramiro Batista da Luz Python gil
47. Padrões de projeto(Design Pattern)
Decorators: decoradores.py
python-3-patterns-
idioms/code/PythonDecorators/entry_exit_class.py
Ramiro Batista da Luz Python gil
48. Padrões de projeto(Design Pattern)
Decorators: decoradores.py
python-3-patterns-
idioms/code/PythonDecorators/entry_exit_class.py
http://va.mu/Jjxq
Ramiro Batista da Luz Python gil
49. Padrões de projeto(Design Pattern)
Decorators: decoradores.py
python-3-patterns-
idioms/code/PythonDecorators/entry_exit_class.py
http://va.mu/Jjxq
Iterators: iteradores.py
Ramiro Batista da Luz Python gil
50. Padrões de projeto(Design Pattern)
Decorators: decoradores.py
python-3-patterns-
idioms/code/PythonDecorators/entry_exit_class.py
http://va.mu/Jjxq
Iterators: iteradores.py
http://va.mu/Jjx6
Ramiro Batista da Luz Python gil
51. Padrões de projeto(Design Pattern)
Decorators: decoradores.py
python-3-patterns-
idioms/code/PythonDecorators/entry_exit_class.py
http://va.mu/Jjxq
Iterators: iteradores.py
http://va.mu/Jjx6
Generators: generators.py
Ramiro Batista da Luz Python gil
52. Padrões de projeto(Design Pattern)
Decorators: decoradores.py
python-3-patterns-
idioms/code/PythonDecorators/entry_exit_class.py
http://va.mu/Jjxq
Iterators: iteradores.py
http://va.mu/Jjx6
Generators: generators.py
http://va.mu/JjyJ
Ramiro Batista da Luz Python gil
53. Padrões de projeto(Design Pattern)
Decorators: decoradores.py
python-3-patterns-
idioms/code/PythonDecorators/entry_exit_class.py
http://va.mu/Jjxq
Iterators: iteradores.py
http://va.mu/Jjx6
Generators: generators.py
http://va.mu/JjyJ
Compreensão de listas: compreensao_listas.py
Ramiro Batista da Luz Python gil
54. Padrões de projeto(Design Pattern)
Decorators: decoradores.py
python-3-patterns-
idioms/code/PythonDecorators/entry_exit_class.py
http://va.mu/Jjxq
Iterators: iteradores.py
http://va.mu/Jjx6
Generators: generators.py
http://va.mu/JjyJ
Compreensão de listas: compreensao_listas.py
Singleton:
Ramiro Batista da Luz Python gil
55. Padrões de projeto(Design Pattern)
Decorators: decoradores.py
python-3-patterns-
idioms/code/PythonDecorators/entry_exit_class.py
http://va.mu/Jjxq
Iterators: iteradores.py
http://va.mu/Jjx6
Generators: generators.py
http://va.mu/JjyJ
Compreensão de listas: compreensao_listas.py
Singleton:
python-3-patterns-idioms/code/Singleton/SingletonPattern.py
Ramiro Batista da Luz Python gil
56. Padrões de projeto(Design Pattern)
Decorators: decoradores.py
python-3-patterns-
idioms/code/PythonDecorators/entry_exit_class.py
http://va.mu/Jjxq
Iterators: iteradores.py
http://va.mu/Jjx6
Generators: generators.py
http://va.mu/JjyJ
Compreensão de listas: compreensao_listas.py
Singleton:
python-3-patterns-idioms/code/Singleton/SingletonPattern.py
Factory:
Ramiro Batista da Luz Python gil
57. Padrões de projeto(Design Pattern)
Decorators: decoradores.py
python-3-patterns-
idioms/code/PythonDecorators/entry_exit_class.py
http://va.mu/Jjxq
Iterators: iteradores.py
http://va.mu/Jjx6
Generators: generators.py
http://va.mu/JjyJ
Compreensão de listas: compreensao_listas.py
Singleton:
python-3-patterns-idioms/code/Singleton/SingletonPattern.py
Factory:
python-3-patterns-
idioms/code/Factory/shapefact1/ShapeFactory1.py
Ramiro Batista da Luz Python gil
58. Ferramentas
PyUnit: http://va.mu/oMf
Ramiro Batista da Luz Python gil
59. Ferramentas
PyUnit: http://va.mu/oMf
DocTest: http://va.mu/Jjyb
Ramiro Batista da Luz Python gil
60. Ferramentas
PyUnit: http://va.mu/oMf
DocTest: http://va.mu/Jjyb
Nose+TDaemon:
Ramiro Batista da Luz Python gil
61. Ferramentas
PyUnit: http://va.mu/oMf
DocTest: http://va.mu/Jjyb
Nose+TDaemon:
http://va.mu/Jjyh
Ramiro Batista da Luz Python gil
64. Integração Continua(Continuos Integration)
GetWindmill: http://va.mu/Jjyy
Martin Fowler, continuos integration: http://va.mu/Jjy2
TeamCity: http://va.mu/JjzD
Ramiro Batista da Luz Python gil
65. Integração Continua(Continuos Integration)
GetWindmill: http://va.mu/Jjyy
Martin Fowler, continuos integration: http://va.mu/Jjy2
TeamCity: http://va.mu/JjzD
Skink: http://va.mu/Jjzx
Ramiro Batista da Luz Python gil
66. Integração Continua(Continuos Integration)
GetWindmill: http://va.mu/Jjyy
Martin Fowler, continuos integration: http://va.mu/Jjy2
TeamCity: http://va.mu/JjzD
Skink: http://va.mu/Jjzx
Jenkins(Hudson): http://jenkins-ci.org/
Ramiro Batista da Luz Python gil
67. Demonstração
Testes Unitários: testes_unitarios.py
Ramiro Batista da Luz Python gil
68. Demonstração
Testes Unitários: testes_unitarios.py
Testes e Documentação(DocTests): doctests.py
Ramiro Batista da Luz Python gil
69. Demonstração
Testes Unitários: testes_unitarios.py
Testes e Documentação(DocTests): doctests.py
Testes com Django:
Ramiro Batista da Luz Python gil
70. Demonstração
Testes Unitários: testes_unitarios.py
Testes e Documentação(DocTests): doctests.py
Testes com Django:
Django sem desculpas: http://va.mu/Jj0L
Ramiro Batista da Luz Python gil
71. Conclusão
Mais referências:
Ramiro Batista da Luz Python gil
72. Conclusão
Mais referências:
Osvaldo Santana, TDD com Python: http://va.mu/Jj0f
Ramiro Batista da Luz Python gil
73. Conclusão
Mais referências:
Osvaldo Santana, TDD com Python: http://va.mu/Jj0f
Rodrigo Alves Vieira, http://va.mu/Jj0s
Ramiro Batista da Luz Python gil
74. Conclusão
Mais referências:
Osvaldo Santana, TDD com Python: http://va.mu/Jj0f
Rodrigo Alves Vieira, http://va.mu/Jj0s
Plone app testing: http://va.mu/Jj04
Ramiro Batista da Luz Python gil
75. Conclusão
Mais referências:
Osvaldo Santana, TDD com Python: http://va.mu/Jj0f
Rodrigo Alves Vieira, http://va.mu/Jj0s
Plone app testing: http://va.mu/Jj04
Exemplos de testes com web2py: http://va.mu/Jj1F
Ramiro Batista da Luz Python gil
76. Conclusão
Mais referências:
Osvaldo Santana, TDD com Python: http://va.mu/Jj0f
Rodrigo Alves Vieira, http://va.mu/Jj0s
Plone app testing: http://va.mu/Jj04
Exemplos de testes com web2py: http://va.mu/Jj1F
Test unitário com web2py: http://va.mu/Jj1T
Ramiro Batista da Luz Python gil
77. Conclusão
Mais referências:
Osvaldo Santana, TDD com Python: http://va.mu/Jj0f
Rodrigo Alves Vieira, http://va.mu/Jj0s
Plone app testing: http://va.mu/Jj04
Exemplos de testes com web2py: http://va.mu/Jj1F
Test unitário com web2py: http://va.mu/Jj1T
Test unitário com pylons: http://va.mu/Jj1p
Ramiro Batista da Luz Python gil
78. Agradecimentos
Bruce Eckel
Ramiro Batista da Luz Python gil
79. Agradecimentos
Bruce Eckel
Adriano Petrich
Ramiro Batista da Luz Python gil
80. Agradecimentos
Bruce Eckel
Adriano Petrich
Rodrigo Bernardo Pimentel
Ramiro Batista da Luz Python gil
81. Agradecimentos
Bruce Eckel
Adriano Petrich
Rodrigo Bernardo Pimentel
Davi Lima
Ramiro Batista da Luz Python gil
82. Agradecimentos
Bruce Eckel
Adriano Petrich
Rodrigo Bernardo Pimentel
Davi Lima
Angelo Marcondes, Júnior(Ishida), Jean Ferri e comunidade
Interlegis
Ramiro Batista da Luz Python gil
83. Contato e perguntas
e-mail e gtalk: ramiroluz@gmail.com
Ramiro Batista da Luz Python gil
84. Contato e perguntas
e-mail e gtalk: ramiroluz@gmail.com
twitter: @ramiroluz
Ramiro Batista da Luz Python gil
85. Encerramento
http://www.python.org.br
Ramiro Batista da Luz Python gil
86. Encerramento
http://www.python.org.br
http://associacao.python.org.br
Ramiro Batista da Luz Python gil
87. Encerramento
http://www.python.org.br
http://associacao.python.org.br
http://groups.google.com/group/grupy-pr
Ramiro Batista da Luz Python gil