Depuración


De Wikipedia, la enciclopedia libre
  (Redirigido desde depurado )
Saltar a navegación Saltar a búsqueda

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

Tácticas de depuración pueden implicar interactiva de depuración, el flujo de control de análisis, pruebas unitarias , pruebas de integración , análisis de archivo de registro , seguimiento a la aplicación o sistema de nivel, volcados de memoria y 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 atascada en un relé que impedía el funcionamiento, por lo que comentó que estaban "depurando" el sistema. Sin embargo, el término "error", en el sentido de "error técnico", se remonta al menos a 1878 y Thomas Edison (ver error de software para una discusión completa). De manera similar, el término "depuración" parece haber sido utilizado como término en aeronáutica antes de ingresar al mundo de las computadoras. De hecho, en una entrevista, Grace Hopper comentó que no estaba acuñando el término.[ cita requerida ]La polilla encajaba con la terminología ya existente, por lo que se salvó. Una carta de J. Robert Oppenheimer (director del proyecto de la bomba atómica "Manhattan" de la Segunda Guerra Mundial en Los Alamos, NM) usó el término en una carta al Dr. Ernest Lawrence en UC Berkeley, fechada el 27 de octubre de 1944, [2] con respecto a la contratación de personal técnico adicional.

La entrada del Oxford English Dictionary para "depurar" cita el término "depuración" utilizado en referencia a las pruebas de motores de avión 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] en 1951 es la primera discusión en profundidad de 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 ser mencionado de pasada sin explicación en la página 1 del manual CTSS . [7]

Peggy A. Kidwell artículo 's acecho el Bug Elusive ordenador [8] se analiza la etimología de 'error' y 'depuración' en mayor detalle.

Alcance

A medida que el software y los sistemas electrónicos se han vuelto generalmente más complejos, las diversas técnicas de depuración comunes se han expandido 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" se pueden utilizar, como términos más neutrales , para evitar las palabras "error" y "defecto" o "error", donde podría haber una implicación de que todos los llamados errores , defectos o errores debe ser fijo (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ía rentable para el sistema, o quizás una nueva versión programada podría hacer innecesarios los cambios. 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 los problemas conocidos (en los que "la cura sería peor que la enfermedad"). Basar las decisiones sobre la aceptabilidad de algunas anomalías puede evitar una cultura de mandato de "cero defectos", en la que las personas pueden verse tentadas a negar la existencia de problemas para que el resultado aparezca como cero defectos.. Teniendo en cuenta los problemas colaterales, como la evaluación de impacto de costo versus beneficio, luego se expandirán técnicas de depuración más amplias para determinar la frecuencia de anomalías (con qué frecuencia ocurren los mismos "errores") para ayudar a evaluar su impacto en el sistema general.

Instrumentos

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 corregir errores simples hasta realizar 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 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 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 ciertas situaciones, las herramientas de software de propósito general que son de naturaleza específica del lenguaje pueden ser 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, el flujo de datos) que en la sintaxis, como hacen los compiladores e intérpretes.

Existen herramientas comerciales y gratuitas para varios idiomas; algunos afirman poder detectar cientos de problemas diferentes. Estas herramientas pueden ser extremadamente útiles al verificar árboles de código fuente muy grandes, donde no es práctico realizar 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 tipo fuerte cuando el idioma no lo requiere. Por lo tanto, son mejores para localizar posibles errores en el código 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 (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

Normalmente, el primer paso de la depuración es intentar reproducir el problema. Esta puede ser una tarea no trivial, por ejemplo, como ocurre con los procesos paralelos y algunos Heisenbugs . Además, el entorno de usuario específico y el historial de uso 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 hacer que se bloquee al analizar un archivo fuente de gran tamaño. 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. Dicha simplificación se puede hacer manualmente, utilizando un enfoque de divide y vencerás . El programador intentará eliminar algunas partes del estuche de prueba original y comprobará si el problema persiste. Al depurar el problema en una GUI , el programador puede intentar omitir alguna interacción del usuario de la descripción original del problema y comprobar si las acciones restantes son suficientes para que aparezcan errores.

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 variables, más la pila de llamadas ) y rastrear el origen del problema (s). Alternativamente, se puede utilizar el rastreo . En casos simples, el rastreo es solo unas pocas declaraciones de impresión, que generan los valores de las variables en ciertos puntos de ejecución del programa. [ cita requerida ]

