Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Integração Contínua com Python - Proposta de Stack

Integração Contínua com Python - Proposta de Stack

Apresentação realizada na Python Brasil 2020, trilha PEP-404.
Quais ferramentas usar para ajudar na integração contínua com Python?

Nilo Ney Coutinho Menezes

November 06, 2020
Tweet

More Decks by Nilo Ney Coutinho Menezes

Other Decks in Programming

Transcript

  1. Sobre • Mestre em informática pela Universidade Federal do Amazonas

    • Python Software Foundation Fellow (Q3-2020) • Kauna da Python Brasil 2022 - Manaus • Na Bélgica desde 2006 • Nascido em Manaus/AM • Autor do livro Introdução à Programação com Python • Um dos organizadores do PyNorte • Ativo no telegram como @lskbr
  2. Livro • https://python.nilo.pro.br • Python para iniciantes, mas também para

    quem já programa e começa a conhecer a linguagem • Código de desconto (30%) no site da Novatec: NILO30
  3. Cenário • Equipe distribuída com +10 desenvolvedores • Fusos horários

    diferentes +/- 8h de diferença • Sem peer-review • Mix de desenvolvedores experientes e novatos • Alguns são programadores Javascript ou de outras linguagens
  4. Os problemas • PEP-8 • Tipos • Formatação • Testes

    • Documentação • Múltiplas versões de Python
  5. PEP-8 • Seguir a PEP-8 é importante desde o primeiro

    dia do projeto • Política de zero warnings (avisos) • Clean Room (não deve dar erros ou avisos e se der tem que tratar) • Ferramenta: flake8 • Negociado com a equipe: aumento da largura de 79 para 120 caracteres
  6. Tipos • Python suporta anotações • Boa parte de nossas

    funções trabalham com tipos simples • O resto com classes que nós mesmos criamos • Ajuda com documentação • Ferramenta: mypy • Acha erros de digitação, variáveis não declaradas, não usadas, etc • Exemplo: def maiúsculas_no_inicio(palavra: str) -> str: return palavra.strip().upper()
  7. Formatação • Python depende da indentação do texto • Nem

    todos os desenvolvedores seguem o mesmo padrão • Conflitos de formatação entre desenvolvedores • Convenções de linhas em branco • Adoção de um formatador automático • Formatações diferentes poluem os diffs • Ferramenta: yapf
  8. Testes • Programas desenvolvidos durante muitos meses • Por pessoas

    diferentes e envolvimento diferente com cada solução • Testes como forma dar segurança aos desenvolvedores na hora de mudar o código ou adicionar novas funcionalidades • Novo teste para cada bug resolvido • Cobertura mínima de 80% • Ferramenta: pytest + pytest-cov
  9. Documentação • Extração automática da documentação a partir do código

    fonte • Possiblidade de adicionar texto formatado • Geração de html automática • Ferramenta: Sphinx • Política de documentação: necessário para instalar e rodar a aplicação. • Se parte da documentação estiver na wiki, incluir links na Wiki e vice-versa • Versionada com o código fonte
  10. Múltiplas Versões • Python muda com o tempo • Exemplo:

    mudanças nas anotações de tipo em Python 3.9 e 3.10 • Ferramenta: tox • Serve também para rodar todas as outras ferramentas
  11. Automatizando o build • Roda os testes a cada commit

    • Em caso de erros, o time tem que corrigir o quanto antes • Diz a lenda que quem quebra o build paga uma pizza • Ferramenta: Travis CI, Codecov (https://codecov.io/)
  12. Conclusão • Automatize o máximo possível • Exija testes e

    cobertura mínima • Padronize tudo que puder ser automaticamente analisado • Negocie com a equipe • Aproveite