SlideShare une entreprise Scribd logo
1  sur  67
Télécharger pour lire hors ligne
Desarrollo y Pruebas de
Proyectos Java en un Entorno
            Ágil
Acerca de Mi
●   Amante del Software
●   Expatriado y Retornado
●   10 años peleando con líneas de código
●   Blogger aficionado: http://brigomp.blogspot.com
●   Co-fundador de Jobsket
●   http://www.jobsket.es/cv/martin
El índice
●   Historietas de Guerra
●   Nociones básicas sobre Desarrollo Ágil
●   Buenas Prácticas
●   Testing y QA
●   Integración Continua
Historias de Guerra
Historietas de Guerra
●   Iteraciones frecuentes

●   Desplegar software rápidamente

●   Hacer que el cliente participe en el diseño

●   No hace falta rodearse de los mejores.

●   Rodearse de gente trabajadora suele ser
    suficiente.
TVODD: TV Oriented Based Development

ESTAS RETRASANDO EL PROYECTO
Historias de Guerra
●   Las televisiones no motivan (a no ser que te
    gusten apostar a las carreras de caballos)
●   Determinadas acciones son golpes a la moral
●   Los proyectos retrasados no van a remontar el
    vuelo por poner más presión a los empleados.
●   Demuestran que son necesarios cambios en la
    forma de trabajar de la empresa.
¡¡¡ A TESTEAR !!!
Historias de Guerra
●   No por tener más testers tu software va a estar
    mejor testeado.
●   Es necesaria una estrategia de automatización.
●   El equipo de desarrollo debe ayudar al equipo
    de testers.
●   Pero El equipo de testers debe dejarse ayudar.
●   Tener testers no informáticos es bueno.
Nociones básicas (y muy breves) sobre
           Desarrollo Ágil
Manifiesto Ágil

   Nuevos Valores                Antiguos Valores

Individuos e integracción     Procesos y herramientas
Software que funciona         Documentación exhaustiva
Colaboración con el cliente   Negociación contractual
Respuesta al cambio           Seguimiento de un plan
Desarrollo ágil
●   Pragmatismo
●   Iteraciones cortas
●   Software funcional disponible frecuentemente
●   Reuniones frecuentes
●   Reparto de conocimiento y responsabilidades
●   Documentación ágil
●   Demostración continua
●   Retrospectivas
●   Personas y relaciones frente a herramientas
Buenas Prácticas
Programación en Parejas
●   Juntar dos desarrolladores frente a una pantalla.
●   A la larga, mayor productividad.
●   Incrementa la propiedad colectiva del código.
●   Combinación perfecta: desarrollardor experto +
    desarrollador normal/junior.
●   Juntar a 2 juniors, 2 expertos no aporta demasiado
●   El programador inexperto aprende mucho más.
●   Quizás no una práctica para el día a día pero sí para
    hacer de cuando en cuando.
Revisiones de Código
●   Muy útil para detectar errores.
●   Muy importante con nuevas incorporaciones en
    los equipos.
●   Es necesario alternar la responsabilidad. Si no,
    “el revisor” será un cuello de botella.
●   Aumenta la responsabilidad colectiva del
    código.
●   Centrarse en errores de alto nivel. El resto se
    puede detectar fácilmente con análisis estático.
Análisis estático
●   Las herramientas de análisis estático detectan
    errores sin tener que ejecutar código.
●   Se integran fácilmente en el proceso de build
    ●   Si se detectan X errores críticos la build falla.
●   Algunas veces hay que mitigar el ruido
●   Findbugs, PMD, Sonar.
●   Alternativas comerciales
Análisis estático: Errores Imprevisibles
●   Visto en Eclipse 3.5RC2
        if (adapters == null && adapters.length == 0) return;
●   Error desde Eclipse 3.2
    ●   Probablemente nunca se cumplió la condición
    ●   Si se cumpliese habría saltado una NPE
Análisis estático: Seguridad
●   Ejemplo típico. SQL Injection

    HttpServletRequest request = …
    String usuario = request.getParameter(“user”)
    String query = “select * from account_numbers where nombre='
    ” + usuario + “ ' ”;
    con.execute(query)


●   ¿Y si user es “ ' OR 1==1-- ” ?
Análisis estático: Escalabilidad
●   Resource leaking
    try {
       Connection c = …
       String query = ...;
       c.execute(query);
       c.close()
    } catch (Exception e) { e.printStackTrace() }
●   ¿ Qué pasa si falla la consulta ?
Análisis estático: Concurrencia
●   Ejemplo, uso de estructuras de datos no
    Thread-safe en código multihilo
●   ¿Inocente? Esto es un gráfico de un servidor
    real. 4 CPUs 8Gb RAM.
Análisis estático: Concurrencia

●   Parece grave, ¿no? ¿Cuál fue la
    causa?

●   Dos llamadas a HashMap.put() y
    mala suerte
Testing y QA
Testing
●   Todos somos humanos. El software
    inevitablemente tiene muchos herrores.
●   Bienvenidos sean los fallos.
●   Por eso mismo debemos hacer pruebas.
    ●   Unitarias
    ●   Integración
    ●   Funcionales
    ●   Stress
Tests Unitarios
●   Los hacen los desarrolladores
●   Prueban la funcionalidad de tu código
●   Introducidos ya en todos los lenguajes
●   Junit, Nunit, PhpUnit,Test::Unit,...
●   Prueban partes de código que no interactuen
    con recursos externos
    ●   No acceden a bases de datos, no acceden a la red,
        etc.
