Simple Science

Ciência de ponta explicada de forma simples

# Informática # Engenharia de software # Inteligência Artificial # Computação e linguagem

Apresentando o CRScore: Uma Nova Maneira de Avaliar Revisões de Código

O CRScore oferece um método de avaliação inovador pra analisar os comentários de revisão de código sem precisar de referências humanas.

Atharva Naik, Marcus Alenius, Daniel Fried, Carolyn Rose

― 11 min ler


CRScore Transforma CRScore Transforma Avaliação de Revisão de Código humanos. de revisão de código sem a ajuda de Um método novo pra avaliar comentários
Índice

A revisão automatizada de código tem ganhado bastante atenção no mundo tech recentemente. Isso significa que máquinas estão sendo usadas com mais frequência para checar e melhorar o código escrito pelos desenvolvedores de software. Uma parte importante desse processo é fazer com que as máquinas avaliem os comentários feitos durante as revisões de código. No entanto, a maioria dos métodos atuais usados para julgar esses comentários depende da comparação com comentários escritos por humanos. Isso é um problema porque as revisões de código podem ter muitos comentários válidos sobre o mesmo pedaço de código, tornando difícil para as máquinas medir a qualidade deles de forma justa.

Para resolver esses problemas, apresentamos o CRScore, uma nova maneira de avaliar comentários de revisão de código que não depende de referências escritas por humanos. Em vez disso, o CRScore mede a qualidade com base em vários aspectos importantes, como Concisão (quão breves são os comentários), abrangência (quanta informação eles fornecem) e relevância (quão relacionados os comentários estão ao código).

O CRScore funciona analisando problemas potenciais no código que podem ser detectados tanto por grandes modelos de linguagem (LLMs) quanto por analisadores de código estático. Fazendo isso, o CRScore pode fornecer pontuações válidas e detalhadas que se alinham bem com os julgamentos humanos. Em nossas descobertas, o CRScore mostrou uma boa correlação com as opiniões humanas, marcando 0,54 em um teste estatístico conhecido como correlação de Spearman, o que significa que suas avaliações são mais sensíveis em comparação com métodos tradicionais que dependem de referências humanas.

Além de apresentar o CRScore, também criamos um conjunto de dados composto por 2.600 revisões que foram avaliadas por pessoas. Esse conjunto de dados vai ajudar no desenvolvimento de métricas automatizadas para avaliar a qualidade do código.

Importância da Revisão de Código

A revisão de código é uma prática crucial para garantir a qualidade do software. Ela permite que os desenvolvedores encontrem bugs e garantam que seu código atenda a certos padrões. Muitos engenheiros de software preferem usar ferramentas simples e assíncronas, como o recurso de comentários de revisão do GitHub, que é muitas vezes mais conveniente do que revisões formais cara a cara. Essa preferência levou a um aumento do interesse em automatizar o processo de gerar comentários em linguagem natural para as revisões de código.

No entanto, a maioria das referências criadas para avaliar a geração automatizada de comentários ainda depende fortemente de métricas tradicionais baseadas em referências, como BLEU. Esses métodos mostraram ser menos eficazes, especialmente quando os comentários de referência são de baixa qualidade ou limitados em escopo.

Como a revisão de código pode abordar vários tipos de problemas em um pedaço de código, ter apenas um comentário de referência pode penalizar injustamente os sistemas automatizados. Um exemplo real ilustra isso: para uma mudança específica no código, a revisão de "verdade fundamentada" pode focar em um problema de desempenho, enquanto uma revisão gerada por máquina pode destacar outra preocupação válida, como uma condição incomum no código. Apesar de ser válida, a revisão gerada pela máquina recebeu uma pontuação baixa de BLEU porque não compartilhou frases semelhantes o suficiente com a referência.

Para abordar essas limitações, desenvolvemos o CRScore, que é um método de avaliação mais eficaz que não depende de referências pré-existentes. O CRScore foi projetado para medir a qualidade dos comentários usando três dimensões principais: abrangência, concisão e relevância.

Como o CRScore Funciona

O CRScore avalia os comentários com base em um processo de duas etapas. Primeiro, ele gera uma lista de "Pseudo-referências" que incluem possíveis alegações e problemas relacionados ao código. Estas não são referências reais, mas são informadas pelo que poderiam ser comentários válidos. Em segundo lugar, ele usa um método chamado similaridade textual semântica (STS) para alinhar os comentários da revisão com as pseudo-referências geradas.

