[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Pruebas basadas en mutaciones




Una de las prácticas menos cuestionada de entre las propuestas por
las metodologías ágiles es la realización de pruebas unitarias para
mejorar la calidad del software (Test Driven Development).

Disponer de un "buen" conjunto de pruebas mejora la confianza en el
software desarrollado y facilita la refactorización. Además, el TDD
llevado al extremo --creando el test antes que el código probado
(Test First Design)-- tiene otros efectos secundarios beneficiosos
sobre el diseño, como la reducción de interdependencias (lo que
Robert Martin denomina "serendipitous decoupling" [1]).

Son muchos los desarrolladores que utilizan algún framework xUnit y
aplican iterativamente ciclos test->código->refactorización en su
trabajo diario. Sin embargo, ¿cuántos se preguntan por la bondad o
adecuación del conjunto de pruebas?

En este campo tienen cierta aceptación herramientas de análisis de
la cobertura de código, como EMMA [2] o Clover [3]. Sin embargo, el
hecho de que cierto código sea ejecutado por un test no supone que
necesariamente esté siendo probado, por lo que en mi opinión este
tipo de herramientas no son suficientes por sí solas para determinar
la calidad de los tests.

En este sentido, quiero llamar vuestra atención sobre herramientas
como Jester [4], que testean los tests basándose en mutaciones del
software. La aproximación que siguen estas herramientas consiste en
introducir algún cambio en el código y a continuación ejecutar el
conjunto de tests sobre el código mutante. En principio, un buen
conjunto de tests debería fallar, es decir, detectar cada posible
mutación (no equivalente) del código. Lo contrario indicaría que
falta algún test, o bien, que el código modificado es redundante y
por lo tanto es posible una implementación más sencilla.

Estas herramientas difieren de las herramientas de cobertura de
código en que nos ayudan a detectar código que siendo ejecutado por
los tests, no está siendo realmente testeado. Se trataría por lo
tanto de un tipo de herramientas muy valiosas para comprobar
nuestros tests.

Un saludo,
Rafa


[1]
http://www.objectmentor.com/resources/bookstore/books/AgileSoftwareDevelopmentPPP
[2] http://emma.sourceforge.net/
[3] http://www.cenqua.com/clover/
[4] http://jester.sourceforge.net/


-- 
Rafael Luque Leiva
Software Engineering Manager
Orange Soft - http://www.orange-soft.com

GnuPG Key ID: 0x4B9238A2