Tests Unitarios
public class LanguageDetectorTests extends TestCase {


@Test
public void testLanguageDetection() throws Exception {


    LanguageIdentifier identifier = new LanguageIdentifier();
    assertEquals(identifier.identify("This is a test"),"en");
    assertEquals(identifier.identify("Esto es un test"),"es");
}
Tests Unitarios
public void testExtractExperience() {


  List<ExperienceEntry> entries =
extractor.extractExperience("Julio 2006 - Septiembre 2006 Vuelvo a
Sertec Soluciones informáticas Trabajando como Operador de
Sistemas dentro del Proyecto CRONOS de la Editorial
Planeta.nSeptiembre 2007 - Julio 2008 Becario en el departamento
de Matemàtica Aplicada I de la Universitat Politècnica de
Catalunya dentro de los servicios informáticos dando soporte a los
profesores del departamento.","es");
    assertEquals(entries.size(),2);
    assertEquals(entries.get(0).getExperience(),2);
    assertEquals(entries.get(1).getExperience(),10);
}
Tests Unitarios
●   Típico: Tengo prisa. No tengo tiempo para
    hacer tests unitarios
●   Los tests unitarios se hacen para ahorrar
    tiempo
    ●   Software más sólido y probado.
    ●   Menos cosas que probar manualmente.
    ●   Menos bugs. Los bugs se encuentran antes.
    ●   Menos presión.
●   No hacer tests unitarios es no ser un buen
    programador
Cobertura de Código
●   Es importante saber cuanto código estamos
    realmente probando.
    ●   Ideal 70%-80%
    ●   100% es perder el tiempo. Demasiado caro.
●   Muy útil para contrastar que nuestros tests
    están realmente haciendo lo que queremos.
●   Muchísimas herramientas
    ●   Lo bueno es que no hay que configurar nada.
    ●   Se pueden integrar en el proceso de build.
    ●   Cobertura,EclEmma,Sonar, etc.
Cobertura de Código
Tests de Integración
●   Los hacen los desarrolladores
●   Prueban la funcionalidad de tu código que
    depende de recursos externos
    ●   Pruebas de bases de datos, recursos en red,
        servicios web, EJBs, disco,etc.
●   Requieren un setup. Inicialización de recursos,
    ficheros de configuración diferentes a
    producción, etc.
●   Herramientas como Spring te lo hacen más
    sencillo
Tests de Integración
●   Existen frameworks para todos los gustos
    ●   XMLUnit: Xmls, XSLTs, XSDs, ...
    ●   DBUnit: Acceso a bases de datos
    ●   HtmlUnit: Páginas web
    ●   SoapUI: Servicios web
    ●   Cactus: JSPs, Servlets, EJBs,...
HTMLUnit



  DBUnit




 XMLUnit
Tests de Integración
●   Hacer tests de integración requieres más
    esfuerzo que el hacer tests unitarios.
●   Sin embargo, es muy necesario.
●   Este esfuerzo es sólo de configuración.
    ●   ¿Cómo inicializo mi base de datos?
    ●   ¿Cómo inicializo mi servidor web?
●   Muchos servidores pueden ser embebidos:
    Jetty, Tomcat, HSQLDB, …
Tests de Integración
●   Proceso típico:
    1) Inicializar base de datos, servidor web, …
    2) Inicializar nuestros servicios.
    3) Ejecutar el test
●   Si nos encontramos haciendo nuestro propio
    framework de integración: Mal camino.
    ●   Spring hace todo más fácil
●   En Grails por ejemplo es ridículamente simple.
●   Una vez está todo configurado. Vale la pena.
    Los tests son mucho más significativos.
Tests de Integración
     void testFindAllByUsername() {{
      void testFindAllByUsername()
          CV cv1 == buildCV()
           CV cv1    buildCV()
          cvService.save(cv1)
           cvService.save(cv1)
          CV cv2 == buildCV()
           CV cv2    buildCV()
          cvService.save(cv2)
           cvService.save(cv2)
          def cvs == cvService.findAllByUsername("test")
           def cvs    cvService.findAllByUsername("test")
          assertEquals cvs.size(),2
           assertEquals cvs.size(),2
     }}

void testDeleteInvoice() {{
 void testDeleteInvoice()
     def invoiceData == new InvoiceData()
      def invoiceData    new InvoiceData()
     invoiceData.user == recruiter
      invoiceData.user    recruiter
     def invoice == billingService.generateInvoice(invoiceData)
      def invoice    billingService.generateInvoice(invoiceData)
     assertEquals billingService.findAllInvoicesByUser(recruiter).size,1
      assertEquals billingService.findAllInvoicesByUser(recruiter).size,1

     billingService.deleteInvoice(recruiter,invoice)
      billingService.deleteInvoice(recruiter,invoice)
     assertEquals billingService.findAllInvoicesByUser(recruiter).size,0
      assertEquals billingService.findAllInvoicesByUser(recruiter).size,0
}}
Tests de Integración
●   Ojo con el solapamiento entre tests de
    integración y tests funcionales
●   Si:
    ●   No usamos un framework que nos haga las cosas
        más fáciles
    ●   Nos está costando bastante el configurar el sistema
        (base de datos embebida, gestión de
        transacciones, limpieza entre tests, etc.)
●   Entones quizás sea mejor saltar directamente a
    hacer tests funcionales
Tests Funcionales
●   No los deberían hacer los desarrolladores.
●   Se comportan como si fueran usuarios reales.
●   No conocen el sistema.
●   Simplemente acceden a las páginas web,
    aplicación.
●   Son con diferencia el mejor tipo de pruebas
    ●   ¡¡ El software funciona de verdad !!
QA
●   Rara avis en España. Muy común en Europa.
●   No informáticos que se dedican a probar las
    aplicaciones.
●   Son personas muy útiles, pero es necesario
    guiarles. Es importante que se dejen guiar. Es
    gente que no tiene experiencia en desarrollo
    de software.
●   ¿Deberían hacer tests funcionales los
    programadores?
    ●   Idealmente, no. QA mira el software de un modo
        completamente diferente.
Tests Funcionales
●   Hoy por hoy hay muchas herramientas
    ●   Selenium
    ●   Canoo WebTest
    ●   HTMLUnit
●   ¿Y si mi aplicación es Swing?
    ●   Abbot, Frankenstein,...
●   Muchas herramientas comerciales
    ●   En una empresa usabamos HP QuickTest
        –   QA grababa los tests desde un applet y se generaban
            scripts en Excel. ¡Les encantaba!
Tests Funcionales
●   Selenium es enormemente sencillo
●   Tiene un IDE para grabar
    tests.
●   Los tests se pueden
    reproducir.
●   Incluso genera código en
    diferentes lenguajes.