Para gerar essas pseudo-referências, usamos uma combinação de grandes modelos de linguagem e ferramentas de análise de código. Essas ferramentas podem identificar erros de formatação, padrões de design problemáticos e outros problemas dentro do código. Ao mesclar esses dois métodos, conseguimos criar pseudo-referências abrangentes que cobrem uma gama mais ampla de tópicos de revisão potenciais.

Uma vez que temos as pseudo-referências, o CRScore calcula quão bem os comentários abordam esses tópicos com base nas três dimensões de qualidade mencionadas anteriormente. A concisão mede quão eficientemente os comentários transmitem informações. A abrangência verifica se todas as informações essenciais estão incluídas. A relevância considera se os comentários estão no tópico em relação à mudança de código.

Validando o CRScore

Para que o CRScore seja eficaz, é importante que as pseudo-referências geradas sejam precisas e cubram todas as alegações necessárias. Além disso, a pontuação produzida pelo CRScore deve se correlacionar com os julgamentos humanos sobre a qualidade da revisão.

Nossos avaliadores humanos analisaram a qualidade das pseudo-referências geradas, confirmando que cerca de 82,6% delas eram precisas. Esse alto nível de precisão sugere que o CRScore pode fornecer avaliações confiáveis alinhadas com as preferências humanas.

Além disso, reunimos avaliações para revisões escritas por diferentes sistemas para validar ainda mais o CRScore. Nossas descobertas indicaram que o CRScore superou as métricas tradicionais baseadas em referências em se alinhar com as avaliações humanas.

Comparação com Métricas Tradicionais

Métricas baseadas em referências, como BLEU, ROUGE e BERTScore, têm sido historicamente usadas para avaliar textos gerados, incluindo comentários de revisão de código. Essas métricas calculam quão semelhantes os comentários gerados por máquina são em relação às referências escritas por humanos, observando a sobreposição de palavras.

No entanto, pesquisas mostraram que essas métricas muitas vezes falham em refletir com precisão o julgamento humano. Por exemplo, o BLEU se baseia principalmente em correspondências exatas de palavras, o que pode não capturar todo o significado das revisões. Da mesma forma, embora o BERTScore considere a similaridade semântica, ele ainda pode falhar em casos onde os comentários gerados contêm erros que se assemelham às referências.

Com o surgimento de abordagens de revisão de código automatizada, é essencial desenvolver métodos de avaliação mais robustos. Estudos mostraram que as métricas tradicionais baseadas em referências ficam aquém quando se trata de tarefas de revisão de código, já que não são projetadas para acomodar a natureza multifacetada dos comentários.

Dimensões de Qualidade no CRScore

O CRScore foca em três principais dimensões de qualidade para sua avaliação:

  1. Concisão: Mede quão eficientemente os comentários transmitem informações necessárias. Os comentários devem ser breves, mas informativos.
  2. Abrangência: Verifica se os comentários transmitem todas as informações essenciais sobre a mudança de código. Uma revisão abrangente deve abordar preocupações e implicações potenciais de forma completa.
  3. Relevância: Avalia se os comentários estão no tópico em relação às mudanças específicas de código sendo revisadas. Os comentários devem se relacionar diretamente com os problemas presentes no código.

Essas dimensões ajudam a criar uma avaliação mais equilibrada das revisões de código, capturando as nuances de qualidade que métricas tradicionais podem ignorar.

Gerando Pseudo-Referências

Uma das características inovadoras do CRScore é a geração de pseudo-referências. Ele cria essas referências empregando LLMs para gerar alegações relacionadas às mudanças de código em dois níveis:

  1. Mudanças de Baixo Nível: Representam alterações específicas feitas no código, como adicionar uma nova função ou modificar uma existente.
  2. Implicações de Alto Nível: Abordam os impactos mais amplos das mudanças, analisando como elas podem afetar a funcionalidade ou o desempenho geral do código.

Para possibilitar essa abordagem, usamos um grande modelo de código aberto que foi ajustado com base em dados relevantes. Também incorporamos ferramentas de análise estática para detectar problemas comuns como variáveis não utilizadas, preocupações de desempenho e erros de formatação. Essa combinação ajuda a garantir que as pseudo-referências geradas sejam precisas e relevantes.

Cálculo de Similaridade

Para calcular a similaridade entre as pseudo-referências geradas e os comentários de revisão, o CRScore usa um modelo de Transformer de Sentenças. Ao calcular similaridades textuais semânticas, ele alinha os comentários com as pseudo-referências com base em quão bem eles abordam os problemas principais.

