2011-01-17 10 views
39

Mutation testing ha estado fuera por un tiempo, y parece que hay al menos uno o dos marcos comerciales de prueba de mutaciones para C/C++. ¿Los has usado? ¿Cuáles son tus experiencias? ¿Hay alguna alternativa de código abierto?¿Qué marcos de pruebas de mutaciones existen para C/C++?

+2

Buena pregunta, ya que no sabía acerca de las pruebas de mutación. Gran idea ^^ – neuro

+0

Ver http://stackoverflow.com/questions/246495/what-mutation-testing-frameworks-exist – Raedwald

Respuesta

8

Una breve búsqueda resultó en:

Dicho esto, debe tener en cuenta que las pruebas de mutación no son particularmente útiles (al menos de algunas de las cosas que he leído anteriormente). Es una herramienta interesante cuando se hace frente a afirmaciones duras (metafóricamente hablando) y para garantizar que se tengan en cuenta los requisitos de datos (cuando se trata de situaciones if and only if).

En mi opinión, hay maneras mucho más establecidas de analizar la solidez del código.

+1

Lo que Parasoft (Insure ++) llama "pruebas de mutaciones" no es muy parecido a lo que todos los demás llaman pruebas de mutaciones. Lo "revolucionaron" más allá del reconocimiento. http://www.parasoft.com/jsp/products/article.jsp?articleId=291 –

+0

@Jason: parece una idea interesante, pero la idea sigue siendo la misma ... tomar el código, cambiar algunos operadores (haciéndolos "defectuosos" o "equivalentes"), y ver si las cosas funcionan. Encontrar ambigüedades en el código a veces es útil, pero para ser completamente honesto, podrías escribir tu propia herramienta de prueba de mutaciones (no es difícil) y ahorrar algo de dinero. –

+0

Este es el primer resultado que aparece en google, por lo que pensé que aún podría ser relevante señalar que el enlace MILU conduce a un 404. – Clearer

4

Observe que la herramienta de Parasoft solo genera mutaciones equivalentes. Eso se hace eco del problema descrito en el artículo de Wikipedia sobre pruebas de mutaciones: es difícil distinguir entre mutaciones equivalentes y no equivalentes, por lo que decidieron seguir con el equivalente.

Probé con otra herramienta interesante que puede descubrir invariantes automáticamente en código instrumentado C y C++ - se llama "Daikon". Básicamente, está haciendo lo mismo que una herramienta que genera mutaciones equivalentes, pero en lugar de identificar un código problemático, le proporciona un conjunto de invariantes como "A == B + 1". Creo que las invariantes son más útiles porque cuando miras el invariante descubierto te da la seguridad de que tu código es correcto si invariante tiene sentido, y luego puedes convertir invariantes en afirmaciones y eso te da más confianza cuando cambias el código.

3

un script en Python recta hacia adelante para mutar los programas de C está disponible en:

https://github.com/parunbabu/mutate.py

el autor dice que funciona mejor si el código bajo prueba se comentó-DE y sangría.

y también es gratuito y de código abierto ... creo que esto es lo que está buscando.

Cuestiones relacionadas