Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
XP y Entorno de Desarrollo Ágil
1. David de Francisco Marcos
Msc, MBA, PMP y CSM
XP y Entornos
de Desarrollo
Ágil
Máster en Informática
Universidad de Valladolid
2015-2016
david.de.fco@gmail.com
www.linkedin.com/in/daviddefco
http://es.slideshare.net/daviddefco
3. Desarrollar
Análisis Incremental
Tests de Cliente
TDD
Refactorización
Diseño Simple
Desarrollo Incremental
Spikes
Optimización
Tests Exploratorios
Prácticas XP
Pensar
Programación Pares
Trabajo con Energía
Controles Visuales
Análisis Causa – Efecto
Retrospectivas
Colaborar
Confianza
Sentarse Juntos
Cliente Involucrado
Daily Meetings
Estándares de Código
Demos Continuas
Informar y Comunicar
Planificar
Visión
Planificar Entregas
Juegos de Planificación
Gestión de Riesgos
Historias
Backlogs
Entregar
Definición de Hecho
No Bugs
Control de Versiones
Build en 10 Minutos
Autoría Compartida
Documentación
4. Desarrollar
Análisis Incremental
Tests de Cliente
TDD
Refactorización
Diseño Simple
Desarrollo Incremental
Spikes
Optimización
Tests Exploratorios
Prácticas XP
Pensar
Programación Pares
Trabajo con Energía
Controles Visuales
Análisis Causa – Efecto
Retrospectivas
Colaborar
Confianza
Sentarse Juntos
Cliente Involucrado
Daily Meetings
Estándares de Código
Demos Continuas
Informar y Comunicar
Planificar
Visión
Planificar Entregas
Juegos de Planificación
Gestión de Riesgos
Historias
Backlogs
Entregar
Definición de Hecho
No Bugs
Control de Versiones
Build en 10 Minutos
Autoría Compartida
Documentación
5. Análisis Causa - Efecto
5 Whys
Para llegar al fondo de algo continuar
preguntando por qué hasta que
llegamos a un motivo de peso
Diagrama de Raspa de Pez
1) Dibujar el problema a resolver
2) Categorizar las causas
3) Detallar las causas
4) Analizar causas principales
5) Buscar correlaciones entre ellas
6. Ejemplo Cucumber
Característica: Proceso de login de mi tienda online
Como cliente de la tienda online
Quiero poder autenticarme en la tienda
De forma que pueda acceder al contenido de la aplicación y mi
autenticación quede registrada a lo largo de toda la sesión
Antecedentes:
Dado que me encuentro en la vista de autenticacion de la Web
Y que no estoy autenticado dentro de la aplicación
Escenario: proceso de autenticación
Esquema del escenario: autenticación
Cuando relleno el campo de identificador de usuario con el valor
<username>
Y relleno el campo de password con el valor <password>
Entonces al pulsar en el botón de acción debería estar en la
pagina <page>
Ejemplos:
| username | password | page |
| user01 | claveerronea | LoginPage |
| inexistente| user01pass | LoginPage |
| super | user01pass | RootPage |
TDD y BDD
TDD: Ciclo rápido de:
Prueba
Desarrollo
Refactorización
Reduce el efecto de errores y mejora
el diseño del código
Behaviour Driven Development
Lleva TDD un paso más allá, al diseño
guiado por dominio, involucrando a los
BSE en los procesos de test /
aceptación
7. Refactorización
Refactorizar es cambiar el código
fuente sin alterar su funcionalidad.
Beneficios
Mejora el diseño del software
Contribuye a detectar errores
Facilita la comprensión del SW
Ayuda a programar más rápido
Imagen obtenida de
www.flickr.com/photos/danisarda
8. Ejemplo Refactorización
public class CalcSal {
private static final int meses = 12;
private static final double ss = 6.3;
private static final double imp = 14;
public static double calcSalNet(double s) {
if (s < 0) throw new IllegalArgumentException();
double sMens = s/meses;
return sMens - (s/meses * (ss/100)) - (sMens * (imp/100));
}
}
9. Ejemplo Refactorización
public class Salario {
private static final int CUOTAS_ANUALES_DE_SEGURIDAD_SOCIAL = 12;
private static final int NUMERO_DE_PAGAS_ANUALES = 12;
private static final double PORCENTAJE_RETENCION_SEGURIDAD_SOCIAL = 6.3;
private static final double PORCENTAJE_RETENCION_IRPF = 14;
public static double calcularSalarioMensualNeto(double salarioAnualBruto) {
validarCifraDeSalario(salarioAnualBruto);
double salarioMensualBruto = salarioAnualBruto / NUMERO_DE_PAGAS_ANUALES;
return salarioMensualBruto
- getRetencionesMensualesSeguridadSocial(salarioAnualBruto)
- getRetencionesMensualesIrpf(salarioMensualBruto);
}
private static void validarCifraDeSalario(double salarioParaValidar) {
if (salarioParaValidar < 0) throw new IllegalArgumentException(
"El valor de un salario no puede ser menor que 0"
);
}
private static double getRetencionesMensualesSeguridadSocial(double salarioAnualBruto) {
double decimalRetencionSeguridadSocial = PORCENTAJE_RETENCION_SEGURIDAD_SOCIAL / 100;
return (salarioAnualBruto / CUOTAS_ANUALES_DE_SEGURIDAD_SOCIAL) * decimalRetencionSeguridadSocial;
}
private static double getRetencionesMensualesIrpf(double salarioMensualBruto) {
double decimalRetencionIrpf = PORCENTAJE_RETENCION_IRPF / 100;
return (salarioMensualBruto * decimalRetencionIrpf);
}
}