●   Cualquiera puede grabar
    estos tests. Ideal para no
    desarrolladores.
Tests Funcionales
●   Pero, lanza una instancia del navegador con
    cada tests, es decir, consume bastantes
    recursos.
●   Los tests pueden ser complicados de mantener.
●   Canoo WebTest
Tests Funcionales
●   Ojo, a veces lo simple puede ser lo más potente
●   HtmlUnit es realmente sencillo, pero no es nada
    amigable para no desarrolladores.
Tests Funcionales
●   Ojo, a veces lo simple puede ser lo más potente
●   HtmlUnit es realmente sencillo y no requiere
    navegadores abiertos.
●   Pero sólo lo entendemos los programadores.
Tests Funcionales
●   Pero con un buen DSL cualquiera puede hacer
    tests.
●   En uno de mis trabajos lo probé en una de mis
    empresas y se comenzaron a hacer tests como
    churros. 36 Qas por fin productivos.
      Module: signin
       Module: signin
      Goto '/home'
       Goto '/home'                  run signin
      ClickByText 'Sign In'           run signin
       ClickByText 'Sign In'
      Type 'Login','martin'
       Type 'Login','martin'         Goto '/invoices'
      Type 'Password','test'          Goto '/invoices'
       Type 'Password','test'        ClickButton 'New Invoice'
                                      ClickButton 'New Invoice'
      ClickButton 'Sign In'
       ClickButton 'Sign In'         VeryfyText 'Create...
      VerifyText 'Welcome Martin'     VeryfyText 'Create...
       VerifyText 'Welcome Martin'
Test Driven Development
●   Crear primero el test y después el código.
●   Difícil de comenzar, cambio completo de
    mentalidad.
●   Tras acostumbrarse, muy productivo. Ya que:
    ●   Te obliga a enfrentarte al problema desde un punto
        de vista diferente.
    ●   Tras acabar la funcionalidad, ya tienes los tests.
●   Fácil acostumbrarse al empezar con bugs
    ●   ¿Te pasan un bug? Test que lo reproduzca.
Lo que ningún libro te contará sobre los tests
Integración Continua
¡Sálvame!
●   Iteraciones cada dos semanas.
●   Demos a final de cada iteración.
●   Despliegue en producción cada mes.
●   Un departamento de QA que necesita software
    que funcione.
●   Un departamento Comercial que quiere hacer
    demos a clientes.


                     ¿Imposible?
Integración Continua
                                    1. Compilar
                                    2. Ejecutar tests
                                    3. Analizar código
                                    4. Métricas
Commits
                                              7. Release


    SVN,
    CVS,..                     CI
                5. Desplegar

                     6. Tests Funcionales




               Servidor
Integración Continua
●   Cruise Control, Hudson, Apache Continuum,
    Bamboo, Team Foundation Server,...
●   Para mi, el mejor es Hudson
    ●   Instalación trivial
    ●   Enormemente sencillo de utilizar
    ●   Multitud de plug-ins
Integración Continua
Respetar la build
Integración Continua
●   Algunas buenas prácticas:
    ●   La build debe ser muy rápida. Intentar siempre
        acortar el tiempo de build.
    ●   No tener una única build. Separarlas para hacer el
        proceso más rápido.
    ●   Si la build se rompe, hay que parar y arreglarla.
    ●   Si hay QAs creando tests quizás convenga que
        tengan otra máquina.
    ●   Los tests funcionales suelen tomar bastante
        tiempo. Build propia o idealmente otra máquina.
Referencias
●   http://www.agile-spain.com
●   http://groups.google.es/group/agile-spain/files?pli=1
●   http://sites.google.com/site/axilmente/Home/recursos
●   http://pragprog.com
●   http://blog.objectmentor.com
●   http://www.crisp.se/henrik.kniberg/ScrumAndXpFromTheTrenches.pdf
●   http://www.infoq.com
●   http://www.presionblogosferica.com
●   http://www.javahispano.org
Gracias

Contenu connexe

Tendances

Software Engineering- Requirement Elicitation and Specification
Software Engineering- Requirement Elicitation and SpecificationSoftware Engineering- Requirement Elicitation and Specification
Software Engineering- Requirement Elicitation and SpecificationNishu Rastogi
 
Unit-I Basic Embedded System Notes
Unit-I Basic Embedded System NotesUnit-I Basic Embedded System Notes
Unit-I Basic Embedded System NotesDr. Pankaj Zope
 
SOC System Design Approach
SOC System Design ApproachSOC System Design Approach
SOC System Design ApproachA B Shinde
 
Computational models in embedded design
Computational models in embedded designComputational models in embedded design
Computational models in embedded designharshithashekar
 
Introduction to Embedded Architecture
Introduction to Embedded Architecture Introduction to Embedded Architecture
Introduction to Embedded Architecture amrutachintawar239
 
Future Directions for Compute-for-Graphics
Future Directions for Compute-for-GraphicsFuture Directions for Compute-for-Graphics
Future Directions for Compute-for-GraphicsElectronic Arts / DICE
 
Linux on RISC-V with Open Hardware (ELC-E 2020)
Linux on RISC-V with Open Hardware (ELC-E 2020)Linux on RISC-V with Open Hardware (ELC-E 2020)
Linux on RISC-V with Open Hardware (ELC-E 2020)Drew Fustini
 
Introduction to intel galileo board gen2
Introduction to intel galileo board gen2Introduction to intel galileo board gen2
Introduction to intel galileo board gen2Harshit Srivastava
 
Intrinsics: Low-level engine development with Burst - Unite Copenhagen 2019
Intrinsics: Low-level engine development with Burst - Unite Copenhagen 2019 Intrinsics: Low-level engine development with Burst - Unite Copenhagen 2019
Intrinsics: Low-level engine development with Burst - Unite Copenhagen 2019 Unity Technologies
 
Introduction to embedded system design
Introduction to embedded system designIntroduction to embedded system design
Introduction to embedded system designMukesh Bansal
 
Real Time Systems &amp; RTOS
Real Time Systems &amp; RTOSReal Time Systems &amp; RTOS
Real Time Systems &amp; RTOSVishwa Mohan
 
