Depuración algorítmica de programas


La depuración algorítmica (también llamada depuración declarativa ) es una técnica de depuración que compara los resultados de los subcálculos con lo que pretendía el programador . La técnica construye una representación interna de todos los cálculos y subcálculos realizados durante la ejecución de un programa defectuoso y luego pregunta al programador sobre la corrección de tales cálculos. Haciendo preguntas al programador o usando una especificación formal , el sistema puede identificar con precisión en qué parte de un programa se encuentra un error .se encuentra. Las técnicas de depuración pueden reducir drásticamente el tiempo y el esfuerzo dedicados a la depuración .

La depuración de programas es una parte extremadamente común del desarrollo de software. Hasta la década de 1980, el oficio de depuración de programas, practicado por todos los programadores, carecía de fundamento teórico. [1] A principios de la década de 1980, se desarrollaron enfoques sistemáticos y basados ​​en principios para la depuración de programas. En general, un error ocurre cuando un programador tiene una intención específica con respecto a lo que debe hacer el programa, pero el programa realmente escrito exhibe un comportamiento diferente al previsto en un caso particular. Una forma de organizar el proceso de depuración es automatizarlo (al menos parcialmente) a través de una técnica de depuración algorítmica. [2]La idea de la depuración algorítmica es tener una herramienta que guíe al programador a lo largo del proceso de depuración de forma interactiva: lo hace preguntándole al programador sobre las posibles fuentes de errores. La técnica de depuración algorítmica construye una representación interna de todos los cálculos y subcálculos realizados durante la ejecución de un programa defectuoso (un árbol de ejecución). Luego, le pregunta al programador sobre la corrección de dichos cálculos. El programador responde "SÍ" cuando el resultado es correcto o "NO" cuando el resultado es incorrecto. Algunos depuradores algorítmicos también aceptan la respuesta "No sé" cuando el programador no puede dar una respuesta (por ejemplo, porque la pregunta es demasiado compleja). Así, las respuestas del programador guían la búsqueda del error hasta aislarlo descartando las partes correctas del programa.El proceso de depuración algorítmica encuentra un error a la vez. Para encontrar diferentes errores, el proceso debe reiniciarse nuevamente para cada error diferente.

La depuración algorítmica fue desarrollada por primera vez por Ehud Shapiro durante su investigación de doctorado en la Universidad de Yale, como se presentó en su tesis doctoral, [3] seleccionada como disertación distinguida de ACM en 1982. Shapiro implementó el método de depuración algorítmica en Prolog [4] (un lenguaje de programación lógica de propósito general) para la depuración de programas lógicos . En el caso de los programas lógicos , el comportamiento previsto del programa es un modelo (un conjunto de declaraciones verdaderas simples) y los errores se manifiestan como programas incompletos (incapacidad para probar una declaración verdadera) o incorrección .(capacidad de probar una declaración falsa). El algoritmo identificaría una declaración falsa en el programa y proporcionaría un contraejemplo o una declaración verdadera faltante que debería agregarse al programa. También se desarrolló un método para manejar la no terminación . La investigación y el desarrollo en el campo de la depuración algorítmica ha realizado importantes mejoras con respecto a los algoritmos originales para depurar Prolog y otros, y ha extendido las ideas a otros paradigmas de lenguaje, como lenguajes funcionales y lenguajes orientados a objetos . [5] Tres décadas desde su introducción, la depuración algorítmica sigue siendo un campo activo de investigación en informática [6] y probablemente seguirá siéndolo durante décadas, ya que no hay una panacea a la vista.