A abordagem captura o grau em que os comentários se relacionam com as pseudo-referências. Altas pontuações de similaridade indicarão que os comentários da revisão abordam efetivamente os tópicos relevantes.

O CRScore usa um limite para determinar o corte para alta similaridade, garantindo que apenas os comentários mais relevantes contribuam para as pontuações finais. Por meio desse processo, o CRScore avalia as três principais dimensões de qualidade com base em quão bem os comentários interagem com as pseudo-referências geradas.

Avaliando as Dimensões de Qualidade da Revisão

Para garantir que o CRScore capture efetivamente a qualidade das revisões, avaliadores humanos foram recrutados para fornecer julgamentos sobre um conjunto de revisões geradas por múltiplos sistemas. Eles avaliaram as revisões com base nas dimensões de concisão, abrangência e relevância usando uma escala Likert.

Os resultados indicaram que o CRScore é capaz de se alinhar bem com as avaliações humanas. Importante, o CRScore também mostrou uma forte habilidade em classificar os diferentes sistemas de geração de revisão de acordo com seu desempenho, espelhando como os humanos os avaliaram.

Lições Aprendidas e Direções Futuras

Durante o desenvolvimento do CRScore, reconhecemos algumas limitações em nossa abordagem. Embora o pipeline de geração de pseudo-referências geralmente funcione bem, houve instâncias em que gerou menos referências do que o necessário. Isso levou a avaliações sendo pontuadas de forma imprecisa, especialmente em casos onde os comentários eram breves ou incluíam trechos de código.

Para melhorar futuras iterações do CRScore, planejamos expandir nosso pipeline de geração de pseudo-referências. Isso significa adicionar mais componentes que possam detectar vários problemas, como segurança e eficiência do código. Além disso, desenvolver modelos melhores que possam capturar as propriedades únicas do código vai aprimorar nossa capacidade de calcular a similaridade semântica de forma eficaz.

Adicionalmente, nosso estudo atual se concentrou em três principais linguagens de programação: Python, Java e JavaScript. Explorar mais linguagens vai proporcionar uma compreensão mais ampla de como os comentários de revisão de código podem variar e melhorar a adaptabilidade do CRScore.

Em conclusão, o CRScore representa um avanço significativo na avaliação dos comentários de revisão de código. Ao se afastar das métricas tradicionais baseadas em referências, ele aborda desafios importantes enfrentados por sistemas automatizados. Ao focar em dimensões de qualidade alinhadas com o julgamento humano, o CRScore abre caminho para processos de revisão automatizados mais eficazes no desenvolvimento de software. À medida que continuamos a refinar e aprimorar nossa abordagem, o CRScore se destaca como uma ferramenta promissora para futuros avanços na avaliação de revisões de código.

Fonte original

Título: CRScore: Grounding Automated Evaluation of Code Review Comments in Code Claims and Smells

Resumo: The task of automated code review has recently gained a lot of attention from the machine learning community. However, current review comment evaluation metrics rely on comparisons with a human-written reference for a given code change (also called a diff), even though code review is a one-to-many problem like generation and summarization with many "valid reviews" for a diff. To tackle these issues we develop a CRScore - a reference-free metric to measure dimensions of review quality like conciseness, comprehensiveness, and relevance. We design CRScore to evaluate reviews in a way that is grounded in claims and potential issues detected in the code by LLMs and static analyzers. We demonstrate that CRScore can produce valid, fine-grained scores of review quality that have the greatest alignment with human judgment (0.54 Spearman correlation) and are more sensitive than reference-based metrics. We also release a corpus of 2.6k human-annotated review quality scores for machine-generated and GitHub review comments to support the development of automated metrics.

Autores: Atharva Naik, Marcus Alenius, Daniel Fried, Carolyn Rose

Última atualização: 2024-09-29 00:00:00

Idioma: English

Fonte URL: https://arxiv.org/abs/2409.19801

Fonte PDF: https://arxiv.org/pdf/2409.19801

Licença: https://creativecommons.org/licenses/by/4.0/

Alterações: Este resumo foi elaborado com a assistência da AI e pode conter imprecisões. Para obter informações exactas, consulte os documentos originais ligados aqui.

Obrigado ao arxiv pela utilização da sua interoperabilidade de acesso aberto.

Artigos semelhantes