VHDL - Enumerated Types (Part 3)
VHDL - Enumerated Types (Part 3)VHDL - Enumerated Types (Part 3)
VHDL - Enumerated Types (Part 3)Abhilash Nair
 

Tendances (20)

Bending the Graphics Pipeline
Bending the Graphics PipelineBending the Graphics Pipeline
Bending the Graphics Pipeline
 
Software Engineering- Requirement Elicitation and Specification
Software Engineering- Requirement Elicitation and SpecificationSoftware Engineering- Requirement Elicitation and Specification
Software Engineering- Requirement Elicitation and Specification
 
Unit-I Basic Embedded System Notes
Unit-I Basic Embedded System NotesUnit-I Basic Embedded System Notes
Unit-I Basic Embedded System Notes
 
Synthesis
SynthesisSynthesis
Synthesis
 
SOC System Design Approach
SOC System Design ApproachSOC System Design Approach
SOC System Design Approach
 
Introduction to Linux Drivers
Introduction to Linux DriversIntroduction to Linux Drivers
Introduction to Linux Drivers
 
Embedded System-design technology
Embedded System-design technologyEmbedded System-design technology
Embedded System-design technology
 
RISC-V Introduction
RISC-V IntroductionRISC-V Introduction
RISC-V Introduction
 
Computational models in embedded design
Computational models in embedded designComputational models in embedded design
Computational models in embedded design
 
Introduction to Embedded Architecture
Introduction to Embedded Architecture Introduction to Embedded Architecture
Introduction to Embedded Architecture
 
Embedded system design process
Embedded system design processEmbedded system design process
Embedded system design process
 
Embedded system
Embedded systemEmbedded system
Embedded system
 
Future Directions for Compute-for-Graphics
Future Directions for Compute-for-GraphicsFuture Directions for Compute-for-Graphics
Future Directions for Compute-for-Graphics
 
Linux on RISC-V with Open Hardware (ELC-E 2020)
Linux on RISC-V with Open Hardware (ELC-E 2020)Linux on RISC-V with Open Hardware (ELC-E 2020)
Linux on RISC-V with Open Hardware (ELC-E 2020)
 
Introduction to intel galileo board gen2
Introduction to intel galileo board gen2Introduction to intel galileo board gen2
Introduction to intel galileo board gen2
 
Intrinsics: Low-level engine development with Burst - Unite Copenhagen 2019
Intrinsics: Low-level engine development with Burst - Unite Copenhagen 2019 Intrinsics: Low-level engine development with Burst - Unite Copenhagen 2019
Intrinsics: Low-level engine development with Burst - Unite Copenhagen 2019
 
Introduction to embedded system design
Introduction to embedded system designIntroduction to embedded system design
Introduction to embedded system design
 
Real Time Systems &amp; RTOS
Real Time Systems &amp; RTOSReal Time Systems &amp; RTOS
Real Time Systems &amp; RTOS
 
Introduction to Embedded System
Introduction to Embedded SystemIntroduction to Embedded System
Introduction to Embedded System
 
VHDL - Enumerated Types (Part 3)
VHDL - Enumerated Types (Part 3)VHDL - Enumerated Types (Part 3)
VHDL - Enumerated Types (Part 3)
 

En vedette

Arquitectura y diseño de aplicaciones Java EE
Arquitectura y diseño de aplicaciones Java EEArquitectura y diseño de aplicaciones Java EE
Arquitectura y diseño de aplicaciones Java EECarlos Gavidia-Calderon
 
White t shirt party at Cafe des Arts, Nairobi, Kenya
White t shirt party at Cafe des Arts, Nairobi, KenyaWhite t shirt party at Cafe des Arts, Nairobi, Kenya
White t shirt party at Cafe des Arts, Nairobi, KenyaAkinyi Adongo
 
Estefanía guzmán diapositivas
Estefanía guzmán diapositivasEstefanía guzmán diapositivas
Estefanía guzmán diapositivasPatty Guartazaca
 
Generacion de computadoras
Generacion de computadorasGeneracion de computadoras
Generacion de computadorasDaita Emoxa
 
Literacias via dispositivos & info basica cedep-paranoá-df30ago2014-v4
Literacias via dispositivos & info basica cedep-paranoá-df30ago2014-v4Literacias via dispositivos & info basica cedep-paranoá-df30ago2014-v4
Literacias via dispositivos & info basica cedep-paranoá-df30ago2014-v4Benedito Medeiros Neto
 
20131030 OECD - Competition and value distribution along the food chain. Span...
20131030 OECD - Competition and value distribution along the food chain. Span...20131030 OECD - Competition and value distribution along the food chain. Span...
20131030 OECD - Competition and value distribution along the food chain. Span...FIAB
 
Interacción o looping scratch
Interacción o looping   scratchInteracción o looping   scratch
Interacción o looping scratchJuan Alarcon
 
Lead to-Revenue Best Practices - Driving Pipeline Growth Across the Enterprise
Lead to-Revenue Best Practices - Driving Pipeline Growth Across the EnterpriseLead to-Revenue Best Practices - Driving Pipeline Growth Across the Enterprise
Lead to-Revenue Best Practices - Driving Pipeline Growth Across the EnterpriseMarketoEnterpriseContent
 
Curso Electromagnetismo II
Curso Electromagnetismo IICurso Electromagnetismo II
Curso Electromagnetismo IIrafarrc
 
Phyllosphere agricultura moderna
Phyllosphere agricultura modernaPhyllosphere agricultura moderna
Phyllosphere agricultura modernaCamacho & Meuer
 
MDI - Mandevian Knights
MDI - Mandevian KnightsMDI - Mandevian Knights
MDI - Mandevian KnightsDirecti Group
 
Informe visita al IGAC
Informe visita al IGACInforme visita al IGAC
Informe visita al IGACSergio AkaMosh
 

En vedette (20)

Arquitectura y diseño de aplicaciones Java EE
Arquitectura y diseño de aplicaciones Java EEArquitectura y diseño de aplicaciones Java EE
Arquitectura y diseño de aplicaciones Java EE
 
Entorno power point
Entorno power pointEntorno power point
Entorno power point
 
Evolución de java
Evolución de javaEvolución de java
Evolución de java
 
