Simple Science

Ciencia de vanguardia explicada de forma sencilla

# Informática# Ingeniería del software

Optimización de la gestión de advertencias en el desarrollo de software

Automatizar la clasificación de advertencias ayuda a los desarrolladores a centrarse en problemas reales.

― 7 minilectura


Gestión de advertenciasGestión de advertenciasen código de softwaremanejan las advertencias de código.Simplificando cómo los desarrolladores
Tabla de contenidos

Las herramientas de análisis estático ayudan a los desarrolladores a encontrar problemas en el software revisando el código. Estas herramientas pueden generar muchas Advertencias, pero a menudo, muchas de estas advertencias son sobre problemas que ya se han solucionado en versiones anteriores. Esto puede ser confuso y hacer perder tiempo, impidiendo que los desarrolladores aborden nuevos problemas en la última versión.

Este artículo analiza los desafíos de emparejar advertencias de diferentes versiones de software y cómo ciertas herramientas pueden ayudar a automatizar este proceso, facilitando a los desarrolladores centrarse en nuevos problemas.

El Problema con las Advertencias

Cuando se desarrolla software, a menudo pasa por muchas actualizaciones. Con cada actualización, las herramientas de análisis estático pueden informar numerosas advertencias. Sin embargo, muchas de estas advertencias pueden no ser relevantes para la versión actual. Podrían ser sobre problemas que ya se han reconocido y solucionado en lanzamientos anteriores. Como resultado, se vuelve difícil para los desarrolladores determinar qué advertencias deben abordar en la nueva versión.

Algunas advertencias pueden estar conectadas al mismo problema que en versiones anteriores, mientras que otras pueden indicar que un problema se ha resuelto. Además, algunas advertencias podrían referirse a nuevos problemas. Este desorden puede llevar a los desarrolladores a desperdiciar su tiempo, centrándose en advertencias irrelevantes en lugar de en problemas reales que necesitan atención.

Cascading de Advertencias: ¿Qué es?

El cascading de advertencias es un método para clasificar advertencias de diferentes versiones de software. El objetivo es clasificar las advertencias en varias categorías:

  1. Advertencias que hablan del mismo problema en ambas versiones, lo que significa que no necesitan ser abordadas nuevamente.
  2. Advertencias de la versión anterior que se han solucionado en la nueva versión, permitiendo a los desarrolladores confirmar la solución.
  3. Advertencias que están relacionadas con cambios realizados en la versión anterior pero que están conectadas a nuevas advertencias en la versión actual.
  4. Advertencias que solo aparecen en la nueva versión, que necesitan ser revisadas de cerca ya que apuntan a nuevos problemas.

El cascading de advertencias puede simplificar el proceso de identificar qué advertencias necesitan atención inmediata y cuáles pueden ser ignoradas.

El Papel de las Herramientas de Diferenciación

Para hacer el cascading de advertencias de manera eficiente, ciertas herramientas pueden ayudar a emparejar líneas de código entre dos versiones de un programa. Hay diferentes técnicas utilizadas en estas herramientas de diferenciación:

Diferencia Basada en Texto

Las herramientas textuales comparan líneas de código en función del texto que contienen. Estas herramientas usan algoritmos para encontrar similitudes y diferencias entre dos archivos que representan el código fuente del software. Una herramienta textual muy utilizada es la utilidad diff de Unix.

Diferencia Basada en Sintaxis

Las herramientas basadas en sintaxis analizan el árbol de sintaxis abstracta (AST) de un programa. El AST representa la estructura del código, lo que facilita la identificación de cambios que pueden no ser evidentes a través de una simple comparación de texto. Una de estas herramientas es GumTree, que empareja nodos en el AST para determinar cómo ha cambiado el código.

Diferencia Basada en Grafo de Flujo de Control

Las herramientas de grafo de flujo de control (CFG) se centran en el flujo y la estructura de la lógica del programa. Analizan cómo diferentes secciones de código interactúan entre sí. Hydrogen es un ejemplo de una herramienta basada en CFG que ayuda a identificar relaciones entre versiones de programas en función de sus flujos de control.

Nuestro Estudio

En este artículo, examinamos tres técnicas de diferenciación para comprender mejor su efectividad en el cascading de advertencias. Evaluamos las experiencias de los usuarios con estas herramientas y pusimos a prueba su rendimiento utilizando pares de programas de referencia y proyectos del mundo real.

Herramientas que Analizamos

Aplicamos las siguientes herramientas para nuestro análisis:

  1. SCALe: Esta es una herramienta de diferencia textual utilizada para comparar advertencias generadas por múltiples herramientas de análisis estático.
  2. GumTree: Esta herramienta de diferenciación sintáctica analiza ASTs para emparejar cambios de código.
  3. Hydrogen: Esta herramienta utiliza grafos de flujo de control para identificar relaciones entre versiones de programas.

Configuración Experimental

