Depuración de programas

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 7 de abril de 2022; las comprobaciones requieren 4 ediciones .

La depuración  es una etapa en el desarrollo de un programa informático , en la que se detectan, localizan y eliminan los errores. Para comprender dónde ocurrió el error, debe:

Hay dos tecnologías de depuración complementarias:

El lugar de la depuración en el ciclo de desarrollo de un programa

Un ciclo de desarrollo típico, repetido muchas veces durante la vida de un programa, se parece a esto:

  1. Programación  : introducción de nuevas funciones en el programa, corrección de errores existentes .
  2. Pruebas (manuales o automatizadas; por un programador, probador o usuario; " humo ", en modo de caja negra o modular ) - detección del hecho de un error.
  3. Reproducir un error es descubrir las condiciones bajo las cuales ocurre un error. Esto puede resultar una tarea complicada cuando se programan procesos concurrentes y con algunos errores inusuales conocidos como heisenbugs .
  4. Depuración  : encontrar la causa de un error.

Herramientas

La depuración a menudo requiere una gran habilidad y recursos significativos. La capacidad de depuración de un programador es un factor importante para encontrar el origen de un problema, pero la dificultad de la depuración depende en gran medida del lenguaje de programación y las herramientas utilizadas, en particular los depuradores .

Herramientas de depuración

Un depurador es una herramienta de software que permite al programador observar la ejecución del programa investigado, detenerlo y reiniciarlo, ejecutarlo a cámara lenta, cambiar valores en memoria e incluso, en algunos casos, retroceder en el tiempo.

También pueden ser herramientas útiles en manos de un programador:

El uso de lenguajes de programación de alto nivel generalmente facilita la depuración si dichos lenguajes contienen, por ejemplo, funciones de manejo de excepciones que hacen que sea mucho más fácil encontrar el origen del problema. En lenguajes de bajo nivel, los errores pueden generar problemas sutiles, como daños en la memoria y fugas de memoria . Entonces puede ser bastante difícil determinar cuál fue la causa original del error. En estos casos, pueden ser necesarias técnicas complejas y herramientas de depuración.

“Nuestra elección personal es tratar de no usar depuradores, excepto para ver la pila de llamadas o los valores de un par de variables . Una de las razones de esto es que es muy fácil perderse en los detalles de estructuras de datos complejas y rutas de ejecución de programas. Encontramos que recorrer paso a paso un programa es menos productivo que pensar mucho y verificar el código en los puntos críticos.

Hacer clic en los operadores lleva más tiempo que ver los mensajes de los operadores para emitir información de depuración, ubicados en puntos críticos. Es más rápido decidir dónde colocar una declaración de depuración que recorrer las secciones críticas del código, incluso suponiendo que sepamos dónde están esas secciones. Más importante aún, las declaraciones de depuración se conservan en el programa y las sesiones del depurador son transitorias.

La deambulación ciega en el depurador probablemente sea improductiva. Es más útil usar un depurador para averiguar el estado del programa en el que está cometiendo un error, y luego pensar en cómo podría surgir ese estado. Los depuradores pueden ser programas complejos y confusos, especialmente para los principiantes, para quienes serán más desconcertantes que útiles..."

“La depuración es difícil y puede llevar un tiempo impredeciblemente largo, por lo que el objetivo es omitir la mayor parte. Las técnicas que pueden ayudar a reducir el tiempo de depuración incluyen un buen diseño, buen estilo , verificación de condiciones límite, validación de afirmaciones iniciales y razonabilidad del código, programación defensiva , interfaces bien diseñadas, uso limitado de variables globales, controles y verificaciones automáticos. Una onza de prevención vale más que una tonelada de cura”.

—Brian Kernighan y Rob Pike

Herramientas que reducen la necesidad de depuración

Otra dirección es hacer que la depuración sea lo menos frecuente posible. Para esto aplica:

Código de seguridad y depuración

Puede haber el llamado comportamiento no documentado en el código del programa  : errores graves que no aparecen durante el curso normal de la ejecución del programa, pero que son muy peligrosos para la seguridad de todo el sistema en caso de un ataque dirigido. La mayoría de las veces esto es el resultado de errores del programador. Los ejemplos más famosos son la inyección SQL y el desbordamiento de búfer . En este caso, la tarea de depuración es:

Hay tales métodos:

Véase también

Notas

Literatura

Enlaces