White t shirt party at Cafe des Arts, Nairobi, Kenya
White t shirt party at Cafe des Arts, Nairobi, KenyaWhite t shirt party at Cafe des Arts, Nairobi, Kenya
White t shirt party at Cafe des Arts, Nairobi, Kenya
 
Estefanía guzmán diapositivas
Estefanía guzmán diapositivasEstefanía guzmán diapositivas
Estefanía guzmán diapositivas
 
Generacion de computadoras
Generacion de computadorasGeneracion de computadoras
Generacion de computadoras
 
Cross concept 2
Cross concept 2Cross concept 2
Cross concept 2
 
Steal This Data - Email Security and DLP
Steal This Data - Email Security and DLPSteal This Data - Email Security and DLP
Steal This Data - Email Security and DLP
 
InnovArte en KunArte
InnovArte en KunArteInnovArte en KunArte
InnovArte en KunArte
 
Literacias via dispositivos & info basica cedep-paranoá-df30ago2014-v4
Literacias via dispositivos & info basica cedep-paranoá-df30ago2014-v4Literacias via dispositivos & info basica cedep-paranoá-df30ago2014-v4
Literacias via dispositivos & info basica cedep-paranoá-df30ago2014-v4
 
Frases del papa francisco
Frases del papa franciscoFrases del papa francisco
Frases del papa francisco
 
20131030 OECD - Competition and value distribution along the food chain. Span...
20131030 OECD - Competition and value distribution along the food chain. Span...20131030 OECD - Competition and value distribution along the food chain. Span...
20131030 OECD - Competition and value distribution along the food chain. Span...
 
Interacción o looping scratch
Interacción o looping   scratchInteracción o looping   scratch
Interacción o looping scratch
 
Construyendo la Propuesta de Investigación
Construyendo la Propuesta de Investigación Construyendo la Propuesta de Investigación
Construyendo la Propuesta de Investigación
 
Instituto superior tecnologico privado
Instituto superior tecnologico privadoInstituto superior tecnologico privado
Instituto superior tecnologico privado
 
Lead to-Revenue Best Practices - Driving Pipeline Growth Across the Enterprise
Lead to-Revenue Best Practices - Driving Pipeline Growth Across the EnterpriseLead to-Revenue Best Practices - Driving Pipeline Growth Across the Enterprise
Lead to-Revenue Best Practices - Driving Pipeline Growth Across the Enterprise
 
Curso Electromagnetismo II
Curso Electromagnetismo IICurso Electromagnetismo II
Curso Electromagnetismo II
 
Phyllosphere agricultura moderna
Phyllosphere agricultura modernaPhyllosphere agricultura moderna
Phyllosphere agricultura moderna
 
MDI - Mandevian Knights
MDI - Mandevian KnightsMDI - Mandevian Knights
MDI - Mandevian Knights
 
Informe visita al IGAC
Informe visita al IGACInforme visita al IGAC
Informe visita al IGAC
 

Similaire à Desarrollo con Java y metodologías agiles

Software Quality Assurance
Software Quality AssuranceSoftware Quality Assurance
Software Quality Assurancewill2294
 
Conceptos básicos de Unit Test
Conceptos básicos de Unit Test Conceptos básicos de Unit Test
Conceptos básicos de Unit Test Juan Vladimir
 
Artesania de Software y TDD
Artesania de Software y TDDArtesania de Software y TDD
Artesania de Software y TDDAlfredo Chavez
 
¿Cómo poner software de calidad en manos del usuario de forma rápida?
¿Cómo poner software de calidad en manos del usuario de forma rápida?¿Cómo poner software de calidad en manos del usuario de forma rápida?
¿Cómo poner software de calidad en manos del usuario de forma rápida?Micael Gallego
 
Desarrollo de Software Guiado por Pruebas
Desarrollo de Software Guiado por PruebasDesarrollo de Software Guiado por Pruebas
Desarrollo de Software Guiado por Pruebas.. ..
 
Automatización de pruebas con Selenium, Typescript, Protractor & Cucumber
Automatización de pruebas con Selenium, Typescript, Protractor & CucumberAutomatización de pruebas con Selenium, Typescript, Protractor & Cucumber
Automatización de pruebas con Selenium, Typescript, Protractor & CucumberSoftware Guru
 
Ponele el TURBO al Dev Team de tu Startup
Ponele el TURBO al Dev Team de tu StartupPonele el TURBO al Dev Team de tu Startup
Ponele el TURBO al Dev Team de tu StartupMartin Siniawski
 
Grails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasGrails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasCarlos Camacho
 
Testing & Pizza by Lito & nitsnets
Testing & Pizza by Lito & nitsnetsTesting & Pizza by Lito & nitsnets
Testing & Pizza by Lito & nitsnetseusonlito
 
Artesania de Software y TDD
Artesania de Software y TDDArtesania de Software y TDD
Artesania de Software y TDDAlfredo Chavez
 
Integracion Continua
Integracion ContinuaIntegracion Continua
Integracion ContinuaLenin Lozano
 
Ecuador jug 2017 -incrementando la productividad de proyectos java ee con c...
Ecuador jug   2017 -incrementando la productividad de proyectos java ee con c...Ecuador jug   2017 -incrementando la productividad de proyectos java ee con c...
Ecuador jug 2017 -incrementando la productividad de proyectos java ee con c...César Hernández
 
Conferencia Rails: Integracion Continua Y Rails
Conferencia Rails: Integracion Continua Y RailsConferencia Rails: Integracion Continua Y Rails
Conferencia Rails: Integracion Continua Y RailsDavid Calavera
 
Probando aplicaciones AngularJS
Probando aplicaciones AngularJSProbando aplicaciones AngularJS
Probando aplicaciones AngularJSRodrigo Pimentel
 
Pruebas de software
Pruebas de softwarePruebas de software
Pruebas de softwareGomez Gomez
 

Similaire à Desarrollo con Java y metodologías agiles (20)

Software Quality Assurance
Software Quality AssuranceSoftware Quality Assurance
Software Quality Assurance
 
