Cómo mejorar en la depuración de código

Mejoras en la depuración haciéndolo mucho y de tantas maneras diferentes como sea posible. En otras palabras, acumulando experiencia. Piense en cada situación posible en la que su código podría romperse. Piense en los errores / peculiaridades del compilador / intérprete que pueden hacer que el programa funcione de manera inesperada. Piense en cualquier acción extraña que el usuario del programa pueda tomar. Piense en errores estúpidos como errores tipográficos y variables no inicializadas que probablemente podría haber pasado por alto. Intente modelar todas estas situaciones en sus sesiones de depuración. Realice pruebas de estrés y otros tipos de pruebas automáticas mientras registra todos los pasos de su programa. Pero tenga en cuenta que apagar el registro puede hacer que se comporte de manera diferente. De hecho, siempre tenga en cuenta que el programa se comportará de manera diferente en una situación real con las herramientas de depuración desconectadas que en una sesión de depuración, y en muchos casos no conocerá la configuración de hardware y software del usuario y tampoco podrá recopilar suficiente depuración información del sistema del usuario. En mi experiencia, hubo un caso en que un controlador de adaptador de video cambió el estado del indicador de un procesador que causó la pérdida de precisión en los cálculos en el programa en el que estábamos trabajando (que no tenía relación alguna con el controlador de video) y, por supuesto, sucedió en momentos totalmente al azar. Imagine qué tipo de esfuerzo, experimentar y adivinar se necesita para identificar tal falla. Cuando identifique un error, intente llegar a una teoría plausible sobre por qué sucedió (si no es inmediatamente obvio, por supuesto) y verifique su teoría repitiendo la condición que podría causar el error. Algunos errores son muy difíciles de atrapar, especialmente los relacionados con subprocesos múltiples. A menudo aparecen en momentos aparentemente aleatorios y no se pueden capturar en una sola sesión de depuración.

La depuración es más fácil cuando escribe código que se endereza tanto como sea posible, para que pueda identificar fácilmente los errores. Y creo que la depuración se trata más de identificar los errores porque en la mayoría de los casos la corrección es simple.
1.Escritura de código significativo. Ni siquiera es un cliché: dar nombres relevantes a las variables, describir la lógica en breves comentarios, ya sabes, todo esto es como primeros auxilios cuando te golpean los errores.
2.Utilizar construcciones de lenguaje de manera eficiente; Mantenga el código simple.
3.Utilice un depurador. Si no, su código es demasiado corto, es preferible usar un depurador proporcionado por el entorno en el que se encuentra. Es útil aprender cómo usar un depurador.
4. Codificación de prácticas. Cuanto más codifique, más se familiarizará con los errores y más rápido los corregirá.
5. No te rindas. Para mí, esto es lo más importante a tener en cuenta.

Estoy de acuerdo con las respuestas anteriores. Además, descubrí que cuando no podía encontrar un error, le pedía a mi compañero de cubículo que escuchara mientras le explicaba cómo mi programa no se estaba comportando correctamente a pesar de que era perfecto en todos los sentidos. Tuve cuidado de explicar cada detalle (no era muy brillante). Él asintió y ofreció sugerencias. Realmente funcionó; Siempre encontré el error. Pero a veces, el compañero de cubículo no estaba disponible o se cansaba de escucharme a mí. Descubrí que podía explicar internamente mi código a un fantasma de otra persona. Preferiblemente alguien que no entendió completamente el problema y / o el idioma. Esto realmente funcionó mejor.

Además, hay algunas “áreas problemáticas” que probablemente sean fuentes de errores. Por ejemplo, ¿cuántos árboles puede plantar a lo largo de una cerca de 10 ‘, un espacio de 2’ entre cada árbol? Esta tarea surge con frecuencia y si obtienes 5 en lugar de 6, tienes un error. Una iteración inesperada me haría buscar este error. Otro es usar variables descartables como ‘N’ para controlar un ciclo, olvidando y usando N para algún otro propósito dentro del ciclo. Un bucle que no termina correctamente me haría sospechar este error.

Si te refieres a la depuración local , mientras estás desarrollando / probando, te sugiero que te acostumbres a los puntos de interrupción, depuración por pasos e inspeccionar objetos / variables . Literalmente, puede ingresar al código y verificar lo que necesite. Evite las impresiones , parecen tener un buen costo / beneficio al principio, pero después de un tiempo tendrá un montón de registros / mensajes de consola que nunca recordará de dónde provino.

Recomendaría impresiones / mensajes de registro solo para producción , porque una vez que ocurrió el error, puede ser difícil de reproducir sin registrar las actividades. Teniendo en cuenta que la producción puede generar grandes cantidades de registros, solo debe tener la información necesaria para comprender los eventos.

Esta pregunta podría tener mejores respuestas si especifica el idioma y los IDE preferidos.

La mejor manera de depurar código es aprender a leer y comprender rápidamente las bases de código. Debes darte cuenta de que leer el código es en lo que pasas la mayor parte del tiempo cuando escribes software. Para hacer eso, gradualmente comenzaría a contribuir a proyectos cada vez más grandes.

