Ilustración con collage de pictogramas de engranaje, brazo robótico, teléfono móvil

Publicado: 16 de septiembre de 2024
Colaboradores: Camilo Quiroz-Vázquez

¿Qué es la depuración?

La depuración es el proceso de encontrar, aislar y resolver errores de programación conocidos como bugs en programas de software. La depuración ayuda a descubrir la causa de los errores de codificación, prevenir problemas de función del software y mejorar el rendimiento general del software.

Los errores de codificación, como los errores lógicos, los de tiempo de ejecución, los de sintaxis y los semánticos, pueden provocar bloqueos, resultados incorrectos o imprecisos, vulnerabilidades de seguridad y pérdida de datos. A diferencia de las pruebas de software, que permiten a los desarrolladores investigar los efectos de estos errores en el código fuente de un programa, la depuración busca la causa principal y la corrección de estos errores.  

A través del proceso de depuración, los desarrolladores de software realizan un análisis de la causa principal para asegurar que los errores que se encuentran en los programas informáticos se solucionen y no vuelvan a ocurrir. Los errores pueden afectar negativamente la estabilidad del software, la confiabilidad y la experiencia del usuario. Las herramientas y estrategias de depuración ayudan a optimizar el proceso de depuración.

El proceso de depuración

La depuración generalmente implica seis pasos:

- Reproducir las condiciones
- Encontrar el error
- Determinar la causa principal
- Corregir el error
- Hacer una prueba para validar la corrección
- Documentar el proceso

Paso 1: Reproducir las condiciones
 

El proceso de depuración requiere especificidad; los ingenieros no pueden confiar en una descripción de segunda mano del problema para diagnosticarlo con precisión. Por lo tanto, el primer paso en el proceso de depuración es replicar las condiciones que causaron la aparición del error. Reproducir el error permite a los programadores e ingenieros observar el error de primera mano y recopilar datos contextuales para el resto del proceso de depuración.

Paso 2: Encontrar el error
 

El siguiente paso es identificar el origen del error con la mayor precisión posible analizando a fondo el código y revisando los registros disponibles. Durante este paso, los desarrolladores suelen confiar en herramientas de depuración que facilitan la búsqueda a través de grandes fragmentos de código, en lugar de trabajar manualmente.

Paso 3: Determinar la causa principal
 

Los desarrolladores determinan lo que causa un error examinando la lógica y el flujo del código y cómo interactúan los diferentes componentes del código en las condiciones específicas en las que ocurre el error.

Paso 4: Corregir el error
 

Este paso suele implicar la resolución de problemas y la revisión del código para corregir el problema, así como la recopilación y ejecución del software para asegurar que se solucione el error. Estas revisiones pueden implicar varias iteraciones, ya que los primeros intentos pueden fallar o introducir nuevos errores. 

La mayoría de los desarrolladores emplean un sistema de control de versiones para realizar un seguimiento de los cambios, de modo que puedan revertir fácilmente cualquier modificación que no resuelva el problema o crear nuevas. 

Paso 5: Pruebas para validar los arreglos
 

Las pruebas que se ejecutan luego de corregir un error incluyen:

  • Pruebas unitarias, que prueban el segmento de código individual modificado para corregir el error
  • Pruebas de integración, que prueban todo el módulo que contiene el error corregido
  • Pruebas del sistema, que prueban todo el sistema en el que se ejecuta el módulo modificado
  • Pruebas de regression, que verifican que el código corregido no afecte el rendimiento de la aplicación, es decir, que la aplicación no retroceda debido a la corrección del error.

Paso 6: Documentar el proceso
 

Como paso final, los desarrolladores registran los detalles del proceso de reparación, incluida la causa del error, cómo se solucionó y cualquier otra información relevante. La documentación es una herramienta valiosa para que los programadores puedan aprovechar cuando se produzcan errores similares en el futuro.

Ejemplos de depuración

Comprender los tipos de errores que enfrenta un sistema permite a los ingenieros y desarrolladores de software encontrar la manera adecuada de corregir el código roto cuando surge un error. Algunos ejemplos de errores comunes que requieren depuración incluyen:

Errores semánticos
 

Un fragmento de código que viola las reglas de un lenguaje de codificación provoca un error semántico. A diferencia de un error lógico, que produce una salida incorrecta, un error semántico no producirá una salida significativa.

Errores de sintaxis
 

Este error ocurre cuando un desarrollador omite un elemento del código, como un paréntesis, una coma u otro error tipográfico. A diferencia de los lenguajes humanos escritos, donde una oración con un error tipográfico aún podría entenderse, las piezas faltantes de código causan errores de inmediato.

Errores lógicos
 

Este tipo de error incluye una sintaxis que es técnicamente correcta pero tiene instrucciones incorrectas que provocan un resultado no deseado. Debido a que la sintaxis es correcta, estos errores pueden ser difíciles de detectar. Cuando un sistema no falla de inmediato y la ubicación exacta del código incorrecto puede llevar mucho tiempo.

