Pregunta

La gente de mi empresa ve las pruebas unitarias como una gran cantidad de trabajo adicional, que ofrece menos beneficios que las pruebas funcionales existentes.¿Valen la pena las pruebas unitarias y de integración?Tenga en cuenta una gran base de código existente que no se diseñó teniendo en cuenta las pruebas.

¿Fue útil?

Solución

(estoy asumiendo que usted está utilizando "prueba de funcionamiento" en el sentido de una prueba que involucra a todo el sistema o aplicación que se está en marcha y funcionando.)

Me prueba de unidad nueva funcionalidad que lo escribí, por tres razones:

  • Me ayuda a código de trabajo más rápido. El tiempo de respuesta para "unidad de prueba falló, fijar código, prueba de la unidad pasó" es generalmente un mucho más corto que "prueba de funcionamiento no, arreglar el código, prueba funcional pasó".
  • Me ayuda a diseñar mi código de una manera más limpia
  • Me ayuda a entender el código y lo que se supone que debe estar haciendo cuando llegue a mantenerla. Si hago un cambio, me dará más confianza que no he roto nada.

(Esto incluye correcciones de errores, según lo sugerido por Epaga.)

No te recomiendo Michael plumas 'trabajar eficazmente con el código heredado' para darle consejos sobre cómo iniciar unidad de prueba de una base de código que no fue diseñado para ello.

Otros consejos

La mayoría de las personas no son conscientes de lo que las pruebas unitarias automatizadas son para:

  1. Para experimentar con una nueva tecnología
  2. Para documentar cómo utilizar una parte del código
  3. Para asegurarse de que un insecto muerto se queda muerto
  4. Para que pueda refactorizar el código
  5. Para permite cambiar las piezas principales del código
  6. Crear una marca de agua baja por debajo del cual la calidad de su producto no puede caer
  7. Aumentar la velocidad de desarrollo, porque ahora, saber que algo funciona (en lugar de esperar hasta que lo hace un cliente informa de un error).

Así que si cualquiera de estas razones por las que aportan un beneficio, pruebas unitarias automatizadas son para usted. Si no, entonces no pierda su tiempo.

Depende de si sus pruebas funcionales están automatizados o realizan manualmente. Si es esto último, entonces cualquier tipo de banco de pruebas automatizado es útil ya que el costo de funcionamiento de esas pruebas unidad / de integración es mucho más baja que la ejecución de pruebas funcionales manuales. Puede mostrar retorno de la inversión real del país. Yo recomendaría empezar con la escritura de algunas pruebas de integración y si el tiempo / presupuesto lo permite en el futuro, echar un vistazo a continuación, la unidad de pruebas.

pruebas unitarias Retroactivamente escritura de código heredado muy a menudo pueden no valer la pena. Seguir con las pruebas funcionales, y automatizarlos.

A continuación, lo que hemos hecho es tener la directriz que cualquier corrección de errores (o nuevas características) deben ir acompañadas de pruebas de unidad al menos probar la corrección. De esta manera se obtiene el proyecto al menos ir en la dirección correcta.

Y yo estoy de acuerdo con Jon Skeet (¿cómo no iba a hacerlo?) En la recomendación de " trabajar eficazmente con el código heredado ", lo que realmente era un útil descremada / lectura.

Da la casualidad, leí un documento última noche en este mismo tema. Los autores comparan los proyectos dentro de los cuatro grupos en Microsoft e IBM, en contraste, en retrospectiva, los proyectos que utilizan tanto las pruebas unitarias y pruebas y proyectos que utilizan las pruebas funcionales solos funcional. Para citar a los autores:

  

"Los resultados de los estudios de casos   indicar que la versión preliminar   densidad de defectos de los cuatro productos   disminución de entre 40% y 90% con respecto   a proyectos similares que no utilizan   la práctica TDD. Subjetivamente, el   equipos experimentaron un aumento de 15 a 35%   en el tiempo de desarrollo inicial después   la adopción de TDD ".

