Corrección automática de errores

Reparación automática de errores de software

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 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 afirmaciones) puede usarse como un oráculo de prueba para impulsar la búsqueda. De hecho, 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 del programa debe preservar. Tenga en cuenta que un conjunto de pruebas normalmente está incompleto y no cubre todos los casos posibles. Por lo tanto, a menudo es posible que un parche validado produzca resultados esperados para todas las entradas en el conjunto de pruebas, pero resultados incorrectos para otras entradas. [6] La existencia de tales parches validados pero incorrectos es un desafío importante para las técnicas de generación y validación. [6] Las técnicas recientes y exitosas de corrección automática de errores a menudo se basan en información adicional distinta a la del conjunto de pruebas, como la información aprendida de parches humanos anteriores, para identificar aún más los parches correctos entre los parches validados. [7]

Otra forma de especificar el comportamiento esperado es utilizar especificaciones formales [8] [9]. La verificación con especificaciones completas que especifican el comportamiento completo del programa, incluidas las funcionalidades, es menos común porque dichas especificaciones normalmente no están 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 hay especificaciones parciales implícitas disponibles. Por ejemplo, existen técnicas de corrección de errores específicas que validan que el programa parcheado ya no puede generar 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 los resultados esperados para todas las entradas en el conjunto de pruebas. [5] [6] Dicha 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] Uno de los primeros sistemas de generación y validación de corrección de errores es GenProg. [5] La efectividad de las técnicas de generación y validación sigue siendo controvertida, porque generalmente no brindan garantías de corrección de parches. [6] Sin embargo, los resultados informados de las técnicas de última generación recientes son generalmente prometedores. Por ejemplo, en 69 errores del mundo real recopilados sistemáticamente en ocho grandes programas de software 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 en el programa original. Los operadores de mutación manipulan el programa original, potencialmente a través de su representación en árbol de sintaxis abstracta , o una representación de grano más grueso como operar a nivel de declaración o a nivel de bloque . Los enfoques de mejora genética anteriores operan a nivel de declaración y llevan a cabo operaciones simples de eliminación/reemplazo como eliminar una declaración existente o reemplazar una declaración existente con otra declaración en el mismo archivo fuente. [5] [13] Los enfoques recientes utilizan operadores de grano más fino 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 declaración, 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 fallas. [14]

Otra forma de generar parches candidatos consiste en utilizar plantillas de corrección. Las plantillas de corrección suelen ser cambios predefinidos para corregir clases específicas de errores. [15] Algunos ejemplos de plantillas de corrección incluyen insertar una declaració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 por uno para corregir errores con valores desfasados ​​por uno. [15]

Basado en síntesis

Existen técnicas de reparación que se basan en la ejecución simbólica. Por ejemplo, Semfix [16] utiliza la ejecución simbólica para extraer una restricción de reparación. Angelix [17] introdujo el concepto de bosque angelical para tratar parches multilínea.

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

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] Alternativamente, los parches se pueden extraer directamente de fuentes existentes. Los enfoques de ejemplo incluyen la extracción de parches de aplicaciones donantes [10] o de sitios web de control de calidad. [23]

Getafix [24] es un enfoque independiente del lenguaje desarrollado y utilizado en producción en Facebook . Dada una muestra de confirmaciones de código donde los ingenieros corrigieron un cierto tipo 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 propios 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 no se haya gastado tiempo humano en corregir el mismo error, todavía.

Reparación basada en plantillas

Para clases específicas de errores, las técnicas de corrección automática de errores específicas 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] [27]

