O que é uma revisão de código?
Uma revisão de código é uma avaliação feita por colegas que ajuda os desenvolvedores a garantir ou melhorar a qualidade do código antes de fazer o merge e entregá-lo.
As revisões de código, também conhecidas como revisões por pares, atuam como garantia de qualidade do codebase.
Revisões de código são avaliações metódicas de código projetadas para identificar bugs, aumentar a qualidade do código e ajudar os desenvolvedores a aprender o código-fonte.
Depois que um desenvolvedor de software termina de codificar, a revisão de código é uma etapa importante no processo de desenvolvimento de software para obter uma segunda opinião sobre a solução e a implementação antes de fazer o merge em um branch upstream, como um branch de recurso ou o branch principal. O revisor também pode atuar como uma segunda etapa na identificação de bugs, problemas de lógica, casos extremos não considerados ou outros problemas.
Essa prática capacita autores e revisores de código a identificar falhas de segurança, aderir a padrões de qualidade e compartilhar conhecimento entre linguagens e estruturas de programação. Os revisores podem ser de qualquer equipe ou grupo, desde que sejam especialistas na área. Se as linhas de código abrangerem mais de um domínio, dois especialistas devem revisar o código.
O desenvolvimento de um forte processo de revisão de código estabelece uma base para a melhoria contínua e evita que código instável seja entregue aos clientes. As revisões de código devem se tornar parte do fluxo de trabalho de uma equipe de desenvolvimento de software para melhorar a qualidade do código e garantir que cada parte dele tenha sido analisada por outro membro da equipe.
O processo de revisão de código também é uma parte importante na disseminação de conhecimento por toda a empresa. Por esses motivos e mais, 76% dos desenvolvedores que participaram da Pesquisa Global de DevSecOps de 2022 disseram que as revisões de código são "muito valiosas".
- Compartilhar conhecimento: quando os desenvolvedores de software revisam o código assim que um membro da equipe faz alterações, eles podem aprender novas técnicas e soluções. As revisões de código ajudam os desenvolvedores iniciantes a aprender com os membros mais experientes da equipe, da mesma forma que o pair programming ajuda efetivamente os desenvolvedores a compartilhar habilidades e ideias. Ao disseminar conhecimento por toda a empresa, as revisões de código garantem que nenhuma pessoa seja um ponto único de falha. Todo mundo têm capacidade de revisar e oferecer feedback. O conhecimento compartilhado também ajuda os membros da equipe a tirar férias, porque a equipe completa têm conhecimento prévio sobre um tópico.
- Descobrir bugs mais cedo: em vez de descobrir bugs após o envio de um recurso e correr para lançar um patch, os desenvolvedores podem encontrar e corrigir problemas imediatamente antes que os clientes os descubram. Antecipar o processo de revisão no ciclo de vida do desenvolvimento de software por meio de testes unitários ajuda os desenvolvedores a trabalharem nas correções enquanto as informações ainda estão recentes. Ao esperar até o final do ciclo de vida para fazer uma revisão, os desenvolvedores geralmente têm dificuldade em lembrar do código, das soluções e do raciocínio. A análise estática é uma forma econômica e eficiente de atender às necessidades do negócio e dos clientes.
- Manter a conformidade: os desenvolvedores têm diferentes formações e treinamentos que influenciam seus estilos de codificação. Se as equipes quiserem ter um estilo de codificação padrão, as revisões de código ajudam todo mundo a aderir aos mesmos padrões. Isso é especialmente importante para projetos de código aberto que têm várias pessoas contribuindo com o código. As revisões por pares envolvem os mantenedores para avaliar o código antes de enviar as alterações.
- Melhorar a segurança: As revisões de código criam um alto nível de segurança, especialmente quando profissionais da área participam de uma revisão direcionada. A segurança de aplicações é parte integrante do desenvolvimento de software, e as revisões de código ajudam a detectar problemas de segurança e garantir a conformidade. Os membros da equipe de segurança podem revisar o código em busca de vulnerabilidades e alertar os desenvolvedores sobre a ameaça. As revisões de código são um ótimo complemento para análises e testes automatizados que detectam vulnerabilidades de segurança.
- Aumente a colaboração: quando os membros da equipe trabalham juntos para criar uma solução, eles se sentem mais comprometidos, com um maior senso de propriedade sobre seu trabalho. Autores e revisores podem trabalhar em conjunto, encontrando as soluções mais eficazes para atender às necessidades do cliente. É importante fortalecer a colaboração em todo o ciclo de vida do desenvolvimento de software para evitar silos de informações e manter um fluxo de trabalho contínuo entre as equipes. Para realizar revisões de código com sucesso, é importante que os desenvolvedores criem uma [mentalidade] de revisão de código (https://www.smashingmagazine.com/2019/06/bringing-healthy-code-review-mindset/) que tenha uma base sólida no desenvolvimento colaborativo.
- Melhorar a qualidade do código: as revisões de código são uma maneira importante de garantir que você envie código e software de alta qualidade. Uma pessoa que conhece sua base de código pode perceber problemas de qualidade de código que os testes automatizados podem não detectar. Eles podem até ajudar você a reduzir a dívida técnica.
- Tempo de lançamento mais longo: o tempo de revisão pode atrasar o processo de lançamento, pois os revisores precisam [colaborar]{data-ga-name="software team collaboration" data-ga-location="body"} com os autores para discutir problemas. Dependendo da carga de trabalho de um revisor, ele pode não concluir uma revisão tão rápido quanto o autor gostaria. Esse desafio pode ser superado usando ferramentas de revisão de código que incluem testes automatizados para encontrar erros. O uso de ferramentas automatizadas é uma maneira eficaz de liberar o tempo do desenvolvedor para que ele possa se concentrar nos problemas maiores de engenharia de software, em vez de destacar erros simples de lint.
- Retirar o foco de outras tarefas: os desenvolvedores geralmente têm uma carga de trabalho pesada, e uma revisão de código pode desviar o foco de outras tarefas de alta prioridade pelas quais são responsáveis. Os membros da equipe podem ser forçados a decidir entre concluir a tarefa ou interromper o trabalho para fazer uma revisão de código. Em ambos os casos, os prazos de entrega são afetados em algum departamento da empresa. Para diminuir esse problema, os membros da equipe podem adotar um revisor aleatório ou uma lista de especialistas, evitando que um único desenvolvedor fique sobrecarregado com solicitações de revisão.
- Revisões extensas levam mais tempo: se os desenvolvedores tiverem que realizar revisões de código em uma grande alteração, eles poderão gastar uma quantidade significativa de tempo examinando o código. Revisões de código extensas são difíceis de avaliar, e os desenvolvedores podem naturalmente passar pelo processo rapidamente para completá-lo em tempo hábil, resultando em uma diminuição na qualidade do feedback. O desenvolvimento de código incremental evita esse desafio, permitindo que os revisores analisem um pequeno trecho de código várias vezes, em vez de uma alteração extensa de uma só vez.
Algumas dessas desvantagens podem ser minimizadas selecionando o método de revisão de código mais apropriado para sua equipe. Confira quatro abordagens comuns para revisão de código:
Pair programming
Envolve dois desenvolvedores colaborando em tempo real: um escrevendo código (o piloto) e um revisando código (o navegador). As sessões de pair programming são populares entre as equipes de desenvolvimento, pois as pessoas da equipe colaboram para identificar a solução mais eficiente para resolver um desafio. Os membros da equipe compartilham conhecimentos e podem superar dificuldades rapidamente, trabalhando juntos em ideias e aproveitando sua expertise.
Benefícios do pair programming
- Transfere conhecimento
- Evita silos de informações
- Resolve problemas complexos
- Aumenta a motivação da equipe
- Encontra mais bugs
- Pode ser conduzido remotamente
Desvantagens do pair programming
- Demorado
- Pode ser usado em excesso
- Difícil de mensurar
Revisões acompanhadas
Em uma revisão acompanhada, dois desenvolvedores (o autor e o revisor) se unem pessoal ou remotamente por meio de uma tela compartilhada e o autor explica a proposta de alteração concluída e mostra qual foi o raciocínio para chegar às soluções escolhidas. O revisor faz perguntas e sugestões, da mesma forma que os membros da equipe fazem durante as sessões de pair programming. O autor pode fazer pequenas alterações durante a revisão e anotar correções maiores para serem feitas posteriormente.
Benefícios das revisões acompanhadas
- Fácil implementação e conclusão
- Podem ser conduzidas remotamente
- Mais rápidas do que o pair programming
Desvantagens das revisões acompanhadas
- O revisor está desconectado do código
- A revisão acontece no ritmo do autor
- Falta de objetividade
- Nenhuma verificação de que as alterações foram feitas
- Difíceis de mensurar
Revisões assistidas por ferramentas
As equipes podem decidir usar ferramentas para economizar tempo e garantir que código da mais alta qualidade seja entregue. Revisões assistidas por ferramentas podem reunir automaticamente arquivos alterados e exibir as diferenças, facilitar a provisão de feedback e permitir conversas via comentários, além de incorporar elementos como Testes Estáticos de Segurança de Aplicações (SAST) para ajudar a identificar e corrigir vulnerabilidades.
A melhor maneira de avaliar as revisões assistidas por ferramentas é considerá-las um complemento para outros tipos de revisões. O uso de ferramentas automatizadas é uma maneira eficaz de reforçar padrões de código, identificar vulnerabilidades e reunir métricas e arquivos. Mas algumas equipes podem acabar completamente dependentes dessas ferramentas e deixar de lado a participação dos membros da equipe na realização de revisões de código. As ferramentas devem ser consideradas como uma extensão das revisões de código e uma maneira de aprimorar o processo.
Benefícios das revisões assistidas por ferramentas
- Mais fácil de reunir métricas
- O uso de ferramentas automatizadas liberam o foco do desenvolvedor
Desvantagens das revisões assistidas por ferramentas
- Os desenvolvedores devem manter as ferramentas
- É um processo caro
- Ainda serão necessárias as revisões de colegas de equipe
Revisão feita via troca de e-mails
As revisões feitas via troca de e-mails são frequentemente usadas para dificuldades menores e pequenos trechos de código. Podem ser conduzidas por e-mail ou sistemas de gerenciamento de código-fonte. Durante uma revisão feita via troca de e-mails, um autor envia um e-mail contendo alterações de código para os revisores. O processo é semelhante às revisões acompanhadas, pois podem ser facilmente implementadas e não exigem uma forte curva de aprendizado ou uma etapa de orientação para ensinar o autor a fazer uma alteração.
Benefícios das revisões feitas via troca de e-mails
- Fácil implementação e conclusão
- Facilita revisões remotas e assíncronas
- Revisões automáticas via SCMs
Desvantagens das revisões feitas via troca de e-mails
- Demoram para reunir arquivos
- Dificuldade em acompanhar conversas
- Nenhuma data final de revisão definida
- Nenhuma verificação de que as alterações foram feitas
- Difícil de mensurar
- Limitar as sessões de revisão de código para mantê-las produtivas. Descubra o que funciona para sua equipe, por exemplo, não mais que uma hora ou 200 linhas de código, e incentive todos os membros a respeitar esse limite.
- Incluir todo mundo, como membros novos e experientes da equipe, no processo. As revisões de código são uma excelente maneira de ajudar os membros mais novos da equipe a se familiarizarem com o codebase tanto revisando o código, quanto fazendo com que seu código seja revisado por desenvolvedores mais experientes da equipe. Incluir todas as pessoas envolvidas no seu processo de revisão de código também facilitará o ajuste quando as elas saírem de férias ou não estiverem mais na equipe.
- Distribuir solicitações de revisão de código entre a equipe. Alguns desenvolvedores acham fácil lidar com solicitações de revisão de código em massa. No entanto, esta abordagem é desaconselhável tanto para eles como para o resto da equipe a longo prazo, para não mencionar as consequências para o codebase. Você pode criar uma lista de especialistas em domínio ou designar um revisor aleatório para ajudar a evitar isso.
- Faça perguntas e apresente um contexto útil. Ao revisar o código de alguém, faça o possível para ajudar tanto a você quanto a pessoa que escreveu o código a aprender durante o processo. Não sabe por que fizeram algo diferente do que você poderia ter feito? Pergunte. Tem alguma sugestão sobre como melhorar o código escrito? Explique suas razões em seu comentário. Isso não apenas ajudará vocês a aprender, mas provavelmente economizará tempo.
Ao integrar práticas eficazes de revisão de código no processo de desenvolvimento de software, as empresas podem enfrentar os desafios de prazos apertados sem comprometer a integridade de seus produtos. O diálogo entre o autor e o revisor do código estabelece as bases para um processo de desenvolvimento robusto, garantindo que cada parte do código não apenas atenda, mas exceda os padrões estabelecidos.
A adoção de revisões de código está aproveitando um futuro em que a inovação, a colaboração e a segurança impulsionam a jornada para a criação de soluções de software impactantes.
Descubra como o GitLab simplifica o processo de revisão de código
O GitLab simplifica o desenvolvimento de software com controle de versão e colaboração abrangentes.
Tudo pronto para começar?
Descubra o que sua equipe pode fazer com uma plataforma DevSecOps unificada.