Please enable JavaScript.
Coggle requires JavaScript to display documents.
Reparación automática de código (Preguntas orientadoras (PO5 ¿Bajo que…
Reparación automática de código
Conceptos
Básicos
Definiciones
Failure
: mal funcionamiento. comportamiento observado que es inaceptable.
Error
: propagación incorrecta de un estado previo a la falla (sin ser detectado aún)
Fault
: causa raíz del error (código incorrecto)
Bug
: desviación entre el comportamiento esperado de la ejecución de un programa y el que actualmente presenta el programa.
Tipo
"Blunder"
“hairest”
Contiene
Observador
(Generalmente humano)
Especificación
Puede ser
Implicita
Ej: “se espera que el programa no falle en medio de su ejecución”
Explicita
Ejemplos
4 more items...
contiene
Comportamiento (behavior)
Ejecución del programa (run program)
Oraculo
: Determina si el resultado de una ejecución es correcta
se refiere a
Expectativa
Correctness
Aceptabilidad
relacionado con
salidas del programa (si las hay)
Especificaciones
tipos
Bug Oracle
: detecta comportamientos inesperados.
Regression Oracle
: verifica que nuevos bugs no se hallan introducido en la reparación.
Reparación automática
: “
Transformación
de un
comportamiento
inaceptable de la ejecución de un programa en un comportamiento aceptable de acuerdo a una
especificación
”,
Martin Monperrus
Técnicas de reparación apuntan a resolver un “
bug class
”
Bug class
:
Familia de errores que tienen algo en común:
Síntomas
Causa raíz
Misma solución
Existen muchos Bug Class sin una definición clara.
Oportunidad de investigación
(Pero crear una taxonomía de errores o bugs es una tarea titánica que puede llevar varios años de trabajo)
tipos
Reparación conductua
l (behavioral repair): “Cambiar el comportamiento del programa bajo reparación, cambiando su código”
Objetivo
:Reparar errores en el programa sin romper el código y sin requerir intervención humana.
características
3 more items...
tipos
A nivel de Código Fuente
A nivel de Código Binario (bytecodes)
Reparación de estado:
Tolerancia a fallos. Recuperación en tiempo de ejecución
Preguntas orientadoras
PO1, PO2 ¿Qué
metodologías, técnicas, herramientas
(código propietario o código abierto)
se usan
actualmente para hacer análisis de código y/o reparación automática de código fuente? (si las hay, se incluye la arquitectura o modo de funcionamiento a alto nivel)
Técnicas :fire:
Search-based
Genetic Programing
A novel fitness function for automated program repair based on source code checkpoints
Propone una nueva función para mejorar la eficiencia en la busqueda de parches y la expresividad d(numero de reparaciones encontradas). Es un complemento para GenProg.
Anti-patterns in search-based program repair
Falta comentario
Angelix: Scalable Multiline Program Patch Synthesis via Symbolic Analysis
Propone Angelix, un nuevo método de reparación basado en reparación semantica y utiliza una restricción de reparación liviana llamada 'angelic forest'
Better Code Search and Reuse for Better Program Repair
Falta comentario
SOSRepair: Expressive Semantic Search for Real-World Program Repair
Falta Comentario
Constrains-based
Satisfiability Modulo Theory (SMT)
intro
Semantic Program Repair
Tesis de doctorado. Falta comentario
Learning-based
Deep Learning,
Deep Learning for Source Code Modeling and Generation: Models, Applications and Challenges
LEER
Neural Machine Transalation
Neural Machine Transalation
On Learning Meaningful Code Changes Via Neural Machine Translation
Propone usar NMT para aprender como aplicar cambios de código automáticamente aprendiendo de pull request. Se hacen pares de código antes y despues del cambio que provee el pull request.
An Empirical Study on Learning Bug-Fixing Patches in the Wild via Neural Machine Translation
LEER
: Usan MSR para crear un dataset de pares Bug-fix y usarlos para entrenar un NN usando técnicas de NMT (Encoder-decoder). Es un estudio empirico. Usan GumTree para detectar los cambios en el AST. Relación con Redundancy Assumption. Esta aproximación promete buenos resultados en APR. Se diferencia de las otros trabajos que usan learning-based repair ya que no es tan especifico en cuanto a la familia de bugs que repara y puede tener mejores resultados generalizando si se entrena con grandes conjuntos de datos.
An empirical study on learning bug-fixing patches in the wild via neural machine translation
Realiza un estudio empirico para valiar la posibilidad de usar Neural Machine Translation para aprender a reparar errores a partir de las historias de cambio de repositorios de GitHub para extraer código con errores y su correspondiente codigo corregido.
CODIT: Code Editing with Tree-Based Neural Machine Translation
Usa NMT para aprender automaticamente de repositorios opensource. Proponen CODIT: NMT basado en arboles. encoder-decoder para predecir cambios concretos. Cambios estructurales se representan en forma de modificaciones en AST.
Neuro-symbolic program corrector for introductory programming assignments
presenta un algoritmo para la reparación sintáctica del código fuente. Propone eluso de RNN para la reparación sintáctica, SYNFIX, luego usa técnicas basadas en restricciones para la síntesis del parche y asegurar el correctitud funcional, reparación semántica.
seq2seq
SEQUENCER: Sequence-to-Sequence Learning for End-to-End Program Repair
LEER
propone una técnica novedosa para ASR basada en seq2seq. Realiza las pruebas con el datasset Defect4J. Captura automaticamente un amplio rango de operadores de reparación sin necesidad de un diseño especifico de dominio:
DeepFL: Integrating multiple fault diagnosis dimensions for deep fault localization
Proponen DeepFL, una herramienta que utiliza DL para la localización de fallos
LSTM
Neural program repair by jointly learning to localize and repair
LEER
nueva arquitectura que usa un pointer network sobre una RNN que localiza y repara VarMisuse. Jointly learning: clasifica el programa si es correcto/incorrecto (respecto a VarMisuse), localiza el bug, luego repara el bug.
Learning to Encode and Classify Test Executions
Problema del oráculo de pruebas, depende determinar si la ejecución de una prueba es correcta, depende de fuertemente de la existencia de un conjunto de pruebas. Una alternativa es la generación de oraculos a partir de especificaciones formales: requiere un alto nivel de conocimiento. Usar DL puede ser mas barato.
GRU
DeepCoder: Learning to write programs
LEER
Combina redes neuronales con SMT para la síntesis de parches. Hace un aporte interesante pero los resultados aún no son muy prometedores. Los programas que puede sintetizar son muy sencillos y no puede resolver problemas suficientemente complejos como los que aparecen en las competiciones de programación.
SEMANTIC CODE REPAIR USING NEURO-SYMBOLIC TRANSFORMATION NETWORKS
LEER
Reparación semantica de codigo, desarrolla modelo estadistico para predecir la localización del bug y su reperación sin acceso a información sobre la intención del correcto funcionamiento del programam. Entrenamiento con base de codigo real aumentado sinteticamente (con bugs). Usa RNN sobre AST. Trabaja sobre Python. Presenta una nueva arquitectura de ANN: SSC, muestra buenos resultados respecto a seq2seq.
GAN
Learning to repair software vulnerabilities with generative adversarial networks
LEER
Este articulo propone el uso de GAN para la reparación de vulnerabilidades. Esta aproximación no requiere pares etiquetados como seq2seq. Se refiere al Neural Machine Translation (que usa RNN encoder-decoder) y sus limitaciónes radican en la dificultad de encontrar pares 1 a 1 de código con error/ código corregido en los datasets etiquetados. Resultados embeddings aprendidos de abstracciones semanticas producen cerca del triple de precisión que aquellas aprendidas (principalmente) de abstracciones sintacticas.
Deep Reforcement Learning
Deep Reinforcement Learning for Syntactic Error Repair in Student Programs
Propone el uso e Deep Reinforcement Learning para la reparación automática. Reparación sintactica. RLAsistant, Usa LSTM
Deep learning code fragments for code clone detection
Falta Comentario
embeddings
doc2vec & BERT
Utilizing Source Code Embeddings to Identify Correct Patches
Falta Comentario
Learning Blended, Precise Semantic Program Embeddings
LEER
propone una nueva arquitectura de DL, LiGer, la cual aprende representaciones de los programas a partir de una mezcla de trazas de ejecución simbolicas y concretas.
Code vectors: Understanding programs through embedded abstracted symbolic traces
Propoen usar abstracciones de las trazas obtenidas de la ejecución de un programa como una representación para el aprendizaje de word embedding.
Code2Vec: Learning Distributed Representations of Code
LEER
Presenta una aplicación de word2vec para la representación de snippets de código fuente como ua serie de vectores de longitud fija distribuidos continuamente llamados 'code embeddings'.
Sorting and Transforming Program Repair Ingredients via Deep Learning Code Similarities
LEER
Suposición de redundancia: afirma que en programas muy grandes contienen la semilla de sus propia reparación. Uso de de code similarities para priorizar y transformar porciones de codigo para generar parches. Construyen DeepReapair que usa DL para razonar sobre las similitudes de código. Lo comparan con jGenProg. Resultados, aúnque no se encontraron mejora en la cantidad de parches encontrados respecto a la linea base, pero si encontraron una mejora en la calidad de los parches.
Modelos Probabilisticos
Automatic patch generation by learning correct code
MIT, PROPHET, Falta comentario
Automatic Patch Generation via Learning from Successful Human Patches
MIT, GENESIS, Falta comentario
Using a probabilistic model to predict bug fixes
PO1: En este articulo usan mineria de repositorios para crear un modelo probabilistico que permita elegir entre un rango de operadores de mutación a partir de las ediciones realizadas por seres humanos, infiriendo las 'reglas' que estos usan. Muestra resultados favorables frente a operadores de mutación del estado del arte, siendo esta una aproximación que ofrece resultados mas rapido y de mejor calidad.
Usan GumTree para determinar los cambios en el AST
Gated Graph Neural Networks (GGNN)
Learning to represent programs with graphs
Falta Link, Falta comentario
Pattern-based
AVATAR: Fixing Semantic Bugs with Fix Patterns of Static Analysis Violations
pattern-based patch generation, muestra mejores resultados que los metodos basados en mutaciones (programación genetica). Crear datasets para el entrenamiento puede ser dificil AVATAR es un sistema que explota patrones de reparación de violaciones descubiertas en analisis de codigo estatico. Usa estas violaciones como ingredientes para la generación de parches. La pertinencia (correctness) de los parches generados es una barrera para la adopción de sistemas de reparación de código automaticos.
redundancy-based
Herramientas
open-source :<3:
Refactorización a nivel de compilador para C/C++
Angelix
Nopol
, Spoon, JAVA
Astor
Spoon, JAVA
GenProg
Todos
Getafix
PyBowler
Python
Code2Vec
deep learning
SYNFIX
PROPHET
DeepFL
LiGER
DeepRepair
SapFix
SapFix, es una combinación de varias técnicas del estado del arte como pruebas por mutaciones, search-based software testing y localización de fallas, como los casos de prueba diseñados por los desarrolladores.
AVATAR
GumTree
Herramienta para determinar diferencias en el AST
Enfoques
Localización de Fallas (fault localization)
BOTs
Towards an autonomous bot for automatic source code refactoring
Falta comentario
How to design a program repair bot?: Insights from the repairnator project
LEER
Ofrece una metodologia para la creación de bots reparadores de codigo y su integración con pipelines de devops y procesos de integración continua. No es novedoso en cuanto a la sintesis de parches: usa NOPOL, ASTOR y NPEFix
Mining Software Repositories
Generar
dataset
Validación técnica ASR/APR
Defexts: A Curated Dataset of Reproducible Real-World Bugs for Modern JVM Languages
Automatic repair of real bugs in java: a large-scale experiment on the defects4j dataset
Entrenamiento (learning-based)
Mutantes
Learning How to Mutate Source Code from Bug-Fixes
Falta comentario
Syntax and Stack Overflow: A Methodology for Extracting a Corpus of Syntax Errors and Fixes
FixMiner: Mining relevant fix patterns for automated program repair
Falta comentario
Generación/Síntesis de parches
Reparación Semantica
Reparación Sintactica
Production-Driven Patch Generation
propone un concepto original para la generación de parches: generarlos en producción tomando como insumo para la reparación el contexto (trafico de producción) de la falla.
Sugestión de Parches/IDE
DeepVS: an efficient and generic approach for source code modelling usage
Es una aproximación que usa la tecnicas de tipo learning-based, especificamente en el deep learning. Usa modelos pre-entrenados y servicios en la nube centralizados para complementar los modelos online que se ejecutan en el IDE. Es una alternativa al uso de Bots que esten integrados directamente en el pipeline.
PO3 ¿Bajo qué
criterios
o con base a qué método se decide que una porción de
código debe ser reparado
o corregido?
Badado en casos de prueba
Análisis de código estático
AVATAR: Fixing Semantic Bugs with Fix Patterns of Static Analysis Violations
Falta comentario
Métodos formales
Deep Learning
Deep learning code fragments for code clone detection
Detección de codigo duplicado, para mejorar el mantenimiento y evolución del software. Modelos actuales detectan identificadores o estructura pero no ambos. Propone el uso DL. Muestra resultados positivos para la detección de código frente a las técncas orientadas a la estructura.
DeepFL: Integrating multiple fault diagnosis dimensions for deep fault localization
Proponen DeepFL, una herramienta que utiliza DL para la localización de fallos. basado en varios dimensiones de las caracteristicas. Las pruebas las realizaron con Defects4J. Esta herramienta muestra mejores resultados que las herramientas existentes basadas en el algortimo learning-to-rank.
Learning to Encode and Classify Test Executions
Reto de detectar automaticamente la 'correctness' de la ejecución de las pruebas: 'problema del oráculo de pruebas'. Este articulo intenta resolverlo. Usa ANN para distinguir entre logs de ejecución de pruebas exitosos o fallidos. Realizan pruebas con aplicaciones de diferentes dominios y obtienen resultados positivos usando la ANN como oraculo de pruebas. LSTM, one-hot encoders, MLP.
Code2Vec: Learning Distributed Representations of Code
para la representación de snippets de código fuente Prueban la efectividad de esta técnica tratando de predecir el nombre de un método a partir del cuerpo. Logra capturar similitudes semánticas, combinaciones o analogías.
PO4 ¿Qué
limitaciones
tienen las técnicas de reparación/refactorización manuales y automáticas? (tipos de problemas que se pueden detectar, características de estos problemas, que problemas o defectos no pueden ser detectados por herramientas automáticas)
Overfitting
de parches (
Patchs
).
Mantenibilidad código generado automáticamente vs código generado por humanos
Production-Driven Patch Generation
Técnicas actuales necesitan casos de prueba. Esta nueva aproximación no requiere tener un caso de prueba fallido para realizar la reparación. Abre una nueva linea de investigación en el campo de la reparación automática.
Angelix
limitaciones de escalamiento en algoritmos de reparación semantica y problemas a la hora de resolver errores en herramientas existentes como GenProg la cual 'repara' algunos bugs simplemente eliminando la funcionalidad.
Weak specifications
PO5 ¿Bajo que
criterios
se mide el
desempeño
de una herramienta o técnicas de análisis de código estático o de generación de código?
https://repairbenchmarks.cs.umass.edu/
An analysis of patch plausibility and correctness for generate-and-validate patch generation systems
Presenta un marco de trabajo que es util para evaluar el desempeño de los algoritmos existentes. Realiza una comparación evaluativa entre las herramientas mas relevantes (GenrProg, Kali). Revela importantes consideraciones de diseño para sistemas de generación de parches
An analysis of patch plausibility and correctness for generate-and-validate patch generation systems
Presenta un marco de trabajo que es util para evaluar el desempeño de los algoritmos existentes. Realiza una comparación evaluativa entre las herramientas mas relevantes (GenrProg, Kali). Revela importantes consideraciones de diseño para sistemas de generación de parches
On Reliability of Patch Correctness Assessment
Falta Comentario
You cannot fix what you cannot find! an investigation of fault localization bias in benchmarking automated program repair systems
LEER
Proponen destacar las diferentes configuraciones de localización de fallas utilizadas en la literatura, y su impacto en los sistemas ASR cuando se aplican al punto de referencia Defects4J. Luego, exploran las variaciones de rendimiento que se pueden lograr al "ajustar" la etapa de localización de fallos.
Es muy útil para tener muy claro la forma como realizar la detección de fallos correctamente en la implementación de una herramienta o técnicas de ASR.
A Comprehensive Study of Automatic Program Repair on the QuixBugs Benchmark
Falta comentario
Automatic repair of real bugs in java: a large-scale experiment on the defects4j dataset
Defect4J
Defexts: A Curated Dataset of Reproducible Real-World Bugs for Modern JVM Languages
A Critical Review of “Automatic Patch Generation Learned from Human-Written Patches”: Essay on the Problem Statement and the Evaluation of Automatic Software Repair
PO6 ¿
Quiénes
(investigadores, grupos de investigación, universidad, empresas) están
liderando
la investigación en temas relacionados con reparación automática de código, análisis de código estático o generación de código?
Grupos :silhouettes:
SquaresLab
SEAL
ETH Zurich: Advanced Software Technologies (AST)
Microsoft Deep Program Understanding
NUS@Program
Repair
MIT CSAIL Automatic Patch Generation
SpoonLabs
Personas :silhouette:
Le Goues, Claire
SquareLabs,
GenProg
Monperrus, Martin
Nopol, Astor
Marc Brockschmidt
MS Deep Program Understanding
Miltos, Allamanis
Prof. Zhendong Su
ETH AST
Ke Wang
Aditya Kanade
SEAL
Martin C. Rinard
MIT CSAIL APG
Fan Long
Prophet, Genesis
Abhik Roychoudhury
NUS, Angelix, Relifix, Semfix
Sergey Mechtaev
Semfix
Conferencias :checkered_flag:
International Conference on Learning Representations
International Workshop on
Bots in Software Engineering
INTERNATIONAL WORKSHOP ON INTELLIGENT BUG FIXING
International Workshop on Automated Program Repair
PO7 ¿Qué
técnicas
han
funcionado mejor
hasta el momento?
On Learning Meaningful Code Changes Via Neural Machine Translation
Muestra que para cambios pequeños y medianos puede replicar cambios de refactorización con resultados similares a los humanos. Retos del paper hacer que el modelo NMT aprenda cambios significativos.
SEQUENCER: Sequence-to-Sequence Learning for End-to-End Program Repair
trata de superar el problema del vocabulario sin limite presente en BigCode.
Learning Blended, Precise Semantic Program Embeddings
us resultados muestra que es mucho mas preciso que GGNN y code2vec clasificando la semnatica de los programas.
CODIT: Code Editing with Tree-Based Neural Machine Translation
Una nueva alternativa para generar parches automáticamente. En este articulo no se prueba, pero es una herramienta que puede ser interesante para la reparación automática de código.
Angelix
, se ha aplicado en proyectos reales de gran tamaño y ha corregido algunos errores. que escala al nivel de GenProg y SPR, superando a herramientas existentes com SemFix. Puede crear reparaciones distribuidas en el código.
Otros (Videos, sitios)
videos
Automating and Testing Program Transformations using Program Synthesis
Type-Driven Program Synthesis
Scalable Semantic Code Search for High-Quality Program Repair
Topicos relacionados
Síntesis de programas.
Verificación formal de modelos.
Reparación de software teórico.
Diagnostico de software teórico
Generación automática de programas.
Actualización de software dinámica.
Learning-based
Deep Learning
Neural Machine Transalation
seq2seq
embeddings
Modelos Probabilisticos
Learning-based
embeddings
doc2vec & BERT
Utilizing Source Code Embeddings to Identify Correct Patches
Learning Blended, Precise Semantic Program Embeddings
Code vectors: Understanding programs through embedded abstracted symbolic traces
Code2Vec: Learning Distributed Representations of Code
:fire:
Deep Learning
Deep Learning for Source Code Modeling and Generation: Models, Applications and Challenges
GAN
Learning to repair software vulnerabilities with generative adversarial networks
Deep Reforcement Learning
Deep Reinforcement Learning for Syntactic Error Repair in Student Programs
Sorting and Transforming Program Repair Ingredients via Deep Learning Code Similarities
.
Gated Graph Neural Networks (GGNN)
Learning to represent programs with graphs
:fire:
Neural Machine Transalation
On Learning Meaningful Code Changes Via Neural Machine Translation
An Empirical Study on Learning Bug-Fixing Patches in the Wild via Neural Machine Translation
An empirical study on learning bug-fixing patches in the wild via neural machine translation
CODIT: Code Editing with Tree-Based Neural Machine Translation
.
seq2seq
SEQUENCER: Sequence-to-Sequence Learning for End-to-End Program Repair
:fire:
Modelos Probabilisticos
Automatic patch generation by learning correct code
MIT, PROPHET,
Automatic Patch Generation via Learning from Successful Human Patches
MIT, GENESIS,
Using a probabilistic model to predict bug fixes