arquitectura y diseño de un entorno de desarrollo

Download Arquitectura y diseño de un entorno de desarrollo

If you can't read please download the document

Upload: ricardo-borillo-domenech

Post on 19-Jun-2015

1.541 views

Category:

Documents


1 download

DESCRIPTION

Descripción de los principales elementos, tanto humanos como tecnológicos, que necesitaremos a la hora de poner en marcha un equipo de desarrollo ágil.

TRANSCRIPT

Arquitectura y diseo de un entorno de desarrolloRicardo Borillo Domenech [email protected]

ndice

Caractersticas, requisitos y arquitectura de los entornos de desarrollo actuales Metodologas de desarrollo: Clsicas vs giles Herramientas de documentacin y gestin del conocimiento Sistemas de control de versiones Herramientas de construccin Integracin contnua Gestin de proyectos e incidencias Pruebas unitarias del software Repositorio de componentes Aseguramiento de la calidad: Anlisis esttico del codigo IDE para el desarrollo de aplicaciones. Conexin entre todos los elementos

Ricardo Borillo Domenech ([email protected])

Caractersticas, requisitos y arquitectura de los entornos de desarrollo actuales

Los tres aspectos ms importantes en un equipo de desarrollo:

Personas, personas y personas

Ricardo Borillo Domenech ([email protected])

Caractersticas, requisitos y arquitectura de los entornos de desarrollo actuales Objetivos para el equipo humano:

Formacin:

Todos conocen el entorno y herramientas Todos conocen la tecnologa Transferencia de conocimiento de los ms expertos a los menos expertos Todos pueden asumir tareas de innovacin A cualquiera se le puede asignar cualquier tareaRicardo Borillo Domenech ([email protected])

Motivacin:

Caractersticas, requisitos y arquitectura de los entornos de desarrollo actuales

Caractersticas del entorno:

Equipos de trabajo de tamao limitado Visin integrada de producto:

Pautas comunes Reutilizacin de cdigo Mdulos especficos para cada necesidad

Estndares de desarrollo bien definidos (directrices a seguir)Ricardo Borillo Domenech ([email protected])

Caractersticas, requisitos y arquitectura de los entornos de desarrollo actuales

Caractersticas del entorno:

Diseo grfico uniforme Reutilizacin de cdigo: Librerias de componentes Construccin de interfaces en base a pautas de diseo y usabilidad

Ricardo Borillo Domenech ([email protected])

Caractersticas, 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 interaccin entre desarrolladores

Propiedad colectiva del cdigoRicardo Borillo Domenech ([email protected])

Caractersticas, requisitos y arquitectura de los entornos de desarrollo actuales

Arquitectura deseable:

Separacin entre desarrollo y produccin Despliegue controlado de aplicaciones Comparticin de cdigo Registro global de bugs, tareas y mejoras Testeo automtico de aplicaciones Documentacin de funcionalidades y procesos

Ricardo Borillo Domenech ([email protected])

ndice

Caractersticas, requisitos y arquitectura de los entornos de desarrollo actuales Metodologas de desarrollo: Clsicas vs giles Herramientas de documentacin y gestin del conocimiento Sistemas de control de versiones Herramientas de construccin Integracin contnua Gestin de proyectos e incidencias Pruebas unitarias del software Repositorio de componentes Aseguramiento de la calidad: Anlisis esttico del codigo IDE para el desarrollo de aplicaciones. Conexin entre todos los elementos

Ricardo Borillo Domenech ([email protected])

Metodologas de desarrollo: Clsicas vs giles

No todo es blanco ni negro Mtodo = Conjunto ordenado de buenas prcticas Metodologas clsicas:

Anlisis, diseo, implementacin y pruebas Anlisis opoyado en notaciones grficas: DFD, E/R, UML Estricto, rgido y poco reactivo a cambios Desarrollo iterativo El cdigo es la base gil, dinmico y muy flexibleRicardo Borillo Domenech ([email protected])

Metologas giles:

Metodologas de desarrollo: Clsicas vs giles

XP: eXtreme Programming

Ricardo Borillo Domenech ([email protected])

Metodologas de desarrollo: Clsicas vs giles

El Manifiesto gil valora:

A los individuos y su interaccin, por encima de los procesos y las herramientas El software que funciona, por encima de la documentacin exhaustiva La colaboracin con el cliente, por encima de la negociacin contractual La respuesta al cambio, por encima del seguimiento de un planRicardo Borillo Domenech ([email protected])

