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

Decodificando o Code Review - Lovecoding 2022

Decodificando o Code Review - Lovecoding 2022

Elaine Naomi

October 07, 2022
Tweet

More Decks by Elaine Naomi

Other Decks in Programming

Transcript

  1. decodificando o
    CODE
    REVIEW
    LOVECODING - 2022

    View full-size slide

  2. Software Engineer/Developer (since 2008)
    B.Sc. in Computer Engineering
    M.Sc. in Computer Science
    ELAINE NAOMI WATANABE
    twitter.com/elaine_nw
    speakerdeck.com/elainenaomi

    View full-size slide

  3. Software Engineer/Developer (since 2008)
    B.Sc. in Computer Engineering
    M.Sc. in Computer Science
    ELAINE NAOMI WATANABE
    twitter.com/elaine_nw
    speakerdeck.com/elainenaomi
    slides disponíveis

    View full-size slide

  4. Software Engineer/Developer (since 2008)
    B.Sc. in Computer Engineering
    M.Sc. in Computer Science
    ELAINE NAOMI WATANABE
    twitter.com/elaine_nw
    speakerdeck.com/elainenaomi
    Fotinho atualizada!
    RubyConf+ Brasil - setembro/2022

    View full-size slide

  5. por onde esta palestra andou?
    Agile Trends
    The DevConf - São Paulo
    GURU SP
    Ada Lovelace Day - Curitiba
    Rubyconf Brasil - Trilha Codamos
    SourceLevel - Webinar
    Tech & Beers - Loft
    2019 - 2022

    View full-size slide

  6. EXPECTATIVAS

    View full-size slide

  7. EXPECTATIVAS
    discutir os desafios e práticas da
    revisão de código

    View full-size slide

  8. DEFINIÇÃO
    PRÁTICAS DO
    DIA A DIA
    DESAFIOS
    APRENDIZADOS

    View full-size slide

  9. PRÁTICAS DO
    DIA A DIA
    DESAFIOS
    APRENDIZADOS
    DEFINIÇÃO

    View full-size slide

  10. CODE REVIEW
    processo de verificação de um sistema por meio da
    análise do código fonte, realizada por humanos
    https://en.wikipedia.org/wiki/Code_review

    View full-size slide

  11. CODE REVIEW
    processo de verificação de um sistema por meio da
    análise do código fonte, realizada por humanos
    https://en.wikipedia.org/wiki/Code_review

    View full-size slide

  12. REVISÃO DE CÓDIGO
    processo de verificação de um sistema por meio da
    análise do código fonte, realizada por humanos
    https://en.wikipedia.org/wiki/Code_review

    View full-size slide

  13. REVISÃO DE CÓDIGO
    processo de verificação de um sistema por meio da
    análise do código fonte, realizada por humanos
    https://en.wikipedia.org/wiki/Code_review

    View full-size slide

  14. REVISÃO DE CÓDIGO
    processo de verificação de um sistema por meio da
    análise do código fonte, realizada por humanos
    https://en.wikipedia.org/wiki/Code_review

    View full-size slide

  15. REVISÃO DE CÓDIGO
    processo de verificação de um sistema por meio da
    análise do código fonte, realizada por humanos
    https://en.wikipedia.org/wiki/Code_review

    View full-size slide

  16. qual é o objetivo?

    View full-size slide

  17. 60% dos defeitos podem ser
    identificados na revisão do código
    Boehm, Barry, and Victor R. Basili. "Top 10 list [software development]."
    Computer 34.1 (2001): 135-137

    View full-size slide

  18. Revisão de código é uma boa ferramenta para identificar
    defeitos relacionados à evolutibilidade do código que
    não são identificáveis na fase de testes
    Mäntylä, Mika V., and Casper Lassenius. "What types of defects are really discovered in code
    reviews?." IEEE Transactions on Software Engineering 35.3 (2009): 430-448

    View full-size slide

  19. Revisão de código é uma boa ferramenta para identificar
    defeitos relacionados à evolutibilidade do código que
    não são identificáveis na fase de testes
    Mäntylä, Mika V., and Casper Lassenius. "What types of defects are really discovered in code
    reviews?." IEEE Transactions on Software Engineering 35.3 (2009): 430-448
    capacidade de adaptação
    ao longo do tempo

    View full-size slide

  20. como é a evolução de um software?

    View full-size slide

  21. é sempre fácil alterar
    uma base de código?

    View full-size slide

  22. Dívida Técnica
    Custo da mudança
    Tempo
    How to Monetize Application Technical Debt, Gartner, 2011

    View full-size slide

  23. E é sobre isso e tá tudo bem

    View full-size slide

  24. e tudo bem mesmo
    faz parte

    View full-size slide

  25. mas e se a gente nunca olhar
    para essa dívida técnica?

    View full-size slide

  26. Valor de negócio
    Custo da mudança
    Tempo
    How to Monetize Application Technical Debt, Gartner, 2011

    View full-size slide

  27. Dívida Técnica
    Valor de negócio
    Custo da mudança
    Tempo
    How to Monetize Application Technical Debt, Gartner, 2011

    View full-size slide

  28. o processo de code review é uma
    forma de reduzir a dívida técnica

    View full-size slide

  29. costuma ter um custo menor de
    mudança em relação à correção de
    defeitos em produção

    View full-size slide

  30. http://agilemodeling.com/essays/modelReviews.htm
    Desenv.
    Custo da mudança
    Tempo
    Requisitos
    Análise e
    Design
    Revisão Testes Produção

    View full-size slide

  31. http://agilemodeling.com/essays/modelReviews.htm
    Desenv.
    Custo da mudança
    Tempo
    Requisitos
    Análise e
    Design
    Revisão Testes Produção
    custo maior de
    mudança

    View full-size slide

  32. e pode impactar positivamente na
    qualidade de software

    View full-size slide

  33. QUALIDADE DE SOFTWARE
    Confiabilidade
    Corretude
    Eficiência
    Manutenabilidade
    Valor de negócio
    https://en.wikipedia.org/wiki/Software_quality

    View full-size slide

  34. é sobre impacto a longo prazo!

    View full-size slide

  35. é sobre impacto a longo prazo!

    View full-size slide

  36. DEFINIÇÃO
    PRÁTICAS DO
    DIA A DIA
    DESAFIOS
    APRENDIZADOS

    View full-size slide

  37. DEFINIÇÃO
    PRÁTICAS DO
    DIA A DIA
    DESAFIOS
    APRENDIZADOS

    View full-size slide

  38. como fazer uma
    revisão de código?

    View full-size slide

  39. Pair Programming
    Pull Request

    View full-size slide

  40. Pair Programming
    Pull Request

    View full-size slide

  41. Pair Programming
    Pull Request
    Merge Request or Change Request

    View full-size slide

  42. documento sobre uma alteração

    View full-size slide

  43. pessoas
    revisoras

    View full-size slide

  44. revisão por meio de comentários

    View full-size slide

  45. comparação do código atual com a
    alteração proposta

    View full-size slide

  46. por que usar pull requests?

    View full-size slide

  47. Pair Programming
    Pull Request

    View full-size slide

  48. Pair Programming
    Pull Request
    código + contexto de negócio

    View full-size slide

  49. Pair Programming
    Pull Request
    histórico acessível das discussões

    View full-size slide

  50. Pair Programming
    Pull Request
    histórico acessível das discussões

    View full-size slide

  51. RubyConf 2018 - A Branch in Time
    https://www.youtube.com/watch?v=8OOTVxKDwe0

    View full-size slide

  52. RubyConf 2018 - A Branch in Time
    https://www.youtube.com/watch?v=8OOTVxKDwe0
    capture the why,
    not the what

    View full-size slide

  53. interação
    assíncrona
    distribuída
    Mesmo
    local
    Mesmo tempo Tempo diferente
    Locais
    diferentes
    interação
    síncrona
    distribuída
    interação
    assíncrona
    interação
    face-a-face
    Johansen, Robert. "Groupware: Future directions and wild cards."
    Journal of Organizational Computing and Electronic Commerce 1.2 (1991): 219-227.

    View full-size slide

  54. Trabalho
    Remoto

    View full-size slide

  55. transferência de conhecimento
    mentoria

    View full-size slide

  56. visibilidade das alterações
    para outros times
    team awareness

    View full-size slide

  57. boas práticas

    View full-size slide

  58. como pessoa autora

    View full-size slide

  59. Título explicativo
    Motivação (contexto de negócio)
    Lista de dúvidas e discussões prévias
    Gifs, screenshots das alterações

    View full-size slide

  60. Mensagens de commits coerentes
    Código completo, testado
    Alterações pequenas
    Single responsibility principle

    View full-size slide

  61. Revisar seu próprio PR
    Marcar pessoas como revisoras
    Aplicar as alterações necessárias
    Responder a todos os comentários

    View full-size slide

  62. Dica: Templates de Pull Requests

    View full-size slide

  63. https://help.github.com/pt/github/creating-cloning-and-archiving-repositories/creating-a-template-repository

    View full-size slide

  64. como pessoa revisora

    View full-size slide

  65. Identificar defeitos (bugs)
    Sugerir soluções alternativas, refatorações
    Reforçar padrões de código e design
    Validar funcionalidade (código + negócio)

    View full-size slide

  66. Identificar problemas de segurança
    Analisar impactos na performance
    Sugerir documentações
    Validar a qualidade do código-fonte

    View full-size slide

  67. Conhecer novas funcionalidades
    Aprender novas tecnologias
    Compartilhar conhecimento e dúvidas

    View full-size slide

  68. DEFINIÇÃO
    PRÁTICAS DO
    DIA A DIA
    DESAFIOS
    APRENDIZADOS

    View full-size slide

  69. DEFINIÇÃO
    PRÁTICAS DO
    DIA A DIA
    DESAFIOS
    APRENDIZADOS

    View full-size slide

  70. Fonte: https://mtlynch.io/human-code-reviews-1/

    View full-size slide

  71. visibilidade

    View full-size slide

  72. Ferramentas para notificações de PRs
    Métricas de acompanhamento do projeto
    Monitoração de bugs

    View full-size slide

  73. impacto no
    tempo de entrega

    View full-size slide

  74. 70% das alterações do Google
    são integradas em menos de 24h
    após o pedido de review
    Sadowski, Caitlin, et al. "Modern code review: a case study at Google." Proceedings of the 40th International Conference on
    Software Engineering: Software Engineering in Practice. ACM, 2018

    View full-size slide

  75. Alterações pequenas, uma pessoa revisora e
    sem comentários além de autorização para
    integração
    Sadowski, Caitlin, et al. "Modern code review: a case study at Google." Proceedings of the 40th International Conference on
    Software Engineering: Software Engineering in Practice. ACM, 2018

    View full-size slide

  76. Sua base de código parece ter sido
    escrita por ÚNICA PESSOA?
    SIM NÃO
    Fonte: Talking with Tech Leads - Patrick Kua

    View full-size slide

  77. collective code ownership
    https://martinfowler.com/bliki/CodeOwnership.html

    View full-size slide

  78. Fonte: https://mtlynch.io/human-code-reviews-2/

    View full-size slide

  79. quem faz review, faz parte da
    construção da solução também

    View full-size slide

  80. como ir nessa direção?

    View full-size slide

  81. lembre-se que o feedback
    deve ser sobre o código,
    e não sobre as pessoas

    View full-size slide

  82. ninguém acorda e pensa:
    vou lá adicionar um bug e já volto

    View full-size slide

  83. apoie a participação de
    TODAS AS PESSOAS do seu time

    View full-size slide

  84. não é porque alguém é experiente,
    que não vai errar

    View full-size slide

  85. não é porque alguém é iniciante,
    que não vai ter contribuição

    View full-size slide

  86. use comentários
    explícitos e descritivos

    View full-size slide

  87. é para eu jogar fora a minha alteração?

    View full-size slide

  88. ah, era só para apagar o espaço extra

    View full-size slide

  89. comentários repetitivos
    sobre estilo de código

    View full-size slide

  90. podem ser substituídos por uma
    ferramenta de análise de código

    View full-size slide

  91. melhorias de design podem ser
    entregues em outro pull request

    View full-size slide

  92. se chegar a uma conclusão
    estiver difícil

    View full-size slide

  93. não se limite à ferramenta de review

    View full-size slide

  94. videoconferência
    presencialmente
    https://blog.plataformatec.com.br/2018/11/trabalhando-com-times-distribuidos/

    View full-size slide

  95. videoconferência
    presencialmente ?
    https://blog.plataformatec.com.br/2018/11/trabalhando-com-times-distribuidos/
    o que vocês acham?

    View full-size slide

  96. documente as decisões e
    discussões offline

    View full-size slide

  97. preste atenção na sua
    forma de se comunicar

    View full-size slide

  98. muitas vezes não é óbvio que um
    comentário ou comportamento é
    prejudicial

    View full-size slide

  99. peça feedbacks
    muitas vezes não é óbvio que um
    comentário ou comportamento é
    prejudicial

    View full-size slide

  100. leia sobre
    comunicação não-violenta
    muitas vezes não é óbvio que um
    comentário ou comportamento é
    prejudicial

    View full-size slide

  101. leia sobre
    vieses inconscientes
    muitas vezes não é óbvio que um
    comentário ou comportamento é
    prejudicial

    View full-size slide

  102. como organização

    View full-size slide

  103. tenha critérios bem definidos
    ex.: o número mínimo de aprovações

    View full-size slide

  104. atenção aos silos de conhecimento
    http://blog.plataformatec.com.br/2018/07/como-evitar-silos-de-conhecimento-na-sua-c
    odebase-e-levar-seus-code-reviews-para-o-proximo-nivel/
    bus factor

    View full-size slide

  105. fator social

    View full-size slide

  106. Tsay, Jason, Laura Dabbish, and James Herbsleb. "Influence of social and technical factors for evaluating contribution in GitHub."
    Proceedings of the 36th international conference on Software engineering. ACM, 2014.
    Quando os testes estão inclusos, o PR
    tem 17% mais chance de ser aceito
    fator técnico

    View full-size slide

  107. Se a pessoa autora segue a pessoa
    responsável pelo projeto, tem
    187% mais chance do PR ser aceito
    fator social
    Tsay, Jason, Laura Dabbish, and James Herbsleb. "Influence of social and technical factors for evaluating contribution in GitHub."
    Proceedings of the 36th international conference on Software engineering. ACM, 2014.

    View full-size slide

  108. formalize as recomendações,
    crie guidelines também sobre
    aspectos comportamentais

    View full-size slide

  109. Inclusive Language in Technology
    https://www.it.northwestern.edu/about/it-projects/dei/glossary.html

    View full-size slide

  110. comunicação
    verbal, não verbal e escrita

    View full-size slide

  111. comportamentos
    tóxicos

    View full-size slide

  112. COMPORTAMENTOS TÓXICOS
    https://medium.com/@jgefroh/toxic-developers-considered-harmful-f7ea1494d4c0
    Impedem inovações e ideias
    Promovem a cultura da não-comunicação
    Colocam o projeto e negócio em risco por centralizar informação
    Comunicação agressiva (verbal, não-verbal e escrita)

    View full-size slide

  113. "como assim você não sabe isso???"

    View full-size slide

  114. "como deixaram você entrar aqui??"

    View full-size slide

  115. "vou ter que te explicar de novo?"

    View full-size slide

  116. A análise de sentimento em comentários
    tem mostrado evidências de que
    comentários com tom negativo
    tendem a ser menos úteis
    Sadowski, Caitlin, et al. "Modern code review: a case study at Google." Proceedings of the 40th International Conference on
    Software Engineering: Software Engineering in Practice. ACM, 2018

    View full-size slide

  117. como evitar isso?

    View full-size slide

  118. Faça reviews como seres humanos
    https://mtlynch.io/human-code-reviews-1/
    https://mtlynch.io/human-code-reviews-2/

    View full-size slide

  119. ask, don't tell

    View full-size slide

  120. ok, é só perguntar

    View full-size slide

  121. ok, é só perguntar

    View full-size slide

  122. "Testes não são importantes pra você?"
    pergunta sarcástica, com julgamento pessoal

    View full-size slide

  123. "Testes não são importantes pra você?"
    pergunta sarcástica, com julgamento pessoal

    View full-size slide

  124. "Esse PR não pode ser mergeado"
    comentário opinativo, sem ação concreta, imperativo

    View full-size slide

  125. "Esse PR não pode ser mergeado"
    comentário opinativo, sem ação concreta, imperativo

    View full-size slide

  126. "Por que não criou uma nova classe?"
    pergunta com julgamento pessoal ainda
    "como você não pensou nisso?"

    View full-size slide

  127. "Por que não criou uma nova classe?"
    pergunta com julgamento pessoal ainda
    "como você não pensou nisso?"

    View full-size slide

  128. busque comentar
    de maneira construtiva

    View full-size slide

  129. construtivo
    "O que você acha sobre extrair essa
    lógica para uma classe? Acredito que
    vai melhorar a legibilidade e reduzir a
    complexidade"

    View full-size slide

  130. sem suposição, tom de sugestão
    "Não sei se você já analisou isso,
    mas será que não vale a pena criar uma
    nova classe para esse caso?"

    View full-size slide

  131. DEFINIÇÃO
    PRÁTICAS DO
    DIA A DIA
    DESAFIOS
    APRENDIZADOS

    View full-size slide

  132. DEFINIÇÃO
    PRÁTICAS DO
    DIA A DIA
    DESAFIOS
    APRENDIZADOS

    View full-size slide

  133. desenvolvimento de software
    tem muito a ver com cultura e
    comunicação

    View full-size slide

  134. "A cultura não faz as pessoas,
    as pessoas fazem a cultura"
    Chimamanda Ngozi Adichie

    View full-size slide

  135. olhe para o seu time

    View full-size slide

  136. diversidade ajuda a estimular empatia

    View full-size slide

  137. pode ajudar a reduzir
    comportamentos tóxicos

    View full-size slide

  138. e impactar positivamente
    na inovação e lucro

    View full-size slide

  139. https://assets.mckinsey.com/~/media/857F440109AA4D13A54D9C496D86ED58.ashx
    Diversidade de gênero:
    21% mais chances de resultados
    acima da média do mercado
    Diversidade cultural e étnica:
    33% mais chances de resultados
    acima da média do mercado

    View full-size slide

  140. olhe também para o ambiente
    fatores não-técnicos

    View full-size slide

  141. pressão, sobrecarga de atividades,
    experiência e contexto de negócio
    Baysal, Olga, et al. "The influence of non-technical factors on code review." 2013 20th Working Conference on
    Reverse Engineering (WCRE). IEEE, 2013.

    View full-size slide

  142. a qualidade do software
    reflete todos esses fatores

    View full-size slide

  143. impacta também no código escrito

    View full-size slide

  144. código escrito é uma
    forma de comunicação

    View full-size slide

  145. Donald Knuth. "Literate Programming (1984)" in Literate Programming. CSLI, 1992, pg. 99.
    "Instead of imagining that our main
    task is to instruct a computer what
    to do, let us concentrate rather on
    explaining to human beings what we
    want a computer to do."

    View full-size slide

  146. code review é sobre cultura,
    pessoas, qualidade de software

    View full-size slide

  147. e aí, como é o code review
    no seu dia a dia?

    View full-size slide

  148. https://sourcelevel.io/code-review-ebook

    View full-size slide

  149. minhas referências

    View full-size slide

  150. google.github.io/eng-practices/review/reviewer/standard.html

    View full-size slide

  151. github.com/joho/awesome-code-review
    github.blog/2015-01-21-how-to-write-the-perfect-pull-request
    medium.com/palantir/19e02780015f
    medium.com/@jgefroh/f7ea1494d4c0
    forbes.com/sites/quora/2014/11/07/10-characteristics-of-a-bad-softwar
    e-engineer
    blog.plataformatec.com.br/2018/07/como-evitar-silos-de-conhecimento-
    na-sua-codebase-e-levar-seus-code-reviews-para-o-proximo-nivel/

    View full-size slide

  152. Building an Iconic Company - Reed Hasting
    youtube.com/watch?v=BsXXIfqbnRk
    A Arquitetura (Peculiar) do Stack Overflow - Roberta Arcoverde
    infoq.com/br/presentations/a-arquitetura-peculiar-do-stack-overflow
    Arquitetura, pragmatismo e simplicidade - Roberta Arcoverde
    docs.google.com/presentation/d/1DMpfVcXtALeCPwQwTM0Nz-YE1DBz
    7hCvPMf8q6O1ogI/preview
    Talking with Tech Leads - Patrick Kua
    youtube.com/watch?v=dNE6aqkG7ss

    View full-size slide

  153. Implementing a Strong Code-Review Culture - Derek Prior
    youtube.com/watch?v=PJjmw9TRB7s
    Maintaining a big open source project: lessons learned - Leonardo Tegon
    youtube.com/watch?v=rnOcDH_sgxg
    Integração Discreta: como melhorar a Integração Contínua e ainda
    ganhar em colaboração - George Guimarães
    infoq.com/br/presentations/integracao-discreta-como-melhorar

    View full-size slide

  154. https://sandimetz.com/blog/2016/1/20/the-wrong-abstraction

    View full-size slide

  155. All the little things - Sandi Metz
    https://www.youtube.com/watch?v=8bZh5LMaSmE

    View full-size slide

  156. Lessons Learned from Elixir Learning Paths
    https://www.youtube.com/watch?v=I1jUWz1RP2U
    https://speakerdeck.com/elainenaomi/elixir-conf-eu-lessons-learned-from-elixir-learning-paths

    View full-size slide

  157. https://twitter.com/rla4/status/1097982806163185666

    View full-size slide

  158. railsgirls.com.br

    View full-size slide

  159. CARNIVAL EDITION

    View full-size slide

  160. speakerdeck.com/elainenaomi
    elainenaomi.dev
    Muito
    obrigada
    illustrations from undraw.co

    View full-size slide