Pruebas de JUnit en netBeans 6.5

La realización de las pruebas unitarias es una de las fases importantes en el desarrollo de software puesto que estas son la base para la correcta realización de las demás.
Y en Java se pueden realizar haciendo uso del framework JUnit. En esta ocasión haremos un pequeño tutorial en donde veremos como definir las pruebas a realizar en dos clases con cuatro métodos, cabe mencionar que acá el punto fuerte en conocimiento son los asserts, es decir, es en base a ellos que se generan estas pruebas y su conocimiento es crucial.

El código fuente y documentación se encuentran en este link.

JUnit y Asserts

A continuación les presento una investigación sobre el framework de pruebas para codigo Java JUnit, este framework es uno de los mas utilizados para la realización de pruebas unitarias de código Java y sabiendolo implementar se suele utilizar en pruebas de integración. Su uso principalmente esta basado en la utilización de asserts, término que en la investigación no se deja de lado.

A continuación les dejo el link para que puedan descargar el material en formato pdf. JUnit_Asserts

Proyecto agencia_viajes

Como parte de las actividades de Analisis 2, se pidio hacer esta practica, la cual se resume en el siguiente enunciado.

Se necesita desarrollar una pequeña aplicacion de agencias de viajes, para control de reservaciones y facturaciones de paquetes de viajes, la aplicación es totalmente generica y debe tener las siguientes caracteristicas:
1) Definicion de la empresa que adquirio el producto asi como los usuarios y sus niveles de acceso (consultas, reservaciones y
facturacion como minimo).
2) ABC de clientes.
3) Posibilidad de ver los paquetes que han reservado|contratado.

Los paquetes y su costo se deben preparar en base a la siguiente información.
4) Fichas de hoteles y centros turisticos.
5) Gestion de transportes aereos, terrestres y maritimos.
6)  Gestion de restaurantes, comedores y bares.

Y por ultimo debe permitir:
7) Generar facturacion a nivel de paquetes de viajes formados por combinacion de uno o varios de los servicios anteriores.
8) Aplicar descuentos por temporada o por cliente frecuente (5% de descuento por cada 20 paquetes contratados mayores a $5000).
9) Posibilidad de calcular creditos para los paquetes de viajes aplicando porcentajes de intereses (5% 3 cuotas, 10% 6 cuotas, 15% 12 cuotas).

Caracteristicas tecnicas:
-La aplicación debe ser totalmente web
-Al general los paquetes debe poder exportarse como minimo la tabla de servicios contratados y su costo a un archivo csv y pdf
-Frameworks a utilizar: icefaces, hibernate y spring
-Elaborar un css para la presentacion
-Ya que no se sabe cuanta sera la demanda el contenedor de servlets se debe de enlazar a un servidor web como Apache o Cherokee.

Alternativa a Spring

Un framework es una extensión de un programa, pues le agrega algún tipo de funcionalidad, han sido construidos con el objetivo de que los desarrolladores inviertan menos tiempo durante la codificación, sin embargo esto ha generado conjeturas encontradas porque unos dicen que generan porciones de código inservible y algunos otros pues rapidamente descubren sus ventajas. Para cada lenguaje y/o entorno de desarrollo existen varios tipos de frameworks, los cuales hacen mas fácil la tarea de programación, para este caso en especial abarcaremos el estudio del framework Spring, que fue diseñado especialmente para Java y surgió como sustituto de las implementaciones nativas de Java conocidas como EJB. Sin embargo con el paso del tiempo han surgido otros frameworks que corren en Java y que tienen la intención de ser el próximo sustituto de Spring.

A continuación he preparado un documento en donde se detalla de una mejor manera el post.

alternativaSpring

Hudson y Trac

Hudson

Hudson es una herramienta de software utilizada para la realización de integración continua en el desarrollo de proyectos de software. Esta escrita en Java, tiene soporte para herramientas de control de versiones tales como CVS y Subversion. Tiene capacidad de ejecutar proyectos basados en Apache Ant y Apache Maven. Así mismo cabe mencionar que se ejecuta en un contenedor de servlets, el cual puede ser Apache Tomcat o GlassFish. La construcción que realiza se puede realizar por varios medios, entre ellos incluido uno similar a Cron, mientras que otros se basan en la construcción que hay concluido.

Es una herramienta con licencia MIT y algunas partes con licencia de Creative Commons (Reconocimiento y Compatir igual), su principal promotor es Kohsuke Kawaguchi.

Hudson monitorea ejecuciones de trabajos repetidos, como una construcción de proyectos de software o trabajos que corren dirigidos por cron. Entre otras cosas, Hudson se centra principalmente en los dos siguientes trabajos.

  • Construcción y pruebas de proyectos de software continuamente. Hudson ofrece una forma fácil de utilización de un sistema de integración continua, lo que hace fácil a los desarrolladores, la integración de sus proyectos de software y que a su vez aumenta la productividad mendiante la integración continua automatizada.

  • Monitoreo de ejecuciones de trabajos que corren externamente. Como trabaja con Cron y procmail, se pueden revicibir mensajes de notificación de la ejecución de procesos externos y enterarse de cuando algo anda mal. Esto mediante el envio de la salida de los procesos.