El siguiente paso sería aprender algunas mejores prácticas que harían que el código sea más depurable:
* inserción de declaraciones de registro en lugares relevantes
* Instrumentar el código con métricas (si es necesario)
* Unidad de escritura / funcional / pruebas de integración para su código

Sobre la parte de las pruebas: es bastante importante. Un buen conjunto de pruebas que se ejecute rápidamente lo ayudará a depurar errores mucho más fácilmente que cualquier otra estrategia.

Además, cuando realmente necesita ensuciarse las manos, una de mis técnicas favoritas es la búsqueda binaria del error. Digamos que estoy buscando el momento en que una variable se convierte en -1. Luego inserto declaraciones de impresión en 3 puntos e imprimo la variable: principio, medio y final. Entonces puedo descubrir fácilmente cuál es la secuencia que lo modifica y repetir la técnica para subdividirla aún más hasta que llegue a una sola declaración.

Practique lo siguiente en su producto:

  • Coloque puntos de interrupción en el código al azar, ejecute su aplicación para alcanzar el punto de interrupción, luego siga la ejecución del código, entendiendo lo que hace y por qué (muy importante)
  • Ejecutar algún escenario en la aplicación y recopilar registros. Mire los registros y comprenda por qué se registraron. Acorte el escenario a solo un clic y comprenda los registros.
  • Prueba tu aplicación y encuentra errores. O mire los errores existentes archivados por otros o sus clientes. Intenta arreglarlos. Comience con la fácil si es necesario.
  • Al depurar errores o problemas, explore escenarios relacionados. Si un error se reproduce en un escenario, ¿también se manifiesta en otro escenario relacionado? Si no es así, ¿por qué no? ¿Qué podría ser diferente en esos escenarios relacionados que está causando el error en uno pero no en otros escenarios? Esta idea a menudo ayuda a llegar a la causa raíz más rápido. Como ejemplo en una aplicación de Android, un error puede manifestarse en modo horizontal pero no vertical. Eso acorta mucho la cantidad de código que desea depurar. Y posiblemente también te llegue a la solución.
  • Mire las revisiones de código de otros desarrolladores en su equipo, personas más experimentadas con el proyecto. Comprenda sus cambios e intente aprender de ellos. Si estuvieras haciendo ese cambio, ¿cómo lo harías mejor, o hay algo que hicieron que no podrías haber inventado?

No estoy seguro de qué lenguaje de programación usa, pero muchos IDE ahora tienen la opción de agregar puntos de interrupción en funciones / métodos. Agregar puntos de interrupción y ejecutar el programa y seguir paso a paso lo ayudará a depurar dónde reside el error.

Además, puede usar declaraciones de impresión de prueba entre sus líneas de código existentes para verificar hasta dónde llega el código y dónde ocurren los errores de tiempo de ejecución.

Estoy de acuerdo con Andrei-Adnan Ismail. Aprenda a usar un depurador, registrar información relevante, escribir buenos conjuntos de pruebas y comprender el código de otras personas.

Para agregar a esto: nunca, nunca, busque probar que su código es completamente perfecto y libre de errores. No lo es, nunca lo será, y no es realmente relevante. Por el contrario, busca romper tu código. Cuando depure, debe tener la voluntad de demostrar que su código tiene un error.

Los fundamentos de la depuración!

More Interesting

¿Cuáles son algunos de los principales desafíos al diseñar sistemas distribuidos y cuáles son las soluciones más populares?

Cómo desarrollarme en las pruebas de software

En la programación, ¿los proyectos grandes son solo varios módulos juntos?

¿Es cierto que Infosys asigna tecnologías al azar basadas en los requisitos del negocio? ¿Qué pasa si alguien se atasca en una tecnología que no tiene alcance futuro? ¿Cómo se pueden cambiar las tecnologías, cuando todas las empresas piden experiencia en lugar de habilidad?

¿Cuál es el mejor software de generación de plomo para la industria manufacturera / industrial?

En términos de complejidad técnica, ¿cuál es el sitio web más avanzado en Internet?

¿Cómo publico mi propio patrón de diseño de software?

¿Qué es un semáforo contando?

¿Es normal tener miedo de una carrera en desarrollo de software a los 30 años?

Soy un estudiante de ingeniería. Estoy harto de la ingeniería a pesar de que estoy haciendo software. También estoy bastante harto de la vida en India. Quiero establecerme en Estados Unidos, principalmente en Nueva York. ¿Qué tipo de trabajos puedo obtener y cómo puedo conseguirlos para que me ayuden a vivir allí?

¿Cuáles son los mejores softwares de desarrollo rápido de aplicaciones?

¿Cuáles son las estrategias para migrar un equipo de Subversion a otro sistema de control de fuente?

¿Por qué ya no hay puestos para ingenieros de control de calidad manuales?

Si no voy a una escuela superior, ¿debería hacer ingeniería informática en lugar de ciencias de la computación para ser competitivo para las oportunidades de trabajo de software?

¿Qué es lo mejor / lo peor de trabajar en Facebook?