Técnicas

  • Depuración interactiva
  • La depuración de impresión (o rastreo) es el acto de ver (en vivo o grabado) declaraciones de rastreo, o declaraciones impresas, que indican el flujo de ejecución de un proceso. Esto a veces se llamaprintf debugging , debido al uso de lafunciónprintfen C. Este tipo de depuración fue activado por el comando TRON en las versiones originales dellenguaje deprogramaciónBASICorientado a principiantes. TRON son las siglas de "Trace On". TRON hizo que los números de línea de cada línea de comando BASIC se imprimieran mientras se ejecutaba el programa.
  • La depuración remota es el proceso de depurar un programa que se ejecuta en un sistema diferente al depurador. Para iniciar la depuración remota, un depurador se conecta a un sistema remoto a través de un enlace de comunicaciones, como una red de área local. El depurador puede entonces controlar la ejecución del programa en el sistema remoto y recuperar información sobre su estado.
  • La depuración post-mortem es la depuración del programa después de que ya se ha bloqueado . Las técnicas relacionadas a menudo incluyen varias técnicas de rastreo como examinar archivos de registro, generar una pila de llamadas en caso de caída, [9] y análisis del volcado de memoria (o volcado de núcleo ) del proceso bloqueado. El volcado del proceso puede ser obtenido automáticamente por el sistema (por ejemplo, cuando el proceso ha terminado debido a una excepción no manejada), o por una instrucción insertada por el programador, o manualmente por el usuario interactivo.
  • Algoritmo de "valla de lobo": Edward Gauss describió este algoritmo simple pero muy útil y ahora famoso en un artículo de 1982 para Communications of the ACM de la siguiente manera: "Hay un lobo en Alaska; ¿cómo lo encuentras? Primero construye una valla en el medio del estado, espere a que el lobo aúlle, determine de qué lado de la cerca está. Repita el proceso solo en ese lado, hasta que llegue al punto en el que pueda ver al lobo ". [10] Esto se implementa, por ejemplo, en el sistema de control de versiones de Git como el comando git bisect , que usa el algoritmo anterior para determinar qué confirmación introdujo un error en particular.
  • La depuración de grabación y reproducción es la técnica de crear una grabación de ejecución de programa (por ejemplo, utilizando laherramienta de depuración de rr gratuita de Mozilla; habilitando la depuración / ejecución reversible ), que se puede reproducir y depurar de forma interactiva. Útil para la depuración remota y la depuración de defectos intermitentes, no determinantes y otros defectos difíciles de reproducir.
  • Depuración delta  : una técnica para automatizar la simplificación de casos de prueba. [11] : pág.123 
  • Saff Squeeze  : una técnica de aislamiento de fallas dentro de la prueba mediante la inserción progresiva de partes de la prueba que falla. [12]
  • Seguimiento de la causalidad : existen técnicas para realizar un seguimiento de las cadenas de causa y efecto en el cálculo. [13] Esas técnicas se pueden adaptar para errores específicos, como la eliminación de referencias de puntero nulo. [14] [15]

Depuración de sistemas integrados

En contraste con el entorno de diseño de software de computadora de propósito general, una característica principal de los entornos embebidos es la gran cantidad de plataformas diferentes disponibles para los desarrolladores (arquitecturas de CPU, proveedores, sistemas operativos y sus variantes). Los sistemas integrados no son, por definición, diseños de propósito general: generalmente se desarrollan para una sola tarea (o una pequeña gama de tareas), y la plataforma se elige específicamente para optimizar esa aplicación. Este hecho no solo 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 , [16] Lauterbach GmbH [17] y MPLAB-ICD de Microchip (para depurador en circuito). Dos ejemplos de herramientas de prototipos de investigación son Aveksha [18] y Flocklab. [19] 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 comparan según la cantidad de cambios que se necesitan en la aplicación y la tasa de eventos con los que pueden mantenerse al día.

Además de la tarea típica de identificar errores en el sistema, la depuración del sistema integrado 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 importantes características (por ejemplo, consumo de energía, fiabilidad, respuesta en tiempo real, etc.).

