Articulo de referencia

Corrección automática de errores

La corrección automática de errores es la reparación automática de errores de software sin la intervención de un programador humano. [ 1 ] [ 2 ] [ 3 ] También se la conoce común...

La corrección automática de errores es la reparación automática de errores de software sin la intervención de un programador humano. [ 1 ] [ 2 ] [ 3 ] También se la conoce comúnmente como generación automática de parches , reparación automática de errores o reparación automática de programas . [ 3 ] El objetivo típico de estas técnicas es generar automáticamente parches correctos para eliminar errores en programas de software sin causar regresión del software . [ 4 ]

Especificación

La corrección automática de errores se realiza de acuerdo con una especificación del comportamiento esperado, que puede ser, por ejemplo, una especificación formal o un conjunto de pruebas . [ 5 ]

Un conjunto de pruebas (los pares de entrada/salida especifican la funcionalidad del programa, posiblemente capturada en aserciones) puede usarse como un oráculo de prueba para guiar la búsqueda. Este oráculo puede dividirse entre el oráculo de errores , que expone el comportamiento defectuoso, y el oráculo de regresión , que encapsula la funcionalidad que cualquier método de reparación de programas debe preservar. Cabe señalar que un conjunto de pruebas suele ser incompleto y no cubre todos los casos posibles. Por lo tanto, a menudo es posible que un parche validado produzca salidas esperadas para todas las entradas del conjunto de pruebas, pero salidas incorrectas para otras entradas. [ 6 ] La existencia de tales parches validados pero incorrectos representa un gran desafío para las técnicas de generación y validación. [ 6 ] Las técnicas recientes de corrección automática de errores exitosas a menudo se basan en información adicional, además del conjunto de pruebas, como la información aprendida de parches humanos anteriores, para identificar parches correctos entre los parches validados. [ 7 ]

Otra forma de especificar el comportamiento esperado es mediante especificaciones formales [ 8 ] [ 9 ]. La verificación con respecto a especificaciones completas que describan todo el comportamiento del programa, incluyendo funcionalidades, es menos común porque dichas especificaciones no suelen estar disponibles en la práctica y el costo computacional de dicha verificación es prohibitivo. Sin embargo, para clases específicas de errores, a menudo se dispone de especificaciones parciales implícitas. Por ejemplo, existen técnicas de corrección de errores dirigidas que validan que el programa parcheado ya no pueda provocar errores de desbordamiento en la misma ruta de ejecución. [ 10 ]

Técnicas

Generar y validar

Los enfoques de generación y validación compilan y prueban cada parche candidato para recopilar todos los parches validados que producen las salidas esperadas para todas las entradas en el conjunto de pruebas. [ 5 ] [ 6 ] Esta técnica generalmente comienza con un conjunto de pruebas del programa, es decir, un conjunto de casos de prueba , al menos uno de los cuales expone el error. [ 5 ] [ 7 ] [ 11 ] [ 12 ] Un sistema temprano de corrección de errores de generación y validación es GenProg. [ 5 ] Una suposición clave detrás de GenProg, la suposición de redundancia , es que los ingredientes necesarios para corregir un error ya existen en otra parte del código base; esta suposición ha sido validada empíricamente al cuantificar la redundancia temporal de los cambios de código en proyectos de código abierto. [ 13 ] La efectividad de las técnicas de generación y validación sigue siendo controvertida, porque generalmente no proporcionan garantías de corrección de parches . [ 6 ] Sin embargo, los resultados reportados de las técnicas de vanguardia recientes son generalmente prometedores. Por ejemplo, en 69 errores del mundo real recopilados sistemáticamente en ocho grandes programas de software en C , el sistema de corrección de errores de última generación Prophet genera parches correctos para 18 de los 69 errores. [ 7 ]

Una forma de generar parches candidatos es aplicar operadores de mutación al programa original. Los operadores de mutación manipulan el programa original, potencialmente a través de su representación de árbol de sintaxis abstracta , o una representación más general como operar a nivel de instrucción o de bloque . Los enfoques de mejora genética anteriores operan a nivel de instrucción y realizan operaciones simples de eliminación/reemplazo, como eliminar una instrucción existente o reemplazar una instrucción existente por otra en el mismo archivo fuente. [ 5 ] [ 14 ] Los enfoques recientes utilizan operadores más detallados a nivel de árbol de sintaxis abstracta para generar un conjunto más diverso de parches candidatos. [ 12 ] Cabe destacar que el operador de mutación de eliminación de instrucciones, y más generalmente la eliminación de código, es una estrategia de reparación razonable, o al menos una buena estrategia de localización de fallos. [ 15 ]

Otra forma de generar parches candidatos consiste en usar plantillas de corrección. Las plantillas de corrección suelen ser cambios predefinidos para corregir clases específicas de errores. [ 16 ] Algunos ejemplos de plantillas de corrección incluyen insertar una instrucción condicional para comprobar si el valor de una variable es nulo para corregir una excepción de puntero nulo, o cambiar una constante entera en uno para corregir errores de desfase de uno. [ 16 ]

Basado en síntesis

Existen técnicas de reparación basadas en la ejecución simbólica . Por ejemplo, Semfix [ 17 ] utiliza la ejecución simbólica para extraer una restricción de reparación. Angelix [ 18 ] introdujo el concepto de bosque angelical para abordar parches multilínea. Nopol [ 19 ] utiliza la localización de corrección angelical combinada con la resolución SMT para reparar sentencias condicionales con errores en programas Java.