Metodologas de desarrollo: Clsicas vs giles

XP es una metodologa gil:

Diseada para entornos dinmicos Pensada para equipos pequeos (hasta 10 programadores) Orientada fuertemente hacia la codificacin nfasis en la comunicacin informal, verbal

Ricardo Borillo Domenech ([email protected])

Metodologas de desarrollo: Clsicas vs gilesProgramador:

Responsable de decisiones tcnicas y de construir el sistema Sin distincin entre analistas, diseadores o codificadores En XP, los programadores disean, programan y realizan las pruebas

Jefe de Proyecto:

Organiza y gua las reuniones Asegura condiciones adecuadas para el proyecto

Cliente:

Es parte del equipo Determina qu construir y cundo Establece las pruebas funcionalesRicardo Borillo Domenech ([email protected])

Metodologas de desarrollo: Clsicas 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 programacin con un n de horas de desarrollo Las establece el cliente Son la base para las pruebas funcionales

Ricardo Borillo Domenech ([email protected])

Metodologas de desarrollo: Clsicas vs giles

Planificacin:

Planificacin por entregas (releases) Se priorizan aquellas user-stories que el cliente selecciona porque son ms importantes para el negocio Entregas:

Son lo ms pequeas posibles Se dividen en iteraciones (iteracin = 2 o 3 semanas) Estn compuestas por historias

A cada programador se le asigna una tarea de la userstoryRicardo Borillo Domenech ([email protected])

Metodologas de desarrollo: Clsicas vs giles

Programacin:

La programacin de tareas se realiza por parejas La pareja disea, prueba, implementa e integra el cdigo de la tarea Cdigo dirigido por las pruebas (TDD) Cdigo modular, intentando refactorizar siempre que se pueda

Ricardo Borillo Domenech ([email protected])

Metodologas de desarrollo: Clsicas vs giles

Practicas:

El juego de la planificacin Entregas pequeas Diseo simple Pruebas Refactoring Programacin en parejas (compartir experiencia / detectar fallos) Propiedad colectiva Integracin contnua Cliente in situ Estndares de programacinRicardo Borillo Domenech ([email protected])

Metodologas de desarrollo: Clsicas vs giles

SCRUM

Ricardo Borillo Domenech ([email protected])

Metodologas de desarrollo: Clsicas vs giles

Ricardo Borillo Domenech ([email protected])

ndice

Caractersticas, requisitos y arquitectura de los entornos de desarrollo actuales Metodologas de desarrollo: Clsicas vs giles Herramientas de documentacin y gestin del conocimiento Sistemas de control de versiones Herramientas de construccin Integracin contnua Gestin de proyectos e incidencias Pruebas unitarias del software Repositorio de componentes Aseguramiento de la calidad: Anlisis esttico del codigo IDE para el desarrollo de aplicaciones. Conexin entre todos los elementos

Ricardo Borillo Domenech ([email protected])

Herramientas de documentacin y gestin del conocimiento

Requisitos:

Formato estndar de representacin Documentacin accesible online Fcil modificacin y mantenimiento Conversin a otros formatos como PDF Bsqueda y buena gestin del conocimiento

Ricardo Borillo Domenech ([email protected])

Herramientas de documentacin y gestin del conocimiento

Posibles alternativas y puntos fuertes:

Wiki:

Sintaxis sencilla Herramienta online Multitud de herramientas (MediaWiki, Confluence, DokuWiki) XML Facilmente convertible a otros formatosRicardo Borillo Domenech ([email protected])

DocBook:

Herramientas de documentacin y gestin del conocimiento

Wiki:

Ricardo Borillo Domenech ([email protected])

Herramientas de documentacin y gestin del conocimiento

DocBook:

Ricardo Borillo Domenech ([email protected])

ndice

Caractersticas, requisitos y arquitectura de los entornos de desarrollo actuales Metodologas de desarrollo: Clsicas vs giles Herramientas de documentacin y gestin del conocimiento Sistemas de control de versiones Herramientas de construccin Integracin contnua Gestin de proyectos e incidencias Pruebas unitarias del software Repositorio de componentes Aseguramiento de la calidad: Anlisis esttico del codigo IDE para el desarrollo de aplicaciones. Conexin entre todos los elementos

