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

93
organizan patrocinan colaboran Jornadas Symfony 5 y 6 de julio 2010 Universitat Jaume I, Castellón http://decharlas.uji.es/symfony

description

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.

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

Page 1: Arquitectura y diseño de un entorno de desarrollo - decharlas

organizan patrocinan

colaboran

Jornadas Symfony 5 y 6 de julio 2010Universitat Jaume I, Castellón

http://decharlas.uji.es/symfony

Page 2: Arquitectura y diseño de un entorno de desarrollo - decharlas

Arquitectura y diseño de un entorno de desarrolloRicardo Borillo, Universitat Jaume [email protected]

Jornadas Symfony 5 y 6 de julio 2010Universitat Jaume I, Castellón

http://decharlas.uji.es/symfony

Page 3: Arquitectura y diseño de un entorno de desarrollo - decharlas

sesión patrocinada por

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

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

Page 4: Arquitectura y diseño de un entorno de desarrollo - decharlas

Í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

Page 5: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 6: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 7: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 8: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 9: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

En definitiva ...

QAJornadas Symfony http://decharlas.uji.es/symfony

Page 10: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 11: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

¿¿¿Cómo consigo todo esto???

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

Page 12: Arquitectura y diseño de un entorno de desarrollo - decharlas

Í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

Page 13: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 14: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

XP: eXtreme Programming

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

Page 15: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 16: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 17: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 18: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 19: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 20: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 21: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 22: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

SCRUM

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

Page 23: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

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

Page 24: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 25: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

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

Page 26: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 27: Arquitectura y diseño de un entorno de desarrollo - decharlas

Í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

Page 28: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 29: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 30: Arquitectura y diseño de un entorno de desarrollo - decharlas

Herramientas de documentación y gestión del conocimiento

Wiki:

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

Page 31: Arquitectura y diseño de un entorno de desarrollo - decharlas

Herramientas de documentación y gestión del conocimiento

DocBook:

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

Page 32: Arquitectura y diseño de un entorno de desarrollo - decharlas

Í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

Page 33: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 34: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 35: Arquitectura y diseño de un entorno de desarrollo - decharlas

Sistemas de control de versiones

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

Page 36: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 37: Arquitectura y diseño de un entorno de desarrollo - decharlas

Sistemas de control de versiones

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

Page 38: Arquitectura y diseño de un entorno de desarrollo - decharlas

Sistemas de control de versiones

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

Page 39: Arquitectura y diseño de un entorno de desarrollo - decharlas

Í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

Page 40: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 41: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 42: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 43: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 44: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 45: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 46: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 47: Arquitectura y diseño de un entorno de desarrollo - decharlas

Herramientas de construcción

Layout resultante:

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

my-app

|-- pom.xml

`-- src

|-- main

`-- php

`-- org.sample

`-- app.php

`-- webapp

`-- index.php

|`-- test

`-- php

`-- org.sample

`-- apptest.php

Page 48: Arquitectura y diseño de un entorno de desarrollo - decharlas

Í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

Page 49: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 50: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 51: Arquitectura y diseño de un entorno de desarrollo - decharlas

Integración contínua

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

Page 52: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 53: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 54: Arquitectura y diseño de un entorno de desarrollo - decharlas

Integración contínua

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

Atlassian Bamboo:http://www.atlassian.com/software/bamboo/

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

Page 55: Arquitectura y diseño de un entorno de desarrollo - decharlas

Í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

Page 56: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 57: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 58: Arquitectura y diseño de un entorno de desarrollo - decharlas

Gestión de proyectos e incidencias

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

Page 59: Arquitectura y diseño de un entorno de desarrollo - decharlas

Gestión de proyectos e incidencias

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

Page 60: Arquitectura y diseño de un entorno de desarrollo - decharlas

Gestión de proyectos e incidencias

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

Page 61: Arquitectura y diseño de un entorno de desarrollo - decharlas

Gestión de proyectos e incidencias

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

Page 62: Arquitectura y diseño de un entorno de desarrollo - decharlas

Gestión de proyectos e incidencias

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

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

Page 63: Arquitectura y diseño de un entorno de desarrollo - decharlas

Í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

Page 64: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 65: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 66: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 67: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 68: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 69: Arquitectura y diseño de un entorno de desarrollo - decharlas

Pruebas unitarias del software

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

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

Page 70: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 71: Arquitectura y diseño de un entorno de desarrollo - decharlas

Pruebas unitarias del software

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

Page 72: Arquitectura y diseño de un entorno de desarrollo - decharlas

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 implementado correctamente.”Jornadas Symfony http://decharlas.uji.es/symfony

Page 73: Arquitectura y diseño de un entorno de desarrollo - decharlas

Pruebas unitarias del software

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

Page 74: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 75: Arquitectura y diseño de un entorno de desarrollo - decharlas

Í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

Page 76: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 77: Arquitectura y diseño de un entorno de desarrollo - decharlas

Repositorio de componentes

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

Page 78: Arquitectura y diseño de un entorno de desarrollo - decharlas

Repositorio de componentes

Ejemplo disponible online: http://repo.jfrog.org/artifactory/webapp/home.html

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

Page 79: Arquitectura y diseño de un entorno de desarrollo - decharlas

Í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

Page 80: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 81: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 82: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 83: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 84: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 85: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

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

Page 86: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

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

Page 87: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

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

Page 88: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

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

Page 89: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

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

Page 90: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

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

Page 91: Arquitectura y diseño de un entorno de desarrollo - decharlas

Í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

Page 92: Arquitectura y diseño de un entorno de desarrollo - decharlas

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

Page 93: Arquitectura y diseño de un entorno de desarrollo - decharlas

Fin

¿Preguntas?

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