Bajo ciertas suposiciones, es posible plantear el problema de reparación como un problema de síntesis. [ 20 ] SemFix [ 17 ] utiliza síntesis basada en componentes. [ 21 ] Dynamoth [ 22 ] utiliza síntesis dinámica. [ 23 ] S3 [ 24 ] se basa en síntesis guiada por sintaxis . [ 25 ] SearchRepair [ 26 ] convierte parches potenciales en una fórmula SMT y consulta parches candidatos que permiten que el programa parcheado pase todos los casos de prueba proporcionados.

Basado en datos

Las técnicas de aprendizaje automático pueden mejorar la eficacia de los sistemas de corrección automática de errores. [ 7 ] Un ejemplo de estas técnicas aprende de parches exitosos anteriores de desarrolladores humanos recopilados de repositorios de código abierto en GitHub y SourceForge . [ 7 ] Luego, utiliza la información aprendida para reconocer y priorizar parches potencialmente correctos entre todos los parches candidatos generados. [ 7 ] Enfoques recientes de traducción automática neuronal , como CURE, preentrenan modelos de lenguaje de programación en grandes bases de código y utilizan estrategias de búsqueda conscientes del código para mejorar la calidad de la generación de parches. [ 27 ] Alternativamente, los parches pueden extraerse directamente de fuentes existentes. Algunos ejemplos de enfoques incluyen la extracción de parches de aplicaciones donantes [ 10 ] o de sitios web de control de calidad. [ 28 ]

Getafix [ 29 ] es un enfoque independiente del lenguaje desarrollado y utilizado en producción en Facebook . Dado un conjunto de confirmaciones de código donde los ingenieros corrigieron un tipo específico de error, aprende patrones de corrección similares a los humanos que se aplican a futuros errores del mismo tipo. Además de usar los repositorios de código de Facebook como datos de entrenamiento, Getafix aprendió algunas correcciones de repositorios Java de código abierto . Cuando se detectan nuevos errores, Getafix aplica sus patrones previamente aprendidos para producir correcciones candidatas y las clasifica en segundos. Presenta solo la corrección mejor clasificada para la validación final por parte de herramientas o un ingeniero, con el fin de ahorrar recursos e idealmente ser tan rápido que aún no se haya dedicado tiempo humano a corregir el mismo error.\n\nSequenceR [ 30 ] aplica el aprendizaje secuencia a secuencia directamente a la reparación de programas. Entrenado con parches de código fuente extraídos de repositorios de código abierto, utiliza un mecanismo de copia para manejar el amplio vocabulario de identificadores de código fuente y genera correcciones de una sola línea de extremo a extremo.

RepairAgent [ 31 ] es un agente autónomo basado en un modelo de lenguaje grande para la reparación de programas. El LLM puede intercalar libremente la recopilación de información sobre errores, la recolección de ingredientes de reparación y la validación de correcciones mediante la invocación de un conjunto de herramientas.

Reparación basada en plantillas

Para clases específicas de errores, las técnicas de corrección automática de errores dirigidas utilizan plantillas especializadas:

En comparación con las técnicas de generación y validación, las técnicas basadas en plantillas tienden a tener una mayor precisión en la corrección de errores, pero un alcance mucho más limitado. [ 6 ] [ 34 ]

Usar

La corrección automática de errores tiene múltiples usos:

  • En un entorno de desarrollo: Cuando encuentra un error, el desarrollador activa una función para buscar un parche (por ejemplo, haciendo clic en un botón). Esta búsqueda también puede ocurrir en segundo plano, cuando el IDE busca proactivamente soluciones a problemas potenciales, sin esperar una acción explícita del desarrollador. [ 35 ]
  • En tiempo de ejecución: Cuando se produce un fallo en tiempo de ejecución, se puede buscar y aplicar un parche binario en línea . Un ejemplo de este sistema de reparación es ClearView, [ 36 ] que realiza reparaciones en código x86 con parches binarios x86.

Espacio de búsqueda

En esencia, la corrección automática de errores es una actividad de búsqueda, ya sea deductiva o heurística. El espacio de búsqueda de la corrección automática de errores se compone de todas las ediciones que se pueden realizar en un programa. [ 37 ] Se han realizado estudios para comprender la estructura de este espacio de búsqueda. Qi et al. [ 38 ] demostraron que la función de aptitud original de Genprog no es mejor que la búsqueda aleatoria para dirigir la búsqueda. El estudio de Long et al. [ 39 ] indicó que los parches correctos pueden considerarse dispersos en el espacio de búsqueda y que los parches incorrectos de sobreajuste son mucho más abundantes (véase también la discusión sobre sobreajuste más adelante).

Sobreajuste

A veces, en la reparación de programas basada en conjuntos de pruebas, las herramientas generan parches que pasan el conjunto de pruebas, pero que en realidad son incorrectos, esto se conoce como el problema de "sobreajuste". [ 40 ] "Sobreajuste" en este contexto se refiere al hecho de que el parche se sobreajusta a las entradas de prueba. Hay diferentes tipos de sobreajuste: la corrección incompleta significa que solo se corrigen algunas entradas con errores, la introducción de regresión significa que algunas características que funcionaban previamente se rompen después del parche (porque se probaron mal). Los primeros prototipos para la reparación automática sufrieron mucho de sobreajuste: en el benchmark Manybugs C, Qi et al. [ 6 ] informaron que 104/110 de los parches GenProg plausibles estaban sobreajustados. En el contexto de la reparación basada en síntesis, Le et al. [ 41 ] obtuvieron más del 80% de parches sobreajustados.

Una forma de evitar el sobreajuste es filtrar los parches generados. Esto se puede hacer basándose en el análisis dinámico. [ 42 ] Alternativamente, Tian et al. proponen enfoques heurísticos para evaluar la corrección de los parches. [ 43 ] [ 44 ]

Limitaciones de la corrección automática de errores