Ricardo Borillo Domenech ([email protected])

Sistemas de control de versiones

Requisitos:

Repositorio unificado para el cdigo Soporte para el versionado Soporte para realizar comparaciones entre versiones Comparticin de cdigo entre desarrolladores Integrado con las herramientas de desarrollo

Ricardo Borillo Domenech ([email protected])

Sistemas de control de versiones

Tipos de repositorios:

Centralizados (CVS o Subversion):

Existe un repositorio centralizado con todo el cdigo Para trabajar sobre un recurso, hay que descargar una copia local Los ficheros modificados hay que subirlos de nuevo para que estn accesibles para todos Los desarrolladores slo tienen en su copia local aquellos fuentes que han solicitado del servidorRicardo Borillo Domenech ([email protected])

Sistemas de control de versiones

Ricardo Borillo Domenech ([email protected])

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). Sule haber un repositorio de fuentes que se considera oficial o central (obtener la primera copia, versiones probadas, backup)Ricardo Borillo Domenech ([email protected])

Sistemas de control de versiones

Ricardo Borillo Domenech ([email protected])

Sistemas de control de versiones

Ricardo Borillo Domenech ([email protected])

Sistemas de control de versiones

Ricardo Borillo Domenech ([email protected])

ndice

Caractersticas, requisitos y arquitectura de los entornos de desarrollo actuales Metodologas de desarrollo: Clsicas vs giles Herramientas de documentacin y gestin del conocimiento Sistemas de control de versiones Herramientas de construccin Integracin contnua Gestin de proyectos e incidencias Pruebas unitarias del software Repositorio de componentes Aseguramiento de la calidad: Anlisis esttico del codigo IDE para el desarrollo de aplicaciones. Conexin entre todos los elementos

Ricardo Borillo Domenech ([email protected])

Herramientas de construccin

Requisitos:

Evitar compilacin, construccin y despliegue manual del cdigo Independencia del IDE Flexibilidad y soporte para casi cualquier tipo de herramienta necesaria Integracin de las pruebas unitarias, generacin de documentacin, despliegue en pre-produccin, mtricas de cdigo Todo en uno y desde un nico sitio!!Ricardo Borillo Domenech ([email protected])

Herramientas de construccin

Objetivos:

Evitar errores Aplicacin desplegable por cualquiera sin conocimientos concretos de la misma Control automtico de las dependencias Integracin completa con el entorno Necesario ejecutar siempre los controles de calidadRicardo Borillo Domenech ([email protected])

Herramientas de construccin

Ant:

Similar a los makefiles Mejor para Java, aunque se puede utilizar para cualquier lenguaje Proceso de construccin = Secuencia de targets Cada target realiza un paso del proceso y ejecuta unas tasks Muchas tasks ya predefinidas: Compilacin, SCP, empaquetado, etc Muy buena integracin con EclipseRicardo Borillo Domenech ([email protected])

Herramientas de construccin

Ricardo Borillo Domenech ([email protected])

Herramientas de construccin

Maven:

Desarrollo Java Todos los proyectos tienen la misma estructura y siguien el mismo proceso de construccin: Life-cycle Gestin automtica de dependencias Multitud de plugins existentes para distintas necesidades Puede utilizar Ant

Ricardo Borillo Domenech ([email protected])

Herramientas de construccin 4.0.0 com.mycompany.app my-app jar 1.0-SNAPSHOT Maven Quick Start Archetype http://maven.apache.org junit junit 3.8.1 Ricardo Borillo Domenech ([email protected])

ndice

Caractersticas, requisitos y arquitectura de los entornos de desarrollo actuales Metodologas de desarrollo: Clsicas vs giles Herramientas de documentacin y gestin del conocimiento Sistemas de control de versiones Herramientas de construccin Integracin contnua Gestin de proyectos e incidencias Pruebas unitarias del software Repositorio de componentes Aseguramiento de la calidad: Anlisis esttico del codigo IDE para el desarrollo de aplicaciones. Conexin entre todos los elementos

Ricardo Borillo Domenech ([email protected])

Integracin contnua

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.Ricardo Borillo Domenech ([email protected])

Integracin contnua

Hudson:

Independiente del lenguaje Construccin de software y monitorizacin de procesos tipo CRON Centenares de plugins Responsable de generar todos los artefactos necesarios para una aplicacin: Documentacin, binarios, tests, informes, anlisis del cdigo, etc.Ricardo Borillo Domenech ([email protected])

