BDD com Python,
Facilite a vida de todos!
Daniel Bastos
http://daniellbastos.com.br
danielfloresbastos@gmail.com
Apresentação
Programador Python
Freelancer
Acadêmico
Eventos:
PySM (2014/2015)
Trilha de Python (TDC 2014/2015)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2642000/trabalha-com-ti.gif)
Aviso importante
![](https://s3.amazonaws.com/media-p.slid.es/uploads/daniellbastos/images/668727/vida_de_desenvolvedor_06.gif)
Desenvolvimento de software na vida real
Técnico
Não técnio
- Tecnologias
- Qualidade do software
- Softwares em constante evolução
- Entender as necessidades do negócio
- Levantamento dos requisitos técnicos
- Analisar a evolução do software
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2606684/linux.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2606685/nginx.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2606688/postgres.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2606690/python.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2606693/redis.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2606696/grafico1.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2606697/grafico2.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2606698/scrum.gif)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2606700/kanban.jpg)
O Problema do telefone sem fio
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2678278/menina-espantada.gif)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2678463/vida_de_desenvolvedor_04.gif)
Desenvolvedor
Cliente
Python
- Criada em 20 de Fevereiro de 1991
- Tipagem dinâmica e forte
- Multiplataforma
- Fácil aprendizagem
- Utilizada no meio acadêmico
- Utilizada no meio científico
- ...
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2606707/guido.jpg)
Guido van Rossum
Quem usa Python?
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2658744/google-1990-600.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/daniellbastos/images/668730/globo.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/daniellbastos/images/668713/2000px-CIA.svg.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/daniellbastos/images/668715/558px-Dropbox_logo__September_2013_.svg.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/daniellbastos/images/668717/blender-plain.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2678290/Maya_587300_i0.png)
Exemplo de código Python
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2664458/python01.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2678364/python02.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2678291/python03.png)
Django
![](https://s3.amazonaws.com/media-p.slid.es/uploads/daniellbastos/images/668970/django01.png)
- Framework fullstack
- MTV
- Possui uma ótima ORM
- Plugable apps
-
Possui diversos recursos:
- Sistema de Autenticação
- Sistema de Permissão
- Painel de Administração
- Faz introspecção de banco
Projeto de exemplo com Django
Iniciando o projeto
http://daniellbastos.com.br/iniciando-um-projeto-django.html
Criando banco com dados do framework
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2678345/migrate-start.png)
Projeto exemplo com Django
Iniciando nossa app de Clientes com o comando
django-admin startapp clients
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2678347/models01.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2678350/migration-clients-001.png)
Projeto exemplo com Django
CRUD
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2678365/clients-views.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2678366/clients-urls.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2678367/clients-forms.png)
clients/views.py
clients/forms.py
clients/urls.py
Projeto exemplo com Django
CRUD
clients/templates/clients/client_form.html
clients/templates/clients/client_list.html
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2678385/clients-template-create.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2678386/clients-template-list.png)
TDD
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2678396/gato-chapeu-papainoel.gif)
- Reduz bugs em produção
- Facilita a escrita de um código bem escrito
- Reduz a produtividade da equipe (no início)
- Da confiança para realizar alterações
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2678398/ciclo.jpg)
TDD
Cenário 1:
Permitir desativar os clientes do sistema
![](https://s3.amazonaws.com/media-p.slid.es/uploads/daniellbastos/images/336708/vida_de_desenvolvedor_24.gif)
TDD com Django
Novo campo no model (tabela) de cliente
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2678404/migration-clients-002.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2678403/models02.png)
TDD com Django
Criar manager que retorna clientes ativos
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2678406/clients-managers.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2678407/models03.png)
clients/managers.py
clients/models.py
TDD com Django
Testando o manager
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2678649/clients-factories.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2678519/tdd.png)
clients/factories.py
clients/tests.py
TDD com Django
Rodando os testes
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2678470/tdd-result.png)
TDD
Cenário 2:
Permitir a remoção lógica dos clientes do sistema
![](https://s3.amazonaws.com/media-p.slid.es/uploads/daniellbastos/images/339391/img-8.gif)
TDD com Django
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2678494/models04.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2678647/clients-factories2.png)
clients/models.py
clients/factories.py
TDD com Django
Atualizando e rodando os testes
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2678518/tdd-result02.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2678516/tdd02.png)
TDD com Django
Atualizando e rodando os testes
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2678470/tdd-result.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2678718/clients-managers02.png)
TDD Win!!
![](https://s3.amazonaws.com/media-p.slid.es/uploads/daniellbastos/images/339451/img__30_.gif)
Analisando um arquivo de teste
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2678516/tdd02.png)
Resultado na análise
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2678524/srnpge.gif)
BDD
- Reduz ruido entre cliente e desenvolvedores
- Facilita o entendimento de features completas
- Padroniza a comunicação cliente/equipe
- Diminui o entendimento do sistema para novos membros da equipe
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2678592/concordando.gif)
BDD
Escrevendo os cenários de teste
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2678685/feature01.png)
BDD
Parser dos cenários
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2678666/feature-steps01-part1.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2678667/feature-steps01-part2.png)
BDD
Rodando os cenários: ./manage.py behave
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2678671/feature01-result-cenario1.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2678689/feature01-result-cenario3.png)
BDD
Atualizando a view
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2678688/clients-views02.png)
BDD
Cenário 3:
Permitir visualizar clientes inativos
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2678728/cachorro-lingua.gif)
BDD
Escrevendo novo cenário
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2678732/feature02.png)
BDD
Resolvendo o novo cenário
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2678735/clients-template-list1.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2678736/clients-views03.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2678737/clients-urls1.png)
clients/views.py
clients/urls.py
clients/templates/clients/client_list.html
BDD
SPLINTER_DRIVER=firefox ./manage.py behave
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2678706/BDD_Example.gif)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/114218/images/2678707/magic.gif)
Conclusão
BDD com Python
By Daniel Bastos
BDD com Python
- 2,464