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

Revisão de Código - Desafios, soluções e experiências

Caio Carrara
September 12, 2019

Revisão de Código - Desafios, soluções e experiências

O processo de revisão de código está cada vez mais incorporado no ciclo de desenvolvimento de software de empresas. O que antes era uma atividade quase exclusiva em contribuições de projetos de código aberto agora já é padrão também em projetos internos. Entretanto nem todas as pessoas estão acostumadas com o processo de revisar o código alheio ou ter seu próprio código revisado. O despreparo de equipes quanto ao processo de revisão pode inclusive dimiuir a produtividade do time, afetar a qualidade do projeto e o relacionamento das pessoas.

Nessa apresentação serão expostas boas práticas para se adotar enquanto revisa o código de colegas bem como o que se atentar antes, durante e depois da própria submissão de código. Dada a natureza interpessoal da atividade serão abordados aspectos tanto de relacionamento e cuidados na comunicação mas também dicas do que se atentar ao revisar especificamente código escrito em Python.

Caio Carrara

September 12, 2019
Tweet

More Decks by Caio Carrara

Other Decks in Technology

Transcript

  1. Revisão de Código
    Desafios, soluções e experiências
    Caio Carrara
    [email protected]carrara.com.br

    View Slide

  2. Caio Carrara
    ● Desenvolvedor de Software
    ○ Loadsmart
    ○ RedHat
    ○ Olist
    ○ ThoughtWorks
    ● Contribuidor Open Source
    ○ OpenStack
    ○ PyLint
    ○ QEMU
    ○ Avocado
    ● Code Review
    ○ 2017 - 44%
    ○ 2018 - 39%
    ○ 2019 - 28%
    Tech Lead @ Loadsmart

    View Slide

  3. Agenda
    ● Code Review
    ○ Histórico e contexto
    ● O papel da pessoa revisora
    ○ Premissas
    ○ Aspectos técnicos
    ○ Aspectos humanos
    ● O papel da pessoa autora
    ● O que se atentar na revisão de código Python

    View Slide

  4. View Slide

  5. View Slide

  6. View Slide

  7. View Slide

  8. ● Back End Engineer (Python)
    ● Front End Engineer (React)
    ● Full Stack Engineer
    ● Site Reliability Engineer
    ● Integration Engineer (EDI)
    loadsmart.com/careers
    ● BI Analyst
    ● Data Architect
    ● Data Engineer
    ● Data Science Engineer
    ● Senior UI/UX Designer
    Dúvidas? Vem falar comigo...

    View Slide

  9. Revisão de
    código
    Desafios, soluções e experiências
    https://caiocarrara.com.br/blog/

    View Slide

  10. Revisão de
    código
    Desafios, soluções e experiências
    https://google.github.io/eng-practices/

    View Slide

  11. Revisão de código - o que é?

    View Slide

  12. Inspeções Formais, 1976
    ● Reunião com todo time de
    desenvolvimento
    ● Revisão linha por linha
    ● Feita em tempos regulares
    ● Algum resultado era esperado
    após a reunião
    https://ieeexplore.ieee.org/document/5388086

    View Slide

  13. Revisões leves, atual
    ● Revisões baseadas em mudanças
    ● Menor contexto para revisar
    ● Revisões individuais
    ● Maior auxílio ferramental

    View Slide

  14. Revisões leves, atual
    ● Linux Kernel (patch emails)

    View Slide

  15. Revisões leves, atual
    ● OpenStack (Gerrit)

    View Slide

  16. Revisões leves, atual
    ● Django (GitHub Pull
    Requests)

    View Slide

  17. Revisão de
    código
    Por quê?
    ● Encontrar defeitos
    ● Buscar soluções alternativas
    ● Melhorar qualidade geral da base
    de código
    ● Transferir conhecimento
    ● Aumentar a consciência de time
    ● Compartilhar senso de
    propriedade (code ownership)

    View Slide

  18. Revisão de código é bom mesmo?

    View Slide

  19. Estudos sobre Revisão de Código
    2013

    View Slide

  20. Estudos sobre Revisão de Código
    2015

    View Slide

  21. Estudos sobre Revisão de Código
    “Acreditamos que nossas descobertas
    provêm fortes evidências empíricas que
    apoiam a estrutura moderna de políticas
    de integração de código que levam a
    revisão de código em consideração”
    (tradução livre)

    View Slide

  22. Estudos sobre Revisão de Código
    “Nossos modelos [de análise dos dados]
    sugerem que tais políticas [de revisão de
    código] levam a um software de melhor
    qualidade e menos propenso a erros”
    (tradução livre)

    View Slide

  23. Revisão de
    código
    Desafios
    ● É uma realidade e irá perdurar
    ● Revisar é tão (ou mais) complexo
    que escrever código
    ● Não somos treinados para revisar
    ● Ineficiência e frustração
    ● Comprometimento da relação
    interpessoal

    View Slide

  24. Revisão de
    código
    Uma abordagem centrada em
    papéis
    ● A pessoa que revisora
    ● A pessoa autora

    View Slide

  25. Pessoa revisora
    de código
    Dicas e soluções
    ● Premissas
    ● Aspectos técnicos
    ● Aspectos humanos

    View Slide

  26. Revisão - premissas
    ● Não existe código perfeito
    ● Buscar e exigir perfeição é contraproducente
    ● Estilo de código é trabalho do linter
    ● Deve-se almejar sempre a melhoria da base
    de código

    View Slide

  27. Revisão - premissas
    ● Não existe código perfeito
    ● Buscar e exigir perfeição é contraproducente
    ● Estilo de código é trabalho do linter
    ● Deve-se almejar sempre a melhoria da base
    de código
    ● Manutenabilidade
    ● Legibilidade
    ● Compreensividade

    View Slide

  28. Revisão - o que observar?
    ● Aspectos positivos
    ○ Boas ideias
    ○ Soluções inovadoras

    View Slide

  29. Revisão - o que observar?
    ● Aspectos positivos
    ● Funcionalidade
    ○ Faz sentido a implementação?
    ○ A funcionalidade é boa para usuários?

    View Slide

  30. Revisão - o que observar?
    ● Aspectos positivos
    ● Funcionalidade
    ● Design
    ○ As interações entre as partes
    ○ Separação de responsabilidades
    ○ Alteração faz sentido onde foi
    implementada?
    ○ Design deve ser tratado o quanto antes

    View Slide

  31. Revisão - o que observar?
    ● Aspectos positivos
    ● Funcionalidade
    ● Design
    ● Complexidade
    ○ A alteração é facilmente compreendida
    ○ O código está propenso a erros?
    ○ Over-engineering?
    ○ Complexidade ciclomática pode ser pedida
    pelo Flake8

    View Slide

  32. Revisão - o que observar?
    ● Aspectos positivos
    ● Funcionalidade
    ● Design
    ● Complexidade
    ● Testes
    ○ Código de teste também deve ser revisado
    ○ O teste está claro?
    ○ Se o teste falhar, é fácil compreender o que
    está errado?

    View Slide

  33. Revisão - o que observar?
    ● Aspectos positivos
    ● Funcionalidade
    ● Design
    ● Complexidade
    ● Testes
    ● Nomes
    ○ Elementos estão bem nomeados?
    ○ É fácil compreender a responsabilidade
    dos elementos pelo nome?
    ○ Comentários devem se ater ao “porquê” e
    não ao “como”
    ○ Se o código não se explica quanto ao
    “como” então deve ser reescrito

    View Slide

  34. Revisão - o que observar?
    ● Aspectos positivos
    ● Funcionalidade
    ● Design
    ● Complexidade
    ● Testes
    ● Nomes
    ● Documentação
    ○ A alteração afeta
    ■ Build?
    ■ Testes?
    ■ API?

    View Slide

  35. Revisão - o que observar?
    ● Aspectos positivos
    ● Funcionalidade
    ● Design
    ● Complexidade
    ● Testes
    ● Nomes
    ● Documentação
    ● Linha por linha
    ○ Código gerado até pode ser revisto por
    scan

    View Slide

  36. Revisão - o que observar?
    ● Aspectos positivos
    ● Funcionalidade
    ● Design
    ● Complexidade
    ● Testes
    ● Nomes
    ● Documentação
    ● Linha por linha
    ● Contexto
    ○ Olhar linhas além da alteração
    ○ Pode haver duplicidades
    ○ Pode haver quebra de responsabilidade

    View Slide

  37. Revisão - importante!
    ● Qual a natureza da sua requisição?
    ○ Obrigatórias (críticas)
    ○ Opcionais

    View Slide

  38. Revisão - importante!
    ● Qual a natureza da sua requisição?
    ● Muitos comentários para fazer?
    ○ Foque nos mais críticos / relevantes
    ○ Não existe código perfeito
    ○ Leve em consideração a pessoa autora da
    alteração

    View Slide

  39. Revisão - aspectos humanos
    ● Nunca falte com o respeito

    View Slide

  40. Revisão - aspectos humanos
    ● Nunca falte com o respeito
    ● Restrinja os comentários sobre o
    código e não sobre a pessoa
    Ruim: “Por que você está resolvendo isso
    assim?”
    Melhor: “A implementação dessa forma
    está deixando o código mais complexo. O
    que acha dessa outra forma?”

    View Slide

  41. Revisão - aspectos humanos
    ● Nunca falte com o respeito
    ● Restrinja os comentários sobre o
    código e não sobre a pessoa
    ● Explique suas posições
    Ruim: “Esse código está ruim”
    Melhor: “Essa alteração poderia ser feita
    dessa outra forma [explique como] pelos
    motivos 1, 2 e 3. O que você acha?”

    View Slide

  42. Revisão - aspectos humanos
    ● Nunca falte com o respeito
    ● Restrinja os comentários sobre o
    código e não sobre a pessoa
    ● Explique suas posições
    ● Encoraje a melhora do código ao invés
    de exigir explicações

    View Slide

  43. Revisão - aspectos humanos
    ● Nunca falte com o respeito
    ● Restrinja os comentários sobre o
    código e não sobre a pessoa
    ● Explique suas posições
    ● Encoraje a melhora do código ao invés
    de exigir explicações
    ● Use a revisão como ferramenta de
    mentoria
    ○ Busque comentários que agreguem ao
    conhecimento da pessoa autora
    ○ Compartilhar conhecimento faz parte do
    processo

    View Slide

  44. Pessoa autora
    de código
    Dicas e soluções
    ● O que fazer antes de submeter
    uma alteração de código

    View Slide

  45. Submissão de código
    ● As submissões devem ser pequenas
    ○ Quanto mais linhas para revisar, menor é a
    participação de pessoas revisando
    ○ Submissões maiores possuem
    comentários superficiais e escassos
    ○ Maior agilidade na aceitação

    View Slide

  46. Submissão de código
    ● As submissões devem ser pequenas
    ● Refactorings devem ser submetidos
    separadamente

    View Slide

  47. Submissão de código
    ● As submissões devem ser pequenas
    ● Refactorings devem ser submetidos
    separadamente
    ● Disponibilize informações relevantes

    View Slide

  48. Submissão de código
    ● As submissões devem ser pequenas
    ● Refactorings devem ser submetidos
    separadamente
    ● Disponibilize informações relevantes
    ● A melhor versão possível desde a
    primeira submissão
    ○ Menor ciclos de feedback

    View Slide

  49. Submissão de código
    ● As submissões devem ser pequenas
    ● Refactorings devem ser submetidos
    separadamente
    ● Disponibilize informações relevantes
    ● A melhor versão possível desde a
    primeira submissão
    ● Receba abertamente os comentários

    View Slide

  50. Revisão de
    código Python
    Uma última dica
    ● Tudo o que vimos até aqui é
    relevante ao revisar código
    Python
    ● Há mais um aspecto específico

    View Slide

  51. Python Anti-Patterns

    View Slide

  52. Anti-Patterns
    “Respostas / ações comumente utilizadas
    em situações recorrentes mas que são
    ineficientes, ineficazes e podem até levar
    ao erro”

    View Slide

  53. Python Anti-Patterns
    ● Corretude
    ● Manutenabilidade
    ● Legibilidade
    ● Segurança
    ● Performance
    ● Django

    View Slide

  54. Python Anti-Patterns - Corretude
    ● Acessar membros internos
    (protegidos) de uma classe

    View Slide

  55. Python Anti-Patterns - Manutenabilidade
    ● Wildcard imports

    View Slide

  56. Python Anti-Patterns - Manutenabilidade
    ● Abrir arquivos sem context manager

    View Slide

  57. Python Anti-Patterns - Legibilidade
    ● map() ou filter() ao invés de List
    Comprehensions

    View Slide

  58. Revisão de
    código
    Desafios, soluções e experiências
    ● Revisar código é vantajoso
    ● Há desafios técnicos e humanos
    ● Não somos ensinados, mas
    estamos aprendendo
    ● Soluções ainda estão sendo
    formalizadas e compartilhadas

    View Slide

  59. Obrigado
    Revisão de Código - desafios, soluções e experiências
    Caio Carrara
    [email protected]

    View Slide