stringtranslate.com

Depuración

En ingeniería , la depuración es el proceso de encontrar la causa raíz de los errores y sus soluciones alternativas y posibles arreglos .

En el caso del software , las tácticas de depuración pueden incluir depuración interactiva , análisis del flujo de control , análisis de archivos de registro , monitoreo a nivel de aplicación o sistema , volcados de memoria y creación de perfiles . Muchos lenguajes de programación y herramientas de desarrollo de software también ofrecen programas para ayudar en la depuración, conocidos como depuradores .

Etimología

Una entrada del registro de la computadora del Mark II, con una polilla pegada en la página

El término bug , en el sentido de defecto, se remonta al menos a 1878 cuando Thomas Edison escribió "pequeños fallos y dificultades" en sus inventos como "Bugs".

Una historia popular de la década de 1940 es la de la almirante Grace Hopper . [1] Mientras trabajaba en una computadora Mark II en la Universidad de Harvard, sus asociados descubrieron una polilla atrapada en un relé que impedía el funcionamiento y escribieron en un libro de registro "Primer caso real de un error encontrado". Aunque probablemente se trate de una broma , que combina los dos significados de error (biológico y defecto), la historia indica que el término se usaba en el campo de la informática en ese momento.

De manera similar, el término depuración se utilizó en aeronáutica antes de entrar en el mundo de las computadoras. Una carta de J. Robert Oppenheimer , director del Proyecto Manhattan de la bomba atómica de la Segunda Guerra Mundial en Los Alamos, utilizó el término en una carta al Dr. Ernest Lawrence en UC Berkeley, fechada el 27 de octubre de 1944, [2] con respecto al reclutamiento de personal técnico adicional. La entrada del Oxford English Dictionary para depurar utiliza el término depuración en referencia a las pruebas de motores de aviones en un artículo de 1945 en el Journal of the Royal Aeronautical Society. Un artículo en "Airforce" (junio de 1945, p. 50) se refiere a la depuración de cámaras de aviones.

El artículo fundamental de Gill [3] en 1951 es la primera discusión en profundidad sobre errores de programación, pero no utiliza el término error o depuración .

En la biblioteca digital de la ACM , el término depuración se utiliza por primera vez en tres artículos de las Reuniones Nacionales de la ACM de 1952. [4] [5] [6] Dos de los tres utilizan el término entre comillas.

En 1963, la depuración era un término lo suficientemente común como para ser mencionado de pasada sin explicación en la página 1 del manual del CTSS . [7]

Alcance

A medida que el software y los sistemas electrónicos se han vuelto más complejos, las diversas técnicas de depuración comunes se han ampliado con más métodos para detectar anomalías, evaluar el impacto y programar parches de software o actualizaciones completas para un sistema. Las palabras "anomalía" y "discrepancia" se pueden utilizar, como términos más neutrales , para evitar las palabras "error" y "defecto" o "bug" donde podría haber una implicación de que todos los llamados errores , defectos o bugs deben corregirse (a toda costa). En cambio, se puede realizar una evaluación de impacto para determinar si los cambios para eliminar una anomalía (o discrepancia ) serían rentables para el sistema, o tal vez una nueva versión programada podría hacer que el cambio o los cambios fueran innecesarios. No todos los problemas son críticos para la seguridad o la misión en un sistema. Además, es importante evitar la situación en la que un cambio podría ser más molesto para los usuarios, a largo plazo, que vivir con el problema o los problemas conocidos (donde la "cura sería peor que la enfermedad"). Basar las decisiones en la aceptabilidad de algunas anomalías puede evitar una cultura de mandato de "cero defectos", donde las personas podrían verse tentadas a negar la existencia de problemas para que el resultado parezca cero defectos . Si se consideran los problemas colaterales, como la evaluación del impacto de costo versus beneficio, se ampliarán las técnicas de depuración para determinar la frecuencia de las anomalías (con qué frecuencia ocurren los mismos "errores") para ayudar a evaluar su impacto en el sistema en general.

Herramientas

La depuración en consolas de videojuegos generalmente se realiza con hardware especial como esta unidad de depuración de Xbox destinada a desarrolladores.

La depuración varía en complejidad, desde la reparación de errores simples hasta la realización de tareas largas y tediosas de recopilación de datos, análisis y programación de actualizaciones. La habilidad de depuración del programador puede ser un factor importante en la capacidad de depurar un problema, pero la dificultad de la depuración de software varía en gran medida con la complejidad del sistema y también depende, en cierta medida, del lenguaje de programación utilizado y de las herramientas disponibles, como los depuradores . Los depuradores son herramientas de software que permiten al programador supervisar la ejecución de un programa, detenerlo, reiniciarlo, establecer puntos de interrupción y cambiar valores en la memoria. El término depurador también puede referirse a la persona que realiza la depuración.