Anti-depuración

Anti-depuración es "la implementación de una o más técnicas dentro del código de computadora que dificulta los intentos de ingeniería inversa o depuración de un proceso de destino". [20] Es utilizado activamente por editores reconocidos en esquemas de protección contra copia , pero también lo utiliza el malware para complicar su detección y eliminación. [21] Las técnicas utilizadas en la lucha contra la depuración incluyen:

  • Basado en API: compruebe la existencia de un depurador utilizando la información del sistema
  • Basado en excepciones: compruebe si se interfiere con las excepciones
  • Bloques de procesos y subprocesos: compruebe si se han manipulado los bloques de procesos y subprocesos
  • Código modificado: verifique las modificaciones de código realizadas por un depurador que maneja los puntos de interrupción del software
  • Basado en hardware y registro: compruebe los puntos de interrupción del hardware y los registros de la CPU
  • Temporización y latencia: verifique el tiempo necesario para la ejecución de las instrucciones.
  • Detectar y penalizar al depurador [21]

Un ejemplo temprano de anti-depuración existía en las primeras versiones de Microsoft Word que, si se detectaba un depurador, producía un mensaje que decía: "El árbol del mal da frutos amargos. Ahora destruye 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. [22] [23]

Ver también

  • Afirmación (desarrollo de software)
  • Corrección automática de errores
  • Patrón de depuración
  • Valores de depuración mágicos
  • Depuración de escopeta
  • Error de programación
  • Pruebas de software
  • Depuración de viajes en el tiempo
  • Tabla de seguimiento
  • Solución de problemas

Referencias

  1. ^ InfoWorld 05 de octubre de 1981
  2. ^ https://bancroft.berkeley.edu/Exhibits/physics/images/bigscience25.jpg
  3. ^ S. Gill, El diagnóstico de errores en los programas de la EDSAC , 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 del cálculo automático , Actas de la reunión nacional de 1952 ACM (Pittsburgh), p 29-32, 1952.
  5. ^ Alex Orden, Solución de sistemas de desigualdades lineales en una computadora digital , Actas de la reunión nacional de la ACM de 1952 (Pittsburgh), p. 91-95, 1952.
  6. ^ Howard B. Demuth, John B. Jackson, Edmund Klein, N.Metrópolis, Walter Orvedahl, James H. Richardson, MANIAC doi = 10.1145 / 800259.808982, Actas de la reunión nacional de 1952 ACM (Toronto), p. 13-16
  7. ^ El sistema de tiempo compartido compatible , MIT Press, 1963
  8. ^ Peggy Aldrich Kidwell, Acechando al esquivo error informático , Anales de la historia de la informática de IEEE, 1998.
  9. ^ "Depuración post mortem" .
  10. ^ EJ Gauss (1982). "Prácticas: el algoritmo 'Wolf Fence' para la depuración" . Comunicaciones de la ACM . 25 (11): 780. doi : 10.1145 / 358690.358695 . S2CID 672811 . 
  11. ^ Zeller, Andreas (2005). Por qué fallan los programas: una guía para la depuración sistemática . Morgan Kaufmann. ISBN 1-55860-866-4.
  12. ^ "Kent Beck, Hit 'em High, Hit' em Low: Pruebas de regresión y el apretón de Saff" . Archivado desde el original el 11 de marzo de 2012.
  13. Zeller, Andreas (1 de noviembre de 2002). "Aislar cadenas de causa-efecto de programas informáticos". Notas de ingeniería del software 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). "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. ^ Cornu, Benoit; Barr, Earl T .; Seinturier, Lionel; Monperrus, Martín (2016). "Casper: seguimiento automático de desreferencias nulas al inicio con trazas de causalidad" . Revista de sistemas y software . 122 : 52–62. arXiv : 1502.02004 . doi : 10.1016 / j.jss.2016.08.062 . ISSN 0164-1212 . 
  16. ^ "Depurador de hardware SuperTrace Probe" . www.ghs.com . Consultado el 25 de noviembre de 2017 .
  17. ^ "Herramientas de depuración y seguimiento en tiempo real" . www.lauterbach.com . Consultado el 5 de junio de 2020 .
  18. Tancreti, Matthew; Hossain, Mohammad Sajjad; Bagchi, Saurabh; Raghunathan, Vijay (2011). "Aveksha: un enfoque de hardware y software para el seguimiento no intrusivo y la creación de perfiles de sistemas integrados inalámbricos". Actas de la novena conferencia de ACM sobre sistemas de sensores integrados en red . SenSys '11. Nueva York, NY, EE. UU.: ACM: 288–301. doi : 10.1145 / 2070942.2070972 . ISBN 9781450307185. S2CID  14769602 .
  19. Lim, Roman; Ferrari, Federico; Zimmerling, Marco; Walser, Christoph; Sommer, Philipp; Beutel, enero (2013). "FlockLab: un banco de pruebas para el seguimiento distribuido, sincronizado y la creación de perfiles de sistemas integrados inalámbricos". Actas de la 12ª Conferencia Internacional sobre Procesamiento de Información en Redes de Sensores . IPSN '13. Nueva York, NY, EE.UU .: ACM: 153–166. doi : 10.1145 / 2461381.2461402 . ISBN 9781450319591. S2CID  447045 .
  20. Shields, Tyler (2 de diciembre de 2008). "Serie anti-depuración - Parte I" . Veracode . Consultado el 17 de marzo de 2009 .
  21. ^ a b "Protección de software mediante anti-depuración Michael N Gagnon, Stephen Taylor, Anup Ghosh" (PDF) . Archivado desde el original (PDF) el 2011-10-01 . Consultado el 25 de octubre de 2010 .
  22. Ross J. Anderson (23 de marzo de 2001). Ingeniería de seguridad . pag. 684. ISBN 0-471-38922-6.
  23. ^ "Microsoft Word para DOS 1.15" .

