SlideShare una empresa de Scribd logo
Mejorar la calidad
de los tests con
Mutation testing Ismail Ismailov
@ismail2ov
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
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
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…
5
Mutation Testing
Deploy a producción.
6
Mutation Testing
Funcionalidad que estaba rota.
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
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
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
Mutation Testing
¿Por qué hacemos tests?
❖ Cumplir con los criterios de aceptación
❖ Tener una red de seguridad
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
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 - -
13
Mutation Testing
Code coverage.
Entonces: ¿Podemos decir que si tenemos suficiente code coverage,
por ejemplo 85%, no tenemos bugs?
NO
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
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.
16
Mutation Testing
Suposiciones subyacentes.
Mutation testing se basa en dos ideas:
❖ Hipótesis del programador competente
❖ Efecto de acoplamiento
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.
18
Mutation Testing
¿Cómo funciona Mutation Testing?
19
Mutation Testing
¿Cómo funciona Mutation Testing?
20
Mutation Testing
¿Cómo funciona Mutation Testing?
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
22
Mutation Testing
Mutantes ruidosos.
❖ getters & setters
❖ custom hashCode
❖ custom toString
❖ custom equals
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
24
Mutation Testing
Mutation operators.
❖ void
❖ null
❖ empty
❖ constant
❖ new
❖ optional
❖ argument
❖ this
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
Mutation Testing
null mutation operator.
class A {
public A clone() {
return new A();
}
}
class A {
public A clone() {
return null ;
}
}
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
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
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
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
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
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 ;
}
}
}
33
Mutation Testing
Herramientas.
Herramientas automatizadas para Mutation Testing:
❖ Pitest para Java
❖ Stryker Mutator para JavaScript, C# y Scala
❖ MutMut para Python
❖ Infection para PHP
❖ Mutant para Ruby
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
Mutation Testing
¿Qué excluir?
❖ Pruebas de integración y E2E
❖ Pruebas de rendimiento
❖ Tests de contrato
❖ Cualquier test que cambie el estado global…
36
Mutation Testing
Demo!
Kata to practice Mutation Testing
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
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/
Preguntas.
Mutation Testing
¡Muchas
Gracias!.

Más contenido relacionado

Similar a Mejorar la calidad de los tests con Mutation testing.pdf

Qunit CookBook español
Qunit CookBook españolQunit CookBook español
Qunit CookBook español
shadow_of__soul
 
Seminario de Test Development Driven
Seminario de Test Development DrivenSeminario de Test Development Driven
Seminario de Test Development Driven
Paradigma Digital
 
¿En qué la estamos regando en pruebas de software?
¿En qué la estamos regando en pruebas de software?¿En qué la estamos regando en pruebas de software?
¿En qué la estamos regando en pruebas de software?
Agustin Ramos
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
Maricarmen Sánchez Ruiz
 
Test unitarios
Test unitariosTest unitarios
Test unitarios
Donewtech Solutions
 
Aguirre Jimenez
Aguirre JimenezAguirre Jimenez
Aguirre Jimenez
FARIDROJAS
 
Introducción a tdd
Introducción a tddIntroducción a tdd
Introducción a tdd
Juan Jose Villar Ortuño
 
oTema6 pruebas del software
oTema6 pruebas del softwareoTema6 pruebas del software
oTema6 pruebas del software
Silvia Guilcapi
 
Tema6 pruebas del software
Tema6 pruebas del softwareTema6 pruebas del software
Tema6 pruebas del software
Susita Paguay
 
DeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - SpanishDeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - Spanish
Jordi Llonch
 
DeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - SpanishDeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - Spanish
Akamon Engineering
 
DeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - SpanishDeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - Spanish
Jordi Llonch
 
Software Quality Assurance
Software Quality AssuranceSoftware Quality Assurance
Software Quality Assurance
will2294
 
Junit y Jmock
Junit y JmockJunit y Jmock
Junit y Jmock
kaolong
 
Pruebas de software
Pruebas de softwarePruebas de software
Pruebas de software
Gomez Gomez
 
15_pruebaSW.ppt
15_pruebaSW.ppt15_pruebaSW.ppt
15_pruebaSW.ppt
ROBERTOCHURAMPICANGA
 