Porque usar Hudson?

  • Es de fácil instalación, está al alcance de la ejecución del comando java -jar en una terminal de comandos.

  • Es de fácil configuración, tiene una fácil interfaz web que nos muestra el estado de los trabajos y revisiones de error.

  • Configuración XML, no es necesario configurar ningun archivo XML, sin embargo, si se desea se puede hacer manualmente.

  • Cambio de soporte, puede generar una lista de cambios realizados en la construcción de Subversion o CVS.

  • RSS/e-mail/IM, contiene un monitor para construir resultados mediante RSS o mail, para recibir información en tiempo real sobre los errores que pudieran surgir.

  • Reporte de pruebas, generación de reporte de pruebas de JUnit, esta información puede ser tabulada y resumidad para su presentación. El historial puede ser presentado en una gráfica.

  • Construcciones distribuidas, puede distribuir/construir pruebas de carga en varios equipos.

  • Archivo de huellas dactilares, puede realizar un seguimiento de la construcción hecha por los jars y que construcción esta utilizando con que version de los jars.

  • Soporte de pluggins, capacidad de ampliación mediante pluggins, los cuales puden ser desarrollados también por los usuarios.

Trac

Trac es un sistema web libre para la gestión de proyectos y seguimiento de errores, es multiplataforma, ligero y extensible. Esta basado en CVSTrack y originalmente era llamado SVNTrac por su fuerte dependencia de Subversion. Esta escrito en Pyton, es distribuido por Edgewall Software. Hasta su versión 0.8 estaba bajo una licencia GNU GPL, sin embargo de la 0.9 en adelante está bajo una licencia BSD modificada. Entre las funcionalidades que ofrece, estan:

  • Un wiki que se puede emplear para documentar cualquier aspecto del proyecto de modo colaborativo y sin necesidad de herramientas especiales (sólo necesitamos los permisos adecuados y un navegador web).

  • La sintaxis del wiki se puede emplear en casi todos los módulos del sistema (por ejemplo en los tickets), se permite la definición y empleo de macros (p. ej. para generar listas de cambios) y la inclusión de texto con sintáxis distintas a la del Wiki como html o rst.

Trac siendo una interfaz de lectura para el repositorio de subversion, nos permite definir y visulizar graficamente el estado de los hitos (que incluye descripción y fecha) de un proyecto, a la vez que nos permite tener un seguimiento de eventos en el sistema, también nos permite la búsqueda de paginas del wiki, mediante palabras.

Porque usar Track?

  • Es una interfaz dedicada para la lectura del repositorio de sistemas de control de versiones.

  • Nos proporciona de un wiki para la documentación colaborativa del proyecto.

  • Muestra información detallada sobre los cambios realizados en el wiki, sin necesidad de herramientas extras.

  • Permite el enlace hacia una base de datos de errores de software.

  • Permite la comparativa entre una y otra versión desde su interfaz.

  • Es un gestor de incidencias, con el cual podemos darle seguimiento a una determinada y ver su evolución.

Alternativas a Trac

CruiseControl

Es una herramienta de código abierto, la cual sirve para el control de compilaciones automaticas de proyectos Java, usando Maven o Ant.

Es muy utilizada para la realización de la integración continua. Periodicamente realiza la compilación de nuestros proyectos, para ver si el codigo y los cambios son correctos y asi detectar errores y cuando los hay rapidamente envia una notificación o alarma, al cual puede ser mediante RSS, e-mail, html o Jabber.

Cuando se detecta que una compilación no es exitosa, manda una notificación, lo cual permite que rápidamente se realicen acciones para contrarestar dichos errores. Permite la detección de los errores de manera rápida, asi como también quien o quienes fueron los autores. Esta es un herramienta muy util cuando muchas personas trabajan en el mismo proyecto. Permite tener muchas versiones ejecutables con pequeños cambios.

Es un sistema que esta en ejecución y cada cierto ciclo de compilacion (tiempo) o build loop, revisa nuestro repositorio de control de versiones en busca de cambios hechos en nuestros proyectos y si los hubieran realiza las acciones respectivas. Este build loop, es configurable y puede hacerse cuando se detecta un cambio en el repositorio o cada cierto tiempo que se considere correcto. Cada una de estas fases genera un reporte de compilación en donde se detallan los cambios y pruebas hechas, comparación entre la vesión anterior y la nueva, información respectiva a la compilación y los links hacia la misma.

  • El archivo xml de configuración puede llegar a ser demasiado grande.

  • Las modificaciones de vuelven tediosas, cuando se hacen para varios proyectos.

  • Tiene algun tipo de dependencia del tipo de navegador.

  • En ocasiones botón build funciona y en otras no.

