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

Más contenido relacionado

Destacado

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
 
Elaboración de mapas para publicaciones científicas y documentos de divulgación
Elaboración de mapas para publicaciones científicas y documentos de divulgaciónElaboración de mapas para publicaciones científicas y documentos de divulgación
Elaboración de mapas para publicaciones científicas y documentos de divulgaciónÁngel M. Felicísimo
 
NEW MEDIA IN SPORT (Mobile World Congress 2011)
NEW MEDIA IN SPORT (Mobile World Congress 2011)NEW MEDIA IN SPORT (Mobile World Congress 2011)
NEW MEDIA IN SPORT (Mobile World Congress 2011)Miguel Angel Morcuende
 
El mentoring y la responsabilidad social universitaria
El mentoring y la responsabilidad social universitariaEl mentoring y la responsabilidad social universitaria
El mentoring y la responsabilidad social universitariaLuis Otero
 
Ch. 4 Skin And Body Membranes
Ch. 4   Skin And Body MembranesCh. 4   Skin And Body Membranes
Ch. 4 Skin And Body MembranesWesley McCammon
 

Destacado (20)

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
 
Elaboración de mapas para publicaciones científicas y documentos de divulgación
Elaboración de mapas para publicaciones científicas y documentos de divulgaciónElaboración de mapas para publicaciones científicas y documentos de divulgación
Elaboración de mapas para publicaciones científicas y documentos de divulgación
 
NEW MEDIA IN SPORT (Mobile World Congress 2011)
NEW MEDIA IN SPORT (Mobile World Congress 2011)NEW MEDIA IN SPORT (Mobile World Congress 2011)
NEW MEDIA IN SPORT (Mobile World Congress 2011)
 
El mentoring y la responsabilidad social universitaria
El mentoring y la responsabilidad social universitariaEl mentoring y la responsabilidad social universitaria
El mentoring y la responsabilidad social universitaria
 
Ch. 4 Skin And Body Membranes
Ch. 4   Skin And Body MembranesCh. 4   Skin And Body Membranes
Ch. 4 Skin And Body Membranes
 
Neumonía
NeumoníaNeumonía
Neumonía
 

Similar a 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
 

Similar a 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
 

Último

El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaarkananubis
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxMariaBurgos55
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxJOSEMANUELHERNANDEZH11
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxAlexander López
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..RobertoGumucio2
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptJavierHerrera662252
 

Último (20)

El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en mina
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptx
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptx
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
 

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