En programación informática , una prueba de caracterización (también conocida como Golden Master Testing [1] ) es un medio para describir (caracterizar) el comportamiento real de una pieza de software existente y, por lo tanto, proteger el comportamiento existente del código heredado contra cambios no deseados mediante pruebas automatizadas. . Este término fue acuñado por Michael Feathers. [2]
Descripción general
El objetivo de las pruebas de caracterización es ayudar a los desarrolladores a verificar que las modificaciones realizadas a una versión de referencia de un sistema de software no modificaron su comportamiento de formas no deseadas o no deseadas. Permiten y proporcionan una red de seguridad para la extensión y refactorización de código que no tiene pruebas unitarias adecuadas .
En la clasificación de oráculos de prueba de James Bachs y Michael Bolton, [3] este tipo de prueba corresponde al oráculo histórico. A diferencia del enfoque habitual de las pruebas de software basadas en afirmaciones , el resultado de la prueba no está determinado por valores o propiedades individuales (que se verifican con afirmaciones), sino comparando un resultado complejo del proceso de software probado en su conjunto con el resultado del mismo proceso en una versión anterior del software. En cierto sentido, las pruebas de caracterización invierten las pruebas tradicionales: las pruebas tradicionales verifican propiedades individuales (las incluyen en listas blancas ), donde las pruebas de caracterización verifican todas las propiedades que no se eliminan (en listas negras ).
Al crear una prueba de caracterización, se deben observar qué salidas ocurren para un conjunto dado de entradas. Dada una observación de que el código heredado da una determinada salida basada en entradas dadas, entonces se puede escribir una prueba que afirme que la salida del código heredado coincide con el resultado observado para las entradas dadas. Por ejemplo, si uno observa que f (3.14) == 42, entonces esto podría crearse como una prueba de caracterización. Luego, después de las modificaciones al sistema, la prueba puede determinar si las modificaciones causaron cambios en los resultados cuando se les dieron las mismas entradas.
Desafortunadamente, como con cualquier prueba, generalmente no es posible crear una prueba de caracterización para cada entrada y salida posible. Como tal, muchas personas optan por la cobertura de sucursales o declaraciones. Sin embargo, incluso esto puede resultar difícil. Los redactores de pruebas deben usar su criterio para decidir cuántas pruebas son apropiadas. A menudo es suficiente escribir pruebas de caracterización que solo cubran las entradas y salidas específicas que se sabe que ocurren, prestando especial atención a los casos extremos.
A diferencia de las pruebas de regresión , a las que son muy similares, las pruebas de caracterización no verifican el correcto comportamiento del código, que puede ser imposible de determinar. En cambio, verifican el comportamiento que se observó cuando se escribieron. A menudo, no hay ninguna especificación o conjunto de pruebas disponible, dejando solo las pruebas de caracterización como una opción, ya que el camino conservador es asumir que el comportamiento anterior es el comportamiento requerido. Las pruebas de caracterización son, esencialmente, detectores de cambios. Depende de la persona que analiza los resultados determinar si el cambio detectado era esperado y / o deseable, o inesperado y / o indeseable.
Uno de los aspectos interesantes de las pruebas de caracterización es que, al estar basadas en código existente, es posible generar algunas pruebas de caracterización de forma automática. Una herramienta de prueba de caracterización automatizada ejercitará el código existente con una amplia gama de valores de entrada relevantes y / o aleatorios, registrará los valores de salida (o cambios de estado) y generará un conjunto de pruebas de caracterización. Cuando las pruebas generadas se ejecutan contra una nueva versión del código, producirán una o más fallas / advertencias si esa versión del código ha sido modificada de una manera que cambia un comportamiento previamente establecido.
Al realizar pruebas en el nivel de la GUI , las pruebas de caracterización se pueden combinar con pruebas de monos inteligentes para crear casos de prueba complejos que capturan casos de uso y casos especiales de los mismos.
Ventajas
Las pruebas de Golden Master tienen las siguientes ventajas sobre las pruebas de software tradicionales basadas en afirmaciones:
- Es relativamente fácil de implementar para sistemas heredados complejos .
- Como tal, permite la refactorización.
- Por lo general, es un enfoque sensato para resultados complejos como archivos PDF , XML , imágenes, etc., donde la verificación de todos los atributos relevantes con afirmaciones sería insensible debido a la cantidad de atributos y resultaría en un código de prueba ilegible / no mantenible .
Desventajas
Las pruebas de Golden Master tienen las siguientes desventajas sobre las pruebas de software tradicionales basadas en afirmaciones:
- Depende de la repetibilidad . Los valores volátiles y no deterministas deben enmascararse / eliminarse, tanto del Golden Master como del resultado del proceso. Si es necesario eliminar demasiados elementos o si eliminarlos es demasiado complejo, puede hacer que las pruebas de Golden Master no sean prácticas.
- Depende no solo de que el software sea repetible, sino también de la estabilidad del entorno y los valores de entrada.
- Las pruebas de Golden Master no infieren la exactitud de los resultados. Simplemente ayuda a detectar efectos no deseados de cambios de software.
Referencias
- ^ "JB Rainsberger - Código heredado de supervivencia con Golden Master y muestreo" . Consultado el 30 de mayo de 2017 .
- ^ Plumas, Michael C. Trabajando eficazmente con el código heredado ( ISBN 0-13-117705-2 ).
- ^ Bolton, Michael (enero de 2005). "Prueba sin mapa" (PDF) . Mejor software . Mentes pegajosas / TechWell . Consultado el 30 de mayo de 2017 .
enlaces externos
- Ensayos de caracterización
- Trabajar eficazmente con pruebas de caracterización primero en una serie de tutoriales basados en blogs sobre pruebas de caracterización.
- Change Code Without Fear Artículo del DDJ sobre pruebas de caracterización.