2010-10-02 14 views
8

Estoy un poco confundido, ¿qué es mejor usar la prueba de depuración o unidad de escritura? ¿Es esto general o hay casos en los que la depuración es mejor que la prueba unitaria? ¿O debería usar ambos?Cuándo usar pruebas de depuración frente a unidades?

Gracias

+3

Un buen flujo para la resolución de defectos: el cliente se queja de un problema => el defecto se agrega a bug tracker => dev debugs y reproduce => dev escribe unidad de prueba que reproduce => dev correcciones bug => dev ejecuta todas las pruebas unitarias la solución segura no rompió con otra cosa => (repite algunos defectos) => versión => repite –

Respuesta

15

La depuración lo ayudará a diagnosticar el código que no funciona.

pruebas unitarias permiten lo siguiente:

  1. un medio repetibles de determinar que el código funciona, tanto para escenarios comunes y para casos extremos. Le permitirán refactorizar su código con la confianza de que todavía funciona.
  2. una especificación demostrable del código. En la ausencia de una especificación escrita, las pruebas de su unidad son las especificaciones de su código. Esto es particularmente cierto en el mundo Ágil.
  3. una ayuda para construir código bien estructurado. Debido a que desea ejecutar pruebas unitarias independientes, debe escribir sus clases bajo prueba para aceptar diferentes fuentes de datos (a veces burladas), receptores, etc. Al alentar estas abstracciones y separar las preocupaciones, su código estará bien estructurado (puede, de Por supuesto, escriba un código bien estructurado sin pruebas unitarias)

Las pruebas unitarias deben ejecutarse repetidamente (la mayoría de las veces como parte de su proceso de compilación). Si los rompe (en la mayoría de los casos debido a un error de programación), y luego es hora de sacar el depurador para identificar los problemas y corregir el código (o quizás modificar la prueba) en consecuencia.

2

Si usted es capaz de reproducir el error en la unidad de prueba, utilizan una unidad de prueba. Durará una vez que se solucione el error y "protegerá" el código en el futuro contra él.

Si tiene dificultades para encontrar el código ofensivo, la depuración probablemente sea una mejor solución. Pero, en el momento en que sepa dónde está el problema, escriba una prueba, asegúrese de que falle y luego corrija el error.

La depuración lleva más tiempo y es una solución "única". Cuando tiene la opción de probar la unidad, prefiere una unidad de prueba.

5

La prueba de unidad se utiliza para garantizar que el código funcione como se esperaba. Debug se usa cuando necesita encontrar por qué el código no funciona como se espera.

+0

+1, las pruebas unitarias solo ejecutan el sistema (de hecho, depuro el código durante la ejecución de un caso de prueba). es solo que usted tiende a causar menos defectos con las pruebas unitarias, así que, en general, necesita reparar menos defectos. –

1

Las pruebas de la unidad de depuración y escritura son dos cosas diferentes. En teoría, su desarrollo debe ser impulsado por pruebas unitarias que cubran los diferentes escenarios. Puede depurar cuando se da cuenta de que algo está mal con su código y tratar de ver los valores de diferentes variables en tiempo de ejecución, etc. Así que, básicamente, puede depurar solo cuando algo está mal.

1

Otra perspectiva:

hacer siempre pruebas de la unidad de todo lo que se puede hacer. Lo ideal es probar cada componente de forma aislada y luego realizar pruebas de integración de los componentes que colaboran.

Sin embargo, lo que usted está diciendo es una pregunta diferente: si algo se rompe, ¿qué debe hacer ?, intente y escriba una prueba de unidad o ejecute el depurador. Estas no son realmente las opciones. Si algo se rompe y puedes ver el comportamiento en una prueba unitaria, eso es ideal. Pero aún debes encontrar la razón del comportamiento. Ahora sus opciones son entre agregar el registro y ejecutar el depurador, y yo voto con las personas que dicen usar el registro hasta que no pueda.El tiempo del depurador no agrega ningún valor a largo plazo al código. El registro sí.

1

Creo que esta pregunta se puede analizar de una manera más profunda de lo que sugieren algunas de las respuestas ... aunque podría ser una mejor opción para el intercambio de pila de programación.

En primer lugar algunos comentarios sobre la forma en la depuración y pruebas unitarias interactúan

  • Prueba de la unidad primero puede prevenir la depuración
  • Cuando algo es lo suficientemente duro para depurar un enfoque consiste en la depuración parada su problema y empezar a unidad probando cosas relacionadas usando tipos similares de entrada problemática. Puede intentar simplificar la entrada que causa problemas primero (¡suponiendo que su sistema es determinista!)

  • Al igual que en el punto anterior, puede rastrear su código problemático a través del sistema y comenzar a probar las cosas más abajo en la cadena de llamadas con la entrada idéntica

prueba de la unidad puede ser considerado como "depuración antes de tiempo" o "depuración pesimistas", asumiendo que va a tener un error por lo que tratando de depurar inmediatamente. Si está haciendo esto cuando tiene un problema real en mente, es más como adivinar que hay un error en una sección particular del código y que puede obtenerlo adivinando la entrada rota.

Cuestiones relacionadas