Diseñamos nuestro estudio para comparar qué tan bien se desempeña cada herramienta al hacer cascading de advertencias. Recolectamos datos de 96 pares de programas de referencia conocidos por tener errores y soluciones, así como 12 pares de programas de código abierto del mundo real.

Resultados y Hallazgos

Nuestros resultados indicaron tendencias interesantes entre las tres herramientas. Hydrogen tuvo un desempeño ligeramente mejor que las demás en las pruebas de referencia, logrando hacer cascading de advertencias en la mayoría de los casos.

Rendimiento de Hydrogen

Hydrogen fue particularmente efectivo para identificar advertencias relacionadas y emparejarlas con éxito entre versiones. También mostró un éxito considerable al verificar cuándo se había solucionado un error en la nueva versión.

Rendimiento de SCALe

SCALe, aunque útil, tenía limitaciones en su capacidad para hacer cascading de advertencias. Tenía dificultades con los casos en que el texto había cambiado pero la semántica del código subyacente no. También tuvo un mal rendimiento respecto a las advertencias de errores corregidos, a menudo fallando en hacer cascading correctamente.

Rendimiento de GumTree

GumTree fue única en su capacidad para eludir ciertos cambios textuales al centrarse en la estructura del código. Sin embargo, enfrentó desafíos para emparejar correctamente las advertencias cuando había directivas de macros involucradas en el código que afectaban cómo se analizaba el AST.

Desafíos con el Cascading

Hacer cascading de advertencias no está exento de desafíos. Los principales problemas que encontramos incluyen:

  1. Cambios Textuales: Ajustes menores en el texto pueden llevar a una confusión significativa. Por ejemplo, los desarrolladores pueden agregar nuevas líneas que cambian la posición de otras líneas, dificultando que las herramientas emparejen advertencias con precisión.

  2. Directivas de Macros: El código que utiliza macros puede confundir a las herramientas, especialmente en enfoques basados en sintaxis donde la estructura del código puede cambiar significativamente de versión a versión.

  3. Refactorización: Los cambios en los nombres de variables o funciones debido a la refactorización pueden oscurecer la relación entre advertencias en diferentes versiones.

Importancia de un Cascading Preciso

Un cascading de advertencias preciso es crucial para mantener la calidad del software. Cuando los desarrolladores pueden identificar eficazmente las advertencias relevantes, pueden centrar sus esfuerzos en solucionar problemas genuinos en lugar de perder tiempo en falsos positivos.

Al analizar los pros y los contras de diferentes herramientas de cascading, los desarrolladores pueden tomar decisiones informadas sobre qué enfoque se adapta mejor a sus necesidades, mejorando sus prácticas de codificación en general.

Trabajo Futuro

A medida que el desarrollo de software continúa evolucionando, también deben hacerlo las herramientas utilizadas para garantizar la calidad del código. Los esfuerzos futuros podrían explorar la integración de más herramientas de análisis estático como CodeSonar, que han mostrado promesas en la detección de varios tipos de problemas.

Mejorar las técnicas de cascading existentes y desarrollar nuevas herramientas que puedan manejar de manera eficiente bases de código en evolución será esencial para ayudar a los desarrolladores a gestionar advertencias de manera efectiva.

Conclusión

En resumen, el cascading de advertencias representa un aspecto vital del desarrollo de software moderno. Al utilizar diferentes herramientas de diferenciación, los desarrolladores pueden navegar mejor por el mundo de las advertencias de análisis estático y mejorar la calidad de su código. A medida que el panorama del desarrollo de software continúa cambiando, la investigación continua y los ajustes en las herramientas serán necesarios para mantenerse relevantes y efectivos.

Fuente original

Título: A Study of Static Warning Cascading Tools (Experience Paper)

Resumen: Static analysis is widely used for software assurance. However, static analysis tools can report an overwhelming number of warnings, many of which are false positives. Applying static analysis to a new version, a large number of warnings can be only relevant to the old version. Inspecting these warnings is a waste of time and can prevent developers from finding the new bugs in the new version. In this paper, we report the challenges of cascading warnings generated from two versions of programs. We investigated program differencing tools and extend them to perform warning cascading automatically. Specifically, we used textual based diff tool, namely SCALe, abstract syntax tree (AST) based diff tool, namely GumTree, and control flow graph (CFG) based diff tool, namely Hydrogen. We reported our experience of applying these tools and hopefully our findings can provide developers understandings of pros and cons of each approach. In our evaluation, we used 96 pairs of benchmark programs for which we know ground-truth bugs and fixes as well as 12 pairs of real-world open-source projects. Our tools and data are available at https: //github.com/WarningCas/WarningCascading_Data.

Autores: Xiuyuan Guo, Ashwin Kallingal Joshy, Benjamin Steenhoek, Wei Le, Lori Flynn

Última actualización: 2023-05-03 00:00:00

Idioma: English

Fuente URL: https://arxiv.org/abs/2305.02515

Fuente PDF: https://arxiv.org/pdf/2305.02515

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.

Más de autores

Artículos similares