Jornadas Symfony                               5 y 6 de julio 2010
                                               Universi...
Arquitectura y diseño de
          un entorno de desarrollo
          Ricardo Borillo, Universitat Jaume I
          boril...
sesión patrocinada por




                   http://www.lsi.uji.es/


Jornadas Symfony                            http://...
Índice

           Características, requisitos y arquitectura de los entornos de desarrollo actuales
           Metodolo...
Características, requisitos y arquitectura de los
                  entornos de desarrollo actuales


      Los tres aspec...
Características, requisitos y arquitectura de los
                  entornos de desarrollo actuales

       Objetivos para...
Características, requisitos y arquitectura de los
                  entornos de desarrollo actuales


        Característi...
Características, requisitos y arquitectura de los
                  entornos de desarrollo actuales


        Objetivos:
 ...
Características, requisitos y arquitectura de los
                 entornos de desarrollo actuales


        En definitiva...
Características, requisitos y arquitectura de los
                  entornos de desarrollo actuales


        Arquitectura...
Características, requisitos y arquitectura de los
                 entornos de desarrollo actuales

                   ¿¿¿...
Índice

           Características, requisitos y arquitectura de los entornos de desarrollo actuales
           Metodolo...
Metodologías de desarrollo: Clásicas vs Ágiles


           Metodologías clásicas:
                  Análisis, diseño, i...
Metodologías de desarrollo: Clásicas vs Ágiles


                   XP: eXtreme Programming




Jornadas Symfony          ...
Metodologías de desarrollo: Clásicas vs Ágiles


      El Manifiesto Ágil valora:
           A los individuos y su intera...
Metodologías de desarrollo: Clásicas vs Ágiles


      XP es una metodología ágil:
           Diseñada para entornos diná...
Metodologías de desarrollo: Clásicas vs Ágiles


      Programador:
           Responsable de decisiones técnicas y de co...
Metodologías de desarrollo: Clásicas vs Ágiles


      Captura de requisitos: Historias del Usuario
      (User-Stories)
 ...
Metodologías de desarrollo: Clásicas vs Ágiles


      Planificación:
           Planificación por entregas (releases)
  ...
Metodologías de desarrollo: Clásicas vs Ágiles


      Programación:
           La programación de tareas se realiza por ...
Metodologías de desarrollo: Clásicas vs Ágiles


      Practicas:
           El juego de la planificación
           Ent...
Metodologías de desarrollo: Clásicas vs Ágiles


                            SCRUM




Jornadas Symfony                   ...
Metodologías de desarrollo: Clásicas vs Ágiles




Jornadas Symfony                                  http://decharlas.uji....
Metodologías de desarrollo: Clásicas vs Ágiles


      Roles principales: Scrum Master,
      Product Owner y Team. El res...
Metodologías de desarrollo: Clásicas vs Ágiles




Jornadas Symfony                                  http://decharlas.uji....
Metodologías de desarrollo: Clásicas vs Ágiles


      Conclusión:
           No todo es blanco ni negro
           Méto...
Índice

           Características, requisitos y arquitectura de los entornos de desarrollo actuales
           Metodolo...
Herramientas de documentación y gestión del
                          conocimiento


        Requisitos:
           Forma...
Herramientas de documentación y gestión del
                          conocimiento


        Posibles alternativas y punto...
Herramientas de documentación y gestión del
                          conocimiento

      Wiki:




Jornadas Symfony      ...
Herramientas de documentación y gestión del
                          conocimiento

      DocBook:




Jornadas Symfony   ...
Índice

           Características, requisitos y arquitectura de los entornos de desarrollo actuales
           Metodolo...
Sistemas de control de versiones


        Requisitos:
           Repositorio unificado para el código
           Soport...
Sistemas de control de versiones


        Tipos de repositorios:
           Centralizados (CVS o Subversion):
          ...
Sistemas de control de versiones




Jornadas Symfony                                      http://decharlas.uji.es/symfony
Sistemas de control de versiones


        Tipos de repositorios:
           Distribuidos (GIT o Mercurial):
            ...
Sistemas de control de versiones




Jornadas Symfony                                      http://decharlas.uji.es/symfony
Sistemas de control de versiones




Jornadas Symfony                                      http://decharlas.uji.es/symfony
Índice

           Características, requisitos y arquitectura de los entornos de desarrollo actuales
           Metodolo...
Herramientas de construcción


        Requisitos:
           Evitar compilación, construcción y despliegue manual
      ...
Herramientas de construcción


        Objetivos:
           Evitar errores
           Aplicación desplegable por cualqu...
Herramientas de construcción


        Apache Ant o Phing:
           Similar a los makefiles, pero con sintaxis XML
    ...
Herramientas de construcción

      <?xml version=”1.0”?>

      <project name="Money" default="build">

         <target ...
Herramientas de construcción


        Apache Maven o php-maven:
           Desarrollo Java + extensión PHP
           T...
Herramientas de construcción

      <project>

         <modelVersion>4.0.0</modelVersion>

         <groupId>com.mycompan...
Herramientas de construcción


        Creación de nuevos proyectos:
      mvn archetype:generate 

            -Darchetyp...
