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 [email protected] www.linkedin.com/in/ daviddefco http://es.slideshare.net/
David de Francisco MarcosMsc, MBA, PMP y CSM
XP y Entornos de Desarrollo Ágil
Máster en InformáticaUniversidad de Valladolid2015-2016
[email protected]/in/daviddefcohttp://es.slideshare.net/daviddefco
Notas Rápidas sobre XP
DesarrollarAnálisis IncrementalTests de ClienteTDDRefactorizaciónDiseño SimpleDesarrollo IncrementalSpikesOptimizaciónTests Exploratorios
Prácticas XPPensarProgramación ParesTrabajo con EnergíaControles VisualesAnálisis Causa – EfectoRetrospectivas
ColaborarConfianzaSentarse JuntosCliente InvolucradoDaily MeetingsEstándares de CódigoDemos ContinuasInformar y Comunicar
PlanificarVisiónPlanificar EntregasJuegos de PlanificaciónGestión de RiesgosHistoriasBacklogs
EntregarDefinición de HechoNo BugsControl de VersionesBuild en 10 MinutosAutoría CompartidaDocumentación
DesarrollarAnálisis IncrementalTests de ClienteTDDRefactorizaciónDiseño SimpleDesarrollo IncrementalSpikesOptimizaciónTests Exploratorios
Prácticas XPPensarProgramación ParesTrabajo con EnergíaControles VisualesAnálisis Causa – EfectoRetrospectivas
ColaborarConfianzaSentarse JuntosCliente InvolucradoDaily MeetingsEstándares de CódigoDemos ContinuasInformar y Comunicar
PlanificarVisiónPlanificar EntregasJuegos de PlanificaciónGestión de RiesgosHistoriasBacklogs
EntregarDefinición de HechoNo BugsControl de VersionesBuild en 10 MinutosAutoría CompartidaDocumentación
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 resolver2)Categorizar las causas3)Detallar las causas4)Analizar causas principales5)Buscar correlaciones entre ellas
1
2
3
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:PruebaDesarrolloRefactorización
Reduce el efecto de errores y mejora el diseño del código
Behaviour Driven DevelopmentLleva TDD un paso más allá, al diseño guiado por dominio, involucrando a los BSE en los procesos de test / aceptación
Refactorización
Refactorizar es cambiar el código fuente sin alterar su funcionalidad.
BeneficiosMejora el diseño del softwareContribuye a detectar erroresFacilita la comprensión del SWAyuda a programar más rápido
Imagen obtenida de www.flickr.com/photos/danisarda
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));}
}
¿Para qué sirve este código?
¿Es fácil de reutilizar?
¿Es fácil de mantener?
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);}
}
¿Se podría mejorar fácilmente?
Entornos de Desarrollo
Ejemplo Entorno de Desarrollo
Servidor CI
Métricas de Calidad (Sonar)