1783
Martin Rinard, profesor de ciencias informáticas en MIT, no tiene reparo a la hora de proclamar el objetivo final de la investigación de su grupo: “crear un programa inmortal e invulnerable.” En un trabajo presentado este mes durante el ACM Symposium on Operating Systems Principles, en Big Sky, Montana, su grupo ha desarrollado un software capaz de encontrar y arreglar ciertos tipos de errores de software en cuestión de minutos.
menéame
De momento, no le veo mucha utilidad para poner a ClearView en producción. Intuyo que consume muchos recursos del sistema, ya que debe analizar los resultados que ejecuta y compararlos con otras ejecuciones para detectar si hay algo extraño. Otro problema que veo es que el sistema puede detectar un error y parchearlo haciendo el sistema más resistente a ataques; pero si el error no es producido por un ataque sino por un mal diseño, podemos obtener una respuesta erronea. Por ejemplo, tienes un sistema que hace varias operaciones, por un mal diseño, divides por cero. Esto genera una excepción y termina la ejecución del programa. Se parchea el error saltándote la división por cero y se sigue con el resto de las operaciones. no se ha solucionado la raíz del problema y el resultado obtenido es un resultado erroneo.
¿Que podría salir mal? ^_^
Un programa funciona correctamente cuando responde a su especificación formal.
Teniendo en cuenta que la mayoría de los programas no se especifican formalmente, bien por imposibilidad (enorme complejidad) bien porque no merece la pena invertir el esfuerzo, no hay forma de saber si un programa funciona como debe o no. Por tanto no tienes forma de saber si debes arreglar algo o no.
En cómo arreglarlo ya ni entro, porque si difícil es lo primero lo segundo es ciencia ficción.
Hombre, se supone que cuando has puesto un programa en producción es porque ya no tiene errores...
Dejando chorradas a parte, no esta mal, aunque no se yo si me gustaria que se dedique a parchearme cosas porque si... Peferiria que simplemente guarde un checksum del binario (supongo que hara algo por el estilo) y si ve que tiene un comportamiento extraño lo compruebe y me diga si se ha modificado... Bueno y si busca el error no estaria mal, pero no que lo parchee por su cuenta pudiendo hacer cosas que no interesan al usuario.
La idea es bien sencilla (la practica ya no...) el programa se dedica a monitorizar el comportamiento del resto de programas y si en algun momento uno de ellos se comporta de forma extraña investiga el por que de este comportamiento y si puede lo soluciona.
Algunos parece ser que habeis entendido que el programa se dedica a arreglar los bugs cometidos por los desarrolladores... para eso va a ser que seguiremos necesitando el debugger y paciencia.
"ClearView detecta la anomalía e identifica las reglas que han sido violadas. Después crea una serie de parches potenciales diseñados para obligar al software a seguir las reglas que han sido violadas. (Los parches se aplican directamente a la binaria, pasando por encima del código fuente.) ClearView analiza estas posibilidades para decidir cuáles son las que tienen más probabilidades de funcionar, después instala las mejores candidatas y pone a prueba su efectividad. Si se violan más reglas, o si un parche hace que el sistema se cuelgue, ClearView lo rechaza y prueba con otro distinto."
Tienes mi positivo
1. Un robot no debe dañar a un ser humano o, por su inacción, dejar que un ser humano sufra daño.
2. Un robot debe obedecer las órdenes que le son dadas por un ser humano, excepto si estas órdenes entran en conflicto con la Primera Ley.
3. Un robot debe proteger su propia existencia, hasta donde esta protección no entre en conflicto con la Primera o la Segunda Ley.
es.wikipedia.org/wiki/Tres_leyes_de_la_rob%C3%B3tica
Esto no es robótica, es ingeniería de software
Se repara a si mismo vía APT.
Todavía necesita utilizar a esclavos humanos, pero está trabajando en aniquilar ese problema.
Por favor, dime que tu muerte fué un bulo
Cuando un programa está ejecutándose mucho tiempo, otro programa puede obtener el estado de ciertas variables y registros en algunos puntos de la ejecución (principio y final de función, fácilmente identificables por las instrucciones call o ret, por ejemplo). Cuando tienes una cantidad considerable de datos de esos puntos, un motor de inferencia puede generar invariantes para esos puntos (verbigracia, Daikon).
Suponiendo que durante un periodo prolongado de uso todo será como se espera que sea, tendrás una ristra de invariantes asociados a puntos del programa. A partir de ahí, es sencillo ver cuando algo se ha salido de madre: en el momento que el estado de salida o entrada no respeta las pre/postcondiciones inferidas, algo ha salido mal.
Partiendo de esos invariantes observados, y de los datos que ha provocado el fallo, supongo que será capaz de encontrar el punto donde algo "se ha roto", y aplicar un parche genérico (comprobación de la longitud de un buffer, p.ej)
PD: Aunque bueno, bien pensando es lo más parecido a la labor de los enciclopedistas por el momento así que por qué no.