Vuelta_a_los_origines_Testing.pdf
Vuelta_a_los_origines_Testing.pdfVuelta_a_los_origines_Testing.pdf
Vuelta_a_los_origines_Testing.pdf
PabloMorales831994
 
Jyoc java-cap23 j unit
Jyoc java-cap23 j unitJyoc java-cap23 j unit
Jyoc java-cap23 j unit
Jyoc X
 
Pruebas-OCW.pdf
Pruebas-OCW.pdfPruebas-OCW.pdf
Pruebas-OCW.pdf
lgarcias
 
7iSF-4 test driver development
7iSF-4   test driver development7iSF-4   test driver development
7iSF-4 test driver development
programadorjavablog
 

Similar a Mejorar la calidad de los tests con Mutation testing.pdf (20)

Qunit CookBook español
Qunit CookBook españolQunit CookBook español
Qunit CookBook español
 
Seminario de Test Development Driven
Seminario de Test Development DrivenSeminario de Test Development Driven
Seminario de Test Development Driven
 
¿En qué la estamos regando en pruebas de software?
¿En qué la estamos regando en pruebas de software?¿En qué la estamos regando en pruebas de software?
¿En qué la estamos regando en pruebas de software?
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Test unitarios
Test unitariosTest unitarios
Test unitarios
 
Aguirre Jimenez
Aguirre JimenezAguirre Jimenez
Aguirre Jimenez
 
Introducción a tdd
Introducción a tddIntroducción a tdd
Introducción a tdd
 
oTema6 pruebas del software
oTema6 pruebas del softwareoTema6 pruebas del software
oTema6 pruebas del software
 
Tema6 pruebas del software
Tema6 pruebas del softwareTema6 pruebas del software
Tema6 pruebas del software
 
DeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - SpanishDeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - Spanish
 
DeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - SpanishDeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - Spanish
 
DeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - SpanishDeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - Spanish
 
Software Quality Assurance
Software Quality AssuranceSoftware Quality Assurance
Software Quality Assurance
 
Junit y Jmock
Junit y JmockJunit y Jmock
Junit y Jmock
 
Pruebas de software
Pruebas de softwarePruebas de software
Pruebas de software
 
15_pruebaSW.ppt
15_pruebaSW.ppt15_pruebaSW.ppt
15_pruebaSW.ppt
 
Vuelta_a_los_origines_Testing.pdf
Vuelta_a_los_origines_Testing.pdfVuelta_a_los_origines_Testing.pdf
Vuelta_a_los_origines_Testing.pdf
 
Jyoc java-cap23 j unit
Jyoc java-cap23 j unitJyoc java-cap23 j unit
Jyoc java-cap23 j unit
 
Pruebas-OCW.pdf
Pruebas-OCW.pdfPruebas-OCW.pdf
Pruebas-OCW.pdf
 
7iSF-4 test driver development
7iSF-4   test driver development7iSF-4   test driver development
7iSF-4 test driver development
 

Último

OPERACIONES BÁSICAS (INFOGRAFIA) DOCUMENTO
OPERACIONES BÁSICAS (INFOGRAFIA) DOCUMENTOOPERACIONES BÁSICAS (INFOGRAFIA) DOCUMENTO
OPERACIONES BÁSICAS (INFOGRAFIA) DOCUMENTO
GERARDO GONZALEZ
 
DIAGRAMA SIPOC INGENIERIA INDUSTRIAL HERRAMIENTA
DIAGRAMA SIPOC INGENIERIA INDUSTRIAL HERRAMIENTADIAGRAMA SIPOC INGENIERIA INDUSTRIAL HERRAMIENTA
DIAGRAMA SIPOC INGENIERIA INDUSTRIAL HERRAMIENTA
MayDaniel2
 
Clase de termodinamica sobre cabios de fase
Clase de termodinamica sobre cabios de faseClase de termodinamica sobre cabios de fase
Clase de termodinamica sobre cabios de fase
EmilyLloydCerda
 
PRIMERA Y SEGUNDA LEY DE LA TERMODINÁMICA
PRIMERA Y SEGUNDA LEY DE LA TERMODINÁMICAPRIMERA Y SEGUNDA LEY DE LA TERMODINÁMICA
PRIMERA Y SEGUNDA LEY DE LA TERMODINÁMICA
carmenquintana18
 