Las técnicas de corrección automática de errores que se basan en un conjunto de pruebas no proporcionan garantías de corrección de parches, ya que el conjunto de pruebas es incompleto y no cubre todos los casos. [ 6 ] Un conjunto de pruebas débil puede provocar que las técnicas de generación y validación produzcan parches validados pero incorrectos que tienen efectos negativos como la eliminación de funcionalidades deseables, la aparición de fugas de memoria y la introducción de vulnerabilidades de seguridad. [ 6 ] Un posible enfoque es ampliar el conjunto de pruebas fallido mediante la generación automática de casos de prueba adicionales que luego se etiquetan como aprobados o fallidos. Para minimizar el esfuerzo de etiquetado humano, se puede entrenar un oráculo de pruebas automático que aprenda gradualmente a clasificar automáticamente los casos de prueba como aprobados o fallidos y solo involucre al usuario que informa del error en los casos inciertos. [ 45 ]

Una limitación de los sistemas de reparación de generación y validación es la explosión del espacio de búsqueda. [ 39 ] Para un programa, hay una gran cantidad de instrucciones que modificar y para cada instrucción hay una gran cantidad de modificaciones posibles. Los sistemas de última generación abordan este problema asumiendo que una pequeña modificación es suficiente para corregir un error, lo que resulta en una reducción del espacio de búsqueda. [ 46 ]

La limitación de los enfoques basados ​​en el análisis simbólico [ 17 ] [ 18 ] es que los programas del mundo real a menudo se convierten en fórmulas intratablemente grandes, especialmente para modificar sentencias con efectos secundarios .

Una limitación más amplia es la confianza de los desarrolladores: una encuesta realizada a más de 100 profesionales del software reveló que las herramientas de reparación existentes basadas en conjuntos de pruebas no pueden producir parches de alta calidad dentro de un rango de los 10 mejores y en un plazo aceptable de una hora, y que la confianza de los desarrolladores es un requisito previo para una mayor adopción de la reparación automática de programas. [ 47 ]

Puntos de referencia

Los benchmarks de errores suelen centrarse en un lenguaje de programación específico. [ 48 ] En C, el benchmark Manybugs recopilado por los autores de GenProg contiene 69 defectos del mundo real y se utiliza ampliamente para evaluar muchas otras herramientas de corrección de errores para C. [ 14 ] [ 7 ] [ 12 ] [ 18 ]

En Java , el principal benchmark es Defects4J [ 49 ] , ahora ampliamente utilizado en la mayoría de los artículos de investigación sobre reparación de programas para Java. Un estudio detallado de 395 parches de Defects4J encontró que el 92% modifica un solo archivo, el tamaño medio del parche es de cuatro líneas y nueve patrones de reparación cubren el 95% de los errores. [ 50 ] [ 51 ] [ 52 ] Existen benchmarks alternativos, como el benchmark Quixbugs, [ 53 ] que contiene errores originales y se ha utilizado en la investigación de reparación de programas. [ 54 ] Otros benchmarks de errores de Java incluyen Bugs.jar, [ 55 ] basado en commits anteriores.

Herramientas de ejemplo

La corrección automática de errores es un tema de investigación activo en informática. Existen numerosas implementaciones de diversas técnicas de corrección de errores, especialmente para programas en C y Java. Cabe destacar que la mayoría de estas implementaciones son prototipos de investigación para demostrar sus técnicas; es decir, no está claro si sus implementaciones actuales están listas para su uso industrial. [ 56 ]

do

  • ClearView: [ 36 ] Una herramienta de generación y validación de parches binarios para sistemas desplegados. Se evalúa en 10 casos de vulnerabilidades de seguridad. Un estudio posterior muestra que genera parches correctos para al menos 4 de los 10 casos. [ 6 ]
  • GenProg: [ 5 ] [ 14 ] Una herramienta fundamental para generar y validar la corrección de errores. Ha sido ampliamente estudiada en el contexto del benchmark ManyBugs.
  • SemFix: [ 17 ] La primera herramienta de corrección de errores basada en solucionadores para C.
  • CodePhage: [ 10 ] La primera herramienta de corrección de errores que transfiere directamente código entre programas para generar parches para programas C. Cabe destacar que, si bien genera parches C, puede extraer código de programas binarios sin el código fuente. [ 10 ]
  • LeakFix: [ 34 ] Una herramienta que corrige automáticamente las fugas de memoria en programas C.
  • Prophet: [ 7 ] La primera herramienta de generación y validación que utiliza técnicas de aprendizaje automático para aprender conocimientos útiles de parches humanos anteriores y reconocer parches correctos. Se evalúa en el mismo conjunto de datos de referencia que GenProg y genera parches correctos (es decir, equivalentes a los parches humanos) en 18 de 69 casos. [ 7 ]
  • SearchRepair: [ 26 ] Una herramienta para reemplazar código con errores usando fragmentos de código de otras fuentes. Se evalúa en el benchmark IntroClass [ 57 ] y genera parches de mucha mayor calidad en ese benchmark que GenProg, RSRepair y AE.
  • Angelix: [ 18 ] Una herramienta mejorada de corrección de errores basada en solucionadores. Se evalúa en el benchmark GenProg. Para 10 de los 69 casos, genera parches que son equivalentes a los parches humanos.
  • Learn2Fix: [ 45 ] La primera herramienta de reparación semiautomática con intervención humana . Extiende GenProg para aprender la condición bajo la cual se observa un error semántico mediante consultas sistemáticas al usuario que reporta el error. Solo funciona para programas que aceptan y producen números enteros.