Herramientas de construcción


        Layout resultante:
         my-app

         |-- pom.xml

         `-- src

       ...
Índice

           Características, requisitos y arquitectura de los entornos de desarrollo actuales
           Metodolo...
Integración contínua


        Martin Fowler:
       ”Continuous Integration is a software
      development practice wher...
Integración contínua


        Hudson:
           Independiente del lenguaje
           Construcción de software y monit...
Integración contínua




Jornadas Symfony                          http://decharlas.uji.es/symfony
Integración contínua


            Ejemplo disponible online:
           http://hudson.highsource.org/


            Conf...
Integración contínua


        PhpUnderControl:
                   http://phpundercontrol.org/about.html

               ...
Integración contínua


              CruiseControl:
                   http://cruisecontrol.sourceforge.net/


           ...
Índice

           Características, requisitos y arquitectura de los entornos de desarrollo actuales
           Metodolo...
Gestión de proyectos e incidencias


        Requisitos:
           Registrar todas las posibles modificaciones que
     ...
Gestión de proyectos e incidencias


       JIRA:
        Integración con Netbeans y Eclipse

         (Mylyn)
        I...
Gestión de proyectos e incidencias




Jornadas Symfony                                        http://decharlas.uji.es/sym...
Gestión de proyectos e incidencias




Jornadas Symfony                                        http://decharlas.uji.es/sym...
Gestión de proyectos e incidencias




Jornadas Symfony                                        http://decharlas.uji.es/sym...
Gestión de proyectos e incidencias




Jornadas Symfony                                        http://decharlas.uji.es/sym...
Gestión de proyectos e incidencias


        Ejemplo disponible online:
           http://jira.codehaus.org/




Jornadas...
Índice

           Características, requisitos y arquitectura de los entornos de desarrollo actuales
           Metodolo...
Pruebas unitarias del software


            Unit testing Wikipedia:
            ”In computer programming, unit
          ...
Pruebas unitarias del software


       Beneficios:
        Facilitar el cambio y el refactoring


        Integración m...
Pruebas unitarias del software


       Tipos de pruebas:
        Unitarias o de desarrollo


        Integración


    ...
Pruebas unitarias del software


        Unit testing en symfony:
           symfony 1.x: Lime:
                  Simpli...
Pruebas unitarias del software

      class MoneyTest extends PHPUnit_Framework_TestCase

      {

            protected $...
Pruebas unitarias del software

      phpunit:

              [exec] PHPUnit 3.4.14 by Sebastian Bergmann.

              ...
Pruebas unitarias del software


       Herramientas:
        Pruebas de código: jUnit, Nunit,

         PHPUnit, PyUnit ...
Pruebas unitarias del software




Jornadas Symfony                                    http://decharlas.uji.es/symfony
Pruebas unitarias del software


            TDD Wikipedia:
            ”El desarrollo guiado por pruebas, o Test-driven
 ...
Pruebas unitarias del software




Jornadas Symfony                                    http://decharlas.uji.es/symfony
Pruebas unitarias del software


       Otros conceptos relacionados:
        Cobertura: porcentaje de nuestro

         ...
Índice

           Características, requisitos y arquitectura de los entornos de desarrollo actuales
           Metodolo...
Repositorio de componentes


        Objetivos:
           Repositorio Maven de artefactos
           Proxy-cache que re...
Repositorio de componentes




Jornadas Symfony                                http://decharlas.uji.es/symfony
Repositorio de componentes


        Ejemplo disponible online:
           http://repo.jfrog.org/artifactory/webapp/home....
Índice

           Características, requisitos y arquitectura de los entornos de desarrollo actuales
           Metodolo...
Aseguramiento de la calidad: Análisis estático del
                          código


        Análisis estático del código...
Aseguramiento de la calidad: Análisis estático del
                          código


      Objetivo. Encontrar partes del...
Aseguramiento de la calidad: Análisis estático del
                          código


        Algunas herramientas para PH...
Aseguramiento de la calidad: Análisis estático del
                          código


        Algunas herramientas para PH...
Aseguramiento de la calidad: Análisis estático del
                          código

           Varios proyectos de libres...
Aseguramiento de la calidad: Análisis estático del
                          código




Jornadas Symfony                  ...
Aseguramiento de la calidad: Análisis estático del
                          código




Jornadas Symfony                  ...
Aseguramiento de la calidad: Análisis estático del
                          código




Jornadas Symfony                  ...
Aseguramiento de la calidad: Análisis estático del
                          código




Jornadas Symfony                  ...
Aseguramiento de la calidad: Análisis estático del
                          código




Jornadas Symfony                  ...
Aseguramiento de la calidad: Análisis estático del
                          código




Jornadas Symfony                  ...
Índice

           Características, requisitos y arquitectura de los entornos de desarrollo actuales
           Metodolo...
IDE para el desarrollo de aplicaciones


       Eclipse/Netbeans como elemento integrador:
           Plugin Subversion
 ...
Fin




                         ¿Preguntas?




Jornadas Symfony                http://decharlas.uji.es/symfony
Upcoming SlideShare
Loading in …5
×

Arquitectura y diseño de un entorno de desarrollo - decharlas

3,758 views

Published on

Charla de Ricardo Borillo en las primeras jornadas symfony hablándonos sobre la gestión de un grupo de trabajo y las herramientas de apoyo.

Published in: Technology
0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,758
On SlideShare
0
From Embeds
0
Number of Embeds
199
Actions
Shares
0
Downloads
161
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide

Arquitectura y diseño de un entorno de desarrollo - decharlas

  1. 1. Jornadas Symfony 5 y 6 de julio 2010 Universitat Jaume I, Castellón http://decharlas.uji.es/symfony organizan patrocinan colaboran
  2. 2. Arquitectura y diseño de un entorno de desarrollo Ricardo Borillo, Universitat Jaume I borillo@uji.es 5 y 6 de julio 2010 Jornadas Symfony Universitat Jaume I, Castellón http://decharlas.uji.es/symfony
  3. 3. sesión patrocinada por http://www.lsi.uji.es/ Jornadas Symfony http://decharlas.uji.es/symfony
  4. 4. Índice  Características, requisitos y arquitectura de los entornos de desarrollo actuales  Metodologías de desarrollo: Clásicas vs Ágiles  Herramientas de documentación y gestión del conocimiento  Sistemas de control de versiones  Herramientas de construcción  Integración contínua  Gestión de proyectos e incidencias  Pruebas unitarias del software  Repositorio de componentes  Aseguramiento de la calidad: Análisis estático del codigo  IDE para el desarrollo de aplicaciones. Conexión entre todos los elementos Jornadas Symfony http://decharlas.uji.es/symfony
  5. 5. Características, requisitos y arquitectura de los entornos de desarrollo actuales Los tres aspectos más importantes en un equipo de desarrollo:  Personas, personas y personas Jornadas Symfony http://decharlas.uji.es/symfony
  6. 6. Características, requisitos y arquitectura de los entornos de desarrollo actuales Objetivos para el equipo humano:  Formación:  Todos conocen el entorno y herramientas  Todos conocen la tecnología  Transferencia de conocimiento de los más expertos a los menos expertos  Motivación:  Todos pueden asumir tareas de innovación  A cualquiera se le puede asignar cualquier tarea Jornadas Symfony http://decharlas.uji.es/symfony
  7. 7. Características, requisitos y arquitectura de los entornos de desarrollo actuales Características del entorno:  Equipos de trabajo de tamaño limitado  Visión integrada de producto:  Pautas comunes  Reutilización de código  Módulos específicos para cada necesidad  Estándares de desarrollo bien definidos (directrices a seguir) Jornadas Symfony http://decharlas.uji.es/symfony
  8. 8. Características, requisitos y arquitectura de los entornos de desarrollo actuales Objetivos:  Producir software de calidad (sin bugs)  Producir software mantenible y documentado  Entorno de trabajo adecuado:  Integrado  Predecible  Alto de nivel de interacción entre desarrolladores  Propiedad colectiva del código Jornadas Symfony http://decharlas.uji.es/symfony
  9. 9. Características, requisitos y arquitectura de los entornos de desarrollo actuales En definitiva ... Jornadas Symfony QA http://decharlas.uji.es/symfony
  10. 10. Características, requisitos y arquitectura de los entornos de desarrollo actuales Arquitectura deseable:  Separación entre desarrollo y producción  Despliegue controlado de aplicaciones  Compartición de código  Registro global de bugs, tareas y mejoras  Testeo automático de aplicaciones  Documentación de funcionalidades y procesos Jornadas Symfony http://decharlas.uji.es/symfony
  11. 11. Características, requisitos y arquitectura de los entornos de desarrollo actuales ¿¿¿Cómo consigo todo esto??? Jornadas Symfony http://decharlas.uji.es/symfony
  12. 12. Índice  Características, requisitos y arquitectura de los entornos de desarrollo actuales  Metodologías de desarrollo: Clásicas vs Ágiles  Herramientas de documentación y gestión del conocimiento  Sistemas de control de versiones  Herramientas de construcción  Integración continua  Gestión de proyectos e incidencias  Pruebas unitarias del software  Repositorio de componentes  Aseguramiento de la calidad: Análisis estático del código  IDE para el desarrollo de aplicaciones. Conexión entre todos los elementos Jornadas Symfony http://decharlas.uji.es/symfony
  13. 13. Metodologías de desarrollo: Clásicas vs Ágiles  Metodologías clásicas:  Análisis, diseño, implementación y pruebas  Análisis apoyado en notaciones gráficas: DFD, E/R, UML  Estricto, rígido y poco reactivo a cambios (toma de requisitos inicial)  Metodologías ágiles:  Desarrollo iterativo  El código es la base  Ágil, dinámico y muy flexible Jornadas Symfony http://decharlas.uji.es/symfony
  14. 14. Metodologías de desarrollo: Clásicas vs Ágiles XP: eXtreme Programming Jornadas Symfony http://decharlas.uji.es/symfony
  15. 15. Metodologías de desarrollo: Clásicas vs Ágiles El Manifiesto Ágil valora:  A los individuos y su interacción, por encima de los procesos y las herramientas  El software que funciona, por encima de la documentación exhaustiva  La colaboración con el cliente, por encima de la negociación contractual  La respuesta al cambio, por encima del seguimiento de un plan Jornadas Symfony http://decharlas.uji.es/symfony
  16. 16. Metodologías de desarrollo: Clásicas vs Ágiles XP es una metodología ágil:  Diseñada para entornos dinámicos  Pensada para equipos pequeños (hasta 10 programadores)  Orientada fuertemente hacia la codificación  Énfasis en la comunicación informal, verbal Jornadas Symfony http://decharlas.uji.es/symfony
  17. 17. Metodologías de desarrollo: Clásicas vs Ágiles Programador:  Responsable de decisiones técnicas y de construir el sistema  Sin distinción entre analistas, diseñadores o codificadores  En XP, los programadores diseñan, programan y realizan las pruebas Jefe de Proyecto:  Organiza y guía las reuniones  Asegura condiciones adecuadas para el proyecto Cliente:  Es parte del equipo  Determina qué construir y cuándo  Establece las pruebas funcionales Jornadas Symfony http://decharlas.uji.es/symfony
  18. 18. Metodologías de desarrollo: Clásicas vs Ágiles Captura de requisitos: Historias del Usuario (User-Stories)  Establecen los requisitos del cliente  Trozos de funcionalidad que aportan valor  Se les asignan tareas de programación con un nº de horas de desarrollo  Las establece el cliente  Son la base para las pruebas funcionales Jornadas Symfony http://decharlas.uji.es/symfony
  19. 19. Metodologías de desarrollo: Clásicas vs Ágiles Planificación:  Planificación por entregas (releases)  Se priorizan aquellas user-stories que el cliente selecciona porque son más importantes para el negocio  Entregas:  Son lo más pequeñas posibles  Se dividen en iteraciones (iteración = 2 o 3 semanas)  Están compuestas por historias  A cada programador se le asigna una tarea de la user- story Jornadas Symfony http://decharlas.uji.es/symfony
  20. 20. Metodologías de desarrollo: Clásicas vs Ágiles Programación:  La programación de tareas se realiza por parejas  La pareja diseña, prueba, implementa e integra el código de la tarea  Código dirigido por las pruebas (TDD)  Código modular, intentando refactorizar siempre que se pueda Jornadas Symfony http://decharlas.uji.es/symfony
  21. 21. Metodologías de desarrollo: Clásicas vs Ágiles Practicas:  El juego de la planificación  Entregas pequeñas  Diseño simple  Pruebas  Refactoring  Programación en parejas (compartir experiencia / detectar fallos)  Propiedad colectiva  Integración contínua  Cliente in situ  Estándares de programación Jornadas Symfony http://decharlas.uji.es/symfony
  22. 22. Metodologías de desarrollo: Clásicas vs Ágiles SCRUM Jornadas Symfony http://decharlas.uji.es/symfony
  23. 23. Metodologías de desarrollo: Clásicas vs Ágiles Jornadas Symfony http://decharlas.uji.es/symfony
  24. 24. Metodologías de desarrollo: Clásicas vs Ágiles Roles principales: Scrum Master, Product Owner y Team. El resto son “gallinas” Jornadas Symfony http://decharlas.uji.es/symfony
  25. 25. Metodologías de desarrollo: Clásicas vs Ágiles Jornadas Symfony http://decharlas.uji.es/symfony
  26. 26. Metodologías de desarrollo: Clásicas vs Ágiles Conclusión:  No todo es blanco ni negro  Método = Conjunto ordenado de buenas prácticas Jornadas Symfony http://decharlas.uji.es/symfony
  27. 27. Índice  Características, requisitos y arquitectura de los entornos de desarrollo actuales  Metodologías de desarrollo: Clásicas vs Ágiles  Herramientas de documentación y gestión del conocimiento  Sistemas de control de versiones  Herramientas de construcción  Integración continua  Gestión de proyectos e incidencias  Pruebas unitarias del software  Repositorio de componentes  Aseguramiento de la calidad: Análisis estático del código  IDE para el desarrollo de aplicaciones. Conexión entre todos los elementos Jornadas Symfony http://decharlas.uji.es/symfony
  28. 28. Herramientas de documentación y gestión del conocimiento Requisitos:  Formato estándar de representación  Documentación accesible online  Fácil modificación y mantenimiento  Conversión a otros formatos como PDF  Búsqueda y buena gestión del conocimiento Jornadas Symfony http://decharlas.uji.es/symfony
  29. 29. Herramientas de documentación y gestión del conocimiento Posibles alternativas y puntos fuertes:  Wiki:  Sintaxis sencilla  Herramienta online  Multitud de herramientas (MediaWiki, Confluence, DokuWiki)  DocBook:  XML  Fácilmente convertible a otros formatos Jornadas Symfony http://decharlas.uji.es/symfony
  30. 30. Herramientas de documentación y gestión del conocimiento Wiki: Jornadas Symfony http://decharlas.uji.es/symfony
  31. 31. Herramientas de documentación y gestión del conocimiento DocBook: Jornadas Symfony http://decharlas.uji.es/symfony
  32. 32. Índice  Características, requisitos y arquitectura de los entornos de desarrollo actuales  Metodologías de desarrollo: Clásicas vs Ágiles  Herramientas de documentación y gestión del conocimiento  Sistemas de control de versiones  Herramientas de construcción  Integración continua  Gestión de proyectos e incidencias  Pruebas unitarias del software  Repositorio de componentes  Aseguramiento de la calidad: Análisis estático del código  IDE para el desarrollo de aplicaciones. Conexión entre todos los elementos Jornadas Symfony http://decharlas.uji.es/symfony
  33. 33. Sistemas de control de versiones Requisitos:  Repositorio unificado para el código  Soporte para el versionado  Soporte para realizar comparaciones entre versiones  Compartición de código entre desarrolladores  Integrado con las herramientas de desarrollo Jornadas Symfony http://decharlas.uji.es/symfony
  34. 34. Sistemas de control de versiones Tipos de repositorios:  Centralizados (CVS o Subversion):  Existe un repositorio centralizado con todo el código  Para trabajar sobre un recurso, hay que descargar una copia local  Los ficheros modificados hay que subirlos de nuevo para que estén accesibles para todos  Los desarrolladores sólo tienen en su copia local aquellos fuentes que han solicitado del servidor Jornadas Symfony http://decharlas.uji.es/symfony
  35. 35. Sistemas de control de versiones Jornadas Symfony http://decharlas.uji.es/symfony
  36. 36. Sistemas de control de versiones Tipos de repositorios:  Distribuidos (GIT o Mercurial):  No hay un repositorio central  Todos los desarrolladores tienen su propia copia del repositorio, con todas las versiones y toda la historia.  Permiten que dos desarrolladores puedan compartir cambios (sincronizarse).  Suele haber un repositorio de fuentes que se considera oficial o central (obtener la primera copia, versiones probadas, backup) Jornadas Symfony http://decharlas.uji.es/symfony
  37. 37. Sistemas de control de versiones Jornadas Symfony http://decharlas.uji.es/symfony
  38. 38. Sistemas de control de versiones Jornadas Symfony http://decharlas.uji.es/symfony
  39. 39. Índice  Características, requisitos y arquitectura de los entornos de desarrollo actuales  Metodologías de desarrollo: Clásicas vs Ágiles  Herramientas de documentación y gestión del conocimiento  Sistemas de control de versiones  Herramientas de construcción  Integración continua  Gestión de proyectos e incidencias  Pruebas unitarias del software  Repositorio de componentes  Aseguramiento de la calidad: Análisis estático del código  IDE para el desarrollo de aplicaciones. Conexión entre todos los elementos Jornadas Symfony http://decharlas.uji.es/symfony
  40. 40. Herramientas de construcción Requisitos:  Evitar compilación, construcción y despliegue manual del código  Independencia del IDE  Flexibilidad y soporte para casi cualquier tipo de herramienta necesaria  Integración de las pruebas unitarias, generación de documentación, despliegue en pre-producción, métricas de código … Todo en uno y desde un único sitio!! Jornadas Symfony http://decharlas.uji.es/symfony
  41. 41. Herramientas de construcción Objetivos:  Evitar errores  Aplicación desplegable por cualquiera sin conocimientos concretos de la misma  Control automático de las dependencias  Integración completa con el entorno  Necesario ejecutar siempre los controles de calidad Jornadas Symfony http://decharlas.uji.es/symfony
  42. 42. Herramientas de construcción Apache Ant o Phing:  Similar a los makefiles, pero con sintaxis XML  Originalmente para Java, aunque se usa para cualquier lenguaje. Phing ofrece funcionalidades específicas PHP  Proceso de construcción = Secuencia de ”targets”  Cada ”target” realiza un paso del proceso y ejecuta ”tasks”  Muchas ”tasks” ya predefinidas: Compilación, SCP, empaquetado, ejecución de tests unitarios, etc  Muy buena integración con Eclipse/Netbeans si usamos Ant Jornadas Symfony http://decharlas.uji.es/symfony
  43. 43. Herramientas de construcción <?xml version=”1.0”?> <project name="Money" default="build"> <target name="clean"> <delete dir="${basedir}/build"/> </target> <target name="prepare"> <mkdir dir="${basedir}/build/logs"/> </target> <target name="phpunit"> <exec dir="${basedir}" executable="phpunit" failonerror="true"> <arg line="--log-xml ${basedir}/build/logs/junit.xml --coverage-clover ${basedir}/build/logs/clover.xml MoneyTest" /> </exec> </target> </project> Jornadas Symfony http://decharlas.uji.es/symfony
  44. 44. Herramientas de construcción Apache Maven o php-maven:  Desarrollo Java + extensión PHP  Todos los proyectos tienen la misma estructura y siguen el mismo proceso de construcción: Life-cycle  Gestión automática de dependencias  Multitud de plugins existentes para distintas necesidades  Puede utilizar Ant Jornadas Symfony http://decharlas.uji.es/symfony
  45. 45. Herramientas de construcción <project> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <packaging>php</packaging> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.phpunit</groupId> <artifactId>phpunit5</artifactId> <version>3.2.9-SNAPSHOT</version> </dependency> </dependencies> </project> Jornadas Symfony http://decharlas.uji.es/symfony
  46. 46. Herramientas de construcción Creación de nuevos proyectos: mvn archetype:generate -DarchetypeGroupId=org.phpmaven -DarchetypeArtifactId=php5-lib-archetype -DarchetypeVersion=1.0 -DgroupId=org.sample -DartifactId=my-app Jornadas Symfony http://decharlas.uji.es/symfony
  47. 47. Herramientas de construcción Layout resultante: my-app |-- pom.xml `-- src |-- main `-- php `-- org.sample `-- app.php `-- webapp `-- index.php |`-- test `-- php `-- org.sample `-- apptest.php Jornadas Symfony http://decharlas.uji.es/symfony
  48. 48. Índice  Características, requisitos y arquitectura de los entornos de desarrollo actuales  Metodologías de desarrollo: Clásicas vs Ágiles  Herramientas de documentación y gestión del conocimiento  Sistemas de control de versiones  Herramientas de construcción  Integración continua  Gestión de proyectos e incidencias  Pruebas unitarias del software  Repositorio de componentes  Aseguramiento de la calidad: Análisis estático del código  IDE para el desarrollo de aplicaciones. Conexión entre todos los elementos Jornadas Symfony http://decharlas.uji.es/symfony
  49. 49. Integración contínua Martin Fowler: ”Continuous Integration is a software development practice where members of a team integrate their work frequently, usually each person integrates at least daily - leading to multiple integrations per day. Each integration is verified by an automated build (including test) to detect integration errors as quickly as possible. Many teams find that this approach leads to significantly reduced integration problems and allows a team to develop cohesive software more rapidly.” Jornadas Symfony http://decharlas.uji.es/symfony
  50. 50. Integración contínua Hudson:  Independiente del lenguaje  Construcción de software y monitorización de procesos tipo CRON  Centenares de plugins  Responsable de generar todos los artefactos necesarios para una aplicación: Documentación, binarios, tests, informes, análisis del código, etc. Jornadas Symfony http://decharlas.uji.es/symfony
  51. 51. Integración contínua Jornadas Symfony http://decharlas.uji.es/symfony
  52. 52. Integración contínua Ejemplo disponible online:  http://hudson.highsource.org/ Configuración para PHP:  http://bit.ly/3PuA3p  http://bit.ly/9EgmN  http://bit.ly/151csf Jornadas Symfony http://decharlas.uji.es/symfony
  53. 53. Integración contínua PhpUnderControl: http://phpundercontrol.org/about.html  Testing con phpUnit  Documentación con PhpDocumentator  Análisis del código con PHP_CodeSniffer y CheckStyle Jornadas Symfony http://decharlas.uji.es/symfony
  54. 54. Integración contínua CruiseControl: http://cruisecontrol.sourceforge.net/ Atlassian Bamboo: http://www.atlassian.com/software/bamboo/ Jornadas Symfony http://decharlas.uji.es/symfony
  55. 55. Índice  Características, requisitos y arquitectura de los entornos de desarrollo actuales  Metodologías de desarrollo: Clásicas vs Ágiles  Herramientas de documentación y gestión del conocimiento  Sistemas de control de versiones  Herramientas de construcción  Integración continua  Gestión de proyectos e incidencias  Pruebas unitarias del software  Repositorio de componentes  Aseguramiento de la calidad: Análisis estático del código  IDE para el desarrollo de aplicaciones. Conexión entre todos los elementos Jornadas Symfony http://decharlas.uji.es/symfony
  56. 56. Gestión de proyectos e incidencias Requisitos:  Registrar todas las posibles modificaciones que se hagan sobre el software: Bugs, tareas, mejoras, etc.  Reparto de la carga entre los desarrolladores  Planificación de versiones en nuestro software  Histórico de acciones: Changelog. Cada tarea añade todos los comentarios hasta que se cierra Jornadas Symfony http://decharlas.uji.es/symfony
  57. 57. Gestión de proyectos e incidencias JIRA:  Integración con Netbeans y Eclipse (Mylyn)  Interfaz altamente usable  Muchas métricas de evolución del proyecto  API XML-RPC disponible Jornadas Symfony http://decharlas.uji.es/symfony
  58. 58. Gestión de proyectos e incidencias Jornadas Symfony http://decharlas.uji.es/symfony
  59. 59. Gestión de proyectos e incidencias Jornadas Symfony http://decharlas.uji.es/symfony
  60. 60. Gestión de proyectos e incidencias Jornadas Symfony http://decharlas.uji.es/symfony
  61. 61. Gestión de proyectos e incidencias Jornadas Symfony http://decharlas.uji.es/symfony
  62. 62. Gestión de proyectos e incidencias Ejemplo disponible online:  http://jira.codehaus.org/ Jornadas Symfony http://decharlas.uji.es/symfony
  63. 63. Índice  Características, requisitos y arquitectura de los entornos de desarrollo actuales  Metodologías de desarrollo: Clásicas vs Ágiles  Herramientas de documentación y gestión del conocimiento  Sistemas de control de versiones  Herramientas de construcción  Integración continua  Gestión de proyectos e incidencias  Pruebas unitarias del software  Repositorio de componentes  Aseguramiento de la calidad: Análisis estático del código  IDE para el desarrollo de aplicaciones. Conexión con los distintos elementos de la arquitectura Jornadas Symfony http://decharlas.uji.es/symfony
  64. 64. Pruebas unitarias del software Unit testing Wikipedia: ”In computer programming, unit testing is a software verification and validation method in which a programmer tests if individual units of source code are fit for use. A unit is the smallest testable part of an application” Jornadas Symfony http://decharlas.uji.es/symfony
  65. 65. Pruebas unitarias del software Beneficios:  Facilitar el cambio y el refactoring  Integración más sencilla  Documentación del código  Diseño siempre y modular del código (sino no se puede hacer unit testing) Jornadas Symfony http://decharlas.uji.es/symfony
  66. 66. Pruebas unitarias del software Tipos de pruebas:  Unitarias o de desarrollo  Integración  Rendimiento o estrés  Funcionales Jornadas Symfony http://decharlas.uji.es/symfony
  67. 67. Pruebas unitarias del software Unit testing en symfony:  symfony 1.x: Lime:  Simplicidad, pero difícil uso en herramientas de integración continua  Soporte para Mocks y Stubs http://martinfowler.com/articles/mocksArentStubs.html  symfony 2.0. Paso a PhpUnit. Jornadas Symfony http://decharlas.uji.es/symfony
  68. 68. Pruebas unitarias del software class MoneyTest extends PHPUnit_Framework_TestCase { protected $f12EUR; protected $f14EUR; protected function setUp() { $this->f12EUR = new Money(12, 'EUR'); $this->fMB1 = MoneyBag::create($this->f12EUR, $this->f21USD); } public function testBagMultiply() { $expected = MoneyBag::create(new Money(24, 'EUR'), new Money(14, 'USD')); $this->assertTrue($expected->equals($this->fMB1->multiply(2))); } Jornadas Symfony http://decharlas.uji.es/symfony
  69. 69. Pruebas unitarias del software phpunit: [exec] PHPUnit 3.4.14 by Sebastian Bergmann. [exec] ....................F. [exec] Time: 1 second, Memory: 6.25Mb [exec] There was 1 failure: [exec] 1) MoneyTest::testSimpleNegate [exec] Failed asserting that <boolean:false> is true. [exec] /tmp/Money/MoneyTest.php:238 [exec] FAILURES! [exec] Tests: 22, Assertions: 35, Failures: 1. [exec] Writing code coverage data to XML file, this may take a moment. BUILD FAILED /tmp/Money/build.xml:36: exec returned: 1 Jornadas Symfony http://decharlas.uji.es/symfony
  70. 70. Pruebas unitarias del software Herramientas:  Pruebas de código: jUnit, Nunit, PHPUnit, PyUnit y otras muchas  Pruebas de interfaz: Selenium  Pruebas de estrés: Apache jMeter con independencia del lenguaje en el que esté desarrollado el servicio Jornadas Symfony http://decharlas.uji.es/symfony
  71. 71. Pruebas unitarias del software Jornadas Symfony http://decharlas.uji.es/symfony
  72. 72. Pruebas unitarias del software TDD Wikipedia: ”El desarrollo guiado por pruebas, o Test-driven development (TDD) involucra otras dos prácticas: Escribir las pruebas primero (Test First Development) y Refactorización (Refactoring). Para escribir las pruebas generalmente se utilizan las pruebas unitarias (unit testing). En Primer Lugar se escribe una prueba y se verifica que las pruebas fallen, luego se implementa el código que haga que la prueba pase satisfactoriamente y seguidamente se refactoriza el código escrito. El propósito del desarrollo guiado por pruebas es lograr un código limpio que funcione (clean code that works). La idea es que los requerimientos sean traducidos a pruebas, de este modo, cuando las pruebas pasen se garantizará que los requerimientos se hayan Jornadas Symfony http://decharlas.uji.es/symfony
  73. 73. Pruebas unitarias del software Jornadas Symfony http://decharlas.uji.es/symfony
  74. 74. Pruebas unitarias del software Otros conceptos relacionados:  Cobertura: porcentaje de nuestro código cubierto o probado por nuestros tests unitarios  Mock o impostor: Objetos que imitan el comportamiento de objetos reales de una forma controlada. Como un dummy en una prueba de colisión Jornadas Symfony http://decharlas.uji.es/symfony
  75. 75. Índice  Características, requisitos y arquitectura de los entornos de desarrollo actuales  Metodologías de desarrollo: Clásicas vs Ágiles  Herramientas de documentación y gestión del conocimiento  Sistemas de control de versiones  Herramientas de construcción  Integración continua  Gestión de proyectos e incidencias  Pruebas unitarias del software  Repositorio de componentes  Aseguramiento de la calidad: Análisis estático del código  IDE para el desarrollo de aplicaciones. Conexión con los distintos elementos de la arquitectura Jornadas Symfony http://decharlas.uji.es/symfony
  76. 76. Repositorio de componentes Objetivos:  Repositorio Maven de artefactos  Proxy-cache que recoge cualquier librería utilizada  Si necesitamos una librería externa, nos la consigue  Control total sobre los productos y versiones utilizadas  Lugar único de publicación de nuestros artefactos  Gestión integrada de librerías, control de acceso, backup, gestión web, etc Jornadas Symfony http://decharlas.uji.es/symfony
  77. 77. Repositorio de componentes Jornadas Symfony http://decharlas.uji.es/symfony
  78. 78. Repositorio de componentes Ejemplo disponible online:  http://repo.jfrog.org/artifactory/webapp/home.html Jornadas Symfony http://decharlas.uji.es/symfony
  79. 79. Índice  Características, requisitos y arquitectura de los entornos de desarrollo actuales  Metodologías de desarrollo: Clásicas vs Ágiles  Herramientas de documentación y gestión del conocimiento  Sistemas de control de versiones  Herramientas de construcción  Integración continua  Gestión de proyectos e incidencias  Pruebas unitarias del software  Repositorio de componentes  Aseguramiento de la calidad: Análisis estático del código  IDE para el desarrollo de aplicaciones. Conexión con los distintos elementos de la arquitectura Jornadas Symfony http://decharlas.uji.es/symfony
  80. 80. Aseguramiento de la calidad: Análisis estático del código Análisis estático del código:  El análisis estático del código es el proceso de evaluar el software sin ejecutarlo  Técnica que se aplica directamente sobre el código fuente, sin transformaciones previas ni cambios de ningún tipo  Objetivo: Obtener información que nos permita mejorar la base de código Jornadas Symfony http://decharlas.uji.es/symfony
  81. 81. Aseguramiento de la calidad: Análisis estático del código Objetivo. Encontrar partes del código que puedan:  Reducir el rendimiento  Provocar errores en el software  Complicar el flujo de datos  Tener una excesiva complejidad (complejidad ciclomática)  Suponer un problema en la seguridad Jornadas Symfony http://decharlas.uji.es/symfony
  82. 82. Aseguramiento de la calidad: Análisis estático del código Algunas herramientas para PHP:  PHP_Depend: Escaneo del código fuente en forma de árboles de sintaxis abstractos (AST) para el cálculo de ciertas métricas de calidad como la complejidad ciclomática de los métodos.  PHP_CodeSniffer: Detección de patrones de error o zonas de código potencialmente peligrosas  PhpCPD: Detector de código duplicado (Copy&Paste detector). Jornadas Symfony http://decharlas.uji.es/symfony
  83. 83. Aseguramiento de la calidad: Análisis estático del código Algunas herramientas para PHP:  PhpMD. Como Php_Depend pero con algunas funcionalidades de PHP_CodeSniffer (PHP Mess Detector).  Sonar:  Servidor que ejecuta todos los anteriores en forma de plugins + muchos otros (cobertura con clover, PhpUnit, etc)  Integrable desde Ant/Phing/Maven Jornadas Symfony http://decharlas.uji.es/symfony
  84. 84. Aseguramiento de la calidad: Análisis estático del código Varios proyectos de libres analizados con Sonar:  http://nemo.sonarsource.org/ Intergración con proyectos PHP:  http://www.blacksun.fr/2009/12/sonar-for-php-is-on-its-way/ Jornadas Symfony http://decharlas.uji.es/symfony
  85. 85. Aseguramiento de la calidad: Análisis estático del código Jornadas Symfony http://decharlas.uji.es/symfony
  86. 86. Aseguramiento de la calidad: Análisis estático del código Jornadas Symfony http://decharlas.uji.es/symfony
  87. 87. Aseguramiento de la calidad: Análisis estático del código Jornadas Symfony http://decharlas.uji.es/symfony
  88. 88. Aseguramiento de la calidad: Análisis estático del código Jornadas Symfony http://decharlas.uji.es/symfony
  89. 89. Aseguramiento de la calidad: Análisis estático del código Jornadas Symfony http://decharlas.uji.es/symfony
  90. 90. Aseguramiento de la calidad: Análisis estático del código Jornadas Symfony http://decharlas.uji.es/symfony
  91. 91. Índice  Características, requisitos y arquitectura de los entornos de desarrollo actuales  Metodologías de desarrollo: Clásicas vs Ágiles  Herramientas de documentación y gestión del conocimiento  Sistemas de control de versiones  Herramientas de construcción  Integración contínua  Gestión de proyectos e incidencias  Pruebas unitarias del software  Repositorio de componentes  Aseguramiento de la calidad: Análisis estático del codigo  IDE para el desarrollo de aplicaciones. Conexión entre todos los elementos Jornadas Symfony http://decharlas.uji.es/symfony
  92. 92. IDE para el desarrollo de aplicaciones Eclipse/Netbeans como elemento integrador:  Plugin Subversion  Plugin Ant/Phing/Maven  Plugin Mylyn integración con JIRA  Plugin jUnit/phpUnit  Plugin análisis estático del código aún desde Ant/Phing Jornadas Symfony http://decharlas.uji.es/symfony
  93. 93. Fin ¿Preguntas? Jornadas Symfony http://decharlas.uji.es/symfony

×