Beruflich Dokumente
Kultur Dokumente
entorno de desarrollo
Ricardo Borillo Domenech
borillo@uji.es
Índice
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
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
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
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
Ricardo Borillo Domenech (borillo@uji.es)
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
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
SCRUM
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
Wiki:
DocBook:
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
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
Ricardo Borillo Domenech (borillo@uji.es)
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)
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!!
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
Ant:
Similar a los makefiles
Mejor para Java, aunque se puede utilizar para cualquier
lenguaje
Proceso de construcción = Secuencia de ”targets”
Cada ”target” realiza un paso del proceso y ejecuta unas
”tasks”
Muchas ”tasks” ya predefinidas: Compilación, SCP,
empaquetado, etc
Muy buena integración con Eclipse
<?xml version=”1.0”?>
<target name="init">
<mkdir dir="${build}"/>
</target>
</target>
</project>
Maven:
Desarrollo Java
Todos los proyectos tienen la misma estructura y
siguien el mismo proceso de construcción: Life-cycle
Gestión automática de dependencias
Multitud de plugins existentes para distintas
necesidades
Puede utilizar Ant
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
</dependency>
</dependencies>
</project>
Ricardo Borillo Domenech (borillo@uji.es)
Índice
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 (borillo@uji.es)
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.
Ricardo Borillo Domenech (borillo@uji.es)
Integración contínua
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 aciones: Changelog. Cada tarea
añade todos los comentarios hasta que se
cierra
Ricardo Borillo Domenech (borillo@uji.es)
Gestión de proyectos e incidencias
JIRA:
Integración con Eclipse: Mylyn
proyecto
API XML-RPC disponible
Beneficios:
Facilitar el cambio y el refactoring
Tipos de pruebas:
Unitarias o de desarrollo
Integración
Rendimiento o estrés
Funcionales
import org.junit.Assert;
Herramientas:
Pruebas de código: jUnit, Nunit,
jWebUnit
Pruebas de estrés: Apache JMeter
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
Ricardo Borillo Domenech (borillo@uji.es)
Pruebas unitarias del software
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 publicación de nuestros artefactos
Gestión integrada de librerías, control de acceso,
backup, gestión web, etc
Plugin Ant/Maven
Plugin jUnit
¿Preguntas?