Integracin contnua

Ricardo Borillo Domenech ([email protected])

Integracin contnua

Ejemplo disponible online:

http://hudson.highsource.org/

Ricardo Borillo Domenech ([email protected])

ndice

Caractersticas, requisitos y arquitectura de los entornos de desarrollo actuales Metodologas de desarrollo: Clsicas vs giles Herramientas de documentacin y gestin del conocimiento Sistemas de control de versiones Herramientas de construccin Integracin contnua Gestin de proyectos e incidencias Pruebas unitarias del software Repositorio de componentes Aseguramiento de la calidad: Anlisis esttico del codigo IDE para el desarrollo de aplicaciones. Conexin entre todos los elementos

Ricardo Borillo Domenech ([email protected])

Gestin 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 Planificacin de versiones en nuestro software Histrico de aciones: Changelog. Cada tarea aade todos los comentarios hasta que se cierraRicardo Borillo Domenech ([email protected])

Gestin de proyectos e incidencias

JIRA: Integracin con Eclipse: Mylyn Interfaz altamente usable Muchas mtricas de evolucin del proyecto API XML-RPC disponible

Ricardo Borillo Domenech ([email protected])

Gestin de proyectos e incidencias

Ricardo Borillo Domenech ([email protected])

Gestin de proyectos e incidencias

Ricardo Borillo Domenech ([email protected])

Gestin de proyectos e incidencias

Ejemplo disponible online:

http://jira.codehaus.org/

Ricardo Borillo Domenech ([email protected])

ndice

Caractersticas, requisitos y arquitectura de los entornos de desarrollo actuales Metodologas de desarrollo: Clsicas vs giles Herramientas de documentacin y gestin del conocimiento Sistemas de control de versiones Herramientas de construccin Integracin contnua Gestin de proyectos e incidencias Pruebas unitarias del software Repositorio de componentes Aseguramiento de la calidad: Anlisis esttico del codigo IDE para el desarrollo de aplicaciones. Conexin con los distintos elementos de la arquitectura

Ricardo Borillo Domenech ([email protected])

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 applicationRicardo Borillo Domenech ([email protected])

Pruebas unitarias del software

Beneficios: Facilitar el cambio y el refactoring Integracin ms sencilla Documentacin del cdigo Diseo siempre y modular del cdigo (sino no se puede hacer unit testing)

Ricardo Borillo Domenech ([email protected])

Pruebas unitarias del software

Tipos de pruebas: Unitarias o de desarrollo Integracin Rendimiento o estrs Funcionales

Ricardo Borillo Domenech ([email protected])

Pruebas unitarias del softwareimport org.junit.Assert;

public class AdditionTest { private int x = 1; private int y = 1;

@Test public void addition() { int z = x + y; Assert.assertEquals(2, z); } }Ricardo Borillo Domenech ([email protected])

Pruebas unitarias del software

Ricardo Borillo Domenech ([email protected])

Pruebas unitarias del software

Herramientas: Pruebas de cdigo: jUnit, Nunit, PHPUnit, PyUnit o incluso utPLSQL Pruebas de interfaz: Selenium o jWebUnit Pruebas de estrs: Apache JMeter

Ricardo Borillo Domenech ([email protected])