Otras lecturas

  • Agans, David J. (2002). Depuración: las nueve reglas indispensables para encontrar incluso los problemas de software y hardware más esquivos . AMACOM. ISBN 0-8144-7168-4.
  • Blunden, Bill (2003). Exorcismo de software: un manual para depurar y optimizar el código heredado . APulse. ISBN 1-59059-234-4.
  • Ford, Ann R .; Teorey, Toby J. (2002). Depuración práctica en C ++ . Prentice Hall. ISBN 0-13-065394-2.
  • Grötker, Thorsten; Holtmann, Ulrich; Keding, Holger; Wloka, Markus (2012). La Guía del desarrollador para la depuración, segunda edición . Crea espacio. ISBN 978-1-4701-8552-7.
  • Metzger, Robert C. (2003). Depurar mediante el pensamiento: un enfoque multidisciplinario . Prensa digital. ISBN 1-55558-307-5.
  • Myers, Glenford J (2004). El arte de las pruebas de software . John Wiley & Sons Inc. ISBN 0-471-04328-1.
  • Robbins, John (2000). Aplicaciones de depuración . Microsoft Press. ISBN 0-7356-0886-5.
  • Telles, Matthew A .; Hsieh, Yuan (2001). La ciencia de la depuración . El Grupo Coriolis. ISBN 1-57610-917-8.
  • Vostokov, Dmitry (2008). Antología de análisis de volcado de memoria Volumen 1 . OpenTask. ISBN 978-0-9558328-0-2.
  • Zeller, Andreas (2009). Por qué fallan los programas, segunda edición: una guía para la depuración sistemática . Morgan Kaufmann. ISBN 978-0-1237-4515-6.

enlaces externos

  • Patrones de análisis de volcados de  fallos: artículos detallados sobre el análisis y la búsqueda de errores en los volcados de fallos
  • Aprenda los conceptos básicos de la depuración  : cómo mejorar sus habilidades de depuración, un buen artículo en IBM developerWorks (archivado desde el original el 18 de febrero de 2007)
  • Depuración basada en complementos para sistemas integrados
  • Prueba y depuración de sistemas integrados - acerca de la generación de entrada digital  - resultados de una encuesta sobre prueba y depuración de sistemas integrados, Byte Paradigm (archivado desde el original el 12 de enero de 2012)
Obtenido de " https://en.wikipedia.org/w/index.php?title=Debugging&oldid=1042289963 "