stringtranslate.com

Depuración

En programación informática y desarrollo de software , la depuración es el proceso de encontrar y resolver errores (defectos o problemas que impiden el correcto funcionamiento) dentro de programas , software o sistemas informáticos .

Las tácticas de depuración pueden incluir depuración interactiva , análisis de flujo de control , pruebas unitarias , pruebas de integración , 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 de registro de computadora del Mark II, con una polilla pegada a la página

Los términos "error" y "depuración" se atribuyen popularmente a la almirante Grace Hopper en la década de 1940. [1] Mientras trabajaba en una computadora Mark II en la Universidad de Harvard, sus asociados descubrieron una polilla atrapada en un relé e impidiendo así el funcionamiento, tras lo cual ella comentó que estaban "depurando" el sistema. Sin embargo, el término "bug", en el sentido de "error técnico", se remonta al menos a 1878, cuando Thomas Edison describe los "pequeños fallos y dificultades" de la ingeniería mecánica como "bugs".

Del mismo modo, el término “depuración” parece haber sido utilizado como término en aeronáutica antes de adentrarse en el mundo de la informática. En una entrevista, Grace Hopper comentó que ella no había acuñado el término. [ cita necesaria ] La polilla se ajustaba a la terminología ya existente, por lo que se guardó. Una carta de J. Robert Oppenheimer (director del Proyecto Manhattan de la bomba atómica de la Segunda Guerra Mundial en Los Alamos, Nuevo México) usó el término en una carta al Dr. Ernest Lawrence en UC Berkeley, fechada el 27 de octubre de 1944, [2] sobre el reclutamiento de personal técnico adicional.