Continuum

Es una herramienta para la integración continua de proyectos de software. Continuum, en un proyecto java, está pendiente de las modificaciones en los fuentes, para compilar automáticamente cada cierto tiempo y avisar por medio de e-mail a los programadores en caso de fallo.

Continuum es un servidor de integración continua con características tales como construcción automatizada, manejo de releases, seguridad basada en funciones, y la integración con las mas populares herramientas de construcción y sistemas de control de código fuente. Es útil cuando se tiene un equipo centralizado de desarrollo o cuando se quiere poner el control de las versiones en las manos de los desarrolladores. Continuum nos puede ayudar a mejorar la calidad y mantener un entorno de desarrollo consistente.

  • Continuum no permite colocar nombres distintos a los ejecutables que no sean el nombre del proyecto.

  • Requiere que en el archivo pom.xml, este la información para el sistema de control de versiones, donde deben estar todos los datos del desarrollador, hasta su password, lo cual se convierte en una deficiencia si el equipo esta integrado por varias personas, pues esto crea una vulnerabilidad al vernos obligados a crear un usuario anonimo con permisos de solo lectura para que todos tengan acceso.

Comandos de terminal para Subversion

Create: Con este comando se crea un repositorio nuevo.

sudo svnadmin create /dir/del/repositorio

Checkout: Con este comando se hace una copia del proyecto que se esta trabajando.

$ svn checkout file:///repositorio/trunk /dir/de/proyecto

Export: Este comando se usa para exportar el arbol de directorios.

sudo svn export http://localhost/proyecto1 /dir/del/proyecto

Import: Este comando importa de manera repetitiva los cambios hechos en un proyecto hacia el repositorio.

sudo svn import /dir/proyecto http://localhost/proyecto1

Configuración de subversion con apache junto con Hudson y Trac

Nota: El ejemplo de este post se realizó en el sistema operativo GNU/Linux Ubuntu 9.10

Subversion: También conocido como SVN, Subversion es una herramienta de software para el control de versiones, surgio como una alternativa/sustitución al ya deprecaso sistema CVS. Subversion se una herramienta libre bajo licencia Apache/BSD y es desarrollado por collabnet. Una de las caracteristicas mas importantes que tiene subversion es que sus revisiones son atomicas, es decir, que todo el proyecto se guarda con un nuevo numero de revisión a diferencia de SVN que creaba una nueva revisión por cada archivo.

Como cualquier herramienta de Gestion de la Configuracion de Software (SCM), Subversion tiene capacidad de:

  • Controlar el estado de un producto
  • Construir el producto
  • Administraicón del tiempo de desarrollo
  • Hacer que el esfuerzo sea conjunto

Instalacion de Subversion: Para esto es necesario escribir en una terminal el siguiente comando.

sudo apt-get install subversion

Instalación de apache: Para esto es necesario tipear en una terminal el siguiente comando.

sudo apt-get install apache2 libapache-svn

Instalación de Trac: Para la instalacion de Trac, basta con entrar a una terminal y tipear.

sudo apt-get install trac

Instalacion de Hudson: Para poder instalar Hudson debemos de descargar el archivo hudson.war desde la página https://hudson.dev.java.net Cuando ya lo hayamos descargado, en una terminal tipeamos

java -jar hudson.war

Hecho lo anterior ya podemos abrir un reiniciamos apache y abrimos un explorador en la dirección http://localhost:8080 y veremos la página principal de Hudson. Cabe mencionar que la realización de esto tiene como requisito tener instalado el open-jdk (o sun-jdk), subversion y apache.

Configuración de apache con soporte webDAV y enlace con apache:

Para habilitar el soporte para webDAV de apache basta con ejecutar la siguiente linea en un terminal.

sudo a2enmod dav_svn dav

Ahora procedemos a crear el repositorio donde se guardarán todos nuestros proyectos. El parametro -p crea los directorios padres si acaso no existen.

sudo mkdir -p /srv/svn/repositorio

Así mismo también creamos una carpeta donde se alojarán los archivos de contraseñas.

sudo mkdir /srv/svn/user_accounts

A continuación creamos un grupo (subversion) y posteriormente creamos un usuario (uuno) dentro de ese grupo. Cabe mencionar que el usuario debe existir previamente.

sudo groupadd subversion

sudo addgroup uuno subversion

Ahora procedemos a modificar el archivo de configuración de acceso de apache para subversion.

sudo nano /etc/apache2/mods-available/dav_svn.conf

Y agregamos al final el texto que aparece a continuación:

Configuracion e apache

Configuración de apache

