miniaturadaimagem|Programação em par, prática de desenvolvimento colaborativo relacionada à revisão por pares de código.

A revisão de código ou revisão por pares de código é uma prática de engenharia de software na qual uma ou mais pessoas, diferentes do autor de uma alteração, examinam o código-fonte com o objetivo de avaliar sua qualidade antes ou durante sua integração a uma base de código.

Durante a revisão, podem ser identificados defeitos, problemas de projeto, complexidade desnecessária, inconsistências, ausência ou inadequação de testes e documentação, além de oportunidades para melhorar a legibilidade e a manutenibilidade do código.

Embora a identificação de defeitos seja uma das principais motivações para a revisão, estudos empíricos mostram que a prática também favorece a transferência de conhecimento entre desenvolvedores, a compreensão das alterações realizadas no sistema, a consciência da equipe sobre a evolução do código e a discussão de soluções alternativas.

Objetivos

Os objetivos específicos de uma revisão dependem do projeto e de suas práticas de desenvolvimento. Entre os aspectos que podem ser examinados estão:

projeto: verificar se a solução adotada é adequada à arquitetura e ao restante do sistema; funcionalidade: avaliar se o código realiza corretamente o comportamento pretendido; complexidade: identificar implementações desnecessariamente complexas ou difíceis de compreender e manter; testes: verificar a existência e a adequação dos testes automatizados relacionados à alteração; nomenclatura: avaliar a clareza dos nomes utilizados em variáveis, funções, métodos, classes e outros elementos; comentários e documentação: verificar se são necessários, claros e compatíveis com a implementação; estilo e consistência: avaliar a conformidade com as convenções adotadas pelo projeto.

Além desses aspectos, a revisão pode identificar defeitos e estimular o compartilhamento de conhecimento entre autores e revisores.

Processo

Na revisão de código moderna, o processo normalmente ocorre sobre uma alteração ou conjunto de alterações proposto pelo autor. Ferramentas de revisão apresentam aos participantes os arquivos modificados e as diferenças entre a versão existente e a nova versão.

Um fluxo típico é composto pelas seguintes etapas:

o autor prepara uma alteração e a envia para revisão; um ou mais revisores examinam o código e podem registrar comentários, dúvidas ou solicitações de mudança; o autor responde aos comentários e, quando necessário, modifica o código; uma nova versão da alteração pode ser submetida para outra rodada de análise; quando os critérios definidos pelo projeto são satisfeitos, os revisores aprovam a alteração, permitindo sua integração à base de código.

O processo pode conter diversas iterações entre autor e revisores até que a alteração seja considerada adequada.

História e formas de revisão

Inspeções formais

Uma das primeiras metodologias sistemáticas de revisão de código foi desenvolvida por Michael E. Fagan, da IBM, e publicada em 1976. O processo, conhecido posteriormente como inspeção de Fagan, estabelecia uma forma estruturada de verificar projetos e código, com etapas e papéis definidos para os participantes.

As inspeções formais podem envolver preparação prévia, reuniões estruturadas, registro dos defeitos encontrados e verificação posterior das correções.

Revisão de código moderna

Com a evolução das ferramentas de desenvolvimento colaborativo, difundiram-se processos menos formais, frequentemente chamados de revisão de código moderna ou revisão contemporânea. Em comparação com as inspeções tradicionais, essas práticas tendem a ser mais leves, frequentes e apoiadas por sistemas próprios de revisão de alterações.

Essas ferramentas permitem visualizar as diferenças entre versões, associar comentários diretamente a trechos de código, acompanhar discussões e revisar sucessivas iterações da mesma alteração.

A revisão pode ser realizada de forma assíncrona, sem a necessidade de autor e revisores estarem presentes simultaneamente, ou de forma síncrona, incluindo reuniões e sessões presenciais.

Benefícios

A detecção de defeitos é uma motivação tradicional da revisão de código, mas não constitui seu único resultado. Em um estudo conduzido em equipes da Microsoft, Alberto Bacchelli e Christian Bird observaram benefícios adicionais, entre eles transferência de conhecimento, maior consciência da equipe sobre mudanças no código e identificação de soluções alternativas para problemas.

A revisão também pode contribuir para a manutenção de convenções e padrões de qualidade compartilhados. Nas diretrizes de engenharia do Google, por exemplo, o objetivo central da revisão é impedir que sucessivas alterações reduzam a qualidade geral da base de código ao longo do tempo.

A interação entre autor e revisor também pode desempenhar uma função educativa, permitindo a disseminação de conhecimento sobre linguagens, frameworks, arquitetura do sistema e práticas adotadas pela equipe.

Efetividade e tamanho das alterações

A efetividade de uma revisão depende de fatores relacionados aos revisores, ao contexto e à própria alteração analisada.

Em um estudo que examinou aproximadamente 1,5 milhão de comentários de revisão em cinco projetos da Microsoft, Bosu, Greiler e Bird observaram que, quanto maior o número de arquivos presentes em uma alteração, menor era a proporção de comentários que os autores consideravam úteis.

Por essa razão, práticas de engenharia frequentemente recomendam que alterações submetidas à revisão sejam pequenas e concentradas em um objetivo específico, desde que continuem suficientemente completas para que seu efeito possa ser compreendido.

A revisão também possui custos: exige tempo dos revisores, do autor para responder e implementar alterações e pode adicionar espera ao fluxo de desenvolvimento. Por isso, processos e ferramentas buscam equilibrar profundidade da análise e velocidade de integração das mudanças.

Relação com outras práticas

Análise estática

A análise estática de programas examina o código sem executar o programa e pode automatizar a identificação de determinados padrões, erros e violações de regras.

Ela pode complementar a revisão humana. Verificações automatizáveis, como determinadas regras de estilo ou padrões detectáveis por análise estática, podem ser realizadas por ferramentas, enquanto revisores humanos podem concentrar-se em questões de projeto, contexto, legibilidade e adequação da solução.

Programação em par

Na programação em par, dois desenvolvedores trabalham conjuntamente na produção do código, geralmente com revisão contínua das decisões tomadas durante sua implementação. A prática difere da revisão assíncrona realizada após a preparação de uma alteração, embora possa desempenhar uma função semelhante de verificação por outra pessoa.

A forma como as duas práticas se relacionam depende do processo da organização. Nas práticas de engenharia publicadas pelo Google, por exemplo, código desenvolvido em programação em par é considerado revisado quando o segundo participante possui qualificação adequada para realizar a revisão.

Ver também Boas práticas de programação Análise estática de programas Programação em par Teste de software Qualidade de software Engenharia de software Controle de versão

Categoria:Engenharia de software