Errores de tiempo de ejecución
 

Estos errores ocurren cuando una aplicación se está ejecutando o iniciando. Los errores de tiempo de ejecución pueden solucionarse ocasionalmente actualizando, reseteando o reinstalando una aplicación. Otras veces pueden ser señal de un programa que requiere más memoria o de otro tipo de error como un error lógico.

Tipos de depuración

El proceso de depuración puede ser desafiante y laborioso. Comprender los distintos enfoques del proceso de depuración puede hacer más eficaz la gestión de la tarea.

Retroceso
 

En este enfoque, los desarrolladores trabajan hacia atrás desde el punto en que se detectó el error para encontrar el origen del error. En concreto, vuelven sobre los pasos que dio el programa con el código fuente problemático para ver dónde fallaron las cosas. El retroceso puede ser eficaz cuando se emplea junto con un depurador.   

Eliminación de causas
 

Una técnica de depuración basada en hipótesis requiere que el equipo especule sobre las causas del error y pruebe cada posibilidad de forma independiente. Este enfoque funciona mejor cuando el equipo está familiarizado con el código y las circunstancias que rodean el error.

Divide y vencerás
 

Al depurar grandes bases de código, los equipos pueden dividir las líneas de código en segmentos (funciones, módulos, métodos de clase u otras divisiones lógicas comprobables) y probar cada uno por separado para localizar el error. Una vez identificado el segmento problemático, se puede seguir dividiendo y probando hasta identificar el origen del error.

Depuración de impresión y registro
 

La estrategia de depuración de impresión y registro implica agregar declaraciones de impresión o “registros” al código para mostrar valores de variables, pilas de llamadas, flujo de ejecución y otra información relevante. Este enfoque es especialmente útil para depurar sistemas concurrentes o distribuidos en los que el orden de ejecución puede afectar el comportamiento del programa.

Depuración de patitos de hule
 

En este enfoque, los desarrolladores "explican o hablan" del código, línea por línea, a cualquier objeto inanimado. La idea es que, al intentar explicar el código en voz alta, los desarrolladores puedan comprender mejor su lógica (o la falta de ella) y detectar errores con mayor facilidad.

Depuración automatizada
 

La depuración automatizada se basa en analytics, inteligencia artificial (IA) y algoritmos de aprendizaje automático para automatizar uno o más pasos del proceso de depuración. Las herramientas de depuración impulsadas por IA pueden buscar con más rapidez a través de conjuntos grandes de código para identificar errores o reducir las secciones de código que luego pueden ser examinadas más a fondo por un desarrollador.

Los sistemas automatizados pueden replicar líneas de código y automatizar pruebas para verificar que un sistema funciona según lo previsto. La automatización desempeña un papel importante tanto en la integración continua (CI) como en la entrega continua (CD), dos enfoques que aceleran las pruebas y el despliegue de nuevo código.

Depuración de fuerza bruta
 

La depuración por fuerza bruta, que suele desplegarse cuando fallan otros métodos, consiste en recorrer todo el código base, línea por línea, para identificar el origen del problema. Este método, que requiere mucho tiempo, también puede ser útil para depurar programas pequeños cuando el ingeniero o programador que realiza la depuración no está familiarizado con el código base.

 

Herramientas de depuración

Los depuradores son herramientas y API avanzadas que optimizan el desarrollo de software al localizar errores de programación en un sistema operativo o proceso de desarrollo de aplicaciones. Los depuradores representan un negocio masivo y en crecimiento. Con el panorama en constante expansión de las aplicaciones y programas informáticos y celulares, no sorprende que el mercado global de depuradores crezca significativamente para finales de la década1 .

Las corporaciones están invirtiendo millones en el desarrollo de sofisticadas herramientas de depuración (como chatbots de IA que pueden depurar código)2  y los investigadores universitarios están creando herramientas que pueden depurar juegos de video de forma autónoma3 y depurar lenguajes de programación específicos de dominio4.

Las herramientas y tecnologías pueden variar en gran medida en sus capacidades, pero esencialmente, todas ofrecen interfaces de línea de comandos que ayudan a las organizaciones a encontrar y corregir problemas de errores. La mayoría también ofrece funciones de depuración remota y tutoriales que hacen que el software sea más accesible para los principiantes.

Algunos ejemplos de herramientas de depuración son:

Entornos de desarrollo integrados (IDE)
 

Los IDE ofrecen a los programadores de computadoras funciones integrales para el desarrollo de software. Muchos IDE como Visual Studio, Eclipse y PyCharm vienen con un “modo de depuración”. Estas herramientas de depuración integradas permiten a los desarrolladores ejecutar código línea por línea (depuración por pasos), detener la ejecución del programa en puntos específicos (puntos de interrupción) y examinar el estado de las variables y la memoria en cualquier momento, entre otras capacidades. 