Conceptos básicos de Unit Test
Conceptos básicos de Unit Test Conceptos básicos de Unit Test
Conceptos básicos de Unit Test
 
Artesania de Software y TDD
Artesania de Software y TDDArtesania de Software y TDD
Artesania de Software y TDD
 
¿Cómo poner software de calidad en manos del usuario de forma rápida?
¿Cómo poner software de calidad en manos del usuario de forma rápida?¿Cómo poner software de calidad en manos del usuario de forma rápida?
¿Cómo poner software de calidad en manos del usuario de forma rápida?
 
Desarrollo de Software Guiado por Pruebas
Desarrollo de Software Guiado por PruebasDesarrollo de Software Guiado por Pruebas
Desarrollo de Software Guiado por Pruebas
 
Automatización de pruebas con Selenium, Typescript, Protractor & Cucumber
Automatización de pruebas con Selenium, Typescript, Protractor & CucumberAutomatización de pruebas con Selenium, Typescript, Protractor & Cucumber
Automatización de pruebas con Selenium, Typescript, Protractor & Cucumber
 
Ponele el TURBO al Dev Team de tu Startup
Ponele el TURBO al Dev Team de tu StartupPonele el TURBO al Dev Team de tu Startup
Ponele el TURBO al Dev Team de tu Startup
 
Grails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasGrails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - Sistemas
 
Testing & Pizza by Lito & nitsnets
Testing & Pizza by Lito & nitsnetsTesting & Pizza by Lito & nitsnets
Testing & Pizza by Lito & nitsnets
 
Cobertura de pruebas unitarias - NetBaires
Cobertura de pruebas unitarias - NetBairesCobertura de pruebas unitarias - NetBaires
Cobertura de pruebas unitarias - NetBaires
 
Cobertura de pruebas unitarias en C#
Cobertura de pruebas unitarias en C#Cobertura de pruebas unitarias en C#
Cobertura de pruebas unitarias en C#
 
Artesania de Software y TDD
Artesania de Software y TDDArtesania de Software y TDD
Artesania de Software y TDD
 
Integracion Continua
Integracion ContinuaIntegracion Continua
Integracion Continua
 
Tdd
TddTdd
Tdd
 
Ecuador jug 2017 -incrementando la productividad de proyectos java ee con c...
Ecuador jug   2017 -incrementando la productividad de proyectos java ee con c...Ecuador jug   2017 -incrementando la productividad de proyectos java ee con c...
Ecuador jug 2017 -incrementando la productividad de proyectos java ee con c...
 
Conferencia Rails: Integracion Continua Y Rails
Conferencia Rails: Integracion Continua Y RailsConferencia Rails: Integracion Continua Y Rails
Conferencia Rails: Integracion Continua Y Rails
 
Probando aplicaciones AngularJS
Probando aplicaciones AngularJSProbando aplicaciones AngularJS
Probando aplicaciones AngularJS
 
Pucela testingdays testing_en_php
Pucela testingdays testing_en_phpPucela testingdays testing_en_php
Pucela testingdays testing_en_php
 
Introducción a tdd
Introducción a tddIntroducción a tdd
Introducción a tdd
 
Pruebas de software
Pruebas de softwarePruebas de software
Pruebas de software
 

Dernier

POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
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 JUNITMaricarmen Sánchez Ruiz
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 

Dernier (10)

POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
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
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 