En general, los lenguajes de programación de alto nivel , como Java , facilitan la depuración, ya que tienen características como el manejo de excepciones y la verificación de tipos que hacen que las fuentes reales de comportamiento errático sean más fáciles de detectar. En lenguajes de programación como C o ensamblador , los errores pueden causar problemas silenciosos, como corrupción de memoria , y a menudo es difícil ver dónde ocurrió el problema inicial. En esos casos, pueden ser necesarias herramientas de depuración de memoria .

En determinadas situaciones, las herramientas de software de propósito general que son específicas del lenguaje por naturaleza pueden ser muy útiles. Estas toman la forma de herramientas de análisis de código estático . Estas herramientas buscan un conjunto muy específico de problemas conocidos, algunos comunes y otros poco comunes, dentro del código fuente, concentrándose más en la semántica (por ejemplo, el flujo de datos) que en la sintaxis, como lo hacen los compiladores e intérpretes.

Existen herramientas comerciales y gratuitas para varios lenguajes; algunas afirman ser capaces de detectar cientos de problemas diferentes. Estas herramientas pueden ser extremadamente útiles cuando se comprueban árboles de código fuente muy grandes, donde no es práctico hacer recorridos de código. Un ejemplo típico de un problema detectado sería una desreferencia de variable que ocurre antes de que se le asigne un valor a la variable. Como otro ejemplo, algunas de estas herramientas realizan una verificación de tipos estricta cuando el lenguaje no lo requiere. Por lo tanto, son mejores para localizar posibles errores en código que es sintácticamente correcto. Pero estas herramientas tienen una reputación de falsos positivos, donde el código correcto se marca como dudoso. El antiguo programa lint de Unix es un ejemplo temprano.

Para depurar hardware electrónico (por ejemplo, hardware de computadora ), así como software de bajo nivel (por ejemplo, BIOS , controladores de dispositivos ) y firmware , a menudo se utilizan instrumentos como osciloscopios , analizadores lógicos o emuladores en circuito (ICE), solos o en combinación. Un ICE puede realizar muchas de las tareas típicas de un depurador de software en software y firmware de bajo nivel .

Proceso de depuración

El proceso de depuración normalmente comienza con la identificación de los pasos para reproducir el problema. Esta puede ser una tarea nada trivial, en particular con procesos paralelos y algunos Heisenbugs , por ejemplo. El entorno específico del usuario y el historial de uso también pueden dificultar la reproducción del problema.

Una vez que se reproduce el error, es posible que sea necesario simplificar la entrada del programa para facilitar su depuración. Por ejemplo, un error en un compilador puede hacer que se bloquee al analizar un archivo fuente grande. Sin embargo, después de la simplificación del caso de prueba, solo unas pocas líneas del archivo fuente original pueden ser suficientes para reproducir el mismo bloqueo. La simplificación se puede realizar manualmente utilizando un enfoque de divide y vencerás , en el que el programador intenta eliminar algunas partes del caso de prueba original y luego verifica si el problema aún ocurre. Al depurar en una GUI , el programador puede intentar omitir alguna interacción del usuario de la descripción del problema original para verificar si las acciones restantes son suficientes para provocar que se produzca el error.

Una vez que el caso de prueba se ha simplificado lo suficiente, un programador puede utilizar una herramienta de depuración para examinar los estados del programa (valores de las variables, más la pila de llamadas ) y rastrear el origen de los problemas. Alternativamente, se puede utilizar el rastreo . En casos simples, el rastreo consiste simplemente en unas pocas sentencias de impresión que muestran los valores de las variables en puntos específicos durante la ejecución del programa. [ cita requerida ]

Técnicas

Corrección automática de errores

La corrección automática de errores es la reparación automática de errores de software sin la intervención de un programador humano. [15] [16] [17] También se conoce comúnmente como generación automática de parches , reparación automática de errores o reparación automática de programas . [17] El objetivo típico de estas técnicas es generar automáticamente parches correctos para eliminar errores en programas de software sin causar regresión del software . [18]

Depuración de sistemas integrados

