2. Octubre 2009 Herramientas para el desarrollo y gestión de
proyectos Java
2
Objetivos
Conocer las herramientas más comunes y
demandadas que permitan la gestión de los
proyectos Java en sus distintas fases
Desarrollo
Pruebas
Detección rápida y eficiente de errores
Implantación
3. Octubre 2009 Herramientas para el desarrollo y gestión de
proyectos Java
3
Contenidos
I. Eclipse
II. Ant
III. Maven
IV. Sistemas de Control de Versiones
V. Sistemas de Gestión de Incidencias
VI. Sistemas de Pruebas
VII. Otros Plugins de Eclipse
4. Octubre 2009 Herramientas para el desarrollo y gestión de
proyectos Java
4
Estructuración de Contenidos
I. Eclipse (3 horas)
II. Ant (3 horas)
III. Maven (3 horas)
IV. Sistemas de Control de Versiones (6 horas)
V. Sistemas de Gestión de Incidencias (3 horas)
VI. Sistemas de Pruebas (3 horas)
VII. Otros Plugins de Eclipse (3 horas)
5. Octubre 2009 Herramientas para el desarrollo y gestión de
proyectos Java
5
Contenidos
I. Eclipse
II. Ant
III. Maven
IV. Sistemas de Control de Versiones
V. Sistemas de Gestión de Incidencias
VI. Sistemas de Pruebas
VII. Otros Plugins de Eclipse
6. Octubre 2009 Herramientas para el desarrollo y gestión de
proyectos Java
6
I. Eclipse
1. Entorno de desarrollo
2. Creación y Refactorización de código
3. Depuración
4. Gestión de Librerías
5. Servidores Web y J2EE
6. Acceso a BBDD
7. Extendiendo las capacidades de Eclipse
11. Octubre 2009 1. Eclipse 11
5. Servidores Web y J2EE
Tomcat pluggin
http://www.eclipsetotale.com/tomcatPlugin.html
Descargar y descomprimir en ECLIPSEpluggins
Nuevo menú Tomcat y botones de acción
Configurar versión y directorio
Arrancar y detener Tomcat
Crear proyectos Java>Tomcat
13. Octubre 2009 1. Eclipse 13
7. Extendiendo las capacidades de Eclipse
http://www.eclipse-
plugins.info/eclipse/index.jsp
Contiene numerosos pluggins para Eclipse
Posibilidades:
Copiar y descomprimir en ECLIPSEpluggins
Utilizar Help>Software Updates>Find & Install
(requiere un repositorio del que descargar)
14. Octubre 2009 Herramientas para el desarrollo y gestión de
proyectos Java
14
Contenidos
I. Eclipse
II. Ant
III. Maven
IV. Sistemas de Control de Versiones
V. Sistemas de Gestión de Incidencias
VI. Sistemas de Pruebas
VII. Otros Plugins de Eclipse
15. Octubre 2009 Herramientas para el desarrollo y gestión de
proyectos Java
15
II. Ant
1. Proyectos Ant
2. Configuración de tareas
3. Ejecución de proyectos Ant
4. Despliegue de aplicaciones con Ant
16. Octubre 2009 2. Ant 16
1. Proyectos Ant
¿Qué es Apache Ant?
Herramienta de compilación hecha con (extiende) Java
Configurada mediante ficheros XML
No depende del SO (multiplataforma)
¿Dónde se obtiene?
http://ant.apache.org/
¿Cómo se instala?
Descomprimir el fichero descargado
Añadir las variables JAVA_HOME y ANT_HOME
Añadir JAVA_HOMEbin y ANT_HOMEbin al PATH
Ejecutar ant -diagnostics
17. Octubre 2009 2. Ant 17
1. Proyectos Ant
¿Qué es un proyecto Ant?
Fichero de construcción build.xml
<project name="test" default="compile" basedir=".">
Contiene tareas a realizar (targets)
<target name="prepare">
<mkdir dir="${build.dir}"/>
</target>
Y dependencias entre las tareas
<target name="compile" depends="prepare">
Se invocan las tareas mediante ant <tarea>
Admite propiedades de configuración
<property name="build.dir" value="clases"/>
18. Octubre 2009 2. Ant 18
1. Proyectos Ant
¿Qué estructura tiene un proyecto Ant?
Dentro del directorio de proyecto
Fichero build.xml
Directorio /src para código fuente
Directorio /build para ficheros de salida compilados
Directorio /lib para librería y otras dependencias
En el fichero build.xml
Un único elemento raíz <project>
Una sección de definición de propiedades <property>
Un conjunto de objetivos ejecutables <target>
Se referencia a una propiedad con ${prop}
19. Octubre 2009 2. Ant 19
2. Configuración de Tareas
Target: Secuencia de tareas o acciones
<target>
<tarea1/>
<tarea2/>
<tarea3/>
</target>
Atributos:
name: (requerido) Permite referenciar esta tarea
depends: Indica una lista de targets de los que depende
if: Condiciona la ejecución a la existencia de una propiedad
unless: Permite la ejecución a menos que exista la propiedad
description: Descripción textual de la tarea (-projecthelp)
20. Octubre 2009 2. Ant 20
2. Configuración de Tareas
Tareas habituales dentro de un target:
http://ant.apache.org/manual/CoreTasks/
<delete>
<mkdir>
<javac>
<jar>
<copy>
<java>
<fileset>
Filtro que permite indicar patrones de fichero
Admite comodines: ?, *, **
Debe especificarse un directorio base (dir)
<include name=“patrón”> y <exclude name=“patrón”>
21. Octubre 2009 2. Ant 21
3. Ejecución de proyectos Ant
Desde el directorio del proyecto
ant [target] lanza el target descrito en build.xml
Desde otro directorio
ant –find busca build.xml hacia arriba
Ejecutar otro fichero de construcción
ant –buildfile otro_build.xml
Parametrizar propiedades
ant –D<porpiedad>=valor
Ejecutar desde Java
java -Dant.home=<directorio ant_home>
org.apache.tools.ant.Main [target]
23. Octubre 2009 2. Ant 23
4. Despliegue de aplicaciones
Habitualmente se indican targets de preparación,
compilación, despliegue y ejecución
Tareas de empaquetamiento
<jar destfile="${app.name}.jar" >
<war destfile="f.war" webxml="web.xml" >
<cab cabfile="${dist}/manual.cab"
basedir="htdocs/manual"
includes="api/**/*.html"
excludes="**/todo.html" verbose="yes" />
<zip>
24. Octubre 2009 2. Ant 24
4. Despliegue de aplicaciones
Filtros sobre directorios
<patternset> indicar directorios/ficheros que cumplen el
patrón
<include> y <exclude> para directorios
<includesfile> y <excludesfile> para ficheros
<fileset> es un <patternset> implícito
<zipfileset> equivale a <fileset> en tareas de empaquetamiento
Selectores
Contenedores <and>, <or>, <not> para combinar patrones
CORE: <contains>, <date>, <size>, <type>, …
<filelist> lista explícita de ficheros separada por
comas/espacios (atributo dir)
25. Octubre 2009 Herramientas para el desarrollo y gestión de
proyectos Java
25
4. Despliegue de aplicaciones
BUILD
<war destfile="myapp.war" webxml="src/metadata/myapp.xml">
<fileset dir="src/html/myapp"/>
<fileset dir="src/jsp/myapp"/>
<lib dir="thirdparty/libs">
<exclude name="jdbc1.jar"/>
</lib>
<classes dir="build/main"/>
<zipfileset prefix="images“
dir="src/graphics/images/gifs" />
</war>
GENERADO
WEB-INF/web.xml
WEB-INF/lib/jdbc2.jar
WEB-INF/classes/com/myco/myapp/Servlet.class
META-INF/MANIFEST.MF
index.html
front.jsp
images/small/logo.gif
images/large/logo.gif
FICHEROS
thirdparty/libs/jdbc1.jar
thirdparty/libs/jdbc2.jar
build/main/com/myco/myapp/Servlet.class
src/metadata/myapp.xml
src/html/myapp/index.html
src/jsp/myapp/front.jsp
src/graphics/images/gifs/small/logo.gif
src/graphics/images/gifs/large/logo.gif
26. Octubre 2009 2. Ant 26
4. Despliegue de aplicaciones
Filtros (tareas <copy> y <move>)
<mapper> permite mapear ficheros FROM a ficheros TO
type=flatten elimina directorios y paquetes
type=merge sólo considera el atributo TO
type=glob admite asteriscos en el FROM y en el TO
type=regexp admite expresiones regulares
type=package transforma directorios FROM en paquetes TO
type=unpackage hace lo contrario
<filterset> permite indicar grupos de filtros para tokens
Admite begintoken y endtoken (@ por defecto)
<filter token="CLASE" value="${Clase}" />
27. Octubre 2009 Herramientas para el desarrollo y gestión de
proyectos Java
27
Contenidos
I. Eclipse
II. Ant
III. Maven
IV. Sistemas de Control de Versiones
V. Sistemas de Gestión de Incidencias
VI. Sistemas de Pruebas
VII. Otros Plugins de Eclipse
28. Octubre 2009 Herramientas para el desarrollo y gestión de
proyectos Java
28
III. Maven
1. Goals Maven
2. Gestión de Dependencias
3. Arquetipos
4. Pluggins
5. Maven vs. Ant
29. Octubre 2009 3. MAVEN 29
1. Goals Maven
¿Qué es Maven?
Un framework de gestión de proyectos, que proporciona un modelo
estándar de gestión y descripción de proyectos
Sistema de estándares + repositorio + SW para manejar y describir
proyectos
Estándares
Una estructura estándar para los directorios
Una salida principal para cada proyecto
Una convención de nombres estándar
Reutilización
Ejecución declarativa
Organización coherente de dependencias
30. Octubre 2009 3. MAVEN 30
1. Goals Maven
Ciclo de Vida
Validar
Inicializar
Generar fuentes
Procesar fuentes
Generar recursos
Compilar
Estructura de carpetas
src/main/java: Código fuente
src/main/resources: Otros recursos
src/test/java: Código fuente de pruebas.
src/test/resources: Otros recursos para las pruebas
Toda la información almacenada en pom.xml
31. Octubre 2009 3. MAVEN 31
1. Goals Maven
Instalación
Descargar mvn y crear la variable M2_HOME
Añadir M2_HOMEbin a PATH y comprobar mvn -
version
Crear la variable M2_REPO apuntando a .m2/repository
settings.xml permite configurar las conexiones de Maven
Goals
Objetivos que permiten realizar una tarea
mvn <goal>
32. Octubre 2009 3. MAVEN 32
1. Goals Maven
Generación de proyectos
mvn archetype:create -DgroupId=com.empresa.solucion
-DartifactId=mi-aplicacion
mvn eclipse:eclipse genera un proyecto de Eclipse
Compilación y ejecución
mvn compile compila el proyecto
mvn test lanza las prueba de src/test
mvn test-compile sólo compilar las pruebas
Empaquetado e instalación
mvn package empaqueta el proyecto
mvn install instala en repositorio local
Otros comandos
mvn clean, mvn resolve, mvn site, mvn deploy, …
34. Octubre 2009 3. MAVEN 34
2. Gestión de Dependencias
Fichero POM (Project Object Model)
Las dependencias no acompañan al código
Se puede indicar un ámbito de aplicación (scope)
compile, test, provided, run-time, system
Elementos de descripción
groupId: Nombre de organización, suele coincidir con el
paquete
artifacId: Identificador del componente que se esta
desarrollando
version: Versión actual del desarrollo
scope: Ámbito en el que se usa (compile, test, provided, run-
time, system)
type: Empaquetamiento de la dependencia
35. Octubre 2009 3. MAVEN 35
2. Gestión de Dependencias
Fichero POM (Project Object Model)
Indica la estructura y dependencias de un proyecto
Maven resuelve automáticamente dependencias transitivas
y descarga de repositorio
<project ...>
...
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
36. Octubre 2009 3. MAVEN 36
2. Gestión de Dependencias
Las dependencias se heredan entre módulos
Existe un super-pom del que heredan todos
mvn help:effective-pom
Gestor de dependencias
Permite indicar una versión preferida para las dependencias
No afecta al grafo de dependencias del proyecto
<dependencyManagement> <dependencies>
<dependency>
<groupId>org.apache.maven.proficio</groupId>
<artifactId>proficio-model</artifactId>
<version>${project.version}</version>
</dependency>
37. Octubre 2009 Herramientas para el desarrollo y gestión de
proyectos Java
37
2. Gestión de Dependencias
Exclusión de Dependencias
Supongamos que tenemos estas dependencias
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-el</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.apache.myfaces.core</groupId>
<artifactId>myfaces-api</artifactId>
<version>1.1.5</version>
</dependency>
</dependencies>
38. Octubre 2009 Herramientas para el desarrollo y gestión de
proyectos Java
38
2. Gestión de Dependencias
Exclusión de Dependencias
Si ahora cada uno depende a su vez de otra… (en su propio pom.xml)
<artifactId>commons-el</artifactId>
<dependencies> <dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.0.3</version>
</dependency> </dependencies>
<artifactId>myfaces-api</artifactId>
<dependencies> <dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.0.4</version>
</dependency> </dependencies>
39. Octubre 2009 Herramientas para el desarrollo y gestión de
proyectos Java
39
2. Gestión de Dependencias
Exclusión de Dependencias
El paquete generado contendrá ambas versiones
Para evitarlo se pueden excluir dependencias
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-el</artifactId>
<version>1.0</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
40. Octubre 2009 3. MAVEN 40
3. Arquetipos
Los arquetipos permiten crear una estructura de proyecto sin
tener que escribir el pom.xml
Listado de Arquetipos
http://docs.codehaus.org/display/MAVENUSER/Archetypes+List
mvn archetype:generate
Ejemplos:
appfuse-basic-jsf
appfuse-basic-struts
maven-archetype-j2ee-simple
maven-archetype-mojo
maven-archetype-site
…
41. Octubre 2009 3. MAVEN 41
4. Pluggins
Permiten extender la funcionalidad de Maven
Se añaden al pom.xml
Se puede indicar una configuración personalizada
<configuration>
Se puede restringir la ejecución a alguna fase del
ciclo de vida
<executions>
<execution>
<phase>integration-test</phase>
Se pueden crear pluggins personalizados mediante
MOJO
43. Octubre 2009 3. MAVEN 43
4. Pluggins
SCM
http://maven.apache.org/scm/plugins/
Permite la conexión con sistemas de control de versiones
<connection>
scm:svn:http://localhost/repositorios/miRepo
</connection>
Eclipse
http://m2eclipse.codehaus.org/update/site.xml
http://code.google.com/p/q4e/wiki/Installation
mvn eclipse:eclipse
Requiere la variable M2_REPO
Permite lanzar tareas Maven como herramienta externa
44. Octubre 2009 3. MAVEN 44
5. Maven vs. Ant
Incluir tareas Ant en Maven
Plugin maven-antrun-plugin
Permite especificar tareas ant a ejecutar
Ejemplo:
<rmic base="${target.classes.dir}"
classname="org.springframework.remoting.rmi.
RmiInvocationWrapper"/>
<rmic base="${target.classes.dir}" iiop="true"
classname="org.springframework.remoting.rmi.
RmiInvocationWrapper">
<classpath refid="all-libs"/>
</rmic>
45. Octubre 2009 3. MAVEN 45
5. Maven vs. Ant
Ejemplo:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase>process-classes</phase>
<configuration>
<tasks>
<echo>Running rmic</echo>
<!– TAREAS ANT A EJECUTAR -->
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
46. Octubre 2009 Herramientas para el desarrollo y gestión de
proyectos Java
46
Contenidos
I. Eclipse
II. Ant
III. Maven
IV. Sistemas de Control de Versiones
V. Sistemas de Gestión de Incidencias
VI. Sistemas de Pruebas
VII. Otros Plugins de Eclipse
47. Octubre 2009 Herramientas para el desarrollo y gestión de
proyectos Java
47
IV.Sistemas de Control de Versiones
1. Repositorios de Código
2. CVS
3. Subversion
4. Subversive
48. Octubre 2009 4. Sistemas de Control de Versiones 48
1. Repositorios de Código
¿Qué es un repositorio?
Sitio centralizado donde se almacena y mantiene
información digital
Repositorio de código almacena y mantiene código fuente
¿Qué es una versión/revisión?
Estado en que se encuentra un producto en un momento
de su desarrollo
¿Qué es un sistema de control de versiones?
Aplicación que gestiona el estado de un proyecto en base
a un repositorio que almacena el histórico de versiones
49. Octubre 2009 4. Sistemas de Control de Versiones 49
1. Repositorios de Código
Un sistema de control de versiones debe
proporcionar:
Mecanismo de almacenaje de los elementos a gestionar
(archivos, imágenes, documentación, ...)
Posibilidad de realizar cambios sobre los elementos
almacenados (modificaciones parciales, añadir, borrar,
renombrar o mover elementos)
Registro histórico de las acciones realizadas con cada
elemento o conjunto de elementos (pudiendo volver a un
estado anterior del producto)
50. Octubre 2009 4. Sistemas de Control de Versiones 50
1. Repositorios de Código
Conceptos
Módulo: Estructura de directorios de un proyecto
Etiquetar: Dar a una versión de cada módulo un nombre común
Línea base: Versión aprobada a partir de la que se realizan los
siguientes cambios
Rama: Cada una de las versiones en desarrollo obtenida a partir de
una línea base
Check-in: Envío de una copia modificada a repositorio
Check-out: Obtención de una copia en local
Conflicto: Cada vez que se realizan cambios, hay que resolverlos
Integración: Unión de uno o varios conjuntos de cambios sobre una
versión unificada
51. Octubre 2009 4. Sistemas de Control de Versiones 51
2. CVS
Concurrent Versions System
Servidor CVSNT para Windows (http://www.march-
hare.com/cvspro/es.asp)
CVSNT Control Panel
1. Detener los servicios (Pestaña About)
2. Añadir un repositorio (Pestaña Repository Configuration)
3. Opcionalmente configurar el servidor (Server Settings)
4. Aplicar los cambios y reiniciar los servicios
5. Crear una variable CVSROOT=:sspi:<host>:/<repositorio>
6. Añadir usuario(s) al sistema (Windows)
7. Crear un password para cada usuario (cvs passwd –a <usuario>)
52. Octubre 2009 4. Sistemas de Control de Versiones 52
2. CVS
Cliente CVS
Habitualmente se admite check-out anónimo
Y se exige un usuario para check-in
cvs <orden> [opciones]
Órdenes básicas
import crear un módulo nuevo con el directorio actual
co check-out inicial de un módulo
commit check-in de los cambios realizados
update actualización de los cambios de otros usuarios
diff muestra diferencias entre revisiones
add añade ficheros al módulo (-kb para binarios)
remove elimina ficheros del módulo
53. Octubre 2009 4. Sistemas de Control de Versiones 53
2. CVS
Resolución de conflictos
Al hacer update o commit
CVS se quejará si hay conflictos que no pueda resolver
El fichero en conflicto aparecerá marcado para su edición
<<<<<<< Fichero
texto-versión-1
=======
texto-versión-2
>>>>>>> revisión
Resolver el conflicto
Repetir el update o commit
54. Octubre 2009 4. Sistemas de Control de Versiones 54
2. CVS
Desde Eclipse
1. Configurar la perspectiva CVS
2. Botón derecho>Team>Share Project
3. ¡¡OJO!! Añadir .project y .classpath a la lista de
ignorados
4. Etiquetar la revisión (Team>Tag as Version)
5. Ya aparecerán las opciones de trabajo
Commit, Update, Branch, Merge, Tag as Version
6. La resolución de conflictos es gráfica
55. Octubre 2009 4. Sistemas de Control de Versiones 55
3. Subversion
CVS es un sistema de control de versiones antiguo
Subversion es la evolución natural de CVS
Hereda comandos (svn co, svn add,…)
Y añade nuevos (svn cp, svn status,…)
Conceptos
Trunk Tronco, se refiere a una línea base
Branch Rama derivada del tronco
Tag Etiqueta
56. Octubre 2009 4. Sistemas de Control de Versiones 56
3. Subversion
http://svn1clicksetup.tigris.org/
Instala SVN en “1 paso”
Instala TortoiseSVN como cliente Windows
Consideraciones
Crear un usuario para SVN
Opcionalmente crear un proyecto inicial
Genera un servicio de control SVNService
Podemos omitir TortoiseSVN
Se accede como svn://localhost
Se admiten referencias http://, file:///, etc.
57. Octubre 2009 4. Sistemas de Control de Versiones 57
3. Subversion
Comandos
svn add Añade elementos a repositorio
svn co Obtiene una copia local
svn cleanup Limpia una copia de trabajo local
svn commit Actualiza cambios en el repositorio
svn import Commit recursivo de archivos no versionados
svn export Obtiene la estructura de directorios limpia
svn mkdir Crea un directorio en el repositorio
svn cp Crea una nueva rama
svn merge Fusiona dos ramas
svn resolved Marca los conflictos como resueltos
svn revert Deshace los cambios de una copia local
svn update Actualiza cambios del repositorio en local
58. Octubre 2009 4. Sistemas de Control de Versiones 58
3. Subversion
svn help
Muestra todos los comandos disponibles
svn status
Muestra el estado de una copia de trabajo
Estados de un fichero SVN
A Fichero añadido
D Fichero eliminado
M Fichero modificado
? Fichero local nuevo (no existe en repositorio)
! Fichero remoto distinto de la copia local
U Fichero actualizado desde repositorio
G Fichero guardado en repositorio
C Fichero con conflictos
59. Octubre 2009 4. Sistemas de Control de Versiones 59
3. Subversion
Propiedades de un fichero/directorio
svn:read-only Fichero de solo lectura
svn:executable Fichero ejecutable
svn:mime-type Indica el tipo mime del fichero
svn:ignore Fichero ignorado
Operaciones con propiedades
svn propget <propiedad> <fichero>
svn propset <propiedad> <valor> <fichero>
svn propedit <propiedad> <fichero>
60. Octubre 2009 4. Sistemas de Control de Versiones 60
3. Subversion
Herramientas de administración
svnlook
Analiza los cambios en un repositorio
svnadmin
Permite crear repositorios, mostrar revisiones,
cambiar el log de revisiones, copias de seguridad, …
shell consola de navegación por el repositorio
dump copia de seguridad a salida estándar
load recupera una copia de seguridad
setlog modifica el log de una revisión
61. Octubre 2009 4. Sistemas de Control de Versiones 61
4. Subversive
Proyecto para la integración de Subversion para Eclipse
http://www.eclipse.org/subversive/
Permite trabajar con repositorios SVN de modo similar al que
se trabaja con CVS
Características
Exploración de repositorio remoto
Compartición de proyectos y check-out
Sincronización de proyectos para cambios incomming/outgoing
Commit, update y revert
Histórico de cambios
Resolución de conflictos por mezcla (merge)
62. Octubre 2009 4. Sistemas de Control de Versiones 62
4. Subversive
Perspectiva SVN Repository Exploring
Añadir svn://localhost
Compartir el proyecto con este repositorio
Botón derecho > Team > Share project
Opciones
De acceso: Synchronize, Commit, Update, Revert
De estructura: Tag, Branch, Merge, Switch
Otras: Show properties, Set property, Copy to, Export
También se puede crear un proyecto como check-out
de un repositorio
63. Octubre 2009 4. Sistemas de Control de Versiones 63
4. Subversive
64. Octubre 2009 Herramientas para el desarrollo y gestión de
proyectos Java
64
Contenidos
I. Eclipse
II. Ant
III. Maven
IV. Sistemas de Control de Versiones
V. Sistemas de Gestión de Incidencias
VI. Sistemas de Pruebas
VII. Otros Plugins de Eclipse
65. Octubre 2009 Herramientas para el desarrollo y gestión de
proyectos Java
65
V. Gestión de Incidencias
1. Propósito de un SGI
2. Bugzilla
3. Instalación y Administración
4. Creación de Usuarios
5. Registro de incidencias (Bugs)
66. Octubre 2009 5. Gestión de Incidencias 66
1. Propósito de un SGI
Toda aplicación en explotación puede generar
incidencias
El cliente reporta estas incidencias a su contacto
(comercial, jefe de proyecto, gerente,…)
El contacto deriva la incidencia al equipo de
desarrollo
El equipo la resuelve y se lo comunica al contacto
El contacto le devuelve al cliente una nueva versión
Un SGI pretende llevar un control más preciso de
este proceso
67. Octubre 2009 5. Gestión de Incidencias 67
1. Propósito de un SGI
“Un SGI es una aplicación informática
diseñada para ayudar a asegurar la calidad de
software y asistir a los programadores y otras
personas involucradas en el desarrollo y uso
de sistemas informáticos en el seguimiento de
los defectos de software”
Componentes
Base de Datos
Aplicación de acceso (escritorio o Web)
68. Octubre 2009 5. Gestión de Incidencias 68
1. Propósito de un SGI
Errores
Bloqueante: impide que se pueda seguir
desarrollando/probando
Crítico: caída de la aplicación, pérdida de datos, …
Mayor: pérdida importante de funcionalidad, datos de
salida incorrectos, o dificultades que impiden el uso del
programa
Normal: una parte del componente no es funcional
Menor: un problema al cual se le puede dar la vuelta
Trivial: un problema estético
Mejora: solicitud de una nueva característica o
funcionalidad
69. Octubre 2009 5. Gestión de Incidencias 69
2. Bugzilla
Bugzilla es un conjunto de cgi que nos permiten
mantener una base de datos de incidencias de un
proyecto desde un navegador Web
Requiere un servidor Web, una base de datos y Perl
Permite el alta y baja de incidencias sabiendo
Versión a la que afecta
Encargado de resolverla
Estado de la incidencia (abierta, rechazada, cerrada, …)
Histórico de cambios realizados
70. Octubre 2009 5. Gestión de Incidencias 70
3. Instalación y Administración
Instalación en Windows
Requiere MySQL, Apache y ActivePerl
Instalable sobre SQLServer e IIS (Bugzilla??)
http://www.bugzilla.org/download/
http://dev.mysql.com/downloads/mysql/5.1.html
http://www.activestate.com/activeperl/downloads/
http://httpd.apache.org/download.cgi
71. Octubre 2009 5. Gestión de Incidencias 71
3. Instalación y Administración
Instalación en Windows
1. Descargar las aplicaciones indicadas
2. Descomprimir Bugzilla
3. Instalar MySQL
Crear una instancia “bugs” y un usuario “bugs” con permisos
totales sobre ella (BUGZILLA_HOMElocalconfig)
4. Instalar ActivePerl
perl checksetup.pl (desde el directorio de bugzilla)
Resolver las distintas dependencias
Montar la BD (ppm install DBD-mysql)
5. Instalar Apache
Configurar permisos, httpd.conf y CGI
72. Octubre 2009 5. Gestión de Incidencias 72
3. Instalación y Administración
73. Octubre 2009 5. Gestión de Incidencias 73
4. Creación de Usuarios
74. Octubre 2009 5. Gestión de Incidencias 74
5. Registro de incidencias (Bugs)
75. Octubre 2009 5. Gestión de Incidencias 75
5. Registro de incidencias (Bugs)
76. Octubre 2009 Herramientas para el desarrollo y gestión de
proyectos Java
76
Contenidos
I. Eclipse
II. Ant
III. Maven
IV. Sistemas de Control de Versiones
V. Sistemas de Gestión de Incidencias
VI. Sistemas de Pruebas
VII. Otros Plugins de Eclipse
77. Octubre 2009 Herramientas para el desarrollo y gestión de
proyectos Java
77
VI.Sistemas de Pruebas
1. Clases de Test
2. Ciclo de Vida de un Test
3. Aserciones
4. JUnit
5. DbUnit
6. HttpUnit
7. Ejecución de Pruebas
78. Octubre 2009 6. Sistemas de Pruebas 78
1. Clases de Test
JUnit está diseñado bajo los patrones de diseño Command y
el patrón Composite
Un TestCase es un objeto Command y una clase de Test es
una clase que extiende TestCase y contiene métodos de testeo
Antes de Java 5
Los métodos debían llamarse testXXX()
Se admitían los métodos setUp() y tearDown() para inicializar y
liberar objetos (pre-post condiciones)
Después de Java 5
Se utilizan anotaciones @Before, @Test, @After
Utilizables a nivel de clase o a nivel de método (test)
No importan los nombres de los métodos ni hay que heredar TestCase
79. Octubre 2009 6. Sistemas de Pruebas 79
2. Ciclo de Vida de un Test
Todos los programas tienen errores
Un test NO se realiza para comprobar que un sistema no tiene
errores, NI para demostrar que funciona
Un test se realiza para encontrar fallos (decisión fuerte)
Se pueden probar las distintas fases de desarrollo
Modelo en V
80. Octubre 2009 6. Sistemas de Pruebas 80
3. Aserciones
Condiciones que deben cumplirse para validar un test
En caso de fallo lanza un AssertionFailedError
Se especifican mediante la clase org.junit.Assert
assertTrue(“mensaje”, condición)
assertFalse(“mensaje”, condición)
assertSame(objeto, objeto)
assertNotSame(objeto, objeto)
assertNull(objeto)
assertNotNull(objeto)
assertEquals(variable, variable)
JUnit3 hereda los métodos (extends TestCase)
JUnit4 requiere importarlos (import static)
81. Octubre 2009 6. Sistemas de Pruebas 81
4. JUnit
Framework para pruebas unitarias
Pruebas de funcionamiento de una clase
Paquetes junit.* (JUnit 3) y org.junit.* (JUnit 4)
Disponible en Eclipse (JUnit 3 y 4)
Proyectos de prueba (New > Project > Examples)
Ejecutable como JUnit (junit.samples.AllTests)
Ejecutable como Swing o AWT (TestRunner)
JUnit 4 admite timeout, excepciones esperadas, tests
ignorables, auto-documentación, …
82. Octubre 2009 6. Sistemas de Pruebas 82
4. JUnit
Paquetes de pruebas (Suites)
Permite ejecutar pruebas de varias clases en
conjunto desde una lanzadora
En JUnit 3 se añaden clases a TestSuite
suite.addTest(ClaseTest.suite());
suite.addTestSuite(ClaseTest.class);
En JUnit 4 se usan anotaciones de clase
@RunWith(Suite.class)
@SuiteClasses({C1Test.class, C2Test.class})
83. Octubre 2009 6. Sistemas de Pruebas 83
5. DbUnit
Herramienta para simplificar las pruebas unitarias de
operaciones sobre base de datos
http://www.dbunit.org/
Carga los datos de test de XML
El framework DbUnit extiende JUnit 3
Contiene métodos para distintas comparaciones entre datos
(desde texto plano, consultas, tablas, …)
En lugar de extender TestCase se extiende DatabaseTestCase
Requiere implementar dos métodos
protected IDatabaseConnection getConnection() throws Exception
protected IDataSet getDataSet() throws Exception
84. Octubre 2009 6. Sistemas de Pruebas 84
5. DbUnit
Ciclo de vida
1. Eliminar datos de anteriores ejecuciones del test de la BD
2. Cargar datos nuevos desde el sistema de archivos
3. Ejecutar pruebas considerando aserciones
Nótese: no se realizan tareas de restauración
Permite cargar datos para un único test
DatabaseTestCase
setUp() borra y reinserta los datos de getDataSet()
tearDown() no realiza ninguna acción
85. Octubre 2009 6. Sistemas de Pruebas 85
5. DbUnit
Realización de pruebas
org.dbunit.Assertion permite establecer aserciones entre
DataSets
No importa el origen de datos
FlatXmlDataSet
QueryDataSet
XlsDataSet
CsvDataSet
IDataSet
También permite exportar datos a distintos destinos
86. Octubre 2009 6. Sistemas de Pruebas 86
6. HttpUnit
Framework para probar sitios Web basado en JUnit
http://www.httpunit.org/
com.meterware.WebConversation simula un
navegador accediendo al servidor
WebRequest y WebResponse auxiliares para indicar
la URL y obtener la respuesta
La respuesta será HTML
getText() la devuelve como texto
getDOM() la devuelve como objeto XML DOM
87. Octubre 2009 6. Sistemas de Pruebas 87
6. HttpUnit
Enlaces
WebLink link = response.getLinkWith("texto");
link.click();
Se recarga la respuesta con el método getCurrentPage() de
WebConversation
También existe getLinkWithImageText() que busca en el texto ALT
de una imagen
Tablas
WebTable table = resp.getTables()[0];
Método asText() la devuelve como String[][]
Marcos
getFrameContents("marco") devuelve un WebResponse
88. Octubre 2009 6. Sistemas de Pruebas 88
6. HttpUnit
Formularios
WebForm form = resp.getForms()[0];
form.getParameterValue("parámetro") ;
getParameterNames() devuelve un String[]
setParameter("parámetro", "valor");
toggleCheckbox("parámetro"); para checkbox
submit(); envía los datos
reset(); resetea a los valores por defecto
89. Octubre 2009 6. Sistemas de Pruebas 89
7. Ejecución de Pruebas
Desde Eclipse
Run as JUnit
Desde consola
java org.junit.runner.JUnitCore [Clase de Test]
Desde Swing
java junit.swingui.TestRunner
Desde AWT
java junit.awtui.TestRunner
Desde Ant
<junit><test name="Clase de Test" /></junit>
90. Octubre 2009 Herramientas para el desarrollo y gestión de
proyectos Java
90
Contenidos
I. Eclipse
II. Ant
III. Maven
IV. Sistemas de Control de Versiones
V. Sistemas de Gestión de Incidencias
VI. Sistemas de Pruebas
VII. Otros Plugins de Eclipse
91. Octubre 2009 Herramientas para el desarrollo y gestión de
proyectos Java
91
VII.Otros Plugins de Eclipse
1. Selenium IDE
2. JMeter
3. I18N
4. Hibernate Tools
5. Spring IDE
92. Octubre 2009 7. Otros Pluggins de Eclipse 92
1. Selenium IDE
Paquete de herramientas para automatizar pruebas de
aplicaciones Web en distintas plataformas
http://seleniumhq.org/
NO es pluggin de Eclipse sino de Firefox
CubicTest SÍ es un pluggin para Eclipse
http://cubictest.seleniumhq.org/
Requiere Eclipse 3.3 Ganymede
Requiere pluggin Eclipse Graphical Editing
Framework (GEF)
93. Octubre 2009 7. Otros Pluggins de Eclipse 93
1. Selenium IDE
94. Octubre 2009 7. Otros Pluggins de Eclipse 94
1. Selenium IDE
95. Octubre 2009 7. Otros Pluggins de Eclipse 95
1. Selenium IDE
96. Octubre 2009 7. Otros Pluggins de Eclipse 96
2. JMeter
Herramienta para realizar pruebas de stress sobre un
servidor Web
http://jakarta.apache.org/jmeter/
Se parte de un plan de pruebas (test plan) que deberá
contener un grupo de hilos (thread group) para
lanzar llamadas concurrentes
Se puede indicar
Nombre del grupo
Número de hilos
Tiempo para generar los hilos
Número de veces que se lanza una petición al servidor
97. Octubre 2009 7. Otros Pluggins de Eclipse 97
2. JMeter
Dado un plan de pruebas y un grupo de hilos se
indicar la URL del servidor a probar
(Add>Sampler>HTTPRequest)
Indicar
Máquina (nombre o IP)
Puerto (80)
Protocolo (http)
Método de petición (GET/POST)
Directorio Web a consultar
Posibles parámetros para la petición
…
98. Octubre 2009 7. Otros Pluggins de Eclipse 98
2. JMeter
Para mostrar los resultados se debe añadir un
Listener al plan de pruebas
Árbol de resultados (Results Tree)
Para cada petición muestra la respuesta HTTP, la petición
y los datos HTML devueltos
Tiene un renderizador de HTML y XML
Informe agregado (Aggregate Report)
Muestra un resumen de los resultados
Gráfico de resultados (Graph results)
Muestra un gráfico de rendimiento
…
99. Octubre 2009 7. Otros Pluggins de Eclipse 99
3. I18N
Proceso de internacionalización y localización
Internacionalización
Diseñar software adaptable a distintos idiomas y regiones
sin reprogramar
Localización
Adaptar software internacionalizado a un idioma concreto
con componentes específicos y ficheros de localización
(es-es, en-GB, en-US, …)
Se utilizan tokens en lugar de texto al desarrollar
Se sustituyen los token de ficheros de localización
100. Octubre 2009 7. Otros Pluggins de Eclipse 100
3. I18N
Ejemplo Hola Mundo
1. Source>Externalize Strings
2. Determinar los textos a externalizar o ignorar
3. Determinar el fichero .properties asociado
4. Comprobar el gestor de recursos que genera
5. Si no hay ficheros de localización utiliza el
generado
6. Si añadimos copias localizadas utiliza la copia
del idioma instalado (Windows)
101. Octubre 2009 7. Otros Pluggins de Eclipse 101
4. Hibernate Tools
Conjunto de herramientas para la persistencia de
objetos en bases de datos relacionales
https://www.hibernate.org/
Disponible para Java y .Net
Define el mapeo tablas-clases en ficheros XML
Las clases son VO serializables
La lógica de acceso la implementa hibernate
Fichero de configuración
Conexión, usuario, password, …
102. Octubre 2009 7. Otros Pluggins de Eclipse 102
5. Spring IDE
Framework para la creación de beans Java a
través de documentos XML
http://www.springide.org/
Permite la inyección de dependencias a la
hora de crear estos beans
Sólo se necesita crear la clase Java (POJO)
Equivale a un Diagrama de Objetos UML