Operaciones Básicas creadora Veronica Maiz
Operaciones Básicas creadora Veronica MaizOperaciones Básicas creadora Veronica Maiz
Operaciones Básicas creadora Veronica Maiz
carolina838317
 
NOM-001-SEDE-2012.pdf instalación eléctrica
NOM-001-SEDE-2012.pdf instalación eléctricaNOM-001-SEDE-2012.pdf instalación eléctrica
NOM-001-SEDE-2012.pdf instalación eléctrica
gabyp22
 
ilovepdf_merged (2) (1)-4-51.pdfORLANDOMARTIN
ilovepdf_merged (2) (1)-4-51.pdfORLANDOMARTINilovepdf_merged (2) (1)-4-51.pdfORLANDOMARTIN
ilovepdf_merged (2) (1)-4-51.pdfORLANDOMARTIN
OrlandoRomanEcheandi
 
9 Lección perro.pptxcvBWRFWBCCCCCCCCCCCCCCTEN
9 Lección perro.pptxcvBWRFWBCCCCCCCCCCCCCCTEN9 Lección perro.pptxcvBWRFWBCCCCCCCCCCCCCCTEN
9 Lección perro.pptxcvBWRFWBCCCCCCCCCCCCCCTEN
KarinToledo2
 
Medicion-Del-Agua-de-Riego-Aforo 2023.pptx
Medicion-Del-Agua-de-Riego-Aforo 2023.pptxMedicion-Del-Agua-de-Riego-Aforo 2023.pptx
Medicion-Del-Agua-de-Riego-Aforo 2023.pptx
MONICADELROCIOMUNZON1
 
COMPARACION DE PRECIOS TENIENDO COMO REFERENTE LA OSCE
COMPARACION DE PRECIOS TENIENDO COMO REFERENTE LA OSCECOMPARACION DE PRECIOS TENIENDO COMO REFERENTE LA OSCE
COMPARACION DE PRECIOS TENIENDO COMO REFERENTE LA OSCE
jhunior lopez rodriguez
 
Calculo-de-Camaras-Frigorificas.pdf para trabajos
Calculo-de-Camaras-Frigorificas.pdf para trabajosCalculo-de-Camaras-Frigorificas.pdf para trabajos
Calculo-de-Camaras-Frigorificas.pdf para trabajos
JuanCarlos695207
 
AE 34 Serie de sobrecargas aisladas_240429_172040.pdf
AE  34 Serie de sobrecargas aisladas_240429_172040.pdfAE  34 Serie de sobrecargas aisladas_240429_172040.pdf
AE 34 Serie de sobrecargas aisladas_240429_172040.pdf
sebastianpech108
 
OPERACIONPLANTA_CLASE14_CLASE15_BOMBAS_FLOTACIONSELECTIVA.pdf
OPERACIONPLANTA_CLASE14_CLASE15_BOMBAS_FLOTACIONSELECTIVA.pdfOPERACIONPLANTA_CLASE14_CLASE15_BOMBAS_FLOTACIONSELECTIVA.pdf
OPERACIONPLANTA_CLASE14_CLASE15_BOMBAS_FLOTACIONSELECTIVA.pdf
AlejandroContreras470286
 
Taller de Robots Velocistas2 esquema....
Taller de Robots Velocistas2 esquema....Taller de Robots Velocistas2 esquema....
Taller de Robots Velocistas2 esquema....
lawjose243
 
S09 PBM-HEMORRAGIAS 2021-I Grabada 1.pptx
S09 PBM-HEMORRAGIAS 2021-I Grabada 1.pptxS09 PBM-HEMORRAGIAS 2021-I Grabada 1.pptx
S09 PBM-HEMORRAGIAS 2021-I Grabada 1.pptx
yamilbailonw
 
exposicion sobre los tipos de cortes de rolas para la produccion de chapas
exposicion sobre los tipos de cortes de rolas para la produccion de chapasexposicion sobre los tipos de cortes de rolas para la produccion de chapas
exposicion sobre los tipos de cortes de rolas para la produccion de chapas
raul958375
 
Infografía de operaciones básicas....pdf
Infografía de operaciones básicas....pdfInfografía de operaciones básicas....pdf
Infografía de operaciones básicas....pdf
jahirrtorresa
 