Desarrollo con Java y metodologías agiles

  • 1. Desarrollo y Pruebas de Proyectos Java en un Entorno Ágil
  • 2. Acerca de Mi ● Amante del Software ● Expatriado y Retornado ● 10 años peleando con líneas de código ● Blogger aficionado: http://brigomp.blogspot.com ● Co-fundador de Jobsket ● http://www.jobsket.es/cv/martin
  • 3. El índice ● Historietas de Guerra ● Nociones básicas sobre Desarrollo Ágil ● Buenas Prácticas ● Testing y QA ● Integración Continua
  • 5.
  • 6. Historietas de Guerra ● Iteraciones frecuentes ● Desplegar software rápidamente ● Hacer que el cliente participe en el diseño ● No hace falta rodearse de los mejores. ● Rodearse de gente trabajadora suele ser suficiente.
  • 7. TVODD: TV Oriented Based Development ESTAS RETRASANDO EL PROYECTO
  • 8. Historias de Guerra ● Las televisiones no motivan (a no ser que te gusten apostar a las carreras de caballos) ● Determinadas acciones son golpes a la moral ● Los proyectos retrasados no van a remontar el vuelo por poner más presión a los empleados. ● Demuestran que son necesarios cambios en la forma de trabajar de la empresa.
  • 10. Historias de Guerra ● No por tener más testers tu software va a estar mejor testeado. ● Es necesaria una estrategia de automatización. ● El equipo de desarrollo debe ayudar al equipo de testers. ● Pero El equipo de testers debe dejarse ayudar. ● Tener testers no informáticos es bueno.
  • 11. Nociones básicas (y muy breves) sobre Desarrollo Ágil
  • 12. Manifiesto Ágil Nuevos Valores Antiguos Valores Individuos e integracción Procesos y herramientas Software que funciona Documentación exhaustiva Colaboración con el cliente Negociación contractual Respuesta al cambio Seguimiento de un plan
  • 13. Desarrollo ágil ● Pragmatismo ● Iteraciones cortas ● Software funcional disponible frecuentemente ● Reuniones frecuentes ● Reparto de conocimiento y responsabilidades ● Documentación ágil ● Demostración continua ● Retrospectivas ● Personas y relaciones frente a herramientas
  • 15. Programación en Parejas ● Juntar dos desarrolladores frente a una pantalla. ● A la larga, mayor productividad. ● Incrementa la propiedad colectiva del código. ● Combinación perfecta: desarrollardor experto + desarrollador normal/junior. ● Juntar a 2 juniors, 2 expertos no aporta demasiado ● El programador inexperto aprende mucho más. ● Quizás no una práctica para el día a día pero sí para hacer de cuando en cuando.
  • 16. Revisiones de Código ● Muy útil para detectar errores. ● Muy importante con nuevas incorporaciones en los equipos. ● Es necesario alternar la responsabilidad. Si no, “el revisor” será un cuello de botella. ● Aumenta la responsabilidad colectiva del código. ● Centrarse en errores de alto nivel. El resto se puede detectar fácilmente con análisis estático.
  • 17. Análisis estático ● Las herramientas de análisis estático detectan errores sin tener que ejecutar código. ● Se integran fácilmente en el proceso de build ● Si se detectan X errores críticos la build falla. ● Algunas veces hay que mitigar el ruido ● Findbugs, PMD, Sonar. ● Alternativas comerciales
  • 18. Análisis estático: Errores Imprevisibles ● Visto en Eclipse 3.5RC2 if (adapters == null && adapters.length == 0) return; ● Error desde Eclipse 3.2 ● Probablemente nunca se cumplió la condición ● Si se cumpliese habría saltado una NPE
  • 19. Análisis estático: Seguridad ● Ejemplo típico. SQL Injection HttpServletRequest request = … String usuario = request.getParameter(“user”) String query = “select * from account_numbers where nombre=' ” + usuario + “ ' ”; con.execute(query) ● ¿Y si user es “ ' OR 1==1-- ” ?
  • 20. Análisis estático: Escalabilidad ● Resource leaking try { Connection c = … String query = ...; c.execute(query); c.close() } catch (Exception e) { e.printStackTrace() } ● ¿ Qué pasa si falla la consulta ?
  • 21. Análisis estático: Concurrencia ● Ejemplo, uso de estructuras de datos no Thread-safe en código multihilo ● ¿Inocente? Esto es un gráfico de un servidor real. 4 CPUs 8Gb RAM.
  • 22.
  • 23. Análisis estático: Concurrencia ● Parece grave, ¿no? ¿Cuál fue la causa? ● Dos llamadas a HashMap.put() y mala suerte
  • 24.
  • 25.
  • 26.
  • 27.
  • 29. Testing ● Todos somos humanos. El software inevitablemente tiene muchos herrores. ● Bienvenidos sean los fallos. ● Por eso mismo debemos hacer pruebas. ● Unitarias ● Integración ● Funcionales ● Stress
  • 30. Tests Unitarios ● Los hacen los desarrolladores ● Prueban la funcionalidad de tu código ● Introducidos ya en todos los lenguajes ● Junit, Nunit, PhpUnit,Test::Unit,... ● Prueban partes de código que no interactuen con recursos externos ● No acceden a bases de datos, no acceden a la red, etc.
  • 31. Tests Unitarios public class LanguageDetectorTests extends TestCase { @Test public void testLanguageDetection() throws Exception { LanguageIdentifier identifier = new LanguageIdentifier(); assertEquals(identifier.identify("This is a test"),"en"); assertEquals(identifier.identify("Esto es un test"),"es"); }
  • 32. Tests Unitarios public void testExtractExperience() { List<ExperienceEntry> entries = extractor.extractExperience("Julio 2006 - Septiembre 2006 Vuelvo a Sertec Soluciones informáticas Trabajando como Operador de Sistemas dentro del Proyecto CRONOS de la Editorial Planeta.nSeptiembre 2007 - Julio 2008 Becario en el departamento de Matemàtica Aplicada I de la Universitat Politècnica de Catalunya dentro de los servicios informáticos dando soporte a los profesores del departamento.","es"); assertEquals(entries.size(),2); assertEquals(entries.get(0).getExperience(),2); assertEquals(entries.get(1).getExperience(),10); }
  • 33.
  • 34. Tests Unitarios ● Típico: Tengo prisa. No tengo tiempo para hacer tests unitarios ● Los tests unitarios se hacen para ahorrar tiempo ● Software más sólido y probado. ● Menos cosas que probar manualmente. ● Menos bugs. Los bugs se encuentran antes. ● Menos presión. ● No hacer tests unitarios es no ser un buen programador
  • 35. Cobertura de Código ● Es importante saber cuanto código estamos realmente probando. ● Ideal 70%-80% ● 100% es perder el tiempo. Demasiado caro. ● Muy útil para contrastar que nuestros tests están realmente haciendo lo que queremos. ● Muchísimas herramientas ● Lo bueno es que no hay que configurar nada. ● Se pueden integrar en el proceso de build. ● Cobertura,EclEmma,Sonar, etc.
  • 37.
  • 38. Tests de Integración ● Los hacen los desarrolladores ● Prueban la funcionalidad de tu código que depende de recursos externos ● Pruebas de bases de datos, recursos en red, servicios web, EJBs, disco,etc. ● Requieren un setup. Inicialización de recursos, ficheros de configuración diferentes a producción, etc. ● Herramientas como Spring te lo hacen más sencillo
  • 39. Tests de Integración ● Existen frameworks para todos los gustos ● XMLUnit: Xmls, XSLTs, XSDs, ... ● DBUnit: Acceso a bases de datos ● HtmlUnit: Páginas web ● SoapUI: Servicios web ● Cactus: JSPs, Servlets, EJBs,...
  • 40. HTMLUnit DBUnit XMLUnit
  • 41. Tests de Integración ● Hacer tests de integración requieres más esfuerzo que el hacer tests unitarios. ● Sin embargo, es muy necesario. ● Este esfuerzo es sólo de configuración. ● ¿Cómo inicializo mi base de datos? ● ¿Cómo inicializo mi servidor web? ● Muchos servidores pueden ser embebidos: Jetty, Tomcat, HSQLDB, …
  • 42. Tests de Integración ● Proceso típico: 1) Inicializar base de datos, servidor web, … 2) Inicializar nuestros servicios. 3) Ejecutar el test ● Si nos encontramos haciendo nuestro propio framework de integración: Mal camino. ● Spring hace todo más fácil ● En Grails por ejemplo es ridículamente simple. ● Una vez está todo configurado. Vale la pena. Los tests son mucho más significativos.
  • 43. Tests de Integración void testFindAllByUsername() {{ void testFindAllByUsername() CV cv1 == buildCV() CV cv1 buildCV() cvService.save(cv1) cvService.save(cv1) CV cv2 == buildCV() CV cv2 buildCV() cvService.save(cv2) cvService.save(cv2) def cvs == cvService.findAllByUsername("test") def cvs cvService.findAllByUsername("test") assertEquals cvs.size(),2 assertEquals cvs.size(),2 }} void testDeleteInvoice() {{ void testDeleteInvoice() def invoiceData == new InvoiceData() def invoiceData new InvoiceData() invoiceData.user == recruiter invoiceData.user recruiter def invoice == billingService.generateInvoice(invoiceData) def invoice billingService.generateInvoice(invoiceData) assertEquals billingService.findAllInvoicesByUser(recruiter).size,1 assertEquals billingService.findAllInvoicesByUser(recruiter).size,1 billingService.deleteInvoice(recruiter,invoice) billingService.deleteInvoice(recruiter,invoice) assertEquals billingService.findAllInvoicesByUser(recruiter).size,0 assertEquals billingService.findAllInvoicesByUser(recruiter).size,0 }}
  • 44. Tests de Integración ● Ojo con el solapamiento entre tests de integración y tests funcionales ● Si: ● No usamos un framework que nos haga las cosas más fáciles ● Nos está costando bastante el configurar el sistema (base de datos embebida, gestión de transacciones, limpieza entre tests, etc.) ● Entones quizás sea mejor saltar directamente a hacer tests funcionales
  • 45. Tests Funcionales ● No los deberían hacer los desarrolladores. ● Se comportan como si fueran usuarios reales. ● No conocen el sistema. ● Simplemente acceden a las páginas web, aplicación. ● Son con diferencia el mejor tipo de pruebas ● ¡¡ El software funciona de verdad !!
  • 46. QA ● Rara avis en España. Muy común en Europa. ● No informáticos que se dedican a probar las aplicaciones. ● Son personas muy útiles, pero es necesario guiarles. Es importante que se dejen guiar. Es gente que no tiene experiencia en desarrollo de software. ● ¿Deberían hacer tests funcionales los programadores? ● Idealmente, no. QA mira el software de un modo completamente diferente.
  • 47. Tests Funcionales ● Hoy por hoy hay muchas herramientas ● Selenium ● Canoo WebTest ● HTMLUnit ● ¿Y si mi aplicación es Swing? ● Abbot, Frankenstein,... ● Muchas herramientas comerciales ● En una empresa usabamos HP QuickTest – QA grababa los tests desde un applet y se generaban scripts en Excel. ¡Les encantaba!
  • 48. Tests Funcionales ● Selenium es enormemente sencillo ● Tiene un IDE para grabar tests. ● Los tests se pueden reproducir. ● Incluso genera código en diferentes lenguajes. ● Cualquiera puede grabar estos tests. Ideal para no desarrolladores.
  • 49. Tests Funcionales ● Pero, lanza una instancia del navegador con cada tests, es decir, consume bastantes recursos. ● Los tests pueden ser complicados de mantener. ● Canoo WebTest
  • 50. Tests Funcionales ● Ojo, a veces lo simple puede ser lo más potente ● HtmlUnit es realmente sencillo, pero no es nada amigable para no desarrolladores.
  • 51. Tests Funcionales ● Ojo, a veces lo simple puede ser lo más potente ● HtmlUnit es realmente sencillo y no requiere navegadores abiertos. ● Pero sólo lo entendemos los programadores.
  • 52. Tests Funcionales ● Pero con un buen DSL cualquiera puede hacer tests. ● En uno de mis trabajos lo probé en una de mis empresas y se comenzaron a hacer tests como churros. 36 Qas por fin productivos. Module: signin Module: signin Goto '/home' Goto '/home' run signin ClickByText 'Sign In' run signin ClickByText 'Sign In' Type 'Login','martin' Type 'Login','martin' Goto '/invoices' Type 'Password','test' Goto '/invoices' Type 'Password','test' ClickButton 'New Invoice' ClickButton 'New Invoice' ClickButton 'Sign In' ClickButton 'Sign In' VeryfyText 'Create... VerifyText 'Welcome Martin' VeryfyText 'Create... VerifyText 'Welcome Martin'
  • 53. Test Driven Development ● Crear primero el test y después el código. ● Difícil de comenzar, cambio completo de mentalidad. ● Tras acostumbrarse, muy productivo. Ya que: ● Te obliga a enfrentarte al problema desde un punto de vista diferente. ● Tras acabar la funcionalidad, ya tienes los tests. ● Fácil acostumbrarse al empezar con bugs ● ¿Te pasan un bug? Test que lo reproduzca.
  • 54. Lo que ningún libro te contará sobre los tests
  • 56. ¡Sálvame! ● Iteraciones cada dos semanas. ● Demos a final de cada iteración. ● Despliegue en producción cada mes. ● Un departamento de QA que necesita software que funcione. ● Un departamento Comercial que quiere hacer demos a clientes. ¿Imposible?
  • 57. Integración Continua 1. Compilar 2. Ejecutar tests 3. Analizar código 4. Métricas Commits 7. Release SVN, CVS,.. CI 5. Desplegar 6. Tests Funcionales Servidor
  • 58. Integración Continua ● Cruise Control, Hudson, Apache Continuum, Bamboo, Team Foundation Server,... ● Para mi, el mejor es Hudson ● Instalación trivial ● Enormemente sencillo de utilizar ● Multitud de plug-ins
  • 60.
  • 61.
  • 62.
  • 63.
  • 65. Integración Continua ● Algunas buenas prácticas: ● La build debe ser muy rápida. Intentar siempre acortar el tiempo de build. ● No tener una única build. Separarlas para hacer el proceso más rápido. ● Si la build se rompe, hay que parar y arreglarla. ● Si hay QAs creando tests quizás convenga que tengan otra máquina. ● Los tests funcionales suelen tomar bastante tiempo. Build propia o idealmente otra máquina.
  • 66. Referencias ● http://www.agile-spain.com ● http://groups.google.es/group/agile-spain/files?pli=1 ● http://sites.google.com/site/axilmente/Home/recursos ● http://pragprog.com ● http://blog.objectmentor.com ● http://www.crisp.se/henrik.kniberg/ScrumAndXpFromTheTrenches.pdf ● http://www.infoq.com ● http://www.presionblogosferica.com ● http://www.javahispano.org