2009-06-22 10 views
7

No puedo usar pruebas unitarias para algunas partes del código, así que estoy retrocediendo a las pruebas de regresión. Me gustaría comprobar si mi programa se comporta de la misma manera después de algunas modificaciones. Y por comportamiento me refiero sobre todo a un estado de estructuras de datos. Hasta ahora los estaba serializando en formato de texto legible para los humanos y los había descargado a algunos archivos en la primera ejecución. Luego, en los siguientes vertederos, podría comparar si el estado cambió o no. Y actualícelo si el cambio proviene de una nueva característica y no de un error.Pruebas de regresión en C++

Podría usar una biblioteca (C++) para organizar todo eso. ¿Conoce alguna? Junto con los archivos de volcado proporcionaría una unidad de prueba barata y masiva.

Lo más engorroso son los procedimientos de serialización. A veces simplemente dejo de lado el estado de la memoria, pero cuando es diferente, es difícil realizar una ingeniería inversa. Entonces me cambié a otro método. Ahora, durante la fase de comparación, leo un volcado de memoria en un objeto "fantasma" y ejecuto un método diff especializado (operador == con informes de errores enriquecidos), que a veces es más fácil de escribir que la serialización en formato de texto legible para el ser humano.

Básicamente tengo ganas de reinventar la rueda, por lo que mis preguntas son bastante generales:
¿Cómo se realizan las pruebas de regresión (si se hace)?
¿Utiliza alguna biblioteca/kit de herramientas?
¿Alguna vez ha implementado uno para sus propias necesidades?

Y solo por curiosidad:
¿Alguna vez has querido hacer pruebas de regresión, pero algo te detuvo?

+0

Solo por curiosidad ... ¿por qué no puedes usar pruebas unitarias? – nathan

+0

Principalmente porque el sistema funciona con una gran cantidad de datos y es difícil escribir aparatos para probar las subrutinas. –

Respuesta

2

Puede echar un vistazo a the Boost Test Library . Nunca lo he usado, pero podría cumplir tus deseos.

Cuando estoy trabajando, generalmente escribo casos de prueba simples en nuestro rastreador de prueba para hacer que las pruebas de regresión sean lo más sencillas posible (especialmente para personas que no son yo :).

2

Eche un vistazo a la biblioteca de impulso serialization. Esto le permitirá volcar sus archivos en xml, que luego puede diferenciar para cada versión.

Para crear sus casos de prueba, si todavía no lo hace, use gcov para calcular la cobertura a través de sus funciones. Esto al menos asegurará que tenga todas las declaraciones cubiertas en su función.

pruebas unitarias

Cuando estamos probando código heredado que falta accesorios, a veces usamos un enfoque término medio. Lo que tenemos es una versión ligeramente modificada de nuestra aplicación, que realiza las tareas habituales, pero también puede realizar pruebas de funciones.

No es una unidad de prueba en el sentido estricto, ya que debe suponer que el resto de la biblioteca es correcta, sin embargo, le permite hacer al menos más pruebas de las posibles con regresiones/pruebas del sistema.

1

OK, hay tres cosas que se discuten aquí: pruebas de adaptación al código heredado, pruebas unitarias y pruebas de aceptación/regresión, todo en C++.

En primer lugar, para tomar el código heredado y las pruebas de ajuste, recomiendo comprar una copia de "Working Effectively with Legacy Code" de Michael Feathers.¡Es un libro impresionante y le enseñará que cualquier código heredado puede ser probado por unidades! Utilicé las técnicas de ese libro para adaptar las pruebas a las cosas que todos me dijeron que no podían probarse en una unidad, pero lo hice de todos modos :-).

En segundo lugar, para la prueba unitaria en C++, acabo de escribir una serie de cinco partes de entradas de blog que describen cómo hacerlo en detalle con Visual Studio: C++ Unit Testing With Boost.Test.

Finalmente, para las pruebas de aceptación/regresión he tenido éxito usando Fitnesse. Esto es básicamente un marco de prueba de aceptación que usa una wiki para organizar y escribir las pruebas. La página wiki se atraviesa y se analiza para convertirla en llamadas en un dispositivo de prueba que usted escribe. El accesorio de prueba media entre la prueba, como se describe en una página wiki, y su código de producción. He utilizado este mecanismo para realizar pruebas de regresión en toda la aplicación de extremo a extremo. Combina eso con pruebas unitarias para las clases que estás cambiando y es un mecanismo detector de errores muy poderoso. ¡Las pruebas de regresión se comprimen desde arriba y la unidad prueba el apretón desde abajo y los errores quedan atrapados en el medio! Funcionó muy bien para mí.

Obtenga la distribución de fitnesse principal desde fitnesse.org Puede obtener el corrector de pruebas de C++ para FitNesse en sourceforge. (Soy desarrollador de ese proyecto.) Aún no hemos agregado el soporte SLIM que se encuentra en la wiki principal de fitnesse, pero sí contamos con un buen soporte para varios dispositivos. Esperamos agregar soporte SLIM pronto. Tengo una implementación rudimentaria que debe completarse.

Cuestiones relacionadas