FICHA TECNICA PRODUCTOS CONGELADOS EMBALAJE.pdf
FICHA TECNICA PRODUCTOS CONGELADOS EMBALAJE.pdfFICHA TECNICA PRODUCTOS CONGELADOS EMBALAJE.pdf
FICHA TECNICA PRODUCTOS CONGELADOS EMBALAJE.pdf
jesus869159
 
DIAGRAMA ELECTRICOS y circuito electrónicos
DIAGRAMA ELECTRICOS y circuito electrónicosDIAGRAMA ELECTRICOS y circuito electrónicos
DIAGRAMA ELECTRICOS y circuito electrónicos
LuisAngelGuarnizoBet
 
Infografia - Hugo Hidalgo - Construcción
Infografia - Hugo Hidalgo - ConstrucciónInfografia - Hugo Hidalgo - Construcción
Infografia - Hugo Hidalgo - Construcción
MaraManuelaUrribarri
 

Último (20)

OPERACIONES BÁSICAS (INFOGRAFIA) DOCUMENTO
OPERACIONES BÁSICAS (INFOGRAFIA) DOCUMENTOOPERACIONES BÁSICAS (INFOGRAFIA) DOCUMENTO
OPERACIONES BÁSICAS (INFOGRAFIA) DOCUMENTO
 
DIAGRAMA SIPOC INGENIERIA INDUSTRIAL HERRAMIENTA
DIAGRAMA SIPOC INGENIERIA INDUSTRIAL HERRAMIENTADIAGRAMA SIPOC INGENIERIA INDUSTRIAL HERRAMIENTA
DIAGRAMA SIPOC INGENIERIA INDUSTRIAL HERRAMIENTA
 
Clase de termodinamica sobre cabios de fase
Clase de termodinamica sobre cabios de faseClase de termodinamica sobre cabios de fase
Clase de termodinamica sobre cabios de fase
 
PRIMERA Y SEGUNDA LEY DE LA TERMODINÁMICA
PRIMERA Y SEGUNDA LEY DE LA TERMODINÁMICAPRIMERA Y SEGUNDA LEY DE LA TERMODINÁMICA
PRIMERA Y SEGUNDA LEY DE LA TERMODINÁMICA
 
Operaciones Básicas creadora Veronica Maiz
Operaciones Básicas creadora Veronica MaizOperaciones Básicas creadora Veronica Maiz
Operaciones Básicas creadora Veronica Maiz
 
NOM-001-SEDE-2012.pdf instalación eléctrica
NOM-001-SEDE-2012.pdf instalación eléctricaNOM-001-SEDE-2012.pdf instalación eléctrica
NOM-001-SEDE-2012.pdf instalación eléctrica
 
ilovepdf_merged (2) (1)-4-51.pdfORLANDOMARTIN
ilovepdf_merged (2) (1)-4-51.pdfORLANDOMARTINilovepdf_merged (2) (1)-4-51.pdfORLANDOMARTIN
ilovepdf_merged (2) (1)-4-51.pdfORLANDOMARTIN
 
9 Lección perro.pptxcvBWRFWBCCCCCCCCCCCCCCTEN
9 Lección perro.pptxcvBWRFWBCCCCCCCCCCCCCCTEN9 Lección perro.pptxcvBWRFWBCCCCCCCCCCCCCCTEN
9 Lección perro.pptxcvBWRFWBCCCCCCCCCCCCCCTEN
 
Medicion-Del-Agua-de-Riego-Aforo 2023.pptx
Medicion-Del-Agua-de-Riego-Aforo 2023.pptxMedicion-Del-Agua-de-Riego-Aforo 2023.pptx
Medicion-Del-Agua-de-Riego-Aforo 2023.pptx
 
COMPARACION DE PRECIOS TENIENDO COMO REFERENTE LA OSCE
COMPARACION DE PRECIOS TENIENDO COMO REFERENTE LA OSCECOMPARACION DE PRECIOS TENIENDO COMO REFERENTE LA OSCE
COMPARACION DE PRECIOS TENIENDO COMO REFERENTE LA OSCE
 
