viernes, 16 de diciembre de 2011

OpenXava

OpenXava es un marco de trabajo de código abierto que se utiliza para desarrollar aplicaciones de gestión de una forma efectiva, en donde el desarrollador define en vez de programar. Algunas caracteristicas de este marco de trabajo son las siguientes:

  • Permite el desarrollo rápido y fácil de mantenimientos y listados.
  • Es lo suficientemente flexible para desarrollar complejas aplicaciones de gestión de la vida real como contabilidad, facturación, gestión de personal, nóminas, gestión de almacenes,etc.
  • Permite definir aplicaciones simplemente con POJOs, JPA y anotaciones de Java 5.
  • Genera aplicaciones web Java (J2EE/JavaEE), que pueden ser desplegadas en cualquier portal java como una aplicación portlets.
  •  Provee automáticamente la interfaz de usuario, el acceso a los datos, el comportamiento por defecto, etc.

A continuación se muestra una demostracion de inicio rapido de OpenXava:

1) Configuración del entorno.

  •  Se descarga OpenXava desde la web oficial y luego se descomprime.
  •  Se descarga e instala el JDK de Java, y luego se establece el valor de JAVA_HOME al directorio de instalacion de este. 
  • Se descarga e instala "Eclipse IDE for Java EE Developers".
  • Se ejecuta Eclipse y se apunta el workspace de este a la carpeta workspace de OpenXava.
  • Dependiendo del sistema operativa que se tenga, se ejecuta el archivo start-tomcat.sh para Linux o el archivo start-tomcat.bat para Windows, los cuales se encuentran en la carpeta de OpenXava, todo esto para iniciar el servidor web tomcat que se utilizara para visualizar las aplicaciones que se lleven a cabo.
     

    NOTA: El archivo start-tomcat debe quedar en ejecución para que el servidor web tomcat se mantenga arriba. Si se quiere bajar el servidor, se ejecuta el archivo stop-tomcat.

2)  Ejecución de la aplicación de ejemplo que trae OpenXava, llamada MiEscuela.

  • Dentro del entorno de Eclipse, pulsamos CTRL+B para construir el proyecto.
  • Se ejecuta la tarea MiEscuela.desplegarWar.
 
  • Se abre el siguiente link: http://localhost:8080/MiEscuela/modules/Profesor y se prueban las diferentes funcionalidades que nos estrega la interfaz generada.

3) Agregar un nuevo archivo para Alumnos en el ejemplo MiEscuela.

  • Copiamos el archivo "Profesor.java" en la misma carpeta dandole el nombre de "Alumno.java", y luego modificamos este archivo para que quede de la siguiente forma:

  • Se construye el proyecto (CTRL+B) y se ejecuta la tarea MiEscuela.desplegarWar.
  • Se accede a la nueva interfaz creada para los alumnos a traves del link http://localhost:8080/MiEscuela/modules/Alumno , y se prueban las diferentes funcionalidades que se entregan.

 4) Hacer que un alumno tenga referencia a un profesor.

  • Se agregan unas cuantas lineas de codigo en el archivo de alumnos, tal y como se ve en la siguiente imagen:


  • Se construye el proyecto (CTRL+B) y se ejecuta la tarea MiEscuela.desplegarWar.
  • Se accede a la nueva interfaz con las referencias incluidas a travez del link http://localhost:8080/MiEscuela/modules/Alumno , y se prueban las diferentes funcionalidades que se entregan.

La anotacion "@ManyToOne", permite que se cree la relacion entre profesores y alumnos, y la anotacion "@DescriptionsList" permite que esta relacion se visualize en la interfaz. De esta forma se ve que a traves de simples cambios se utiliza poco esfuerzo y se visualiza el efecto de inmediato.

Fuentes:  http://es.wikipedia.org/wiki/OpenXava y http://openxava.wikispaces.com/quick-start_es

miércoles, 23 de noviembre de 2011

Patrones de Diseño

