2016-04-14 - Transplantes de código para arreglar fallos

Bicho Me dan un poco de miedo las analogías ‘médicas’ porque siempre hay quien termina tomándoselas al pie de la letra (recuerdo hace un montón de años escuchar una conversación en el tren de alguien que le contaba a otro como los virus informáticos se inoculaban con una jeringuilla).

En este caso la idea es muy sugerente: MIT tests ‘software transplants’ to fix buggy code, utilizar el código de programas que funcionan correctamente para ‘reparar’ programas con fallos:

La idea se basa en entradas de datos que hacen fallar el programa y otras que no lo hacen fallar.

To fix a buggy program, CodePhage requires two sample inputs, one that causes the program to crash, and another that does not.

Se utilizan para verificar en un ‘donante’ que se obtienen los resultados correctos y a partir de allí ya se sabe que se puede utilizar ese nuevo código para corregir el programa defectuoso:

It runs those inputs through a second program, known as the donor program, that has similar functionality. The Internet is awash with open source software that could provide parts for donor programs, though there’s no particular reason the donor code needs to be open source.

Si leemos algunos detalles más en System fixes bugs by importing functionality from other programs—without access to source code podemos ver que se trata de algo que deberíamos denominar, más bien, ‘microtransplantes’, porque se trataría de pequeños bloques de código.

En el artículo (seguramente no accesible para todos), Automatic error elimination by horizontal code transfer across multiple applications se puede ver, por ejemplo un fallo en el programa gif2tiff, corregido mediante la ‘donación’ desde ImageMagick:

#define MaximumLZWBits  12
if (data_size > MaximumLZWBits)
   ThrowBinaryException(CorruptImageError,
         "CorruptImage",image.filename);

Este código sería susceptible de un ataque de desbordamiento de memoria y el programa propondría corregirlo con:

if (!(datasize <= 12)) {exit(-1);}

Me encanta.

Escrito el 2016-04-14
Categorías: fallos
Tags: desarrollo fallos bugs corrección automática codephage