Usar

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

  • En un entorno de desarrollo: cuando se encuentra con 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 realizarse en segundo plano, cuando el IDE busca de forma proactiva soluciones a problemas potenciales, sin esperar una acción explícita del desarrollador. [28]
  • En tiempo de ejecución: cuando ocurre una falla en tiempo de ejecución, se puede buscar un parche binario y aplicarlo en línea . Un ejemplo de un sistema de reparación de este tipo es ClearView, [29] 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 de tipo deductivo o heurístico. El espacio de búsqueda de corrección automática de errores está compuesto por todas las modificaciones que se pueden hacer a un programa. Se han realizado estudios para comprender la estructura de este espacio de búsqueda. Qi et al. [30] demostraron que la función de aptitud original de Genprog no es mejor que la búsqueda aleatoria para impulsar la búsqueda. El estudio de Long et al. [31] indicó que los parches correctos pueden considerarse escasos en el espacio de búsqueda y que los parches de sobreajuste incorrectos son mucho más abundantes (véase también la discusión sobre sobreajuste a continuación).

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 en realidad son incorrectos; esto se conoce como el problema de "sobreajuste". [32] "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 reparación incompleta significa que solo se corrigen algunas entradas con errores, la introducción de regresión significa que algunas características que funcionaban anteriormente 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. [33] obtuvieron más del 80% de parches sobreajustados.

Una forma de evitar el sobreajuste es filtrar los parches generados. Esto se puede hacer con base en un análisis dinámico. [34] Alternativamente, Tian et al. proponen enfoques heurísticos para evaluar la corrección de los parches. [35] [36]

Limitaciones de la corrección automática de errores

Las técnicas de corrección automática de errores que dependen de un conjunto de pruebas no ofrecen garantías de corrección de parches, porque el conjunto de pruebas está 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 eliminar funcionalidades deseables, causar fugas de memoria e introducir vulnerabilidades de seguridad. [6] Un enfoque posible es amplificar el conjunto de pruebas fallidas mediante la generación automática de más casos de prueba que luego se etiquetan como aprobados o reprobados. Para minimizar el esfuerzo de etiquetado humano, se puede entrenar un oráculo de prueba automático que aprenda gradualmente a clasificar automáticamente los casos de prueba como aprobados o reprobados y solo interactúe con el usuario que informa de errores en los casos inciertos. [37]

Una limitación de los sistemas de reparación de generación y validación es la explosión del espacio de búsqueda. [31] En un programa, hay una gran cantidad de instrucciones que se pueden 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 da como resultado una reducción del espacio de búsqueda.

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

Puntos de referencia

Los puntos de referencia de errores suelen centrarse en un lenguaje de programación específico. En C, el punto de referencia 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. [13] [7] [12] [17]

En Java , el principal punto de referencia es Defects4J, que ahora se utiliza ampliamente en la mayoría de los artículos de investigación sobre reparación de programas para Java. [38] [39] Existen puntos de referencia alternativos, como el punto de referencia Quixbugs, [40] que contiene errores originales para la reparación de programas. Otros puntos de referencia de errores de Java incluyen Bugs.jar, [41] basado en confirmaciones anteriores.

Herramientas de ejemplo

La corrección automática de errores es un tema de investigación activo en informática. Existen muchas implementaciones de diversas técnicas de corrección de errores, especialmente para programas en C y Java. Cabe señalar 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 o no.

do

  • ClearView: [29] Una herramienta de generación y validación de parches binarios para sistemas implementados. Se evalúa en 10 casos de vulnerabilidad de seguridad. Un estudio posterior muestra que genera parches correctos para al menos 4 de los 10 casos. [6]
  • GenProg: [5] [13] Una herramienta fundamental para generar y validar errores y corregirlos. Se ha estudiado ampliamente en el contexto del benchmark ManyBugs.
  • SemFix: [16] La primera herramienta de corrección de errores basada en solucionador para C.
  • CodePhage: [10] La primera herramienta de corrección de errores que transfiere código directamente entre programas para generar parches para programas C. Tenga en cuenta que, aunque genera parches C, puede extraer código de programas binarios sin código fuente. [10]
  • LeakFix: [27] Una herramienta que repara automáticamente pérdidas de memoria en programas C.
  • Profeta: [7] La ​​primera herramienta de generación y validación que utiliza técnicas de aprendizaje automático para aprender conocimiento útil de parches humanos anteriores para reconocer parches correctos. Se evalúa en el mismo punto de referencia que GenProg y genera parches correctos (es decir, equivalentes a parches humanos) para 18 de 69 casos. [7]
  • SearchRepair: [22] Una herramienta para reemplazar código defectuoso utilizando fragmentos de código de otros lugares. Se evalúa en el banco de pruebas IntroClass [42] y genera parches de mucha mayor calidad en ese banco de pruebas que GenProg, RSRepair y AE.
  • Angelix: [17] Una herramienta mejorada de corrección de errores basada en solucionadores. Se evalúa en el banco de pruebas GenProg. En 10 de los 69 casos, genera parches equivalentes a los parches humanos.
  • Learn2Fix: [37] 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 informa el error. Solo funciona para programas que toman y producen números enteros.