Los patrones de diseño son el esqueleto de las soluciones a problemas comunes en el desarrollo de software. Brindan una solución ya probada y documentada a problemas de desarrollo de software que están sujetos a contextos similares.

Los patrones de diseño se clasifican en los siguientes grupos:
  • Patrones de creación: inicialización y configuración de objetos.
  • Patrones estructurales: separan la interfaz de la implementación. Se ocupan de cómo las clases y objetos se agrupan, para formar estructuras más grandes.
  • Patrones de comportamientos: más que describir objetos o clases, describen la comunicación entre ellos.

Ejemplo:


Patron MVC: plantea la separación del problema en tres capas:
  • La capa de modelo: representa la realidad.
  • La capa de control: conoce los métodos y atributos del modelo, recibe y realiza lo que el usuario quiere hacer.
  • La capa de vista: muestra un aspecto del modelo y es utilizada por la capa anterior para interaccionar con el usuario. 



    Fuente: msdn.microsoft.com/es-es/library/bb972240.aspx

    Desarrollo Dirigido por Test (TDD).

    TDD es una tecnica de diseño e implementación de software incluida dentro de la metodologia XP, que se centra en tres pilares fundamental:

    1. La implementación de las funciones justas que el cliente necesita y no más.
    2. La minimización del número de defectos que llegan al software en fase de producción.
    3. La produccion de software modular, altamente reutilizable y preparado para el cambio.
     ¿Cómo lo hago?, ¿Por dónde empiezo?, ¿Cómo sé qué es lo que hay que implementar y lo que no?, ¿Cómo escribir un código que pueda modificar sin romper la funcionalidad existente?, son preguntas a las que TDD tiene respuestas.

    En TDD, de pensar en implementar tareas, se pasa a pensar en ejemplos certeros que eliminen la ambiquedad de nuestro idioma. Se intenta traducir el caso de uso o tarea en N ejemplos, hasta que la cantidad sea suficiente como para describir la tarea  sin dar lugar a malinterpretaciones. La propia implementación de pequeños ejemplos, en constantes iteraciones, hacen emerger la arquitectura que se necesita usar. Esta arquitectura emerge de la no-ambiguedad de los test automatizados, que no deja de lado las revisiones de código entre compañeros ni desarrolladores más veteranos.



    Fuente: http://www.dirigidoportests.com/wp-content/uploads/2009/12/disenoAgilConTDD.pdf

    Metodologías Ágiles.

    En el desarrollo de software se ven numerosas propuestas metodológicas que afectan de forma distinta al proceso de desarrollo. Dentro de estas tenemos:

    •  Las Metodologías tradicionales: centradas principalmente en el control del proceso, estableciendo rigurosamente las actividades involucradas, artefactos a producir, y herramientas y notaciones a usar. Estas metodologías han demostrado ser efectivas y necesarias en una gran cantidad de proyectos, pero también han presentado problemas en otros. Estos últimos se han intentado abordar a través de la inclusión de más actividades, artefactos y restricciones, basados en las falencias detectadas. Sin embargo, el resultado ha sido un proceso de desarrollo más complejo que incluso a veces limita la habilidad del equipo para llevar a cabo el proyecto.

    • Las Metodologías Ágiles: centradas en otras dimensiones, ya que dan mayor valor al individuo, a la colaboración con el cliente y al desarrollo incremental del software con iteraciones muy corta. Estas han demostrado ser efectivas en proyectos con requisitos muy cambiantes, y con exigencias de reducción drástica de los tiempos de desarrollo donde  mantienen una alta calidad.

    Hasta hace poco el proceso de desarrollo estaba enfocado en el control del proceso mediante una rigurosa definición de roles, actividades y artefactos, incluyendo modelado y documentación detallada. Este esquema tradicional ha demostrado ser efectivo y necesario en proyectos de gran tamaño (tiempo y recursos). Sin embargo, este enfoque no resulta ser el más adecuado para la mayoría de los proyectos actuales donde el entorno del sistema es muy cambiante, y se exige reducir drásticamente los tiempos de desarrollo pero manteniendo una alta calidad. Ante estas dificultades, las metodologías ágiles surgen como una posible solución, ya que están especialmente orientadas a proyectos pequeño, aportando una elevada simplificación, que no renuncia a las practicas esenciales para asegurar la calidad del producto.

    Para muchos equipos de desarrollo el uso de metodologías tradicionales les resulta muy lejano a su forma de trabajo actual, considerando las dificultades de introducción e inversión asociada en formación y herramientas. Por otro lado, las metodologías ágiles han sido especialmente pensadas para ajustarse a un amplio rango de proyectos industriales de desarrollo de software, en donde los equipos de desarrollo son pequeños,  los plazos son reducidos, existen requisitos volátiles y se basan en nuevas tecnologías.

    Fuente y más información: http://www.willydev.net/descargas/prev/TodoAgil.Pdf

    martes, 22 de noviembre de 2011

    ¿Qué es Kanban?

    Definición:

    Kanban es una metodología de origen japonés que significa "tarjeta numerada" o "tarjeta de identificación". Esta etiqueta Kanban contiene información que sirve como orden de trabajo, es decir, un dispositivo de dirección automático que nos da información acerca de qué se va a producir, en que cantidad, mediante que medios, y como transportarlo. 

    Principios:

    1. Eliminación de desperdicios.
    2. Mejora continua
    3. Participación plena del personal
    4. Flexibilidad de la mano de obra.
    5. Organización y visibilidad 
     
    Funciones:

    • Iniciar cualquier operación estándar en cualquier momento.
    • Dar instrucciones basados en las condiciones actuales del área de trabajo.
    • Prevenir que se agregue trabajo innecesario a aquellas ordenes ya empezadas y prevenir el exceso de papeleo innecesario.
    • La etiqueta Kanban se debe mover junto con el material, para así lograr los siguientes puntos: 
      • Eliminación de la sobreproducción.
      • Prioridad en la producción, el Kanban con mas importancia se pone primero que los demás.
      • Se facilita el control del material.
    • Controlar la producción.
    • Mejorar los procesos. 


    Ejemplo:




    Fuente: http://www.luisbonilla.com/gratis/practicaempresarial/sistema-kanban.htm 

    jueves, 27 de octubre de 2011

    Metodologia Agil: Scrum.

    Scrum es una metodología ágil de proyectos cuyo objetivo primordial es elevar al maximo la productividad de un equipo. Reduce al máximo la burocracia y actividades no orientadas a producir software que funcione y produce resultados en periodos muy breves de tiempo. Como método, Scrum enfatiza valores y prácticas de gestión, sin pronunciarse sobre requerimientos, prácticas de desarrollo, implementación y demás cuestiones técnicas. Más bien delega completamente en el equipo la responsabilidad de decidir la mejor manera de trabajar para ser lo mas productivos posibles.

    A continuacion se muestran enlaces con más información sobre Scrum:

    • Diapositivas: 

               http://dl.dropbox.com/u/24633336/SCRUM.pptx

    • Metodo Agil Scrum aplicado al desarrollo de un software de trazabilidad:

               http://dl.dropbox.com/u/24633336/metodoagilscrum-100513145255-phpapp02.pdf

    • Muy buena explicación de Scrum: 

              http://dl.dropbox.com/u/24633336/Explicando%20Scrum%20a%20mi%20abuela.docx

    Diseño Guiado por Dominio (DDD)


    Domain Driven Design (DDD) es un enfoque para el desarrollo de software con necesidades complejas mediante una profunda conexión entre la implementación y los conceptos del modelo y núcleo del negocio. 

    Provee una estructura de prácticas y terminologías para tomar decisiones de diseño que enfoquen y aceleren el manejo de dominios complejos en los proyectos de software.

    La investigacion completa se encuentra en el siguiente link:

    http://dl.dropbox.com/u/24633336/Informe%20DDD.docx 

    Presentacion en power point:

    http://dl.dropbox.com/u/24633336/DDD.pptx