Ahora creamos el archivo de contraseñas asignando un usuario al mismo. El parámetro -c se utiliza para crear un nuevo archivo, si el archivo ya existira, no se coloca dicho parámetro al agregar un nuevo usuario.

sudo htpasswd -c /srv/svn/user_accounts/svn_passwdfile uuno

Ingresamos la contraseña para el usuario (uuno). Este archivo quedara con owner: root y grupo: root, por cuestiones de seguridad es mejor dejarlo así, para que solo administradores puedan agregar nuevos usuarios.

Ahora reiniciamos el servicio de apache.

sudo /etc/init.d/apache2 restart

Desde el explorador entramos http://localhost/proyecto1. Nos pedirá la contraseña y password, los ingresamos y veremos que ya nos aparece un link hacia el proyecto1. Si entramos veremos una pagina con título proyecto1 – Revision 0: /

Ahora agregamos un proyecto.

sudo svnadmin create /srv/svn/repositorio/proyecto1

Este paso lo hacemos cada vez que queramos crear un nuevo contenedor para nuestro proyecto

Ahora procedemos a cambiar los permisos sobre el contenedor de los proyectos.

sudo chown -R www-data:subversion /srv/svn/repositorio/*

sudo chmod -R 770 /srv/svn/repositorio/*

UUID_disco

UUID_disco

bootchart

Es una utilidad que existe en varias de las distribuciones de Linux, entre ellas openSuSE que es la distribución que estoy usando actualmente. A pesar de su simplicidad brinda mucha información interesante. Este programa muestra un gráfico en donde podemos apreciar todo lo que sucede durante la carga de nuestro sistema, se puede apreciar un eje X donde aparece el tiempo que transcurre durante la carga del sistema y en el eje Y aparece la carga al CPU, la utilización de la RAM, los procesos que se ejecutan y sus respectivos estados durante el tiempo de carga (aparte de la información general del sistema).

A continuación dejo un screenshot de lo que salio al ejecutarlo en mi máquina.

Encabezado bootchart

Encabezado bootchart

Entre los parametros mas relevantes están (ninguno es obligatorio)

  • -o  <direccion_para_guardar_imagen>
  • -f  <formato_de_imagen_(png, eps, o svg -default- )>

Sitios

Ubuntu Jaunty Jackalope Party

En los últimos días se ha estado organizando una pequeña reunión de tipo informal, esto en conmemoración del nuevo release de Ubuntu y a la vez por la formación de una manera más formal del grupo de usuarios de Ubuntu en Guatemala, ubuntu-gt y la migración de este a donde estan concetradas las listas de Ubuntu al rededor del mundo.

Esta actividad tiene como finalidad principal que todos se conozcan entre sí, ya que en la web, listas de correos y canales IRC en muchas ocasiones uno sólo sabe el nombre o el nick de la mara, sin embargo, son muy pocos a los que conocemos en persona. Pero eso no es impedimento para que quien tenga una duda sobre Ubuntu, quiera una copia del sistema, hacer un par de instalaciones o que simplemente quiera participar, no llegue. A esta actividad están todos cordialmente invitados. La misma se estará llevando a cabo en:

Plaza Fontabella, Sophos el día sábado 16 de mayo en horario de 1600 a 1900 hrs. (aproximadamente), este lugar esta ubicado en la 4ta.  Av. 12-59 zona 10

Ubuntu Jackalope Party

Ubuntu Jackalope Party

Todos los que esten en el rollo, los que no (quizá usan otra distro) y los que se quieran iniciar son bienvenidos.

Y para quienes gustan del beber… luego de esta reunión en un horario mas “decente”, nos estaremos trasladando a un lugar mas “decente” para el respectivo e infaltable post-evento.   :D   :D   :D

Mapa del lugar

Mapa del lugar

Para quienes no conocen Sophos, yo igual no conozco, pero el Dios programador bendiga a googleMaps.   :D

Nueva lista de información de Ubuntu-gt

Hasta el día de hoy todos los usuarios de Ubuntu concentrados en Guatemala (así como también algunos extranjeros), hacen uso de uno de los tan utiles grupos de Google, sin embargo, con miras a ser reconocidos y obtener apoyo de parte de Canonical, se ha tomado la decisión de que deje de funcionar este grupo, para migrar hacia uno de los foros oficiales destinados para esto.

Es por eso que a partir del viernes 15 de mayo la lista de google groups de ubuntu-guatemala, será cerrada, esto por la confusión que se genera por el hecho de usar dos listas (la de google groups y esta nueva) y que no se tiene concentrada a todas las personas en un lugar en común.

Es por ello que de ahora en adelante la lista que se utilizará será https://lists.ubuntu.com/mailman/listinfo/ubuntu-gt ahí pueden suscribirse para ser parte de esta lista y a la vez acá pueden remitir a las nuevas almas que se quieran iniciar o unir a este team.