SlideShare una empresa de Scribd logo
1 de 40
Descargar para leer sin conexión
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

Seminario de Test Development Driven
Seminario de Test Development DrivenSeminario de Test Development Driven
Seminario de Test Development DrivenParadigma 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
 
Aguirre Jimenez
Aguirre JimenezAguirre Jimenez
Aguirre JimenezFARIDROJAS
 
oTema6 pruebas del software
oTema6 pruebas del softwareoTema6 pruebas del software
oTema6 pruebas del softwareSilvia Guilcapi
 
Tema6 pruebas del software
Tema6 pruebas del softwareTema6 pruebas del software
Tema6 pruebas del softwareSusita 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 - SpanishJordi 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 - SpanishJordi 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 - SpanishAkamon Engineering
 
Software Quality Assurance
Software Quality AssuranceSoftware Quality Assurance
Software Quality Assurancewill2294
 
Junit y Jmock
Junit y JmockJunit y Jmock
Junit y Jmockkaolong
 
Pruebas de software
Pruebas de softwarePruebas de software
Pruebas de softwareGomez Gomez
 
Vuelta_a_los_origines_Testing.pdf
Vuelta_a_los_origines_Testing.pdfVuelta_a_los_origines_Testing.pdf
Vuelta_a_los_origines_Testing.pdfPabloMorales831994
 
Jyoc java-cap23 j unit
Jyoc java-cap23 j unitJyoc java-cap23 j unit
Jyoc java-cap23 j unitJyoc X
 
Pruebas-OCW.pdf
Pruebas-OCW.pdfPruebas-OCW.pdf
Pruebas-OCW.pdflgarcias
 
Taller casos de prueba
Taller casos de pruebaTaller casos de prueba
Taller casos de pruebaAndrés Grosso
 

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?
 
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
 
Taller casos de prueba
Taller casos de pruebaTaller casos de prueba
Taller casos de prueba
 

Último

Ejemplos de cadenas de Markov - Ejercicios
Ejemplos de cadenas de Markov - EjerciciosEjemplos de cadenas de Markov - Ejercicios
Ejemplos de cadenas de Markov - EjerciciosMARGARITAMARIAFERNAN1
 
Controladores Lógicos Programables Usos y Ventajas
Controladores Lógicos Programables Usos y VentajasControladores Lógicos Programables Usos y Ventajas
Controladores Lógicos Programables Usos y Ventajasjuanprv
 
DOCUMENTO PLAN DE RESPUESTA A EMERGENCIAS MINERAS
DOCUMENTO PLAN DE RESPUESTA A EMERGENCIAS MINERASDOCUMENTO PLAN DE RESPUESTA A EMERGENCIAS MINERAS
DOCUMENTO PLAN DE RESPUESTA A EMERGENCIAS MINERASPersonalJesusGranPod
 
tema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdftema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdfvictoralejandroayala2
 
Falla de san andres y el gran cañon : enfoque integral
Falla de san andres y el gran cañon : enfoque integralFalla de san andres y el gran cañon : enfoque integral
Falla de san andres y el gran cañon : enfoque integralsantirangelcor
 
Manual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdfManual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdfedsonzav8
 
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdfCristhianZetaNima
 
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023RonaldoPaucarMontes
 
hitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docxhitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docxMarcelaArancibiaRojo
 
ECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdfECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdffredyflores58
 
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfReporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfMikkaelNicolae
 
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVILClase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVILProblemSolved
 
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdf
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdfTEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdf
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdfXimenaFallaLecca1
 
CLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptxCLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptxbingoscarlet
 
nomenclatura de equipo electrico en subestaciones
nomenclatura de equipo electrico en subestacionesnomenclatura de equipo electrico en subestaciones
nomenclatura de equipo electrico en subestacionesCarlosMeraz16
 
PostgreSQL on Kubernetes Using GitOps and ArgoCD
PostgreSQL on Kubernetes Using GitOps and ArgoCDPostgreSQL on Kubernetes Using GitOps and ArgoCD
PostgreSQL on Kubernetes Using GitOps and ArgoCDEdith Puclla
 
Tinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiologíaTinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiologíaAlexanderimanolLencr
 
ANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZ
ANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZ
ANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZgustavoiashalom
 
Magnetismo y electromagnetismo principios
Magnetismo y electromagnetismo principiosMagnetismo y electromagnetismo principios
Magnetismo y electromagnetismo principiosMarceloQuisbert6
 
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptxNTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptxBRAYANJOSEPTSANJINEZ
 

Último (20)

Ejemplos de cadenas de Markov - Ejercicios
Ejemplos de cadenas de Markov - EjerciciosEjemplos de cadenas de Markov - Ejercicios
Ejemplos de cadenas de Markov - Ejercicios
 
Controladores Lógicos Programables Usos y Ventajas
Controladores Lógicos Programables Usos y VentajasControladores Lógicos Programables Usos y Ventajas
Controladores Lógicos Programables Usos y Ventajas
 
DOCUMENTO PLAN DE RESPUESTA A EMERGENCIAS MINERAS
DOCUMENTO PLAN DE RESPUESTA A EMERGENCIAS MINERASDOCUMENTO PLAN DE RESPUESTA A EMERGENCIAS MINERAS
DOCUMENTO PLAN DE RESPUESTA A EMERGENCIAS MINERAS
 
tema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdftema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdf
 
Falla de san andres y el gran cañon : enfoque integral
Falla de san andres y el gran cañon : enfoque integralFalla de san andres y el gran cañon : enfoque integral
Falla de san andres y el gran cañon : enfoque integral
 
Manual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdfManual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdf
 
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
 
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
 
hitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docxhitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docx
 
ECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdfECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdf
 
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfReporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
 
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVILClase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
 
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdf
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdfTEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdf
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdf
 
CLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptxCLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptx
 
nomenclatura de equipo electrico en subestaciones
nomenclatura de equipo electrico en subestacionesnomenclatura de equipo electrico en subestaciones
nomenclatura de equipo electrico en subestaciones
 
PostgreSQL on Kubernetes Using GitOps and ArgoCD
PostgreSQL on Kubernetes Using GitOps and ArgoCDPostgreSQL on Kubernetes Using GitOps and ArgoCD
PostgreSQL on Kubernetes Using GitOps and ArgoCD
 
Tinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiologíaTinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiología
 
ANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZ
ANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZ
ANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZ
 
Magnetismo y electromagnetismo principios
Magnetismo y electromagnetismo principiosMagnetismo y electromagnetismo principios
Magnetismo y electromagnetismo principios
 
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptxNTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptx
 

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/