Los IDE también están disponibles como complementos de código abierto compatibles con una variedad de lenguajes de programación como Java, Python, JavaScript y TypeScript y lenguajes de scripting como PHP.

Depuradores independientes
 

Los depuradores independientes, como GNU Debugger (GDB), ofrecen funciones avanzadas de depuración, incluidos puntos de interrupción condicionales y puntos de observación. También facilitan la depuración inversa, que es cuando los programadores ejecutan un programa al revés). Tienden a ser más poderosos y versátiles que los depuradores integrados en los IDE u otras developer tools, pero también tienen una curva de aprendizaje más pronunciada para los usuarios y requieren más experiencia técnica. 

Registro de empresas de servicios públicos
 

Estas herramientas proporcionan formas de registrar el estado de un programa en varios puntos del código. Luego, los registros pueden analizarse para encontrar anomalías o patrones problemáticos. El registro es útil para abordar problemas de errores que ocurren en entornos de producción, donde la depuración interactiva podría no ser factible. 

Analizadores de código estático
 

Las herramientas de análisis de código estático analizan el código sin ejecutarlo, buscando posibles errores y corrigiendo errores e incumplimientos de los estándares de programación. En lugar de centrarse en la sintaxis (como hacen los intérpretes y compiladores), estas herramientas analizan la semántica del código fuente, ayudando a los desarrolladores a detectar errores de programación comunes y aplicar estilos de codificación coherentes. 

Herramientas de análisis dinámico
 

Básicamente lo opuesto a los analizadores de código estático, las herramientas de análisis dinámico monitorean el software mientras se ejecuta para detectar problemas como fugas de recursos o problemas de concurrencia. Esta herramienta ayuda a los equipos de desarrollo a detectar errores que el análisis estático podría pasar por alto, como pérdidas de memoria o desbordamientos de búfer.

Generadores de perfiles de rendimiento
 

Los generadores de perfiles de rendimiento permiten a los desarrolladores identificar cuellos de botella de rendimiento en su código. Estos sistemas pueden medir el uso de CPU, el uso de memoria y las operaciones de E/S, lo que ayuda a localizar operaciones lentas e ineficientes.

Depuración vs. pruebas

La prueba y la depuración son procesos complementarios en el desarrollo de código nuevo. Si bien sus resultados difieren, tanto las pruebas como la depuración se emplean para producir código libre de errores.

Las pruebas permiten a los desarrolladores de software comprender qué le sucede a un sistema cuando ocurren errores. Estas pruebas ayudan a los desarrolladores a saber cuando falla un sistema y los efectos que esa falla podría tener en un software. Las pruebas automatizadas permiten a los desarrolladores ejecutar pruebas continuas en código nuevo para obtener información sobre distintos escenarios. Las pruebas son una parte clave del desarrollo de software, pero no explican por qué se produjo un error.

Las estrategias y herramientas de depuración son lo que emplean los desarrolladores para encontrar la causa principal de los errores, solucionarlos y documentarlos para evitar que vuelvan a ocurrir. Cuando se emplean juntas, la depuración y las pruebas ayudan a los equipos a crear un enfoque optimizado para desarrollar código y crear mejores productos de software.

Soluciones relacionadas
IBM observability

La plataforma Instana Observability proporciona datos de rendimiento en tiempo real, completos con todo el contexto, para todos sus equipos. La visibilidad automatizada de la pila completa, el desglose de 1 segundo y la notificación de 3 segundos permiten una identificación rápida para prevenir y remediar problemas.

Explorar IBM Instana Observability Solicite una demostración de IBM Instana
IBM Turbonomic

La plataforma de optimización de costos de la nube híbrida IBM Turbonomic le permite habilitar la automatización continua de acciones críticas en tiempo real que brindan de manera proactiva el uso más eficiente de los recursos informáticos, de almacenamiento y de red a sus aplicaciones en cada capa de la pila. 

Explorar IBM Turbonomic Pruebe IBM Turbonomic gratis
IBM Cloud Pak for AIOps

Obtenga visibilidad de los datos y las dependencias en todos los entornos de TI con herramientas impulsadas por IA que ayudan a abordar la administración y la corrección de incidentes.

Conozca IBM Cloud Pak for AIOps Pruebe un recorrido auto guiado
Dé el siguiente paso

IBM Debug for z/OS ofrece cobertura de depuración y código para aplicaciones z/OS escritas en COBOL, PL/I, C/C++ y ensamblador.

IBM Debug for z/OS
Notas de pie de página

1 "Análisis del mercado global de depuración de software [2023-2030", Benzinga, 5 de septiembre de 2022
2 "El chatbot Bard AI de Google ahora puede generar y depurar código", TechCrunch+, 12 de abril de 2023
3 "Depuración autónoma de videojuegos". Facultad de Ingeniería de la Universidad del Sur de California-Viterbi, 5 de abril de 2023
4 "Una forma más sencilla de eliminar errores de los lenguajes de programación", MIT News, 7 de abril de 2023