Java

  • PAR: [15] Una herramienta de generación y validación que utiliza un conjunto de plantillas de corrección definidas manualmente.
  • QACrashFix: [23] Una herramienta que corrige errores de bloqueo de Java extrayendo correcciones del sitio web de preguntas y respuestas.
  • ARJA: [43] Una herramienta de reparación para Java basada en programación genética multiobjetivo.
  • NpeFix: [44] Una herramienta de reparación automática para NullPointerException en Java, disponible en Github.

Otros idiomas

Propiedad

  • Kodezi utiliza datos de código abierto de repositorios de GitHub , Stack Overflow y modelos privados entrenados para analizar el código, brindar soluciones y descripciones sobre los errores de codificación al instante. [46]

Referencias

  1. ^ Rinard, Martin C. (2008). "Perspectiva técnica. Corrección de errores de programas". Comunicaciones de la ACM . 51 (12): 86. doi :10.1145/1409360.1409381. S2CID  28629846.
  2. ^ Harman, Mark (2010). "Técnicas de aplicación de parches automatizada". Comunicaciones de la ACM . 53 (5): 108. doi :10.1145/1735223.1735248. S2CID  9729944.
  3. ^ ab Gazzola, Luca; Micucci, Daniela; Mariani, Leonardo (2019). "Reparación automática de software: una encuesta" (PDF) . IEEE Transactions on Software Engineering . 45 (1): 34–67. 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 37th IEEE International Conference on Software Engineering . IEEE. págs. 471–482. doi :10.1109/ICSE.2015.65. ISBN . 978-1-4799-1934-5.S2CID 17125466  .
  5. ^ abcdef 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. pp. 364–374. CiteSeerX 10.1.1.147.8995 . doi :10.1109/ICSE.2009.5070536. ISBN .  978-1-4244-3453-4.S2CID 1706697  .
  6. ^ abcdefghi Qi, Zichao; Long, Fan; Achour, Sara; Rinard, Martin (2015). "Análisis de la verosimilitud 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.S2CID6845282  .
  7. ^ abcdefghi 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.S2CID6091588  .
  8. ^ ab Pei, Yu; Furia, Carlo A.; Nordio, Martin; Wei, Yi; Meyer, Bertrand; Zeller, Andreas (mayo de 2014). "Corrección automática de programas con contratos". IEEE Transactions on Software Engineering . 40 (5): 427–449. arXiv : 1403.1117 . Código Bibliográfico :2014arXiv1403.1117P. doi :10.1109/TSE.2014.2312918. S2CID  53302638.
  9. ^ "Reparación de estructuras de datos basada en contratos mediante Alloy". CiteSeerX 10.1.1.182.4390 .  {{cite journal}}: Requiere citar revista |journal=( ayuda )
  10. ^ abcdef Sidiroglou, Stelios; Lahtinen, Eric; Long, Fan; Rinard, Martin (2015). "Eliminación automática de errores mediante transferencia de código entre múltiples aplicaciones". Actas de la 36.ª Conferencia SIGPLAN de la ACM 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.S2CID14976851  .
  12. ^ abc Long, Fan; Rinard, Martin (2015). "Reparación de programas por etapas con síntesis de condiciones". Actas de la 10.ª reunión conjunta de 2015 sobre fundamentos de la ingeniería de software . ESEC/FSE 2015. Bérgamo, Italia: ACM. pp. 166–178. CiteSeerX 10.1.1.696.9059 . doi :10.1145/2786805.2786811. ISBN.  978-1-4503-3675-8.S2CID 5987616  .
  13. ^ abc Le Goues, Claire; Dewey-Vogt, Michael; Forrest, Stephanie; Weimer, Westley (2012). "Un estudio sistemático de la reparación automatizada de programas: reparación de 55 de 105 errores por 8 dólares cada uno". 2012 34.ª Conferencia internacional sobre ingeniería de software (ICSE) . IEEE. págs. 3–13. CiteSeerX 10.1.1.661.9690 . doi :10.1109/ICSE.2012.6227211. ISBN .  978-1-4673-1067-3.S2CID10987936  .
  14. ^ Qi, Zichao; Long, Fan; Achour, Sara; Rinard, Martin (13 de julio de 2015). "Análisis de la verosimilitud 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 9781450336208.S2CID6845282  .
  15. ^ abcd 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 2013 sobre ingeniería de software . ICSE '13'. IEEE Press. págs. 802–811. ISBN 978-1-4673-3076-3.
  16. ^ abcd 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 2013 sobre ingeniería de software . ICSE '13'. San Francisco, California: IEEE Press. págs. 772–781. ISBN 978-1-4673-3076-3.
  17. ^ abcd Mechtaev, Sergey; Yi, Jooyong; Roychoudhury, Abhik (2016). "Angelix: síntesis de parches de programas multilínea escalables 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.
  18. ^ 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 9781605587196.S2CID6344783  .
  19. ^ 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. pp. 653–663. doi :10.1145/2568225.2568250. ISBN . 9781450327565.S2CID10656182  .
  20. ^ 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 sobre Fundamentos de la Ingeniería de Software de 2017 - ESEC/FSE 2017. ACM. págs. 593–604. doi :10.1145/3106237.3106309. ISBN 9781450351058.S2CID 1503790  .
  21. ^ 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  9780983567837.
  22. ^ ab Ke, Yalin; Stolee, Kathryn; Le Goues, Claire; Brun, Yuriy (2015). "Reparación de programas con búsqueda de código semántico". Actas de la 30.ª Conferencia internacional IEEE/ACM sobre ingeniería de software automatizada de 2015. ASE 2015. Lincoln, Nebraska: ACM. págs. 295–306. doi :10.1109/ASE.2015.60. ISBN 978-1-5090-0025-8. Número de identificación  S2C16361458.
  23. ^ ab Gao, Qing; Zhang, Hansheng; Wang, Jie; Xiong, Yingfei; Zhang, Lu; Mei, Hong (2015). "Corrección de errores de fallas recurrentes mediante el análisis de sitios de preguntas y respuestas". 2015 30th IEEE/ACM International Conference on Automated Software Engineering (ASE) . IEEE. págs. 307–318. doi :10.1109/ASE.2015.81. ISBN 978-1-5090-0025-8. Número de identificación del sujeto  2513924.
  24. ^ ab Bader, Johannes; Scott, Andrew; Pradel, Michael; Chandra, Satish (10 de octubre de 2019). "Getafix: aprendiendo 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 .
  25. ^ Long, Fan; Sidiroglou-Douskos, Stelios; Rinard, Martin (2014). "Reparación y contención automática de errores en tiempo de ejecución mediante el control de recuperación". Actas de la 35.ª Conferencia SIGPLAN de la ACM 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.S2CID6252501  .
  26. ^ Dobolyi, Kinga; Weimer, Westley (2008). "Cambio de la semántica de Java para el manejo de excepciones de puntero nulo". 2008 19.° Simposio Internacional sobre Ingeniería de Confiabilidad de Software (ISSRE) . pp. 47–56. CiteSeerX 10.1.1.147.6158 . doi :10.1109/ISSRE.2008.59. S2CID  1454939. 
  27. ^ abc 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 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.
  28. ^ 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". Avisos SIGPLAN de la ACM . 47 (10): 669, 669–682, 682. CiteSeerX 10.1.1.259.6341 . doi :10.1145/2384616.2384665. ISSN  0362-1340. S2CID  5795141. 
  29. ^ ab Perkins, Jeff H.; et al. (2009). "Corregir automáticamente errores en el software implementado". Actas del 22.º simposio de la 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  .
  30. ^ 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 9781450327565.S2CID14976851  .
  31. ^ ab Long, Fan; Rinard, Martin (2016). "Análisis de los espacios de búsqueda para generar y validar sistemas de generación de parches". 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. Número de identificación del sujeto  7426809.
  32. ^ Smith, Edward K.; Barr, Earl T.; Le Goues, Claire; Brun, Yuriy (2015). "¿Es el remedio peor que la enfermedad? Sobreajuste en la reparación automatizada de programas". Actas de la 10.ª reunión conjunta de 2015 sobre fundamentos de la ingeniería de software . ESEC/FSE 2015. Nueva York, Nueva York: ACM. págs. 532–543. doi :10.1145/2786805.2786825. ISBN . 978-1-4503-3675-8. Número de identificación del sujeto  6300790.
  33. ^ Le, Xuan Bach D.; Thung, Ferdian; Lo, David; Goues, Claire Le (2 de marzo de 2018). "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.
  34. ^ Xin, Qi; Reiss, Steven P. (10 de julio de 2017). "Identificación de parches sobreajustados a la suite 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. Número de identificación del sujeto  20562134.
  35. ^ 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 la representación de los 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 9781450367684.
  36. ^ 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 . 9781450394758. Número de identificación del sujeto  251403079.
  37. ^ ab 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. Porto, Portugal: IEEE. págs. 274–285. arXiv : 1912.07758 . doi :10.1109/ICST46399.2020.00036. ISBN 978-1-7281-5778-8. Número de identificación del sujeto  209386817.
  38. ^ Wen, Ming; Chen, Junjie; Wu, Rongxin; Hao, Dan; Cheung, Shing-Chi (2018). "Generación de parches sensibles al 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 9781450356381. Número de identificación del sujeto  3374770.
  39. ^ Hua, Jinru; Zhang, Mengshi; Wang, Kaiyuan; Khurshid, Sarfraz (2018). "Hacia la reparación práctica de programas con generación de candidatos a pedido". 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 . 9781450356381.S2CID 49666327  .
  40. ^ Lin, Derrick; Koppel, James; Chen, Angela; Solar-Lezama, Armando (2017). "QuixBugs: un conjunto de referencia de reparación de programas multilingües basado en el desafío quixey". Proceedings Companion of the 2017 ACM SIGPLAN International Conference on Systems, Programming, Languages, and Applications: Software for Humanity . Nueva York, Nueva York, EE. UU.: ACM Press. págs. 55–56. doi : 10.1145/3135932.3135941 . ISBN 9781450355148.
  41. ^ 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 9781450357166. Número de identificación del sujeto  50770093.
  42. ^ Le Goues, Claire; Holtschulte, Neal; Smith, Edward; Brun, Yuriy; Devanbu, Premkumar; Forrest, Stephanie; Weimer, Westley (2015). "Los numerosos errores y puntos de referencia de la clase Intro para la reparación automatizada de programas C". IEEE Transactions on Software Engineering . 41 (12): 1236–1256. doi : 10.1109/TSE.2015.2454513 .
  43. ^ 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 . doi :10.1109/TSE.2018.2874648. S2CID  25222219.
  44. ^ Durieux, Thomas (2017). "Generación dinámica de parches para excepciones de puntero nulo mediante metaprogramación". 2017 IEEE 24th International Conference on Software Analysis, Evolution and Reengineering (SANER) . págs. 349–358. arXiv : 1812.00409 . doi :10.1109/SANER.2017.7884635. ISBN 978-1-5090-5501-2. Número de identificación del sujeto  2736203.
  45. ^ "La IA viene a por tu trabajo de codificación". Sifted . 13 de marzo de 2019 . Consultado el 15 de abril de 2019 .
  46. ^ "Ishraq Khan, revolucionando la escena de la programación en 2021". TechTimes . 13 de septiembre de 2019 . Consultado el 15 de octubre de 2022 .
  • program-repair.org conjuntos de datos, herramientas, etc., relacionados con la investigación de reparación automatizada de programas.
Obtenido de "https://es.wikipedia.org/w/index.php?title=Corrección_automática_de_errores&oldid=1231441094"