Calculo-de-Camaras-Frigorificas.pdf para trabajos
Calculo-de-Camaras-Frigorificas.pdf para trabajosCalculo-de-Camaras-Frigorificas.pdf para trabajos
Calculo-de-Camaras-Frigorificas.pdf para trabajos
 
AE 34 Serie de sobrecargas aisladas_240429_172040.pdf
AE  34 Serie de sobrecargas aisladas_240429_172040.pdfAE  34 Serie de sobrecargas aisladas_240429_172040.pdf
AE 34 Serie de sobrecargas aisladas_240429_172040.pdf
 
OPERACIONPLANTA_CLASE14_CLASE15_BOMBAS_FLOTACIONSELECTIVA.pdf
OPERACIONPLANTA_CLASE14_CLASE15_BOMBAS_FLOTACIONSELECTIVA.pdfOPERACIONPLANTA_CLASE14_CLASE15_BOMBAS_FLOTACIONSELECTIVA.pdf
OPERACIONPLANTA_CLASE14_CLASE15_BOMBAS_FLOTACIONSELECTIVA.pdf
 
Taller de Robots Velocistas2 esquema....
Taller de Robots Velocistas2 esquema....Taller de Robots Velocistas2 esquema....
Taller de Robots Velocistas2 esquema....
 
S09 PBM-HEMORRAGIAS 2021-I Grabada 1.pptx
S09 PBM-HEMORRAGIAS 2021-I Grabada 1.pptxS09 PBM-HEMORRAGIAS 2021-I Grabada 1.pptx
S09 PBM-HEMORRAGIAS 2021-I Grabada 1.pptx
 
exposicion sobre los tipos de cortes de rolas para la produccion de chapas
exposicion sobre los tipos de cortes de rolas para la produccion de chapasexposicion sobre los tipos de cortes de rolas para la produccion de chapas
exposicion sobre los tipos de cortes de rolas para la produccion de chapas
 
Infografía de operaciones básicas....pdf
Infografía de operaciones básicas....pdfInfografía de operaciones básicas....pdf
Infografía de operaciones básicas....pdf
 
FICHA TECNICA PRODUCTOS CONGELADOS EMBALAJE.pdf
FICHA TECNICA PRODUCTOS CONGELADOS EMBALAJE.pdfFICHA TECNICA PRODUCTOS CONGELADOS EMBALAJE.pdf
FICHA TECNICA PRODUCTOS CONGELADOS EMBALAJE.pdf
 
DIAGRAMA ELECTRICOS y circuito electrónicos
DIAGRAMA ELECTRICOS y circuito electrónicosDIAGRAMA ELECTRICOS y circuito electrónicos
DIAGRAMA ELECTRICOS y circuito electrónicos
 
Infografia - Hugo Hidalgo - Construcción
Infografia - Hugo Hidalgo - ConstrucciónInfografia - Hugo Hidalgo - Construcción
Infografia - Hugo Hidalgo - Construcción
 

Mejorar la calidad de los tests con Mutation testing.pdf

  • 1. Mejorar la calidad de los tests con Mutation testing Ismail Ismailov @ismail2ov
  • 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 - -
  • 13. 13 Mutation Testing Code coverage. Entonces: ¿Podemos decir que si tenemos suficiente code coverage, por ejemplo 85%, no tenemos bugs? NO
  • 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.
  • 16. 16 Mutation Testing Suposiciones subyacentes. Mutation testing se basa en dos ideas: ❖ Hipótesis del programador competente ❖ Efecto de acoplamiento
  • 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
  • 22. 22 Mutation Testing Mutantes ruidosos. ❖ getters & setters ❖ custom hashCode ❖ custom toString ❖ custom equals
  • 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
  • 24. 24 Mutation Testing Mutation operators. ❖ void ❖ null ❖ empty ❖ constant ❖ new ❖ optional ❖ argument ❖ this
  • 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 ; } } }
  • 33. 33 Mutation Testing Herramientas. Herramientas automatizadas para Mutation Testing: ❖ Pitest para Java ❖ Stryker Mutator para JavaScript, C# y Scala ❖ MutMut para Python ❖ Infection para PHP ❖ Mutant para Ruby
  • 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…
  • 36. 36 Mutation Testing Demo! Kata to practice Mutation Testing
  • 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/