A diferencia del entorno de diseño de software informático de propósito general, una característica principal de los entornos integrados es la gran cantidad de plataformas diferentes disponibles para los desarrolladores (arquitecturas de CPU, proveedores, sistemas operativos y sus variantes). Los sistemas integrados, por definición, no son diseños de propósito general: normalmente se desarrollan para una sola tarea (o un pequeño rango de tareas) y la plataforma se elige específicamente para optimizar esa aplicación. Este hecho no solo dificulta la vida a los desarrolladores de sistemas integrados, sino que también dificulta la depuración y la prueba de estos sistemas, ya que se necesitan diferentes herramientas de depuración para diferentes plataformas.

A pesar del desafío de la heterogeneidad mencionado anteriormente, se han desarrollado algunos depuradores comercialmente, así como prototipos de investigación. Ejemplos de soluciones comerciales provienen de Green Hills Software , [19] Lauterbach GmbH [20] y MPLAB-ICD de Microchip (para depurador en circuito). Dos ejemplos de herramientas de prototipos de investigación son Aveksha [21] y Flocklab. [22] Todos ellos aprovechan una funcionalidad disponible en procesadores integrados de bajo costo, un módulo de depuración en chip (OCDM), cuyas señales se exponen a través de una interfaz JTAG estándar . Se comparan en función de cuánto cambio se necesita en la aplicación y la tasa de eventos que pueden seguir.

Además de la tarea típica de identificar errores en el sistema, la depuración de sistemas integrados también busca recopilar información sobre los estados operativos del sistema que luego puede usarse para analizar el sistema: para encontrar formas de mejorar su rendimiento u optimizar otras características importantes (por ejemplo, consumo de energía, confiabilidad, respuesta en tiempo real, etc.).

Anti-depuración

La antidepuración es "la implementación de una o más técnicas dentro del código informático que dificulta los intentos de ingeniería inversa o depuración de un proceso objetivo". [23] Los editores reconocidos la utilizan activamente en esquemas de protección contra copias , pero también la utiliza el malware para complicar su detección y eliminación. [24] Las técnicas utilizadas en la antidepuración incluyen:

Un ejemplo temprano de anti-depuración existía en las primeras versiones de Microsoft Word que, si se detectaba un depurador, generaba un mensaje que decía: "El árbol del mal da frutos amargos. Ahora se está destruyendo el disco del programa", después de lo cual hacía que la unidad de disquete emitiera ruidos alarmantes con la intención de asustar al usuario para que no lo intentara nuevamente. [25] [26]

Véase también