Java

  • PAR: [ 16 ] Una herramienta de generación y validación que utiliza un conjunto de plantillas de corrección definidas manualmente.
  • QACrashFix: [ 28 ] Una herramienta que corrige errores de bloqueo de Java extrayendo correcciones del sitio web de preguntas y respuestas.
  • ARJA: [ 58 ] Una herramienta de reparación para Java basada en programación genética multiobjetivo .
  • NpeFix: [ 59 ] Una herramienta de reparación automática para NullPointerException en Java, disponible en Github .
  • Astor: [ 60 ] Un marco de reparación de programas de generación y validación para Java que implementa múltiples enfoques de reparación, incluido jGenProg.

Otros idiomas

Propiedad

Referencias

  1. Rinard, Martin C. (2008). "Perspectiva técnica: Corrección de errores de programas". Communications of the ACM . 51 (12): 86. doi : 10.1145/1409360.1409381 . S2CID 28629846 . 
  2. Harman, Mark (2010). "Técnicas de parcheo automatizado". Communications of the ACM . 53 (5): 108. doi : 10.1145/1735223.1735248 . S2CID 9729944 . 
  3. 1 2 Gazzola, Luca; Micucci, Daniela; Mariani, Leonardo (2019). "Reparación automática de software: una revisión" (PDF) . IEEE Transactions on Software Engineering . 45 (1): 34– 67. Bibcode : 2019ITSEn..45...34G . doi : 10.1109/TSE.2017.2755013 . hdl : 10281/184798 . S2CID 57764123 . 
  4. Tan, Shin Hwei; Roychoudhury, Abhik (2015). "relifix: Reparación automatizada de regresiones de software". 2015 IEEE/ACM 37.ª Conferencia Internacional IEEE sobre Ingeniería de Software . IEEE. págs. 471–482 . doi : 10.1109/ICSE.2015.65 . ISBN  978-1-4799-1934-5. S2CID 17125466 . 
  5. 1 2 3 4 5 6 Weimer, Westley; Nguyen, ThanhVu; Le Goues, Claire ; Forrest, Stephanie (2009). "Búsqueda automática de parches mediante programación genética". Actas de la 31.ª Conferencia Internacional sobre Ingeniería de Software . IEEE. págs. 364–374 . CiteSeerX 10.1.1.147.8995 . doi : 10.1109/ICSE.2009.5070536 . ISBN   978-1-4244-3453-4. S2CID 1706697 . 
  6. 1 2 3 4 5 6 7 8 9 Qi, Zichao; Long, Fan; Achour, Sara; Rinard, Martin (2015). "Análisis de la plausibilidad y corrección de parches para sistemas de generación y validación de parches". Actas del Simposio Internacional de 2015 sobre Pruebas y Análisis de Software . ACM. CiteSeerX 10.1.1.696.5616 . doi : 10.1145/2771783.2771791 . ISBN  978-1-4503-3620-8. S2CID 6845282 . 
  7. 1 2 3 4 5 6 7 8 9 Long, Fan; Rinard, Martin (2016). "Generación automática de parches mediante el aprendizaje del código correcto". Actas del 43.º Simposio Anual ACM SIGPLAN-SIGACT sobre Principios de Lenguajes de Programación . ACM. págs. 298–312 . doi : 10.1145/2837614.2837617 . ISBN  978-1-4503-3549-2. S2CID 6091588 . 
  8. 1 2 Pei, Yu; Furia, Carlo A.; Nordio, Martin; Wei, Yi; Meyer, Bertrand; Zeller, Andreas (mayo de 2014). "Corrección automatizada de programas con contratos". IEEE Transactions on Software Engineering . 40 (5): 427– 449. arXiv : 1403.1117 . Bibcode : 2014arXiv1403.1117P . doi : 10.1109/TSE.2014.2312918 . S2CID 53302638 . 
  9. Nokhbeh Zaeem, Razieh; Khurshid, Sarfraz (2010). "Reparación de estructuras de datos basada en contratos usando Alloy". ECOOP 2010 – Programación orientada a objetos . Lecture Notes in Computer Science. Vol. 6183. pp. 577–598 . doi : 10.1007/978-3-642-14107-2_27 . ISBN   978-3-642-14106-5.
  10. 1 2 3 4 5 6 Sidiroglou, Stelios; Lahtinen, Eric; Long, Fan; Rinard, Martin (2015). "Eliminación automática de errores mediante transferencia de código de múltiples aplicaciones". Actas de la 36.ª Conferencia ACM SIGPLAN sobre diseño e implementación de lenguajes de programación .
  11. Qi, Yuhua; Mao, Xiaoguang; Lei, Yan; Dai, Ziying; Wang, Chengsong (2014). "La fuerza de la búsqueda aleatoria en la reparación automatizada de programas". Actas de la 36.ª Conferencia Internacional sobre Ingeniería de Software . ICSE 2014. Austin, Texas: ACM. págs. 254–265 . doi : 10.1145/2568225.2568254 . ISBN  978-1-4503-2756-5. S2CID 14976851 . 
  12. 1 2 3 Long, Fan; Rinard, Martin (2015). "Reparación de programas por etapas con síntesis de condiciones". Actas de la 10.ª Reunión Conjunta sobre Fundamentos de Ingeniería de Software de 2015. ESEC/FSE 2015. Bérgamo, Italia: ACM. págs. 166–178 . CiteSeerX 10.1.1.696.9059 . doi : 10.1145/2786805.2786811 . ISBN   978-1-4503-3675-8. S2CID 5987616 . 
  13. Martínez, Matías; Weimer, Westley; Monperrus, Martín (2014). "¿Existen ya los ingredientes para la reparación? Una investigación empírica sobre los supuestos de redundancia de los enfoques de reparación de programas". Actas complementarias de la 36.ª Conferencia Internacional sobre Ingeniería de Software . págs. 492–495 . arXiv : 1403.6322 . doi : 10.1145/2591062.2591114 . ISBN  978-1-4503-2768-8. Consultado el 13 de junio de 2026 .
  14. 1 2 3 Le Goues, Claire ; Dewey-Vogt, Michael; Forrest, Stephanie; Weimer, Westley (2012). "Un estudio sistemático de la reparación automatizada de programas: corrección de 55 de 105 errores por 8 dólares cada uno". 34.ª Conferencia Internacional de Ingeniería de Software (ICSE) de 2012. IEEE. págs. 3-13 . CiteSeerX 10.1.1.661.9690 . doi : 10.1109/ICSE.2012.6227211 . ISBN   978-1-4673-1067-3. S2CID 10987936 . 
  15. Qi, Zichao; Long, Fan; Achour, Sara; Rinard, Martin (13 de julio de 2015). "Análisis de la plausibilidad y corrección de parches para sistemas de generación y validación de parches" . Actas del Simposio Internacional de 2015 sobre Pruebas y Análisis de Software . Nueva York, NY, EE. UU.: ACM. págs. 24–36 . doi : 10.1145/2771783.2771791 . hdl : 1721.1/101586 . ISBN  978-1-4503-3620-8. S2CID 6845282 . 
  16. 1 2 3 4 Kim, Dongsun; Nam, Jaechang; Song, Jaewoo; Kim, Sunghun (2013). "Generación automática de parches aprendida a partir de parches escritos por humanos". Actas de la Conferencia Internacional de Ingeniería de Software de 2013. ICSE '13'. IEEE Press. págs. 802–811 . ISBN  978-1-4673-3076-3.
  17. 1 2 3 4 Nguyen, Hoang Duong Thien; Qi, Dawei; Roychoudhury, Abhik; Chandra, Satish (2013). "SemFix: Reparación de programas mediante análisis semántico". Actas de la Conferencia Internacional de Ingeniería de Software de 2013. ICSE '13'. San Francisco, California: IEEE Press. págs. 772–781 . ISBN  978-1-4673-3076-3.
  18. 1 2 3 4 Mechtaev, Sergey; Yi, Jooyong; Roychoudhury, Abhik (2016). "Angelix: síntesis escalable de parches de programas multilínea mediante análisis simbólico". Actas de la 38.ª Conferencia Internacional sobre Ingeniería de Software, ICSE 2016, Austin, Texas, 14-22 de mayo de 2016. págs. 691–701 . 
  19. Xuan, Jifeng; Martinez, Matias; DeMarco, Favio; Clement, Maxime; Marcote, Sebastian Lamelas; Durieux, Thomas; Le Berre, Daniel; Monperrus, Martin (2017). "Nopol: Reparación automática de errores en sentencias condicionales en programas Java". IEEE Transactions on Software Engineering . 43 (1): 34– 55. arXiv : 1811.04211 . Bibcode : 2017ITSEn..43...34X . doi : 10.1109/TSE.2016.2560811 . ISSN 1939-3520 . 
  20. ^ Xiong, Yingfei; Wang, Jie; Yan, Runfa; Zhang, Jiachen; Han, Shi; Huang, pandilla; Zhang, Lu (mayo de 2017). "Síntesis de condiciones precisas para la reparación de programas". 2017 IEEE/ACM 39ª Conferencia Internacional sobre Ingeniería de Software (ICSE) . págs. 416– 426. doi : 10.1109/icse.2017.45 . ISBN  978-1-5386-3868-2.
  21. ^ Jha, admitir; Gulwani, Sumit; Seshia, Sanjit A.; Tiwari, Ashish (1 de mayo de 2010). Síntesis de programas basados ​​en componentes guiados por Oracle . ACM. págs. 215–224 . doi : 10.1145/1806799.1806833 . ISBN  978-1-60558-719-6. S2CID 6344783 . 
  22. Durieux, Thomas; Monperrus, Martin (2016). «DynaMoth: Síntesis dinámica de código para la reparación automática de programas» . Actas del 11.º Taller Internacional sobre Automatización de Pruebas de Software . págs. 85–91 . Bibcode : 2016iwas.conf...20D . doi : 10.1145/2896921.2896931 . ISBN  978-1-4503-4151-6.
  23. Galenson, Joel; Reames, Philip; Bodik, Rastislav; Hartmann, Björn; Sen, Koushik (31 de mayo de 2014). CodeHint: síntesis dinámica e interactiva de fragmentos de código . ACM. págs. 653–663 . doi : 10.1145/2568225.2568250 . ISBN  978-1-4503-2756-5. S2CID 10656182 . 
  24. Le, Xuan-Bach D.; Chu, Duc-Hiep; He aquí David; Le Goues, Claire ; Visser, Willem (21 de agosto de 2017). Actas de la 11.ª reunión conjunta de 2017 sobre los fundamentos de la ingeniería de software - ESEC/FSE 2017 . ACM. págs. 593– 604. doi : 10.1145/3106237.3106309 . ISBN  978-1-4503-5105-8. S2CID 1503790 . 
  25. ^ Alur, Rajeev; Bodik, Rastislav; Juniwal, Garvit; Martín, Milo MK; Raghothaman, Mukund; Seshia, Sanjit A.; Singh, Rishabh; Solar-Lezama, Armando; Torlak, Emina ; Udupa, Abhishek (2013). "Síntesis guiada por sintaxis". 2013 Métodos formales en diseño asistido por computadora . págs. 1– 8. CiteSeerX 10.1.1.377.2829 . doi : 10.1109/fmcad.2013.6679385 . ISBN   978-0-9835678-3-7.
  26. 1 2 Ke, Yalin; Stolee, Kathryn; Le Goues, Claire ; Brun, Yuriy (2015). "Reparación de programas con búsqueda semántica de código". Actas de la 30.ª Conferencia Internacional IEEE/ACM de 2015 sobre Ingeniería de Software Automatizada . ASE 2015. Lincoln, Nebraska: ACM. págs. 295–306 . doi : 10.1109/ASE.2015.60 . ISBN  978-1-5090-0025-8. S2CID 16361458 . 
  27. Jiang, Nan; Lutellier, Thibaud; Tan, Lin (2021). "CURE: Traducción automática neuronal con reconocimiento de código para la reparación automática de programas". 2021 IEEE/ACM 43.ª Conferencia Internacional sobre Ingeniería de Software (ICSE) . págs. 1161–1173 . arXiv : 2103.00073 . doi : 10.1109 /icse43902.2021.00107 . ISBN  978-1-6654-0296-5.
  28. 1 2 Gao, Qing; Zhang, Hansheng; Wang, Jie; Xiong, Yingfei; Zhang, Lu; Mei, Hong (2015). "Solucionar errores recurrentes mediante el análisis de sitios de preguntas y respuestas". 2015 30ª Conferencia Internacional IEEE/ACM sobre Ingeniería de Software Automatizada (ASE) . IEEE. págs. 307– 318. doi : 10.1109/ASE.2015.81 . ISBN  978-1-5090-0025-8. S2CID 2513924 . 
  29. 1 2 Bader, Johannes; Scott, Andrew; Pradel, Michael; Chandra, Satish (10 de octubre de 2019). "Getafix: aprender a corregir errores automáticamente" . Actas de la ACM sobre lenguajes de programación . 3 (OOPSLA): 159:1–159:27. arXiv : 1902.06111 . doi : 10.1145/3360585 .
  30. Chen, Zimin; Kommrusch, Steve James; Tufano, Michele; Pouchet, Louis-Noel; Poshyvanyk, Denys; Monperrus, Martin (2021). "SequenceR: Aprendizaje secuencia a secuencia para la reparación de programas de extremo a extremo". IEEE Transactions on Software Engineering . 47 (9): 1943. arXiv : 1901.01808 . Bibcode : 2021ITSEn..47.1943C . doi : 10.1109/tse.2019.2940179 .
  31. Bouzenia, Islem; Devanbu, Premkumar; Pradel, Michael (2025). "RepairAgent: Un agente autónomo basado en LLM para la reparación de programas". 2025 IEEE/ACM 47.ª Conferencia Internacional sobre Ingeniería de Software (ICSE) . pp. 2188–2200 . doi : 10.1109/ICSE55347.2025.00157 . ISBN  979-8-3315-0569-1.
  32. Long, Fan; Sidiroglou-Douskos, Stelios; Rinard, Martin (2014). «Reparación y contención automática de errores en tiempo de ejecución mediante la gestión de la recuperación». Actas de la 35.ª Conferencia ACM SIGPLAN sobre diseño e implementación de lenguajes de programación . PLDI '14'. Nueva York, Nueva York: ACM. págs. 227–238 . doi : 10.1145/2594291.2594337 . ISBN  978-1-4503-2784-8. S2CID 6252501 . 
  33. Dobolyi, Kinga; Weimer, Westley (2008). "Cambiar la semántica de Java para manejar excepciones de puntero nulo". 2008 19º Simposio Internacional sobre Ingeniería de Confiabilidad de Software (ISSRE) . págs. 47–56 . CiteSeerX 10.1.1.147.6158 . doi : 10.1109/ISSRE.2008.59 . S2CID 1454939 .   
  34. 1 2 3 Gao, Qing; Xiong, Yingfei; Mi, Yaqing; Zhang, Lu; Yang, Weikun; Zhou, Zhaoping; Xie, Bing; Mei, Hong (2015). "Corrección segura de fugas de memoria para programas en C". Actas de la 37.ª Conferencia Internacional sobre Ingeniería de Software – Volumen 1. ICSE '15'. Piscataway, Nueva Jersey: IEEE Press. págs. 459–470 . ISBN  978-1-4799-1934-5.
  35. Muşlu, Kıvanç; Brun, Yuriy; Holmes, Reid; Ernst, Michael D.; Notkin, David; Muşlu, Kıvanç; Brun, Yuriy; Holmes, Reid; Ernst, Michael D.; Notkin, David (19 de octubre de 2012). "Análisis especulativo de las recomendaciones del entorno de desarrollo integrado, Análisis especulativo de las recomendaciones del entorno de desarrollo integrado". ACM SIGPLAN Notices . 47 (10): 669, 669– 682, 682. CiteSeerX 10.1.1.259.6341 . doi : 10.1145/2384616.2384665 . ISSN 0362-1340 . S2CID 5795141 .   
  36. 1 2 Perkins, Jeff H.; et al. (2009). "Corrección automática de errores en software implementado". Actas del 22.º simposio ACM SIGOPS sobre principios de sistemas operativos . ACM. págs. 87–102 . CiteSeerX 10.1.1.157.5877 . doi : 10.1145/1629575.1629585 . ISBN    978-1-60558-752-3. S2CID 7597529 . 
  37. Le Goues, Claire; Nguyen, ThanhVu; Forrest, Stephanie; Weimer, Westley (2012). "GenProg: Un método genérico para la reparación automática de software". IEEE Transactions on Software Engineering . 38 (1): 54– 72. Bibcode : 2012ITSEn..38...54L . doi : 10.1109/TSE.2011.104 . ISSN 2326-3881 . 
  38. Qi, Yuhua; Mao, Xiaoguang; Lei, Yan; Dai, Ziying; Wang, Chengsong (31 de mayo de 2014). "La fuerza de la búsqueda aleatoria en la reparación automatizada de programas" . ACM. págs. 254–265 . doi : 10.1145/2568225.2568254 . ISBN  978-1-4503-2756-5. S2CID 14976851 . 
  39. 1 2 Long, Fan; Rinard, Martin (2016). "Análisis de los espacios de búsqueda para sistemas de generación de parches de generación y validación". Actas de la 38.ª Conferencia Internacional sobre Ingeniería de Software . ICSE '16. Nueva York, Nueva York: ACM. págs. 702–713 . arXiv : 1602.05643 . doi : 10.1145/2884781.2884872 . hdl : 1721.1/113656 . ISBN  978-1-4503-3900-1. S2CID 7426809 . 
  40. Smith, Edward K.; Barr, Earl T.; Le Goues, Claire ; Brun, Yuriy (2015). "¿Es peor la cura que la enfermedad? Sobreajuste en la reparación automatizada de programas". Actas de la 10.ª Reunión Conjunta sobre Fundamentos de la Ingeniería de Software de 2015. ESEC/FSE 2015. Nueva York, Nueva York: ACM. págs. 532–543 . doi : 10.1145/2786805.2786825 . ISBN  978-1-4503-3675-8. S2CID 6300790 . 
  41. Le, Xuan Bach D.; Thung, Ferdian; Lo, David; Goues, Claire Le (2018-03-02). "Sobreajuste en la reparación automatizada de programas basada en semántica" . Ingeniería de software empírica . 23 (5): 3007– 3033. doi : 10.1007/s10664-017-9577-2 . ISSN 1382-3256 . S2CID 3635768 .  
  42. Xin, Qi; Reiss, Steven P. (10 de julio de 2017). «Identificación de parches sobreajustados a conjuntos de pruebas mediante la generación de casos de prueba» . Actas del 26.º Simposio Internacional ACM SIGSOFT sobre Pruebas y Análisis de Software . Nueva York, NY, EE. UU.: ACM. págs. 226–236 . doi : 10.1145/3092703.3092718 . ISBN  978-1-4503-5076-1. S2CID 20562134 . 
  43. Tian, ​​Haoye; Liu, Kui; Kaboré, Abdoul Kader; Koyuncu, Anil; Li, Li; Klein, Jacques; Bissyandé, Tegawendé F. (27 de enero de 2021). «Evaluación del aprendizaje de representaciones de cambios de código para predecir la corrección de parches en la reparación de programas» . Actas de la 35.ª Conferencia Internacional IEEE/ACM sobre Ingeniería de Software Automatizada . Association for Computing Machinery. págs. 981–992 . doi : 10.1145/3324884.3416532 . ISBN  978-1-4503-6768-4.
  44. Tian, ​​Haoye; Tang, Xunzhu; Habib, Andrew; Wang, Shangwen; Liu, Kui; Xia, Xin; Klein, Jacques; BissyandÉ, TegawendÉ F. (5 de enero de 2023). "¿Es este cambio la respuesta a ese problema?: Correlación de descripciones de errores y cambios de código para evaluar la corrección de parches" . Actas de la 37.ª Conferencia Internacional IEEE/ACM sobre Ingeniería de Software Automatizada . Association for Computing Machinery. págs. 1-13 . arXiv : 2208.04125 . doi : 10.1145/3551349.3556914 . ISBN  978-1-4503-9475-8. S2CID 251403079 . 
  45. 1 2 Böhme, Marcel; Geethal, Charaka; Pham, Van-Thuan (2020). "Reparación automática de programas con intervención humana". Actas de la 13.ª Conferencia Internacional sobre Pruebas, Validación y Verificación de Software . ICST 2020. Oporto, Portugal: IEEE. pp. 274–285 . arXiv : 1912.07758 . doi : 10.1109/ICST46399.2020.00036 . ISBN  978-1-7281-5778-8. S2CID 209386817 . 
  46. ^ Yang, Deheng; Liu, Kui; Kim, Dongsun; Koyuncu, Anil; Kim, Kisub; Tian, ​​Haoye; Lei, Yan; Mao, Xiaoguang; Klein, Jacques; Bissyandé, Tegawendé F. (2021). "¿Dónde estaban los ingredientes de reparación de los errores de Defects4j?". Ingeniería de software empírica . 26 (5) 122. doi : 10.1007/s10664-021-10003-7 .
  47. Noller, Yannic; Shariffdeen, Ridwan; Gao, Xiang; Roychoudhury, Abhik (2022). «Problemas de mejora de la confianza en la reparación de programas». Actas de la 44.ª Conferencia Internacional sobre Ingeniería de Software . págs. 2228–2240 . Bibcode : 2022icse.conf..191N . doi : 10.1145/3510003.3510040 . ISBN  978-1-4503-9221-1.
  48. Durieux, Thomas; Madeiral, Fernanda; Martinez, Matias; Abreu, Rui (2019). «Revisión empírica de herramientas de reparación de programas Java: Un experimento a gran escala con 2141 errores y 23 551 intentos de reparación» . Actas de la 27.ª Reunión Conjunta de la ACM de 2019 sobre la Conferencia Europea de Ingeniería de Software y el Simposio sobre los Fundamentos de la Ingeniería de Software . págs. 302–313 . doi : 10.1145/3338906.3338911 . ISBN  978-1-4503-5572-8. Consultado el 1 de junio de 2026 .
  49. Just, René; Jalali, Darioush; Ernst, Michael D. (2014). «Defects4J: Una base de datos de fallos existentes para permitir estudios de pruebas controladas para programas Java» . Actas del Simposio Internacional de 2014 sobre Pruebas y Análisis de Software . págs. 437–440 . doi : 10.1145/2610384.2628055 . ISBN  978-1-4503-2645-2. Consultado el 28 de mayo de 2026 .
  50. Sobreira, Victor; Durieux, Thomas; Madeiral, Fernanda; Monperrus, Martin; de Almeida Maia, Marcelo (2018). "Disección de un conjunto de datos de errores: Anatomía de 395 parches de Defects4J". 2018 IEEE 25th International Conference on Software Analysis, Evolution and Reengineering (SANER) . pp. 130–140 . arXiv : 1801.06393 . Bibcode : 2018sane.conf...21S . doi : 10.1109/saner.2018.8330203 . ISBN  978-1-5386-4969-5.
  51. Wen, Ming; Chen, Junjie; Wu, Rongxin; Hao, Dan ; Cheung, Shing-Chi (2018). «Generación de parches con conocimiento del contexto para una mejor reparación automatizada de programas» . Actas de la 40.ª Conferencia Internacional sobre Ingeniería de Software . Nueva York, Nueva York, EE. UU.: ACM Press. págs. 1–11 . doi : 10.1145/3180155.3180233 . ISBN  978-1-4503-5638-1. S2CID 3374770 . 
  52. Hua, Jinru; Zhang, Mengshi; Wang, Kaiyuan; Khurshid, Sarfraz (2018). «Hacia la reparación práctica de programas con generación de candidatos bajo demanda». Actas de la 40.ª Conferencia Internacional sobre Ingeniería de Software . Nueva York, Nueva York, EE. UU.: ACM Press. págs. 12–23 . doi : 10.1145/3180155.3180245 . ISBN  978-1-4503-5638-1. S2CID 49666327 . 
  53. Lin, Derrick; Koppel, James; Chen, Angela; Solar-Lezama, Armando (2017). «QuixBugs: Un conjunto de pruebas de rendimiento para la reparación de programas multilingües basado en el desafío Quixey». Actas complementarias de la Conferencia Internacional ACM SIGPLAN de 2017 sobre Sistemas, Programación, Lenguajes y Aplicaciones: Software para la Humanidad . Nueva York, Nueva York, EE. UU.: ACM Press. págs. 55–56 . doi : 10.1145/3135932.3135941 . ISBN  978-1-4503-5514-8.
  54. Ye, He; Martinez, Matias; Durieux, Thomas; Monperrus, Martin (enero de 2021). "Un estudio exhaustivo de la reparación automática de programas en el benchmark QuixBugs". Journal of Systems and Software . 171 110825. arXiv : 1805.03454 . doi : 10.1016/j.jss.2020.110825 . ISSN 0164-1212 . 
  55. Saha, Ripon K.; Lyu, Yingjun; Lam, Wing; Yoshida, Hiroaki; Prasad, Mukul R. (2018). "Bugs.jar" . Actas de la 15.ª Conferencia Internacional sobre Minería de Repositorios de Software . MSR '18. págs. 10–13 . doi : 10.1145/3196398.3196473 . ISBN  978-1-4503-5716-6. S2CID 50770093 . 
  56. Meem, Fairuz Nawer; Smith, Justin; Johnson, Brittany (abril de 2024). «Explorando experiencias con la reparación automatizada de programas en la práctica» . Actas de la 46.ª Conferencia Internacional IEEE/ACM sobre Ingeniería de Software . págs. 1-11 . doi : 10.1145/3597503.3639182 . ISBN  979-8-4007-0217-4. Consultado el 19 de mayo de 2026 .
  57. Le Goues, Claire ; Holtschulte, Neal; Smith, Edward; Brun, Yuriy; Devanbu, Premkumar; Forrest, Stephanie; Weimer, Westley (2015). "The Many Bugs and Intro Class Benchmarks for Automated Repair of C Programs" . IEEE Transactions on Software Engineering . 41 (12): 1236–1256 . Bibcode : 2015ITSEn..41.1236L . doi : 10.1109/TSE.2015.2454513 .
  58. Yuan, Yuan; Banzhaf, Wolfgang (2020). "ARJA: Reparación automatizada de programas Java mediante programación genética multiobjetivo". IEEE Transactions on Software Engineering . 46 (10): 1040– 1067. arXiv : 1712.07804 . Bibcode : 2020ITSEn..46.1040Y . doi : 10.1109/TSE.2018.2874648 . S2CID 25222219 . 
  59. Durieux, Thomas (2017). "Generación dinámica de parches para excepciones de puntero nulo mediante metaprogramación". 2017 IEEE 24.ª Conferencia Internacional sobre Análisis, Evolución y Reingeniería de Software (SANER) . págs. 349–358 . arXiv : 1812.00409 . doi : 10.1109/SANER.2017.7884635 . ISBN  978-1-5090-5501-2. S2CID 2736203 . 
  60. Martínez, Matías; Monperrus, Martín (2019). "Astor: Explorando el espacio de diseño de la reparación de programas de generación y validación más allá de GenProg". Journal of Systems and Software . 151 : 65–80 . arXiv : 1802.03365 . doi : 10.1016/j.jss.2019.01.069 .
  61. "La IA viene a por tu trabajo de programación" . Sifted . 13 de marzo de 2019. Recuperado el 15 de abril de 2019 .
  62. Thompson, David (13 de septiembre de 2019). "Ishraq Khan, revolucionando el panorama de la programación en 2021" . TechTimes . Consultado el 15 de octubre de 2022 .
  • Los conjuntos de datos, herramientas, etc., de program-repair.org están relacionados con la investigación sobre la reparación automatizada de programas .
Obtenido de " https://en.wikipedia.org/w/index.php?title=Automatic_bug_fixing&oldid=1363263010 "