Esto indica que es sin duda vale la pena hacer las pruebas unitarias cuando se agrega una nueva funcionalidad a su proyecto.

Sí valen la pena, ahora soy más rápido en la codificación desde que empecé a probar mi código de unidad. Me pasan menos tiempo corregir errores y más tiempo pensando en lo que mi código debe hacer.

Una aplicación que fue comprado en una consulta relativa a la ing FAT (prueba) de 21.000 consistía en un interruptor de líneas comunicado. La mayoría de las unidades de funcionalidad eran unas pocas docenas a un par de cientos de líneas en una declaración de caso. La aplicación fue construida en varias versiones, así que había muchas secciones #ifdef del interruptor.

No fue diseñado para las pruebas unitarias -. No se tuvo en cuenta en absoluto

(que fue diseñado en el sentido de que había una definida, fácil de comprender arquitectura - malloc una estructura, enviar el bucle principal de un mensaje de usuario con el puntero a la estructura como el lparam y luego liberarla cuando se procesa el mensaje. pero la forma no siguió función, que es el principio fundamental de un buen diseño.)

Para añadir pruebas de unidad a la nueva funcionalidad que significaría una ruptura importante con el patrón; ya sea que se necesita para poner su código en algún lugar que no sea el gran cambio, y el doble de la complejidad del mecanismo de selección de variantes, o hacer una gran cantidad de andamios para colocar los mensajes en la cola para activar la nueva funcionalidad.

Así que aunque es ciertamente deseable prueba de la unidad nueva funcionalidad, que no siempre es práctico si un sistema no está todavía bien factorizado. O bien hay una cantidad significativa de trabajo de refactorizar el sistema para permitir que la unidad de pruebas, o que acaban de banco de pruebas de código y cortar y pegar en el marco existente - y una copia del código del análisis unidad no es la unidad de código de prueba <. / p>

Pruebas cuando quieres saber algo sobre algo.Si sabe que su producto (sistema, unidad, servicio, componente...) va a funcionar, entonces no es necesario probarlo.Si no está seguro de si funcionará, probablemente tenga algunas preguntas al respecto.Si vale la pena responder a esas preguntas es una cuestión de riesgo y prioridades.

Si está seguro de que su producto funcionará y no tiene ninguna pregunta al respecto, todavía hay una pregunta que vale la pena hacerse:¿Por qué no tengo ninguna pregunta?

---Michael B.

Prueba de la unidad de hecho es un trabajo extra, pero vale la pena en el largo plazo. Aquí están los ventajas sobre las pruebas de integración:

  • se obtiene un conjunto de regresión que actúa como una red de seguridad en caso de refactorización - lo mismo puede decirse de las pruebas de integración, aunque puede ser difícil decir si El examen cubre una pieza de código.
  • pruebas unitarias dan una retroalimentación inmediata al modificar el código - y esto retroalimentación puede ser muy precisa, señalando el método en el que la anomalía es.
  • esas pruebas son baratos para funcionar: que correr muy rápido (unos pocos segundos típicamente), sin ninguna instalación o el despliegue, simplemente compilar y prueba . Por lo que se pueden ejecutar con frecuencia.
  • es fácil de añadir una nueva prueba para reproducir un problema una vez que se identifica, y se aumenta la suite de regresión, o para responder a una pregunta ( "¿qué pasaría si       esta función no se llama con un parámetro nula ... ").

Es evidente que existe cierta superposición entre los dos, sino que son complementarios, ya que ambos ofrecen ventajas.

Ahora, como cualquier proceso de ingeniería de software, pruebas tiene que ser de acuerdo taylored  a las necesidades del proyecto.

Con una gran base de código legado, el legado en el sentido de no unidad probada, lo haría   recomendar para restringir las pruebas unitarias a las nuevas características añadidas al código como    pruebas de unidad puede ser difícil de introducir. A este respecto,  Sólo puedo segunda (tercera?) La recomendación del "Trabajo Efectivamente con el código heredado" libro para ayudar a traer la unidad de pruebas en una ya existente código base.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top