La entrada del Diccionario de ingles Oxford para "depurar" cita el término "depuración" utilizado 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) también se refiere a la depuración, esta vez de las cámaras de los aviones. El error de Hopper se encontró el 9 de septiembre de 1947. Los programadores informáticos no adoptaron el término hasta principios de la década de 1950. El artículo fundamental de Gill [3] de 1951 es la primera discusión en profundidad sobre los 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, "depuración" era un término lo suficientemente común como para mencionarlo de pasada sin explicación en la página 1 del manual 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 de un sistema. Las palabras "anomalía" y "discrepancia" pueden usarse, como términos más neutrales , para evitar las palabras "error" y "defecto" o "error", donde podrían implicar que todos los llamados errores , defectos o fallas . debe arreglarse (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 los cambios sean 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 pueda ser más molesto para los usuarios, a largo plazo, que vivir con 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 la gente podría verse tentada a negar la existencia de problemas para que el resultado parezca cero defectos . Teniendo en cuenta las cuestiones colaterales, como la evaluación de impacto de costo versus beneficio, se expandirán técnicas de depuración más amplias 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 se suele realizar con hardware especial como esta unidad de depuración de Xbox destinada a desarrolladores.

La depuración varía en complejidad, desde corregir errores simples hasta realizar tareas largas y tediosas de recopilación, análisis y programación de actualizaciones de datos. 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 del software varía mucho con la complejidad del sistema y también depende, hasta cierto punto, del lenguaje de programación utilizado. y las herramientas disponibles, como los depuradores . Los depuradores son herramientas de software que permiten al programador monitorear 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.

Generalmente, los lenguajes de programación de alto nivel , como Java , facilitan la depuración porque 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, es posible que se necesiten 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 resultar muy útiles. Estos 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 raros, dentro del código fuente, concentrándose más en la semántica (por ejemplo, flujo de datos) que en la sintaxis, como hacen los compiladores e intérpretes.

Existen herramientas tanto comerciales como gratuitas para varios idiomas; algunos afirman poder detectar cientos de problemas diferentes. Estas herramientas pueden resultar extremadamente útiles al comprobar árboles de fuentes muy grandes, donde no resulta práctico realizar recorridos de código. Un ejemplo típico de un problema detectado sería una desreferenciación de una variable que se produce antes de que se le asigne un valor a la variable. Como otro ejemplo, algunas de estas herramientas realizan una verificación estricta de tipos cuando el idioma no lo requiere. Por lo tanto, son mejores para localizar posibles errores en un código sintácticamente correcto. Pero estas herramientas tienen fama de dar 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 (p. ej., hardware de computadora ), así como software de bajo nivel (p. ej., 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 del 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. Esto puede no ser una tarea trivial, especialmente con procesos paralelos y algunos Heisenbugs , por ejemplo. El entorno de usuario específico y el historial de uso también pueden dificultar la reproducción del problema.

Una vez reproducido el error, es posible que sea necesario simplificar la entrada del programa para facilitar la depuración. Por ejemplo, un error en un compilador puede provocar que falle al analizar un archivo fuente de gran tamaño. Sin embargo, después de la simplificación del caso de prueba, sólo unas pocas líneas del archivo fuente original pueden ser suficientes para reproducir el mismo fallo. 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 comprueba si el problema persiste. Al depurar en una GUI , el programador puede intentar omitir algunas interacciones del usuario de la descripción original del problema para verificar si las acciones restantes son suficientes para provocar el error.

Una vez que el caso de prueba esté lo suficientemente simplificado, un programador puede usar 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 seguimiento consiste simplemente en unas pocas declaraciones impresas que generan los valores de las variables en puntos particulares durante la ejecución del programa. [ cita necesaria ]

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] 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 tales técnicas es generar automáticamente parches correctos para eliminar errores en los programas de software sin provocar una regresión del software . [18]

Depuración para sistemas integrados

En contraste con el 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: generalmente se desarrollan para una sola tarea (o una pequeña variedad de tareas) y la plataforma se elige específicamente para optimizar esa aplicación. Este hecho no sólo dificulta la vida de los desarrolladores de sistemas integrados, sino que también dificulta la depuración y 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, algunos depuradores se han desarrollado 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 prototipo de investigación son Aveksha [21] y Flocklab. [22] Todos 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 les compara en función de cuántos cambios se necesitan 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 integrada del sistema también busca recopilar información sobre los estados operativos del sistema que luego puede usarse para analizar el sistema: para encontrar formas de aumentar su rendimiento u optimizar otros aspectos importantes. características (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 realizar ingeniería inversa o depurar un proceso objetivo". [23] Editores reconocidos lo utilizan activamente en esquemas de protección contra copia , pero también lo utiliza el malware para complicar su detección y eliminación. [24] Las técnicas utilizadas en la lucha contra la depuración incluyen:

Un ejemplo temprano de antidepuració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 destrozamos el disco del programa", después de lo cual provocaba el disquete. unidad de disco para emitir ruidos alarmantes con la intención de asustar al usuario para que no vuelva a intentarlo. [25] [26]

Ver 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, El diagnóstico de errores en programas en el EDSAC Archivado el 6 de marzo de 2020 en Wayback Machine , Actas de la Royal Society de Londres. Serie A, Ciencias Físicas y Matemáticas, vol. 206, núm. 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 ACM de 1952 (Pittsburgh), páginas 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. 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ág. 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 postmortem". Archivado desde el original el 17 de diciembre de 2019 . Consultado el 17 de diciembre de 2019 .
  9. ^ EJ Gauss (1982). "Prácnicas: el algoritmo de depuración 'cerca del lobo'". Comunicaciones de la ACM . 25 (11): 780.doi : 10.1145 /358690.358695 . S2CID  672811.
  10. ^ Zeller, Andrés (2005). Por qué fallan los programas: una guía para la depuración sistemática . Morgan Kaufman. ISBN 1-55860-866-4.
  11. ^ "Kent Beck, Golpéalos alto, golpéalos bajo: pruebas de regresión y Saff Squeeze". Archivado desde el original el 11 de marzo de 2012.
  12. ^ Rainsberger, JB (28 de marzo de 2022). "El apretón de Saff". El susurrador de códigos . Consultado el 28 de marzo de 2022 .
  13. ^ Zeller, Andreas (1 de noviembre de 2002). "Aislar cadenas de causa-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. ^ Vínculo, Michael D.; Nethercote, Nicolás; Kent, Stephen W.; Guyer, Samuel Z.; McKinley, Kathryn S. (2007). "Seguimiento de las manzanas podridas". Actas de la 22ª conferencia anual ACM SIGPLAN sobre sistemas y aplicaciones de programación orientada a objetos - OOPSLA '07 . pag. 405. doi :10.1145/1297027.1297057. ISBN 9781595937865. S2CID  2832749.
  15. ^ Rinard, Martín C. (2008). "Perspectiva técnica Parchear errores del programa". Comunicaciones de la ACM . 51 (12): 86. doi :10.1145/1409360.1409381. S2CID  28629846.
  16. ^ Harman, Mark (2010). "Técnicas de parcheo automatizadas". Comunicaciones de la ACM . 53 (5): 108. doi :10.1145/1735223.1735248. S2CID  9729944.
  17. ^ Gazzola, Luca; Micucci, Daniela; Mariani, Leonardo (2019). "Reparación automática de software: una encuesta" (PDF) . Transacciones IEEE sobre ingeniería de software . 45 (1): 34–67. doi : 10.1109/TSE.2017.2755013 . hdl :10281/184798. S2CID  57764123.
  18. ^ Bronceado, Shin Hwei; Roychoudhury, Abhik (2015). "relifix: reparación automatizada de regresiones de software". 2015 IEEE/ACM 37ª Conferencia Internacional IEEE sobre Ingeniería de Software . IEEE. págs. 471–482. doi :10.1109/ICSE.2015.65. ISBN 978-1-4799-1934-5. S2CID  17125466.
  19. ^ "Depurador de hardware 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, Mateo; Hossain, Mohammad Sajjad; Bagchi, Saurabh; Raghunathan, Vijay (2011). "Aveksha". Actas de la novena conferencia ACM sobre sistemas de sensores integrados en red . SenSys '11. Nueva York, NY, Estados Unidos: ACM. págs. 288–301. doi :10.1145/2070942.2070972. ISBN 9781450307185. S2CID  14769602.
  22. ^ Lim, romano; Ferrari, Federico; Zimmerling, Marco; Walser, Christoph; Sommer, Philipp; Beutel, enero (2013). "FlockLab". Actas de la 12ª conferencia internacional sobre procesamiento de información en redes de sensores . IPSN '13. Nueva York, NY, Estados Unidos: ACM. págs. 153-166. doi :10.1145/2461381.2461402. ISBN 9781450319591. S2CID  447045.
  23. ^ Escudos, Tyler (2 de diciembre de 2008). "Serie Anti-Depuración - Parte I". Veracode . Archivado desde el original el 19 de octubre de 2016 . Consultado el 17 de marzo de 2009 .
  24. ^ ab "Protección de software mediante antidepuración Michael N Gagnon, Stephen Taylor, Anup Ghosh" (PDF) . Archivado desde el original (PDF) el 1 de octubre de 2011 . Consultado el 25 de octubre de 2010 .
  25. ^ Ross J. Anderson (23 de marzo de 2001). Ingeniería de Seguridad . Wiley. pag. 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 .

Otras lecturas

enlaces externos