Todos estamos escribiendo tests y tenemos controlado el code coverage, pero 100% code coverage solo significa que todas las líneas se han ejecutado al menos una vez por nuestros tests, pero no dice nada sobre la precisión de los tests o la integridad de los casos de uso, y es por eso que el mutation testing es muy importante.
Mutation testing se utiliza para diseñar nuevos tests y evaluar la calidad de los tests existentes. La idea es modificar el código cubierto por tests de forma sencilla, comprobando si el conjunto de tests existente para este código detectará y rechazará las modificaciones.
Cada cambio en el código se llama mutante y da como resultado una versión alterada del programa, llamada mutación. La calidad de los tests se mide en función del porcentaje de mutación eliminada.
Este documento contiene información sobre pruebas de software. Explica las diferentes fases y niveles de prueba como pruebas unitarias, de integración, de sistema y de aceptación. También describe las ventajas de automatizar las pruebas como mayor rapidez de ejecución y menos recursos necesarios.
El documento describe las pruebas unitarias en Java. Explica que es responsabilidad del programador probar su código para asegurarse de que funcione correctamente. También describe cómo se pueden realizar pruebas manuales creando clases de prueba que ejecuten los métodos con diferentes valores de entrada y validen los resultados. Finalmente, introduce el marco JUnit, el cual automatiza el proceso de pruebas a través de anotaciones que indican qué métodos son pruebas y validan sus resultados.
Este documento presenta conceptos clave relacionados con el desarrollo de software e ingeniería de calidad como testing, calidad, errores, defectos y fallas. Explica las diferencias entre aseguramiento de calidad (QA) y control de calidad (QC), y describe diferentes técnicas de testing estático y dinámico como revisiones, partición de equivalencias y automatización de pruebas.
1. El documento introduce los conceptos de pruebas de aceptación y la importancia de probar programas antes de entregarlos o aceptarlos. 2. Se describe a JUnit, un paquete Java para automatizar pruebas de clases. JUnit permite crear clases de prueba con métodos que comiencen por "test" para ejecutar casos de prueba. 3. Se explican funciones como assertEquals para comparar resultados esperados vs. obtenidos.
JUnit es una herramienta de código abierto para realizar pruebas unitarias de software escrito en Java. Permite automatizar la ejecución de casos de prueba para validar que las clases y métodos cumplen con su especificación. Se han desarrollado plugins para IDEs como Eclipse que facilitan la creación de casos de prueba. JUnit incluye métodos como assertEquals para comparar resultados esperados vs. obtenidos y detectar errores.
Las instrucciones de C++ controlan cómo y en qué orden se manipulan los objetos en un programa. Existen varios tipos de instrucciones como declarativas, de asignación, selectivas, repetitivas, de entrada y salida de datos, y de bifurcación. Las instrucciones declarativas introducen nombres en un programa como variables y librerías, mientras que las instrucciones de asignación dan valores a las variables.
Las instrucciones de C++ controlan cómo y en qué orden se manipulan los objetos en un programa. Existen varios tipos de instrucciones como declarativas, de asignación, selectivas, repetitivas, de entrada y salida de datos, y de bifurcación. Las instrucciones declarativas introducen nombres en un programa como variables y librerías, mientras que las instrucciones de asignación dan valores a las variables.
Este documento contiene información sobre pruebas de software. Explica las diferentes fases y niveles de prueba como pruebas unitarias, de integración, de sistema y de aceptación. También describe las ventajas de automatizar las pruebas como mayor rapidez de ejecución y menos recursos necesarios.
El documento describe las pruebas unitarias en Java. Explica que es responsabilidad del programador probar su código para asegurarse de que funcione correctamente. También describe cómo se pueden realizar pruebas manuales creando clases de prueba que ejecuten los métodos con diferentes valores de entrada y validen los resultados. Finalmente, introduce el marco JUnit, el cual automatiza el proceso de pruebas a través de anotaciones que indican qué métodos son pruebas y validan sus resultados.
Este documento presenta conceptos clave relacionados con el desarrollo de software e ingeniería de calidad como testing, calidad, errores, defectos y fallas. Explica las diferencias entre aseguramiento de calidad (QA) y control de calidad (QC), y describe diferentes técnicas de testing estático y dinámico como revisiones, partición de equivalencias y automatización de pruebas.
1. El documento introduce los conceptos de pruebas de aceptación y la importancia de probar programas antes de entregarlos o aceptarlos. 2. Se describe a JUnit, un paquete Java para automatizar pruebas de clases. JUnit permite crear clases de prueba con métodos que comiencen por "test" para ejecutar casos de prueba. 3. Se explican funciones como assertEquals para comparar resultados esperados vs. obtenidos.
JUnit es una herramienta de código abierto para realizar pruebas unitarias de software escrito en Java. Permite automatizar la ejecución de casos de prueba para validar que las clases y métodos cumplen con su especificación. Se han desarrollado plugins para IDEs como Eclipse que facilitan la creación de casos de prueba. JUnit incluye métodos como assertEquals para comparar resultados esperados vs. obtenidos y detectar errores.
Las instrucciones de C++ controlan cómo y en qué orden se manipulan los objetos en un programa. Existen varios tipos de instrucciones como declarativas, de asignación, selectivas, repetitivas, de entrada y salida de datos, y de bifurcación. Las instrucciones declarativas introducen nombres en un programa como variables y librerías, mientras que las instrucciones de asignación dan valores a las variables.
Las instrucciones de C++ controlan cómo y en qué orden se manipulan los objetos en un programa. Existen varios tipos de instrucciones como declarativas, de asignación, selectivas, repetitivas, de entrada y salida de datos, y de bifurcación. Las instrucciones declarativas introducen nombres en un programa como variables y librerías, mientras que las instrucciones de asignación dan valores a las variables.
Seminario de introducción a Test Driven Development organizado por Paradigma Tecnológico y javaHispano. El seminario fue impartido por Carlo Scarioni el 23 de Abril 2010
Mas info: http://www.paradigmatecnologico.com/historico/seminario-de-test-development-driven/
¿En qué la estamos regando en pruebas de software?Agustin Ramos
El documento discute diferentes tipos y técnicas de pruebas de software, incluyendo pruebas basadas en valores de entrada, condiciones de frontera, valores no esperados, combinaciones de pruebas, rutas de ejecución, cobertura de código, pruebas guiadas por datos, pruebas pairwise, y pruebas basadas en riesgos. El autor argumenta que la cobertura de código por sí sola no es suficiente y que se deben considerar factores como los valores de entrada y las rutas de ejecución para realizar pruebas efectivas.
Este documento presenta una formación sobre pruebas unitarias (test unitarios). Explica los tipos de pruebas, incluyendo pruebas funcionales, de integración, de rendimiento y pruebas unitarias. Detalla los beneficios de las pruebas unitarias y la estructura básica de una prueba unitaria (arreglar, actuar, afirmar). También cubre conceptos como dobles de prueba (mocks, stubs, spies), cómo escribir pruebas unitarias efectivas y herramientas para pruebas unitarias
Este documento presenta diferentes conceptos y enfoques relacionados con las pruebas de software. Define conceptos clave como falla, falta y error, y describe objetivos, principios y tipos de pruebas como pruebas de unidad, integración y sistema. También explica enfoques como prueba de caja blanca, negra y diferentes técnicas como pruebas de condición, flujo de datos y bucles.
(1) El documento presenta una introducción al Test Driven Development (TDD), incluyendo los fundamentos y patrones de TDD. (2) Explica los conceptos de pruebas unitarias, cómo escribir tests primero antes del código, y los pasos del proceso TDD. (3) También cubre patrones útiles para TDD como test list, assert first y evident data que ayudan a escribir tests claros y legibles.
Este documento describe los métodos de prueba de software. Explica que la prueba de software es un proceso para encontrar errores ejecutando un programa. Describe diferentes tipos de pruebas como pruebas de caja blanca, pruebas de caja negra y pruebas aleatorias. También explica principios clave como probar diferentes caminos y condiciones, y generar casos de prueba para datos válidos e inválidos. El objetivo final de la prueba de software es encontrar errores para mejorar la calidad del programa.
Este documento describe los métodos de prueba de software. Explica que la prueba de software consiste en ejecutar un programa para encontrar errores. También define conceptos clave como error, defecto y fallo. Por último, detalla diferentes enfoques para la prueba de software como las pruebas de caja blanca y negra.
DeSymfonyDay 2014 - To mock or not to mock - SpanishJordi Llonch
Este documento presenta una charla sobre pruebas de software. La charla discute los tipos de pruebas unitarias, de integración y de aceptación y los beneficios y desafíos de cada una. También cubre temas como las escuelas de pruebas unitarias, el uso de dobles de prueba, y marcos de prueba como PHPUnit y Mockery. La charla concluye recomendando separar la lógica de prueba de los datos de prueba y minimizar el uso de dobles de prueba.
Este documento presenta una charla sobre pruebas de software. Brevemente describe los tipos principales de pruebas (pruebas unitarias, de integración y de aceptación), los dobles de prueba y varias bibliotecas para crear mocks en PHP. También discute enfoques como las escuelas de pruebas unitarias de Chicago y Londres y recomienda minimizar el uso de dobles.
DeSymfonyDay 2014 - To mock or not to mock - SpanishJordi Llonch
Este documento presenta una charla sobre pruebas de software. La charla discute los tipos de pruebas unitarias, de integración y de aceptación y los beneficios y desafíos de cada una. También cubre temas como las escuelas de pruebas unitarias, el uso de dobles de prueba, y marcos de prueba como PHPUnit y Mockery. La charla concluye recomendando separar la lógica de prueba de los datos de prueba y minimizar el uso de dobles de prueba.
Este documento proporciona una introducción a las pruebas de calidad de software (QA) y cubre varios temas clave como: las diferentes categorías de pruebas como las pruebas unitarias, de aceptación y de regresión; herramientas comunes de QA como Jenkins, Selenium y TestNG; y un ejemplo de cómo se podría estructurar un proyecto de pruebas automatizadas con Selenium. El documento también explica conceptos como integración continua, pruebas de caja negra y blanca, y cómo QA debería involucrarse a lo larg
El documento habla sobre la importancia de los test unitarios y el framework JUnit para realizarlos. Explica que los tests unitarios deben ser automatizables, completos, repetibles e independientes. También introduce el concepto de Test-Driven Development (TDD) y cómo se usa JMock para simular objetos con los que interactúa el código bajo prueba sin necesidad de crearlos realmente.
Este documento trata sobre pruebas de software. Explica que las pruebas de software son el proceso de ejecutar un programa con el objetivo de detectar errores y fallas. También describe diferentes tipos de pruebas como pruebas unitarias, de integración y funcionales. Resalta la importancia de planificar las pruebas de software y automatizarlas para mejorar la calidad y reducir costos.
Este documento presenta una introducción a la prueba de software, definiendo prueba de software, errores, defectos y fallas. Explica principios como evitar probar su propio código y incluir entradas inválidas. Describe niveles de pruebas como unitario e integración y métodos como caja negra y caja blanca. Incluye un ejemplo de caso de prueba y define actividades de un plan de pruebas como el alcance, entorno de pruebas y criterios de aceptación.
Este documento presenta una introducción a los conceptos y tipos de pruebas de software más comunes. Explica los principios fundamentales de las pruebas y describe los diferentes tipos de pruebas funcionales como las pruebas unitarias, de integración, regresión, de humo, de extremo a extremo e de interfaz de usuario. También cubre los tipos de pruebas no funcionales como las pruebas de rendimiento, estrés y de aceptación del usuario. El objetivo es familiarizar al lector con las mejores prácticas de pruebas
Cursos gratis de programación en Java. JUnit. Orientado a Grado, DAM y DAW. Otros cursos disponibles para Android, Swift, Base de datos, javascript, servicios y procesos...
Este documento presenta información sobre la verificación de software mediante pruebas. Explica conceptos clave como error, defecto y fallo, y describe diferentes tipos de pruebas como pruebas de unidad, integración y sistema. También cubre técnicas de prueba como caja blanca, caja negra y valores límite, y principios como que las pruebas solo pueden mostrar la presencia de defectos, no su ausencia.
El documento describe el método de desarrollo guiado por pruebas (TDD). TDD implica escribir primero las pruebas unitarias, luego implementar el código mínimo necesario para que las pruebas pasen, y finalmente refactorizar el código. El propósito de TDD es especificar los requisitos a través de las pruebas antes de escribir el código funcional. Siguiendo este proceso, se produce software de alta calidad, modular y preparado para cambios.
ESPERAMOS QUE ESTA INFOGRAFÍA SEA UNA HERRAMIENTA ÚTIL Y EDUCATIVA QUE INSPIRE A MÁS PERSONAS A ADENTRARSE EN EL APASIONANTE CAMPO DE LA INGENIERÍA CIVIŁ. ¡ACOMPAÑANOS EN ESTE VIAJE DE APRENDIZAJE Y DESCUBRIMIENTO
Seminario de introducción a Test Driven Development organizado por Paradigma Tecnológico y javaHispano. El seminario fue impartido por Carlo Scarioni el 23 de Abril 2010
Mas info: http://www.paradigmatecnologico.com/historico/seminario-de-test-development-driven/
¿En qué la estamos regando en pruebas de software?Agustin Ramos
El documento discute diferentes tipos y técnicas de pruebas de software, incluyendo pruebas basadas en valores de entrada, condiciones de frontera, valores no esperados, combinaciones de pruebas, rutas de ejecución, cobertura de código, pruebas guiadas por datos, pruebas pairwise, y pruebas basadas en riesgos. El autor argumenta que la cobertura de código por sí sola no es suficiente y que se deben considerar factores como los valores de entrada y las rutas de ejecución para realizar pruebas efectivas.
Este documento presenta una formación sobre pruebas unitarias (test unitarios). Explica los tipos de pruebas, incluyendo pruebas funcionales, de integración, de rendimiento y pruebas unitarias. Detalla los beneficios de las pruebas unitarias y la estructura básica de una prueba unitaria (arreglar, actuar, afirmar). También cubre conceptos como dobles de prueba (mocks, stubs, spies), cómo escribir pruebas unitarias efectivas y herramientas para pruebas unitarias
Este documento presenta diferentes conceptos y enfoques relacionados con las pruebas de software. Define conceptos clave como falla, falta y error, y describe objetivos, principios y tipos de pruebas como pruebas de unidad, integración y sistema. También explica enfoques como prueba de caja blanca, negra y diferentes técnicas como pruebas de condición, flujo de datos y bucles.
(1) El documento presenta una introducción al Test Driven Development (TDD), incluyendo los fundamentos y patrones de TDD. (2) Explica los conceptos de pruebas unitarias, cómo escribir tests primero antes del código, y los pasos del proceso TDD. (3) También cubre patrones útiles para TDD como test list, assert first y evident data que ayudan a escribir tests claros y legibles.
Este documento describe los métodos de prueba de software. Explica que la prueba de software es un proceso para encontrar errores ejecutando un programa. Describe diferentes tipos de pruebas como pruebas de caja blanca, pruebas de caja negra y pruebas aleatorias. También explica principios clave como probar diferentes caminos y condiciones, y generar casos de prueba para datos válidos e inválidos. El objetivo final de la prueba de software es encontrar errores para mejorar la calidad del programa.
Este documento describe los métodos de prueba de software. Explica que la prueba de software consiste en ejecutar un programa para encontrar errores. También define conceptos clave como error, defecto y fallo. Por último, detalla diferentes enfoques para la prueba de software como las pruebas de caja blanca y negra.
DeSymfonyDay 2014 - To mock or not to mock - SpanishJordi Llonch
Este documento presenta una charla sobre pruebas de software. La charla discute los tipos de pruebas unitarias, de integración y de aceptación y los beneficios y desafíos de cada una. También cubre temas como las escuelas de pruebas unitarias, el uso de dobles de prueba, y marcos de prueba como PHPUnit y Mockery. La charla concluye recomendando separar la lógica de prueba de los datos de prueba y minimizar el uso de dobles de prueba.
Este documento presenta una charla sobre pruebas de software. Brevemente describe los tipos principales de pruebas (pruebas unitarias, de integración y de aceptación), los dobles de prueba y varias bibliotecas para crear mocks en PHP. También discute enfoques como las escuelas de pruebas unitarias de Chicago y Londres y recomienda minimizar el uso de dobles.
DeSymfonyDay 2014 - To mock or not to mock - SpanishJordi Llonch
Este documento presenta una charla sobre pruebas de software. La charla discute los tipos de pruebas unitarias, de integración y de aceptación y los beneficios y desafíos de cada una. También cubre temas como las escuelas de pruebas unitarias, el uso de dobles de prueba, y marcos de prueba como PHPUnit y Mockery. La charla concluye recomendando separar la lógica de prueba de los datos de prueba y minimizar el uso de dobles de prueba.
Este documento proporciona una introducción a las pruebas de calidad de software (QA) y cubre varios temas clave como: las diferentes categorías de pruebas como las pruebas unitarias, de aceptación y de regresión; herramientas comunes de QA como Jenkins, Selenium y TestNG; y un ejemplo de cómo se podría estructurar un proyecto de pruebas automatizadas con Selenium. El documento también explica conceptos como integración continua, pruebas de caja negra y blanca, y cómo QA debería involucrarse a lo larg
El documento habla sobre la importancia de los test unitarios y el framework JUnit para realizarlos. Explica que los tests unitarios deben ser automatizables, completos, repetibles e independientes. También introduce el concepto de Test-Driven Development (TDD) y cómo se usa JMock para simular objetos con los que interactúa el código bajo prueba sin necesidad de crearlos realmente.
Este documento trata sobre pruebas de software. Explica que las pruebas de software son el proceso de ejecutar un programa con el objetivo de detectar errores y fallas. También describe diferentes tipos de pruebas como pruebas unitarias, de integración y funcionales. Resalta la importancia de planificar las pruebas de software y automatizarlas para mejorar la calidad y reducir costos.
Este documento presenta una introducción a la prueba de software, definiendo prueba de software, errores, defectos y fallas. Explica principios como evitar probar su propio código y incluir entradas inválidas. Describe niveles de pruebas como unitario e integración y métodos como caja negra y caja blanca. Incluye un ejemplo de caso de prueba y define actividades de un plan de pruebas como el alcance, entorno de pruebas y criterios de aceptación.
Este documento presenta una introducción a los conceptos y tipos de pruebas de software más comunes. Explica los principios fundamentales de las pruebas y describe los diferentes tipos de pruebas funcionales como las pruebas unitarias, de integración, regresión, de humo, de extremo a extremo e de interfaz de usuario. También cubre los tipos de pruebas no funcionales como las pruebas de rendimiento, estrés y de aceptación del usuario. El objetivo es familiarizar al lector con las mejores prácticas de pruebas
Cursos gratis de programación en Java. JUnit. Orientado a Grado, DAM y DAW. Otros cursos disponibles para Android, Swift, Base de datos, javascript, servicios y procesos...
Este documento presenta información sobre la verificación de software mediante pruebas. Explica conceptos clave como error, defecto y fallo, y describe diferentes tipos de pruebas como pruebas de unidad, integración y sistema. También cubre técnicas de prueba como caja blanca, caja negra y valores límite, y principios como que las pruebas solo pueden mostrar la presencia de defectos, no su ausencia.
El documento describe el método de desarrollo guiado por pruebas (TDD). TDD implica escribir primero las pruebas unitarias, luego implementar el código mínimo necesario para que las pruebas pasen, y finalmente refactorizar el código. El propósito de TDD es especificar los requisitos a través de las pruebas antes de escribir el código funcional. Siguiendo este proceso, se produce software de alta calidad, modular y preparado para cambios.
Similar a Mejorar la calidad de los tests con Mutation testing.pdf (20)
ESPERAMOS QUE ESTA INFOGRAFÍA SEA UNA HERRAMIENTA ÚTIL Y EDUCATIVA QUE INSPIRE A MÁS PERSONAS A ADENTRARSE EN EL APASIONANTE CAMPO DE LA INGENIERÍA CIVIŁ. ¡ACOMPAÑANOS EN ESTE VIAJE DE APRENDIZAJE Y DESCUBRIMIENTO
2. 2
Mutation Testing
Mis puntos fuertes:
❖ Tengo un rendimiento muy alto
❖ Trabajo muy bien bajo presión
❖ No tengo miedo de subir a producción
Mis puntos débiles:
❖ Tengo un rendimiento muy alto
❖ Trabajo muy bien bajo presión
❖ No tengo miedo de subir a producción
Sobre mí.
❖ Me llamo Ismail
❖ Bulgaro
❖ Adicto a los deploys
3. 3
Mutation Testing
Test-driven development.
❖ Los tests nos ayudan a entregar con seguridad.
❖ Nos ayuda a corregir los bugs y garantiza que el mismo
error no volverá a aparecer.
❖ A mi me resulta más fácil desarrollar.
4. 4
Mutation Testing
Así empieza esta historia...
❖ Debíamos añadir una nueva funcionalidad en un sistema
existente.
❖ Era algo que ya había hecho en otros dos proyectos y no
podía fallar.
❖ Así que hemos empezado…
7. 7
Mutation Testing
Tests con mala calidad.
❖ Tests que no comprueban el resultado completo esperado.
❖ Tests sin assert.
❖ No tener claro que se está testeando.
❖ Los tests dependen de otros tests.
❖ Testear más de una cosa en el mismo test.
❖ Saltar los tests de código difícil de testear.
❖ A veces fallan…
8. 8
Mutation Testing
Tests con mala calidad.
❖ Tests que no comprueban el resultado completo esperado.
@Test
void return_products_list () throws Exception {
Product product1 = new Product(3L, "Logitech Wireless Mouse M185" , "10,78 €");
Product product2 = new Product(4L, "Fellowes Mouse Pad Black" , "1,34 €");
when(productService .getAllProducts()).thenReturn( List.of(product1, product2));
this.mockMvc
.perform(get("/products" ))
.andExpect( status().isOk());
}
9. 9
Mutation Testing
Tests con mala calidad.
❖ Tests sin assert.
@Test
void create_basket_if_not_exists () {
Basket expectedBasket = new Basket(null, USER_ID, new Items(List.of(PRODUCT)));
when(basketRepository .getByUserId( USER_ID)).thenReturn( Optional.empty());
when(basketRepository .save(expectedBasket )).thenReturn( expectedBasket );
Basket actualBasket = basketService .addProductToBasket( USER_ID, PRODUCT);
}
En frameworks de testing como Spock por ejemplo, si falta When o Then sale error:
10. 10
Mutation Testing
¿Por qué hacemos tests?
❖ Cumplir con los criterios de aceptación
❖ Tener una red de seguridad
11. 11
Mutation Testing
¿Por qué hacemos TDD?
❖ Para reducir los bugs
❖ Incrementar la velocidad
❖ Cumplir los requisitos que ha pedido el
stakeholder
❖ Menos estrés / dormir más tranquilo
12. 12
Mutation Testing
¿Cómo podemos medir si tenemos suficientes tests?
“In computer science, test coverage is a percentage measure of the
degree to which the source code of a program is executed when a
particular test suite is run.”
- - Wikipedia - -
14. 14
Mutation Testing
Tests con mala calidad.
❖ Tests que no comprueban el resultado completo esperado.
❖ Tests sin assert.
❖ No tener claro que se está testeando.
❖ Los tests dependen de otros tests.
❖ Testear más de una cosa en el mismo test.
❖ Saltar los tests de código difícil de testear.
❖ A veces fallan…
15. 15
Mutation Testing
Mutation Testing.
❖ Asume que el software funciona correctamente.
❖ Se centra en comprobar si nuestros tests son estrictos.
❖ Nos ayuda encontrar las brechas que permiten que nuestro
código se salga con la suya con un comportamiento no deseado.
17. 17
Mutation Testing
¿Cómo funciona Mutation Testing?
❖ Comienza ejecutando sus tests para asegurarse de que todos pasen antes de crear cualquier
mutación.
❖ Luego cambia el código compilado y vuelve a ejecutar los tests.
21. 21
Mutation Testing
¿Qué hacer con los mutantes supervivientes?
❖ Los mutantes sobrevivientes le muestran dónde buscar problemas potenciales en su código.
❖ Algunos mutantes sobrevivientes son ruidosos.
❖ Algunas son 'mutaciones equivalentes'
❖ Algunos revelan datos reales y/o problemas significativos en su código o pruebas
23. 23
Mutation Testing
Mutantes que no se pueden matar.
❖ Son oportunidades para refactorizar:
➢ código muerto o inútil que nunca se llama
➢ código que afecta solo al rendimiento
➢ código que afecta solo al estado interno
➢ lógica en otra parte del código
25. 25
Mutation Testing
void mutation operator.
class A {
int field = 3;
public void method(int inc) {
field += 3;
}
}
class A {
int field = 3;
public void method(int inc) { }
}
26. 26
Mutation Testing
null mutation operator.
class A {
public A clone() {
return new A();
}
}
class A {
public A clone() {
return null ;
}
}
27. 27
Mutation Testing
empty mutation operator.
class A {
public int[] getRange(int count) {
int[] result = new int[count];
for(int i=0; i < count; i++) {
result[i] = i;
}
return result;
}
}
class A {
public int[] getRange(int count)
{
return new int [0];
}
}
28. 28
Mutation Testing
constant mutation operator.
class A {
int field;
public int getAbsField () {
if(field >= 0)
return field;
return -field;
}
}
class A {
int field;
public int getAbsField () {
return 3;
}
}
29. 29
Mutation Testing
new mutation operator.
class A {
int field;
public ArrayList range(int end) {
ArrayList l = new ArrayList();
for(int i = 0; i < size; i++) {
A a = new A();
a.field = i;
l.add(a);
}
return l;
}
}
class A {
int field;
public List range(int end) {
return new ArrayList();
}
}
30. 30
Mutation Testing
optional mutation operator.
class A {
int field;
public Optional<Integer> getOptional () {
return Optional.of( field);
}
}
class A {
int field;
public Optional<Integer> getOptional () {
return Optional.empty();
}
}
31. 31
Mutation Testing
argument mutation operator.
class A {
public int m(int x, int y) {
return x + 2 * y;
}
}
class A {
public int m(int x) {
return x;
}
}
32. 32
Mutation Testing
this mutation operator.
class A {
int value = 0;
public A addOne() {
value += 1;
return this ;
}
}
class A {
int value = 0;
public A addOne() {
return this ;
}
}
}
34. 34
Mutation Testing
Requisitos.
❖ Las pruebas deben tener el mismo resultado cada vez
❖ Se puede ejecutar en cualquier orden
❖ Se puede ejecutar en paralelo
❖ Básicamente: pruebas unitarias
35. 35
Mutation Testing
¿Qué excluir?
❖ Pruebas de integración y E2E
❖ Pruebas de rendimiento
❖ Tests de contrato
❖ Cualquier test que cambie el estado global…
37. 37
Mutation Testing
Conclusiones.
❖ Las pruebas de mutación reducen el riesgo de que falle su red de seguridad.
❖ Crea presión para reducir la cantidad de código y reducir la duplicación.
❖ Es fácil de instalar, ejecutar y leer.
38. 38
Mutation Testing
References.
● Pitest
● STAMP: Software testing amplification for DevOps
● Descartes: A Mutation Engine for PIT
● Performance comparison between Descartes and Gregor
● PitMP: Maven plugin to handle multi module projects for PiTest
● Imágenes:
○ https://www.freepik.es/
○ https://www.pexels.com/
● Gifs: https://tenor.com/