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] 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] [4] El objetivo típico de estas técnicas es generar automáticamente los parches correctos para eliminar errores en los programas de software sin provocar la regresión del software . [5]
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 . [6]
Un conjunto de pruebas: los pares de entrada / salida especifican la funcionalidad del programa, posiblemente capturado en aserciones y se puede usar como un oráculo de prueba para impulsar la búsqueda. De hecho, este oráculo se puede dividir entre el oráculo de errores que expone el comportamiento defectuoso y el oráculo de regresión , que encapsula la funcionalidad que debe preservar cualquier método de reparación de programa. Tenga en cuenta que un conjunto de pruebas suele estar 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 en el conjunto de pruebas, pero salidas incorrectas para otras entradas. [7] La existencia de estos parches validados pero incorrectos es un desafío importante para las técnicas de generación y validación. [7] Las técnicas recientes exitosas de corrección automática de errores a menudo se basan en información adicional que no sea el conjunto de pruebas, como la información obtenida de parches humanos anteriores, para identificar aún más los parches correctos entre los parches validados. [8]
Otra forma de especificar el comportamiento esperado es usar especificaciones formales [9] [10] La verificación con especificaciones completas que especifican el comportamiento completo del programa, incluidas las funcionalidades, es menos común porque tales especificaciones no suelen estar disponibles en la práctica y el costo de cálculo de dicha verificación es prohibitivo. Sin embargo, para clases específicas de errores, a menudo se encuentran disponibles especificaciones parciales implícitas. Por ejemplo, existen técnicas específicas de corrección de errores que validan que el programa parcheado ya no puede desencadenar errores de desbordamiento en la misma ruta de ejecución. [11]
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. [6] [7] Esta técnica normalmente 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. [6] [8] [12] [13] Uno de los primeros sistemas de corrección de errores de generación y validación es GenProg. [6] La eficacia de las técnicas de generación y validación sigue siendo controvertida, ya que normalmente no ofrecen garantías de corrección de parches . [7] [14] No obstante, los resultados informados de las últimas técnicas de vanguardia son, en general, 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. [8]
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 de árbol de sintaxis abstracta , o una representación más burda, como operar a nivel de instrucción o 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. [6] [15] Los enfoques recientes utilizan operadores más detallados en el nivel del árbol de sintaxis abstracta para generar un conjunto más diverso de parches candidatos. [8] [13]
Otra forma de generar parches candidatos consiste en utilizar plantillas de arreglos. Las plantillas de corrección suelen ser cambios predefinidos para corregir clases específicas de errores. [16] Ejemplos de plantillas de corrección incluyen insertar una declaración condicional para verificar si el valor de una variable es nulo para corregir la excepción de puntero nulo, o cambiar una constante entera por uno para corregir errores uno por uno. [16] También es posible extraer automáticamente plantillas de arreglos para enfoques de generación y validación. [17] [18]
Muchas técnicas de generación y validación se basan en la información de la redundancia: el código del parche se puede encontrar en otra parte de la aplicación. Esta idea se introdujo en el sistema Genprog, donde dos operadores, la adición y el reemplazo de nodos AST, se basaron en código tomado de otra parte (es decir, agregando un nodo AST existente). Esta idea ha sido validada empíricamente, con dos estudios independientes que han demostrado que una proporción significativa de confirmaciones (3% -17%) se componen de código existente. [19] [20] Más allá del hecho de que el código para reutilizar existe en otro lugar, también se ha demostrado que el contexto de los ingredientes de reparación potenciales es útil: a menudo, el contexto del donante es similar al contexto del receptor. [21] [22]
Basado en síntesis
Existen técnicas de reparación que se basan en la ejecución simbólica. Por ejemplo, Semfix [23] usa ejecución simbólica para extraer una restricción de reparación. Angelix [24] introdujo el concepto de bosque angelical para tratar los parches de varias líneas .
Bajo ciertos supuestos, es posible plantear el problema de reparación como un problema de síntesis. SemFix [23] y Nopol [25] utilizan síntesis basada en componentes. [26] Dynamoth [27] utiliza síntesis dinámica. [28] S3 [29] se basa en síntesis guiada por sintaxis. [30] SearchRepair [31] convierte los parches potenciales en una fórmula SMT y consulta los 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 automáticos de corrección de errores. [8] Un ejemplo de tales técnicas se aprende de parches exitosos pasados de desarrolladores humanos recopilados de repositorios de código abierto en GitHub y SourceForge . [8] Luego usa la información aprendida para reconocer y priorizar los parches potencialmente correctos entre todos los parches candidatos generados. [8] Alternativamente, los parches se pueden extraer directamente de fuentes existentes. Los enfoques de ejemplo incluyen la extracción de parches de aplicaciones de donantes [11] o de sitios web de control de calidad. [32]
SequenceR utiliza el aprendizaje secuencia a secuencia en el código fuente para generar parches de una línea. [33] Define una arquitectura de red neuronal que funciona bien con el código fuente, con el mecanismo de copia que permite producir parches con tokens que no están en el vocabulario aprendido. Esos tokens se toman del código de la clase Java en reparación.
Getafix [34] es un enfoque independiente del lenguaje desarrollado y utilizado en la producción en Facebook . Dada una muestra de confirmaciones de código donde los ingenieros corrigieron cierto tipo de error, aprende patrones de corrección similares a los humanos que se aplican a errores futuros del mismo tipo. Además de utilizar los propios repositorios de código de Facebook como datos de entrenamiento, Getafix aprendió algunas correcciones de los repositorios de código abierto de Java. Cuando se detectan nuevos errores, Getafix aplica sus patrones previamente aprendidos para producir posibles correcciones y las clasifica en segundos. Presenta solo la solución mejor clasificada para la validación final por parte de herramientas o un ingeniero, con el fin de ahorrar recursos y, idealmente, ser tan rápido que aún no se haya dedicado tiempo humano a corregir el mismo error.
Otro
Las técnicas de corrección de errores automáticas dirigidas generan reparaciones para clases específicas de errores, como la excepción de puntero nulo [35] [36] [16] desbordamiento de enteros , [11] desbordamiento de búfer , [11] pérdida de memoria , [37] etc. a menudo utilizan plantillas de corrección empírica para corregir errores en el alcance objetivo. Por ejemplo, inserte una declaración condicional para verificar si el valor de una variable es nulo [16] o inserte declaraciones de desasignación de memoria que faltan. [37] En comparación con las técnicas de generación y validación, las técnicas dirigidas tienden a tener una mejor precisión en la corrección de errores, pero un alcance mucho más reducido. [7] [37]
Usar
Existen múltiples usos de la corrección automática de errores:
- 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 de manera proactiva soluciones a problemas potenciales, sin esperar una acción explícita del desarrollador. [38]
- En un servidor de integración continua: cuando una compilación falla durante la integración continua, se puede intentar una búsqueda de parches tan pronto como la compilación haya fallado. Si la búsqueda tiene éxito, se le proporciona el parche al desarrollador. [39] Cuando se sugiere un parche sintetizado a los desarrolladores como solicitud de extracción, se debe proporcionar una explicación además de los cambios de código (por ejemplo, un título y una descripción de la solicitud de extracción). [40] Un experimento ha demostrado que los desarrolladores de código abierto pueden aceptar los parches generados y fusionarlos en el repositorio de código. [41]
- 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, [42] que repara en código x86, con parches binarios x86. El sistema Itzal [43] es diferente de Clearview: mientras que la búsqueda de reparación ocurre en tiempo de ejecución, en producción, los parches producidos están a nivel de código fuente. El sistema BikiniProxy repara en línea los errores de JavaScript que ocurren en el navegador. [44]
Espacio de búsqueda
En esencia, la corrección automática de errores es una actividad de búsqueda, ya sea de base 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. Se han realizado estudios para comprender la estructura de este espacio de búsqueda. Qi y col. [45] mostró que la función de aptitud original de Genprog no es mejor que la búsqueda aleatoria para impulsar la búsqueda. Martinez y col. [46] exploró el desequilibrio entre las posibles acciones de reparación, mostrando su impacto significativo en la búsqueda. El estudio de Long et al. [47] 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 (ver también la discusión sobre sobreajuste a continuación).
Si uno enumera explícitamente todas las variantes posibles en un algoritmo de reparación, esto define un espacio de diseño para la reparación del programa. [48] Cada variante selecciona un algoritmo involucrado en algún punto del proceso de reparación (por ejemplo, el algoritmo de localización de fallas), o selecciona una heurística específica que produce diferentes parches. Por ejemplo, en el espacio de diseño de la reparación de programas de generación y validación, hay un punto de variación sobre la granularidad de los elementos del programa que se van a modificar: una expresión, una declaración, un bloque, etc. [48]
Limitaciones de la corrección automática de errores
Las técnicas automáticas de corrección de errores que se basan en 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. [7] Un conjunto de pruebas débil puede hacer que las técnicas de generación y validación produzcan parches validados pero incorrectos que tienen efectos negativos, como eliminar funcionalidades deseables, causar pérdidas de memoria e introducir vulnerabilidades de seguridad. [7] Un enfoque posible es ampliar el conjunto de pruebas que fallan generando automáticamente 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 aprende gradualmente a clasificar automáticamente los casos de prueba como aprobados o reprobados y solo involucra al usuario que informa de errores para los casos inciertos. [49]
A veces, en la reparación de programas basada en el conjunto 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". [50] "Sobreajuste" en este contexto se refiere al hecho de que el parche se sobreajusta a las entradas de prueba. Hay diferentes tipos de sobreajuste: [51] 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 fueron mal probadas). Los primeros prototipos para la reparación automática sufrieron mucho por el sobreajuste: en el banco de pruebas Manybugs C, Qi et al. [7] informó que 104/110 de los parches GenProg plausibles estaban sobreajustados; en el banco de pruebas Defects4J Java, Martinez et al. [52] informó que 73/84 parches plausibles como sobreajustados. En el contexto de la reparación basada en síntesis, Le et al. [53] obtuvo más del 80% de parches de sobreajuste.
Una limitación de los sistemas de reparación de generación y validación es la explosión del espacio de búsqueda. [47] Para un programa, hay una gran cantidad de declaraciones para cambiar y para cada declaració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.
La limitación de los enfoques basados en el análisis simbólico [23] [24] es que los programas del mundo real a menudo se convierten en fórmulas increíblemente grandes, especialmente para modificar declaraciones con efectos secundarios .
Benchmarks
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 usa ampliamente para evaluar muchas otras herramientas de corrección de errores para C. [15] [8] [13] [24]
En Java, el principal punto de referencia es Defects4J, inicialmente explorado por Martinez et al., [52] y ahora ampliamente utilizado en la mayoría de los trabajos de investigación sobre reparación de programas para Java. [22] [54] Existen puntos de referencia alternativos, como el punto de referencia Quixbugs, [55] que contiene errores originales para la reparación del programa. [56] Otros puntos de referencia de errores de Java incluyen Bugs.jar, [57] basado en confirmaciones pasadas, y BEARS [58], que es un punto de referencia de fallas de compilación de integración continua.
Herramientas de ejemplo
La corrección automática de errores es un tema de investigación activo en informática. Hay muchas implementaciones de varias técnicas de corrección de errores, especialmente para programas C y Java. Tenga en cuenta 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 uso industrial o no.
C
- ClearView: [42] Una herramienta de generación y validación para generar 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. [7]
- GenProg: [6] [15] Una herramienta fundamental para la corrección de errores de generación y validación. Se ha estudiado extensamente en el contexto del punto de referencia ManyBugs.
- SemFix: [23] La primera herramienta de corrección de errores basada en solucionadores para C.
- CodePhage: [11] La primera herramienta de corrección de errores que transfiere directamente código entre programas para generar parches para el programa C. Tenga en cuenta que aunque genera parches C, puede extraer código de programas binarios sin código fuente. [11]
- LeakFix: [37] Una herramienta que corrige automáticamente las pérdidas de memoria en los programas C.
- Prophet: [8] 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 para reconocer los parches correctos. Se evalúa con el mismo punto de referencia que GenProg y genera parches correctos (es decir, equivalentes a parches humanos) para 18 de 69 casos. [8]
- SearchRepair: [31] Una herramienta para reemplazar código defectuoso usando fragmentos de código de otra parte. Se evalúa en el punto de referencia IntroClass [59] y genera parches de calidad mucho más alta en ese punto de referencia que GenProg, RSRepair y AE.
- Angelix: [24] Una herramienta mejorada de corrección de errores basada en solucionadores. Se evalúa en el punto de referencia GenProg. Para 10 de los 69 casos, genera parches equivalentes a parches humanos.
- Learn2Fix: [49] La primera herramienta de reparación semiautomática "human-in-the-loop". Extiende GenProg para conocer 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: [16] Una herramienta de generación y validación que utiliza un conjunto de plantillas de arreglos definidas manualmente. Un estudio posterior planteó inquietudes sobre la posibilidad de generalizar las plantillas de corrección en PAR. [14]
- NOPOL: [25] Una herramienta basada en solucionadores que se enfoca en modificar declaraciones de condiciones.
- QACrashFix: [32] Una herramienta que corrige errores de bloqueo de Java mediante la extracción de correcciones del sitio web de preguntas y respuestas.
- Astor: [60] Una biblioteca de reparación automática para Java, que contiene jGenProg, una implementación Java de GenProg.
- ARJA: [61] Una herramienta de reparación para Java basada en programación genética multiobjetivo.
- NpeFix: [62] Una herramienta de reparación automática para NullPointerException en Java, disponible en Github .
Otros idiomas
- AutoFixE: [9] Una herramienta de corrección de errores para el lenguaje Eiffel . Se basa en los contratos (es decir, una forma de especificación formal) en los programas Eiffel para validar los parches generados.
- Getafix: [34] Opera puramente en transformaciones AST y por lo tanto requiere solo un analizador y formateador. En Facebook se ha aplicado a Hack , Java y Objective-C .
Propiedad
- DeepCode integra pública y privada GitHub , GitLab y Bitbucket repositorios para identificar código-correcciones y mejorar el software. [63]
Referencias
- ^ Rinard, Martin C. (2008). "Perspectiva técnica Parcheo de errores del programa". Comunicaciones de la ACM . 51 (12): 86. doi : 10.1145 / 1409360.1409381 . S2CID 28629846 .
- ^ Harman, Mark (2010). "Técnicas de parcheo automatizadas". Comunicaciones de la ACM . 53 (5): 108. doi : 10.1145 / 1735223.1735248 . S2CID 9729944 .
- ^ Monperrus, Martín (2018). "Reparación automática de software". Encuestas de computación ACM . 51 (1): 1–24. arXiv : 1807.00515 . doi : 10.1145 / 3105906 . S2CID 216145256 .
- ^ Gazzola, Luca; Micucci, Daniela; Mariani, Leonardo (2019). "Reparación automática de software: una encuesta" (PDF) . Transacciones IEEE sobre ingeniería de software . 45 (1): 34–67. doi : 10.1109 / TSE.2017.2755013 . hdl : 10281/184798 . S2CID 57764123 .
- ^ 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 .
- ^ a b c d e f 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 de 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 .
- ^ a b c d e f g h yo Qi, Zichao; Largo, ventilador; Achour, Sara; Rinard, Martín (2015). "Un análisis de la plausibilidad y corrección del parche para generar y validar sistemas de generació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 .
- ^ a b c d e f g h yo j Largo, ventilador; Rinard, Martín (2016). "Generación automática de parches aprendiendo el 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 .
- ^ a b Pei, Yu; Furia, Carlo A .; Nordio, Martin; Wei, Yi; Meyer, Bertrand; Zeller, Andreas (mayo de 2014). "Fijación automatizada de programas con contratos". Transacciones IEEE sobre ingeniería de software . 40 (5): 427–449. arXiv : 1403.1117 . Código Bibliográfico : 2014arXiv1403.1117P . doi : 10.1109 / TSE.2014.2312918 . S2CID 53302638 .
- ^ "Reparación de estructura de datos basada en contrato utilizando aleación". CiteSeerX 10.1.1.182.4390 . Cite journal requiere
|journal=
( ayuda ) - ^ a b c d e f Sidiroglou, Stelios; Lahtinen, Eric; Largo, ventilador; Rinard, Martín (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 .
- ^ Qi, Yuhua; Mao, Xiaoguang; Lei, Yan; Dai, Ziying; Wang, Chengsong (2014). "La fuerza de la búsqueda aleatoria en la reparación de programas automatizados". Actas de la 36ª Conferencia Internacional de 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 .
- ^ a b c Largo, ventilador; Rinard, Martín (2015). "Reparación de programa por etapas con síntesis de condición". Actas de la décima reunión conjunta de 2015 sobre los fundamentos de la ingeniería de software . 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 .
- ^ a b Monperrus, Martín (2014). "Una revisión crítica de la" generación automática de parches aprendida de parches escritos por humanos ": ensayo sobre la declaración del problema y la evaluación de la reparación automática de software". Actas de la 36ª Conferencia Internacional de Ingeniería de Software . ICSE 2014. Nueva York, Nueva York: ACM. págs. 234–242. arXiv : 1408.2103 . doi : 10.1145 / 2568225.2568324 . ISBN 978-1-4503-2756-5. S2CID 13355761 .
- ^ a b c Le Goues, Claire; Dewey-Vogt, Michael; Forrest, Stephanie; Weimer, Westley (2012). "Un estudio sistemático de reparación de programas automatizados: corrección de 55 de 105 errores por $ 8 cada uno". 2012 34º Congreso Internacional de 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. S2CID 10987936 .
- ^ a b c d e Kim, Dongsun; Nam, Jaechang; Song, Jaewoo; Kim, Sunghun (2013). "Generación automática de parches aprendida de parches escritos por humanos". Actas de la Conferencia Internacional de Ingeniería de Software de 2013 . ICSE '13'. Prensa IEEE. págs. 802–811. ISBN 978-1-4673-3076-3.
- ^ Martínez, Matías; Monperrus, Martin (2018), "Espacio de búsqueda de reparación ultra grande con plantillas extraídas automáticamente: el modo Cardumen de Astor", Ingeniería de software basada en búsquedas , Springer International Publishing, págs. 65–86, arXiv : 1712.03854 , doi : 10.1007 / 978-3-319-99241-9_3 , ISBN 9783319992402, S2CID 49651730
- ^ Koyuncu, Anil; Liu, Kui; Bissyandé, Tegawendé F .; Kim, Dongsun; Klein, Jacques; Monperrus, Martin; Le Traon, Yves (2020). "FixMiner: Minería de patrones de corrección relevantes para la reparación automática del programa". Ingeniería de software empírica . 25 (3): 1980-2024. arXiv : 1810.01791 . doi : 10.1007 / s10664-019-09780-z . S2CID 52915728 .
- ^ Martínez, Matías; Weimer, Westley; Monperrus, Martín (2014). "¿Ya existen los ingredientes de la reparación? Una investigación empírica sobre los supuestos de redundancia de los enfoques de reparación del programa" . Actas de la 36ª Conferencia Internacional de Ingeniería de Software . págs. 492–495. arXiv : 1403.6322 . doi : 10.1145 / 2591062.2591114 . ISBN 9781450327688. S2CID 9533437 .
- ^ Barr, Earl T .; Brun, Yuriy; Devanbu, Premkumar; Harman, Mark; Sarro, Federica (2014). "La hipótesis de la cirugía plástica". Actas del 22 ° Simposio Internacional ACM SIGSOFT sobre Fundamentos de la Ingeniería de Software - FSE 2014 . págs. 306–317. CiteSeerX 10.1.1.646.9678 . doi : 10.1145 / 2635868.2635898 . ISBN 9781450330565. S2CID 14002308 .
- ^ White, Martin; Tufano, Michele; Martínez, Matías; Monperrus, Martin; Poshyvanyk, Denys (2019). "Clasificación y transformación de ingredientes de reparación de programas a través de similitudes de código de aprendizaje profundo". 2019 IEEE 26th International Conference on Software Analysis, Evolution and Reengineering (SANER) . págs. 479–490. arXiv : 1707.04742 . doi : 10.1109 / SANER.2019.8668043 . ISBN 978-1-7281-0591-8. S2CID 13578285 .
- ^ a b 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 del programa". Actas de la 40ª Conferencia Internacional de Ingeniería de Software - ICSE '18 . Nueva York, Nueva York, EE. UU.: ACM Press: 1–11. doi : 10.1145 / 3180155.3180233 . ISBN 9781450356381. S2CID 3374770 .
- ^ a b c d Nguyen, Hoang Duong Thien; Qi, Dawei; Roychoudhury, Abhik; Chandra, Satish (2013). "SemFix: reparación del programa 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.
- ^ a b c d Mechtaev, Sergey; Yi, Jooyong; Roychoudhury, Abhik (2016). "Angelix: síntesis de parche de programa multilínea escalable mediante análisis simbólico". Actas de la 38a Conferencia Internacional sobre Ingeniería de Software, ICSE 2016, Austin, Texas, 14 al 22 de mayo de 2016 . págs. 691–701.
- ^ a b Xuan, Jifeng; Martínez, Matías; DeMarco, Favio; Clément, Maxime; Lamelas, Sebastián; Durieux, Thomas; Le Berre, Daniel; Monperrus, Martín (2016). "Nopol: reparación automática de errores de declaración condicional en programas Java" . Transacciones IEEE sobre ingeniería de software . 43 : 34–55. arXiv : 1811.04211 . doi : 10.1109 / TSE.2016.2560811 . S2CID 15132155 .
- ^ Jha, Susmit; Gulwani, Sumit; Seshia, Sanjit A .; Tiwari, Ashish (1 de mayo de 2010). Síntesis de programas basada en componentes guiada por Oracle . ACM. págs. 215–224. doi : 10.1145 / 1806799.1806833 . ISBN 9781605587196. S2CID 6344783 .
- ^ Durieux, Thomas; Monperrus, Martin (14 de mayo de 2016). "DynaMoth" . DynaMoth: síntesis de código dinámico para la reparación automática de programas (PDF) . págs. 85–91. doi : 10.1145 / 2896921.2896931 . ISBN 9781450341516. S2CID 16025812 .
- ^ 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 9781450327565. S2CID 10656182 .
- ^ Le, Xuan-Bach D .; Chu, Duc-Hiep; Lo, David; Le Goues, Claire; Visser, Willem (21 de agosto de 2017). Actas de la 11a Reunión Conjunta de 2017 sobre Fundamentos de la Ingeniería de Software - ESEC / FSE 2017 . ACM. págs. 593–604. doi : 10.1145 / 3106237.3106309 . ISBN 9781450351058. S2CID 1503790 .
- ^ Alur, Rajeev; Bodik, Rastislav; Juniwal, Garvit; Martin, 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.
- ^ a b 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 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 .
- ^ a b Gao, Qing; Zhang, Hansheng; Wang, Jie; Xiong, Yingfei; Zhang, Lu; Mei, Hong (2015). "Reparación de errores 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. S2CID 2513924 .
- ^ Chen, Zimin; Kommrusch, Steve James; Tufano, Michele; Pouchet, Louis-Noel; Poshyvanyk, Denys; Monperrus, Martín (2019). "SECUENCIADOR: aprendizaje secuencia a secuencia para la reparación del programa de extremo a extremo". Transacciones IEEE sobre ingeniería de software : 1. arXiv : 1901.01808 . doi : 10.1109 / TSE.2019.2940179 . ISSN 0098-5589 . S2CID 57573711 .
- ^ a b Bader, Johannes; Scott, Andrew; Pradel, Michael; Chandra, Satish (10 de octubre de 2019). "Getafix: aprender a corregir errores automáticamente" . Actas del ACM sobre lenguajes de programación . 3 (OOPSLA): 159: 1–159: 27. doi : 10.1145 / 3360585 .
- ^ Largo, ventilador; Sidiroglou-Douskos, Stelios; Rinard, Martín (2014). "Reparación y contención automática de errores en tiempo de ejecución mediante el pastoreo de 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 .
- ^ Dobolyi, Kinga; Weimer, Westley (2008). "Cambio de la semántica de Java para el manejo de excepciones de puntero nulo". 2008 XIX Simposio Internacional de 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 .
- ^ a b c d Gao, Qing; Xiong, Yingfei; Mi, Yaqing; Zhang, Lu; Yang, Weikun; Zhou, Zhaoping; Xie, Bing; Mei, Hong (2015). "Reparación segura de fugas de memoria para programas C". Actas de la 37a 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.
- ^ 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 ACM SIGPLAN . 47 (10): 669, 669–682, 682. CiteSeerX 10.1.1.259.6341 . doi : 10.1145 / 2384616.2384665 . ISSN 0362-1340 . S2CID 5795141 .
- ^ Urli, Simon; Yu, Zhongxing; Seinturier, Lionel; Monperrus, Martin (27 de mayo de 2018). "¿Cómo diseñar un programa bot de reparación?" . ¿Cómo diseñar un robot de reparación de programas ?: ideas del proyecto Repairnator . págs. 95-104. arXiv : 1811.09852 . doi : 10.1145 / 3183519.3183540 . ISBN 9781450356596. S2CID 49237449 .
- ^ Monperrus, Martín (2019). "Contribuciones explicables de bot de software: estudio de caso de correcciones de errores automatizadas". 2019 IEEE / ACM 1st International Workshop on Bots in Software Engineering (BotSE) . págs. 12-15. arXiv : 1905.02597 . Código bibliográfico : 2019arXiv190502597M . doi : 10.1109 / BotSE.2019.00010 . ISBN 978-1-7281-2262-5. S2CID 146808763 .
- ^ Monperrus, Martin; Urli, Simon; Durieux, Thomas; Martínez, Matías; Baudry, Benoit; Seinturier, Lionel (2019). "Repairnator parchea los programas automáticamente" . Ubicuidad . 2019 (julio): 1–12. arXiv : 1910.06247 . Código bibliográfico : 2019arXiv191006247M . doi : 10.1145 / 3349589 . S2CID 198986312 .
- ^ a b Perkins, Jeff H .; et al. (2009). "Parcheo automático de errores en software implementado". Actas del 22º simposio de 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 .
- ^ Durieux, Thomas; Hamadi, Youssef; Monperrus, Martín (2017). "Generación de parches impulsada por la producción" . 2017 IEEE / ACM 39th International Conference on Software Engineering: New Ideas and Emerging Technologies Results Track (ICSE-NIER) . págs. 23-26. arXiv : 1812.04475 . doi : 10.1109 / icse-nier.2017.8 . ISBN 978-1-5386-2675-7. S2CID 7737476 .
- ^ Durieux, Thomas; Hamadi, Youssef; Monperrus, Martín (2018). "Reescritura de HTML y Javascript totalmente automatizada para la construcción de un proxy web autorreparable". 2018 IEEE 29th International Symposium on Software Reliability Engineering (ISSRE) . págs. 1-12. arXiv : 1803.08725 . Código bibliográfico : 2018arXiv180308725D . doi : 10.1109 / ISSRE.2018.00012 . ISBN 978-1-5386-8321-7. S2CID 4268784 .
- ^ 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 automática de programas . ACM. págs. 254-265. doi : 10.1145 / 2568225.2568254 . ISBN 9781450327565. S2CID 14976851 .
- ^ Martínez, Matías; Monperrus, Martin (28 de noviembre de 2013). "Modelos de reparación de software de minería para el razonamiento sobre el espacio de búsqueda de la reparación automática de programas" . Ingeniería de software empírica . 20 (1): 176–205. arXiv : 1311.3414 . Código bibliográfico : 2013arXiv1311.3414M . doi : 10.1007 / s10664-013-9282-8 . ISSN 1382-3256 . S2CID 1676168 .
- ^ a b Largo, ventilador; Rinard, Martín (2016). "Un análisis de los espacios de búsqueda para generar y validar sistemas de generación de parches". Actas de la 38ª Conferencia Internacional de 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 .
- ^ a b Martínez, Matías; Monperrus, Martín (2019). "Astor: exploración del espacio de diseño de reparación de programas de generación y validación más allá de GenProg". Revista de sistemas y software . 151 : 65–80. arXiv : 1802.03365 . doi : 10.1016 / j.jss.2019.01.069 . S2CID 3619320 .
- ^ a b Böhme, Marcel; Geethal, Charaka; Pham, Van-Thuan (2020). "Reparación automática del programa Human-In-The-Loop". Actas de la 13ª Conferencia Internacional sobre Pruebas, Validación y Verificación de Software . ICST 2020. Oporto, Portugal: IEEE. págs. 274-285. arXiv : 1912.07758 . doi : 10.1109 / ICST46399.2020.00036 . ISBN 978-1-7281-5778-8. S2CID 209386817 .
- ^ Smith, Edward K .; Barr, Earl T .; Le Goues, Claire; Brun, Yuriy (2015). "¿Es la cura peor que la enfermedad? Sobreajuste en la reparación del programa automatizado". Actas de la décima reunión conjunta de 2015 sobre los 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. S2CID 6300790 .
- ^ Yu, Zhongxing; Martínez, Matías; Danglot, Benjamin; Durieux, Thomas; Monperrus, Martín (2018). "Aliviar el sobreajuste de parches con generación automática de pruebas: un estudio de viabilidad y efectividad para el sistema de reparación Nopol". Ingeniería de software empírica . 24 : 33–67. arXiv : 1810.10614 . Código bibliográfico : 2018arXiv181010614Y . doi : 10.1007 / s10664-018-9619-4 . ISSN 1382-3256 . S2CID 21659819 .
- ^ a b Martínez, Matías; Durieux, Thomas; Sommerard, Romain; Xuan, Jifeng; Monperrus, Martin (25 de octubre de 2016). "Reparación automática de errores reales en Java: un experimento a gran escala en el conjunto de datos defect4j" . Ingeniería de software empírica . 22 (4): 1936-1964. arXiv : 1811.02429 . doi : 10.1007 / s10664-016-9470-4 . ISSN 1382-3256 . S2CID 24538587 .
- ^ Le, Xuan Bach D .; Thung, Ferdian; Lo, David; Goues, Claire Le (2 de marzo de 2018). "Sobreajuste en reparación de programas automatizados basados 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 .
- ^ Hua, Jinru; Zhang, Mengshi; Wang, Kaiyuan; Khurshid, Sarfraz (2018). "Hacia la reparación práctica del programa con la generación de candidatos bajo demanda". Actas de la 40ª Conferencia Internacional de Ingeniería de Software - ICSE '18 . Nueva York, Nueva York, Estados Unidos: ACM Press: 12–23. doi : 10.1145 / 3180155.3180245 . ISBN 9781450356381. S2CID 49666327 .
- ^ Lin, Derrick; Koppel, James; Chen, Angela; Solar-Lezama, Armando (2017). "QuixBugs: un conjunto de referencia de reparación de programa multilingüe basado en el desafío quixey" . Actas Acompañante de la Conferencia Internacional ACM SIGPLAN 2017 sobre Sistemas, Programación, Lenguajes y Aplicaciones: Software para la Humanidad - SPLASH Companion 2017 . Nueva York, Nueva York, Estados Unidos: ACM Press: 55–56. doi : 10.1145 / 3135932.3135941 . ISBN 9781450355148.
- ^ Vosotros, él; Martínez, Matías; Durieux, Thomas; Monperrus, Martin (2021). "Un estudio exhaustivo de la reparación automática de programas en el benchmark QuixBugs" . Revista de sistemas y software . 171 : 110825. arXiv : 1805.03454 . doi : 10.1016 / j.jss.2020.110825 .
- ^ Saha, Ripon K .; Lyu, Yingjun; Lam, Wing; Yoshida, Hiroaki; Prasad, Mukul R. (2018). "Bugs.jar: un conjunto de datos diverso a gran escala de errores de Java del mundo real" . Actas de la XV Conferencia Internacional sobre Repositorios de Software Minero . MSR '18: 10-13. doi : 10.1145 / 3196398.3196473 . ISBN 9781450357166. S2CID 50770093 .
- ^ Madeiral, Fernanda; Urli, Simon; Maia, Marcelo; Monperrus, Martín (2019). "BEARS: un punto de referencia de errores de Java extensible para estudios de reparación automática de programas". 2019 IEEE 26th International Conference on Software Analysis, Evolution and Reengineering (SANER) . págs. 468–478. arXiv : 1901.06024 . doi : 10.1109 / SANER.2019.8667991 . ISBN 978-1-7281-0591-8. S2CID 58028949 .
- ^ Le Goues, Claire; Holtschulte, Neal; Smith, Edward; Brun, Yuriy; Devanbu, Premkumar; Forrest, Stephanie; Weimer, Westley (2015). "Los muchos errores y los puntos de referencia de la clase de introducción para la reparación automatizada de programas C" . Transacciones IEEE sobre ingeniería de software . 41 (12): 1236-1256. doi : 10.1109 / TSE.2015.2454513 .
- ^ Martínez, Matías; Monperrus, Martín (2016). "ASTOR: una biblioteca de reparación de programas para Java" (PDF) . Actas de ISSTA, Demonstration Track . págs. 441–444. doi : 10.1145 / 2931037.2948705 . ISBN 978-1-4503-4390-9. S2CID 7322935 .
- ^ Yuan, Yuan; Banzhaf, Wolfgang (2020). "ARJA: Reparación automatizada de programas Java mediante programación genética multiobjetivo" . Transacciones IEEE sobre ingeniería de software . 46 (10): 1040–1067. arXiv : 1712.07804 . doi : 10.1109 / TSE.2018.2874648 .
- ^ Durieux, Thomas (2017). "Generación de parches dinámicos 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. S2CID 2736203 .
- ^ "La IA viene por tu trabajo de codificación" . Tamizado . Consultado el 15 de abril de 2019 .
enlaces externos
- conjuntos de datos, herramientas, etc. de program-repair .org , relacionados con la investigación de reparación automatizada de programas.