Presentamos CRScore: Una Nueva Forma de Evaluar Revisiones de Código
CRScore ofrece un método de evaluación innovador para valorar los comentarios de revisión de código sin referencias humanas.
Atharva Naik, Marcus Alenius, Daniel Fried, Carolyn Rose
― 10 minilectura
Tabla de contenidos
- Importancia de la Revisión de Código
- Cómo Funciona CRScore
- Validando CRScore
- Comparación con Métricas Tradicionales
- Dimensiones de Calidad en CRScore
- Generación de Pseudo-Referencias
- Cálculo de Similitud
- Evaluando las Dimensiones de Calidad de la Revisión
- Lecciones Aprendidas y Direcciones Futuras
- Fuente original
- Enlaces de referencia
La revisión de código automática ha ganado mucha atención últimamente en el mundo de la tecnología. Esto significa que ahora se usan más máquinas para revisar y mejorar el código escrito por los desarrolladores de software. Una parte importante de este proceso es que las máquinas evalúen los comentarios hechos durante las revisiones de código. Sin embargo, la mayoría de los métodos actuales para juzgar estos comentarios dependen de comparar con los escritos por personas. Esto es un problema porque las revisiones de código pueden tener muchos comentarios válidos para el mismo trozo de código, lo que dificulta que las máquinas midan su calidad de manera justa.
Para abordar estos problemas, presentamos CRScore, una nueva forma de evaluar los comentarios de las revisiones de código que no depende de referencias escritas por humanos. En lugar de eso, CRScore mide la calidad basada en varios aspectos importantes, como la brevedad (qué tan concisos son los comentarios), la exhaustividad (cuánta información proporcionan) y la relevancia (qué tan relacionados están los comentarios con el código).
CRScore funciona al analizar problemas potenciales en el código que pueden ser detectados tanto por modelos de lenguaje grandes (LLMs) como por analizadores de código estáticos. Haciendo esto, CRScore puede proporcionar puntajes válidos y detallados que se alinean bien con los juicios humanos. En nuestros hallazgos, CRScore mostró una buena correlación con las opiniones humanas, obteniendo un 0.54 en una prueba estadística conocida como correlación de Spearman, lo que significa que sus evaluaciones son más sensibles en comparación con los métodos tradicionales que dependen de referencias humanas.
Además de presentar CRScore, también creamos un conjunto de datos que consiste en 2,600 revisiones que han sido calificadas por personas. Este conjunto de datos ayudará en el desarrollo de métricas automatizadas para evaluar la calidad del código.
Importancia de la Revisión de Código
La revisión de código es una práctica crucial para asegurar la calidad del software. Permite a los desarrolladores detectar errores y asegurar que su código cumpla con ciertos estándares. Muchos ingenieros de software prefieren usar herramientas simples y asincrónicas como la función de comentarios de revisión de GitHub, que a menudo es más conveniente que revisiones formales cara a cara. Esta preferencia ha llevado a un mayor interés en automatizar el proceso de generar comentarios en lenguaje natural para las revisiones de código.
Sin embargo, la mayoría de los estándares creados para evaluar la generación de comentarios automatizados aún dependen mucho de métricas tradicionales basadas en referencias como BLEU. Se ha demostrado que estos métodos son menos efectivos, especialmente cuando los comentarios de referencia son de baja calidad o limitados en alcance.
Dado que la revisión de código puede abordar varios tipos de problemas en un trozo de código, tener solo un comentario de referencia puede penalizar injustamente a los sistemas automatizados. Un ejemplo real ilustra esto: para un cambio de código específico, la revisión "real" podría centrarse en un problema de rendimiento, mientras que una revisión generada por una máquina podría resaltar otra preocupación válida, como una condición inusual en el código. A pesar de ser válida, la revisión generada por la máquina recibió un bajo puntaje BLEU porque no compartía suficiente fraseología similar con la referencia.
Para abordar estas limitaciones, desarrollamos CRScore, que es un método de evaluación más efectivo que no depende de referencias preexistentes. CRScore está diseñado para medir la calidad de los comentarios utilizando tres dimensiones principales: exhaustividad, brevedad y relevancia.
Cómo Funciona CRScore
CRScore evalúa los comentarios a través de un proceso de dos pasos. Primero, genera una lista de "Pseudo-referencias" que incluyen posibles afirmaciones y problemas relacionados con el código. Estas no son referencias reales, sino que están informadas por lo que podrían ser comentarios válidos. En segundo lugar, utiliza un método llamado similitud textual semántica (STS) para alinear los comentarios de revisión con las pseudo-referencias generadas.
Para generar estas pseudo-referencias, usamos una combinación de modelos de lenguaje grandes y herramientas de análisis de código. Estas herramientas pueden identificar errores de formato, patrones de diseño problemáticos y otros problemas dentro del código. Al fusionar estos dos métodos, podemos crear pseudo-referencias completas que cubran un rango más amplio de posibles temas de revisión.
Una vez que tenemos las pseudo-referencias, CRScore calcula qué tan bien los comentarios abordan estos temas, basándose en las tres dimensiones de calidad mencionadas anteriormente. La brevedad mide qué tan eficientemente los comentarios transmiten información. La exhaustividad verifica si se incluye toda la información esencial. La relevancia considera si los comentarios están relacionados con el cambio de código.
Validando CRScore
Para que CRScore sea efectivo, es importante que las pseudo-referencias generadas sean precisas y cubran todas las afirmaciones necesarias. Además, el puntaje producido por CRScore debe correlacionarse con los juicios humanos sobre la calidad de la revisión.
Nuestros evaluadores humanos analizaron la calidad de las pseudo-referencias generadas, confirmando que alrededor del 82.6% de ellas eran precisas. Este alto nivel de precisión sugiere que CRScore puede proporcionar evaluaciones confiables alineadas con las preferencias humanas.
Además, recogimos calificaciones para revisiones escritas por diferentes sistemas para validar aún más CRScore. Nuestros hallazgos indicaron que CRScore superó a las métricas tradicionales basadas en referencias en cuanto a su alineación con las evaluaciones humanas.
Comparación con Métricas Tradicionales
Las métricas basadas en referencias como BLEU, ROUGE y BERTScore se han utilizado históricamente para evaluar texto generado, incluyendo los comentarios de revisión de código. Estas métricas calculan qué tan similares son los comentarios generados por la máquina a las referencias escritas por humanos al observar la superposición de palabras.
Sin embargo, la investigación ha demostrado que estas métricas a menudo no reflejan con precisión el juicio humano. Por ejemplo, BLEU se basa principalmente en coincidencias exactas de palabras, lo que puede no capturar el significado completo de las revisiones. De manera similar, aunque BERTScore considera la similitud semántica, aún puede fallar en casos donde los comentarios generados contienen errores que se asemejan a las referencias.
Con el auge de los enfoques de revisión de código automatizada, es esencial desarrollar métodos de evaluación más robustos. Los estudios han demostrado que las métricas tradicionales basadas en referencias se quedan cortas en las tareas de revisión de código, ya que no están diseñadas para acomodar la naturaleza multifacética de los comentarios.
Dimensiones de Calidad en CRScore
CRScore se centra en tres dimensiones principales de calidad para su evaluación:
- Brevity: Esto mide qué tan eficaces son los comentarios al transmitir la información necesaria. Los comentarios deben ser breves pero informativos.
- Exhaustividad: Esto verifica si los comentarios transmiten toda la información esencial sobre el cambio de código. Una revisión exhaustiva debe abordar preocupaciones e implicaciones potenciales a fondo.
- Relevancia: Esto evalúa si los comentarios están relacionados con el cambio de código específico que se está revisando. Los comentarios deben estar directamente relacionados con los problemas presentes en el código.
Estas dimensiones ayudan a crear una evaluación más equilibrada de las revisiones de código, capturando las complejidades de la calidad que las métricas tradicionales podrían pasar por alto.
Generación de Pseudo-Referencias
Una de las características innovadoras de CRScore es la generación de pseudo-referencias. Las crea utilizando LLMs para generar afirmaciones relacionadas con los cambios de código en dos niveles:
- Cambios a Bajo Nivel: Estos representan alteraciones específicas hechas en el código, como agregar una nueva función o modificar una existente.
- Implicaciones a Alto Nivel: Estos abordan los impactos más amplios de los cambios, analizando cómo podrían afectar la funcionalidad o rendimiento general del código.
Para habilitar este enfoque, utilizamos un modelo de código abierto grande que ha sido ajustado en datos relevantes. También incorporamos herramientas de análisis estático para detectar problemas comunes como variables no utilizadas, preocupaciones de rendimiento y errores de formato. Esta combinación ayuda a asegurar que las pseudo-referencias generadas sean precisas y relevantes.
Cálculo de Similitud
Para calcular la similitud entre las pseudo-referencias generadas y los comentarios de revisión, CRScore emplea un modelo de Transformador de Oraciones. Al calcular similitudes textuales semánticas, alinea los comentarios con las pseudo-referencias según qué tan bien abordan los problemas clave.
El enfoque captura el grado en que los comentarios se relacionan con las pseudo-referencias. Altos puntajes de similitud indicarán que los comentarios de revisión abordan efectivamente los temas relevantes.
CRScore utiliza un umbral para determinar el corte de alta similitud, asegurando que solo los comentarios más relevantes contribuyan a los puntajes finales. A través de este proceso, CRScore evalúa las tres dimensiones principales de calidad según qué tan bien los comentarios se relacionan con las pseudo-referencias generadas.
Evaluando las Dimensiones de Calidad de la Revisión
Para asegurar que CRScore capture efectivamente la calidad de las revisiones, se reclutaron evaluadores humanos para proporcionar juicios sobre un conjunto de revisiones generadas por múltiples sistemas. Evaluaron las revisiones en función de las dimensiones de brevedad, exhaustividad y relevancia utilizando una escala de Likert.
Los resultados indicaron que CRScore es capaz de alinearse bien con las evaluaciones humanas. Es importante destacar que CRScore también mostró una fuerte capacidad para clasificar los diferentes sistemas de generación de revisiones según su rendimiento, reflejando cómo los humanos los calificaron.
Lecciones Aprendidas y Direcciones Futuras
A lo largo del desarrollo de CRScore, reconocimos algunas limitaciones en nuestro enfoque. Aunque la pipeline de generación de pseudo-referencias generalmente funciona bien, hubo ocasiones en las que generó menos referencias de las necesarias. Esto llevó a que algunas revisiones se puntuaran de manera inexacta, particularmente en casos donde los comentarios eran breves o incluían fragmentos de código en línea.
Para mejorar futuras iteraciones de CRScore, planeamos expandir nuestra pipeline de generación de pseudo-referencias. Esto significa agregar más componentes que puedan detectar diferentes problemas, como seguridad y eficiencia del código. Además, desarrollar mejores modelos que puedan capturar las propiedades únicas del código mejorará nuestra capacidad para calcular la similitud semántica de manera efectiva.
Además, nuestro estudio actual se centró en tres lenguajes de programación principales: Python, Java y JavaScript. Explorar más lenguajes proporcionará una comprensión más amplia de cómo pueden variar los comentarios de revisión de código y mejorará la adaptabilidad de CRScore.
En conclusión, CRScore representa un avance significativo en la evaluación de comentarios de revisión de código. Al alejarse de las métricas tradicionales basadas en referencias, aborda los desafíos clave que enfrentan los sistemas automatizados. Al enfocarse en dimensiones de calidad alineadas con el juicio humano, CRScore allana el camino para procesos de revisión automatizados más efectivos en el desarrollo de software. A medida que continuamos refinando y mejorando nuestro enfoque, CRScore se presenta como una herramienta prometedora para futuros avances en la evaluación de revisiones de código.
Título: CRScore: Grounding Automated Evaluation of Code Review Comments in Code Claims and Smells
Resumen: 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 actualización: 2024-09-29 00:00:00
Idioma: English
Fuente URL: https://arxiv.org/abs/2409.19801
Fuente PDF: https://arxiv.org/pdf/2409.19801
Licencia: https://creativecommons.org/licenses/by/4.0/
Cambios: Este resumen se ha elaborado con la ayuda de AI y puede contener imprecisiones. Para obtener información precisa, consulte los documentos originales enlazados aquí.
Gracias a arxiv por el uso de su interoperabilidad de acceso abierto.
Enlaces de referencia
- https://www.latex-project.org/help/documentation/encguide.pdf
- https://www.semanticscholar.org/paper/04d64be16fb402f28348faffef484bd419c8bd8f
- https://aclweb.org/anthology/anthology.bib.gz
- https://pypi.org/project/rouge-score/
- https://github.com/whyjay17/Pyscent
- https://pmd.github.io/
- https://jshint.com/
- https://huggingface.co/mixedbread-ai/mxbai-embed-large-v1
- https://arxiv.org/pdf/2208.03133.pdf
- https://arxiv.org/abs/2309.11710
- https://pypi.org/project/pyserini/
- https://pypi.org/project/radon/