Pruebas unitarias del software TDD Wikipedia:El desarrollo guiado por pruebas, o Test-driven development (TDD) involucra otras dos prcticas: Escribir las pruebas primero (Test First Development) y Refactorizacin (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 cdigo que haga que la prueba pase satisfactoriamente y seguidamente se refactoriza el cdigo escrito. El propsito del desarrollo guiado por pruebas es lograr un cdigo 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 Domenech ([email protected]) Ricardo Borillo

Pruebas unitarias del software

Otros conceptos relacionados: Cobertura: porcentaje de nuestro cdigo 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 colisinRicardo Borillo Domenech ([email protected])

ndice

Caractersticas, requisitos y arquitectura de los entornos de desarrollo actuales Metodologas de desarrollo: Clsicas vs giles Herramientas de documentacin y gestin del conocimiento Sistemas de control de versiones Herramientas de construccin Integracin contnua Gestin de proyectos e incidencias Pruebas unitarias del software Repositorio de componentes Aseguramiento de la calidad: Anlisis esttico del codigo IDE para el desarrollo de aplicaciones. Conexin con los distintos elementos de la arquitectura

Ricardo Borillo Domenech ([email protected])

Repositorio de componentes

Objetivos:

Repositorio Maven de artefactos Proxy-cache que recoge cualquier libreria utilizada Si necesitamos una libreria externa, nos la consigue Control total sobre los productos y versiones utilizadas Lugar nico de publicacin de nuestros artefactos Gestin integrada de libreras, control de acceso, backup, gestin web, etc

Ricardo Borillo Domenech ([email protected])

Repositorio de componentes

Ricardo Borillo Domenech ([email protected])

Repositorio de componentes

Ejemplo disponible online:

http://repo.jfrog.org/artifactory/webapp/home.html

Ricardo Borillo Domenech ([email protected])

ndice

Caractersticas, requisitos y arquitectura de los entornos de desarrollo actuales Metodologas de desarrollo: Clsicas vs giles Herramientas de documentacin y gestin del conocimiento Sistemas de control de versiones Herramientas de construccin Integracin contnua Gestin de proyectos e incidencies Pruebas unitarias del software Repositorio de componentes Aseguramiento de la calidad: Anlisis esttico del codigo IDE para el desarrollo de aplicaciones. Conexin con los distintos elementos de la arquitectura

Ricardo Borillo Domenech ([email protected])

Aseguramiento de la calidad: Anlisis esttico del codigo

Anlisis esttico del cdigo:

El anlisis esttico del cdigo es el proceso de evaluar el software sin ejecutarlo Tcnica que se aplica directamente sobre el cdigo fuente, sin transformaciones previas ni cambios de ningn tipo Objetivo: Obtener informacin que nos permita mejorar la base de cdigo

Ricardo Borillo Domenech ([email protected])

Aseguramiento de la calidad: Anlisis esttico del codigo

Objetivo. Encontrar partes del cdigo que puedan:

Reducir el rendimiento Provocar errores en el software Complicar el flujo de datos Tener una excesiva complejidad Suponer un problema en la seguridad

Ricardo Borillo Domenech ([email protected])

Aseguramiento de la calidad: Anlisis esttico del codigo

Algunas herramientas para Java:

PMD. Deteccin de posibles errores en el cdigo en base a un conjunto extensible de patrones CPD. Detector de copy & paste. Duplicacidades en el cdigo que se pueden refactorizar CheckStyle. Adems de muy similar a PMD, tambin revisa el estilo del cdigo y que el JavaDoc es correctoRicardo Borillo Domenech ([email protected])

Aseguramiento de la calidad: Anlisis esttico del codigo

Algunas herramientas para Java:

FindBugs. Deteccin de errores clasificados en una serie de categoras. Sonar:

Servidor que ejecuta todos los anteriores en forma de plugins + muchos otros (cobertura, emma, etc) Aade estadsticas sobre complejidad, nmero de clases, etc Integrable desde MavenRicardo Borillo Domenech ([email protected])

Aseguramiento de la calidad: Anlisis esttico del codigo Varios proyectos de libres analizados con Sonar:

http://nemo.sonarsource.org/

Sona para proyectos PL/SQL:

http://nemo.sonarsource.org/project/index/nl.oracledeveloper:utplsql

Integracin de Sonar con Toad Code Xpert:

http://www.sonarsource.com/plugins/plugin-plsql/

Ricardo Borillo Domenech ([email protected])

ndice

Caractersticas, requisitos y arquitectura de los entornos de desarrollo actuales Metodologas de desarrollo: Clsicas vs giles Herramientas de documentacin y gestin del conocimiento Sistemas de control de versiones Herramientas de construccin Integracin contnua Gestin de proyectos e incidencias Pruebas unitarias del software Repositorio de componentes Aseguramiento de la calidad: Anlisis esttico del codigo IDE para el desarrollo de aplicaciones. Conexin entre todos los elementos

Ricardo Borillo Domenech ([email protected])

IDE para el desarrollo de aplicaciones

Eclipse como elemento integrador: Plugin Subversion Plugin Ant/Maven Plugin Mylyn integracin con JIRA Plugin jUnit Plugin anlisis esttico del cdigo (PMD, Findbugs, CheckStyle, etc)Ricardo Borillo Domenech ([email protected])

Fin

Preguntas?

Ricardo Borillo Domenech ([email protected])