Referencias

  1. ^ "InfoWorld 5 de octubre de 1981". 5 de octubre de 1981. Archivado desde el original el 18 de septiembre de 2019 . Consultado el 17 de julio de 2019 .
  2. ^ "Copia archivada". Archivado desde el original el 21 de noviembre de 2019. Consultado el 17 de diciembre de 2019 .{{cite web}}: CS1 maint: archived copy as title (link)
  3. ^ S. Gill, The Diagnosis of Mistakes in Programmes on the EDSAC Archivado el 6 de marzo de 2020 en Wayback Machine , Actas de la Royal Society of London. Serie A, Ciencias matemáticas y físicas, vol. 206, n.º 1087 (22 de mayo de 1951), págs. 538-554
  4. ^ Robert VD Campbell, Evolución de la computación automática Archivado el 18 de septiembre de 2019 en Wayback Machine , Actas de la reunión nacional de la ACM de 1952 (Pittsburgh), págs. 29-32, 1952.
  5. ^ Alex Orden, Solución de sistemas de desigualdades lineales en una computadora digital, Actas de la reunión nacional ACM de 1952 (Pittsburgh), pág. 91-95, 1952.
  6. ^ Howard B. Demuth, John B. Jackson, Edmund Klein, N. Metropolis, Walter Orvedahl, James H. Richardson, MANIAC doi=10.1145/800259.808982, Actas de la reunión nacional de la ACM de 1952 (Toronto), págs. 13-16
  7. ^ El sistema de tiempo compartido compatible Archivado el 27 de mayo de 2012 en Wayback Machine , MIT Press, 1963
  8. ^ "Depuración post mortem". Archivado desde el original el 17 de diciembre de 2019. Consultado el 17 de diciembre de 2019 .
  9. ^ EJ Gauss (1982). "Pracniques: El algoritmo 'Wolf Fence' para depuración". Comunicaciones de la ACM . 25 (11): 780. doi : 10.1145/358690.358695 . S2CID  672811.
  10. ^ Zeller, Andreas (2005). Por qué fallan los programas: una guía para la depuración sistemática . Morgan Kaufmann. ISBN 1-55860-866-4.
  11. ^ "Kent Beck, Hit 'em High, Hit 'em Low: Regression Testing and the Saff Squeeze" (Pégales alto, pégales bajo: pruebas de regresión y la presión sobre el personal). Archivado desde el original el 11 de marzo de 2012.
  12. ^ Rainsberger, JB (28 de marzo de 2022). "The Saff Squeeze". The Code Whisperer . Consultado el 28 de marzo de 2022 .
  13. ^ Zeller, Andreas (1 de noviembre de 2002). "Aislamiento de cadenas de causa y efecto de programas informáticos". Notas de ingeniería de software de ACM SIGSOFT . 27 (6): 1–10. doi :10.1145/605466.605468. ISSN  0163-5948. S2CID  12098165.
  14. ^ Bond, Michael D.; Nethercote, Nicholas; Kent, Stephen W.; Guyer, Samuel Z.; McKinley, Kathryn S. (2007). "Tracking bad apples" (Rastreando manzanas podridas). Actas de la 22.ª conferencia anual ACM SIGPLAN sobre sistemas y aplicaciones de programación orientada a objetos - OOPSLA '07 . pág. 405. doi :10.1145/1297027.1297057. ISBN 9781595937865. Número de identificación del sujeto  2832749.
  15. ^ Rinard, Martin C. (2008). "Perspectiva técnica. Corrección de errores de programas". Comunicaciones de la ACM . 51 (12): 86. doi :10.1145/1409360.1409381. S2CID  28629846.
  16. ^ Harman, Mark (2010). "Técnicas de aplicación de parches automatizada". Comunicaciones de la ACM . 53 (5): 108. doi :10.1145/1735223.1735248. S2CID  9729944.
  17. ^ ab Gazzola, Luca; Micucci, Daniela; Mariani, Leonardo (2019). "Reparación automática de software: una encuesta" (PDF) . IEEE Transactions on Software Engineering . 45 (1): 34–67. doi : 10.1109/TSE.2017.2755013 . hdl :10281/184798. S2CID  57764123.
  18. ^ Tan, Shin Hwei; Roychoudhury, Abhik (2015). "relifix: Reparación automatizada de regresiones de software". 2015 IEEE/ACM 37th IEEE International Conference on Software Engineering . IEEE. págs. 471–482. doi :10.1109/ICSE.2015.65. ISBN . 978-1-4799-1934-5.S2CID 17125466  .
  19. ^ "Depurador de hardware de SuperTrace Probe". www.ghs.com . Archivado desde el original el 1 de diciembre de 2017. Consultado el 25 de noviembre de 2017 .
  20. ^ "Herramientas de depuración y seguimiento en tiempo real". www.lauterbach.com . Archivado desde el original el 25 de enero de 2022 . Consultado el 5 de junio de 2020 .
  21. ^ Tancreti, Matthew; Hossain, Mohammad Sajjad; Bagchi, Saurabh; Raghunathan, Vijay (2011). "Aveksha". Actas de la 9.ª Conferencia de la ACM sobre sistemas de sensores integrados en red . SenSys '11. Nueva York, NY, EE. UU.: ACM. págs. 288–301. doi :10.1145/2070942.2070972. ISBN . 9781450307185.S2CID14769602  .​
  22. ^ Lim, Roman; Ferrari, Federico; Zimmerling, Marco; Walser, Christoph; Sommer, Philipp; Beutel, Jan (2013). "FlockLab". Actas de la 12.ª conferencia internacional sobre procesamiento de información en redes de sensores . IPSN '13. Nueva York, NY, EE. UU.: ACM. págs. 153–166. doi :10.1145/2461381.2461402. ISBN . 9781450319591.S2CID 447045  .
  23. ^ Shields, Tyler (2008-12-02). «Serie Anti-Debugging – Parte I». Veracode . Archivado desde el original el 2016-10-19 . Consultado el 2009-03-17 .
  24. ^ ab "Protección de software mediante antidepuración Michael N Gagnon, Stephen Taylor, Anup Ghosh" (PDF) . Archivado desde el original (PDF) el 2011-10-01 . Consultado el 2010-10-25 .
  25. ^ Ross J. Anderson (23 de marzo de 2001). Ingeniería de seguridad . Wiley. pág. 684. ISBN 0-471-38922-6.
  26. ^ "Microsoft Word para DOS 1.15". Archivado desde el original el 14 de mayo de 2013. Consultado el 22 de junio de 2013 .

Lectura adicional

Enlaces externos