Acredito que você tenha respondido amplamente à sua própria pergunta sobre os benefícios e desvantagens relativos.
As revisões de código geralmente podem acabar sendo trabalhosas e prolongadas, e tudo o que aumenta o tempo necessário para revisar o código vai piorar a situação. Na minha opinião, você deseja manter seu processo de revisão muito curto, e não se esforçar muito nos pontos mais delicados. Portanto, a chave é decidir o que é o processo de revisão que oferece valor comercial à sua equipe.
Questões de estilo são provavelmente um dos itens que eu colocaria como a mais baixa das prioridades. Certamente, manter o código limpo e formatado de maneira uniforme pode facilitar a compreensão, mas o excesso de estilo também pode resultar em enormes ineficiências durante o processo de codificação, porque se preocupar com a beleza do código afasta os pensamentos dos desenvolvedores dos problemas a serem resolvidos. Se você ainda estiver preocupado com problemas de estilo, o uso de uma ferramenta de verificação de Estilo / formatação (por exemplo: StyleCop for C #) é uma ótima maneira de deixar os problemas específicos do estilo para o último momento e tomar o processo de tomada de decisão relacionado ao estilo das mãos dos desenvolvedores, liberando seu pensamento para as coisas mais importantes. Se você não tiver esse produto no seu idioma de escolha, talvez seja possível escrever um analisador simples para verificar rapidamente seu código em busca de tais problemas,
Vazamentos de memória e outros problemas específicos de desempenho nunca devem depender do processo de revisão. Claro, se você encontrar algo que obviamente causará um grande problema, você deve destacá-lo, mas não deve ser o objetivo da revisão do código rastrear todos os pequenos problemas de memória / desempenho em seu código. É para isso que serve uma boa ferramenta de criação de perfil, e certamente valem cada centavo gasto se você conseguir localizar uma ferramenta muito boa para o idioma em que está desenvolvendo.
Os problemas de lógica são problemáticos, na melhor das hipóteses, e essas são as coisas que podem realmente consumir muito tempo valioso quando você está revisando o código. Em vez de deixar tudo isso inteiramente para a revisão de código, é para isso que seus testes de unidade devem ser usados. Sim, mesmo os testes podem estar errados; no entanto, se você desenvolver o teste primeiro, atenha-se aos princípios SRP e DRY, refatorar sem piedade e definir seus testes de unidade como um meio de validar suas especificações, você descobrirá que terá muito menos problemas relacionados à lógica. Se você testar depois de codificar, é menos provável que você lide com possíveis problemas lógicos à medida que eles surgem e mais provável que se esqueça de testar um caminho específico através do seu código.
Então, se você faz tudo como sugeri aqui, o que isso faz com que você faça na revisão de código? A resposta simples é que sua revisão de código se torna um processo bastante simples, pelo qual o codificador explica ao revisor como um determinado requisito foi capturado nos testes e como esses testes foram aplicados aos problemas resolvidos. Você tende a verificar mais detalhadamente o código e a analisar os testes mais detalhadamente, pois é nesse ponto que o maior valor comercial pode ser medido, principalmente quando esse código precisa ser mantido posteriormente. Para tornar a revisão do código de teste ainda mais simples, o uso de uma boa estrutura de teste orientada a comportamentos pode simplificar bastante a revisão, pois as especificações são capturadas no código como uma descrição quase clara em inglês sobre como o teste será executado. Verificações detalhadas são realizadas em qualquer código que suporte os testes, e se a estrutura do BDD produzir bons relatórios de texto, listando os testes em textos simples / declarações de recursos, o processo se tornará ainda mais fácil. Isso tudo resulta em um processo extremamente eficiente, que é tão valioso quanto uma revisão de código mais tradicional, mas pode ser realizado muito mais rapidamente e de maneira mais focada, ajudando você a evitar ficar atolado em trivialidades e verificações duplas. que muitas vezes levam a lugar nenhum. Essa abordagem mais enxuta significa mais tempo gasto em testes e codificação e menos tempo em processos administrativos. mas pode ser conduzido com muito mais rapidez e de maneira mais focada, ajudando a evitar esbarrar em trivialidades e verificações duplas que geralmente não levam a lugar algum. Essa abordagem mais enxuta significa mais tempo gasto em testes e codificação e menos tempo em processos administrativos. mas pode ser conduzido com muito mais rapidez e de maneira mais focada, ajudando a evitar esbarrar em trivialidades e verificações duplas que geralmente não levam a lugar algum. Essa abordagem mais enxuta significa mais tempo gasto em testes e codificação e menos tempo em processos administrativos.
Então, e essas métricas? Se todos os problemas forem tratados simplesmente como "bugs", a única métrica com a qual você realmente precisa se preocupar é o número de bugs encontrados antes e após o lançamento, ao longo do tempo, e se os bugs identificados estão tendendo em qualquer direção específica. Se você estiver usando um sistema de rastreamento de questões meio decente, todas essas informações estarão praticamente ao seu alcance e você não precisará se preocupar se o seu processo de revisão precisa identificá-las. No final do dia, sua equipe quer fazer o que é bom, que é escrever software, e não gastar muito tempo em questões administrativas que geralmente oferecem apenas algo de interesse para 1 ou 2 pessoas na empresa.