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