domingo, 26 de febrero de 2017

Ensayo de XP y SCRUM

Ensayo de XP y SCRUM

Las metodologías de desarrollo ágil buscan elaborar software totalmente funcional en el tiempo o plazo establecido para el desarrollo del proyecto. Utilizan un proceso ágil, es decir que si los requerimientos del software cambian en cualquier etapa en la que se encuentre el proyecto, el equipo debe adaptar el producto a estos cambios ya que la agilidad como tal es la respuesta efectiva al cambio. Existen deferentes metodologías de desarrollo ágil tales como los son programación extrema XP y Scrum, las cuales tienen el mismo objetivo pero diferentes formas de trabajo.

La programación extrema XP está enfocada al desarrollo en equipo, es por esto que define un conjunto de valores que deben tener, además incluye al cliente como parte fundamental ya que sin él no se tendrían los requerimientos del producto. Scrum al igual que XP tiene un equipo de trabajo, la única diferencia es que divide el equipo en scrum master (líder), DBA (administrador dela base de datos), Programadores, diseñadores y el product owner (el cliente). La programación extrema (XP) es el enfoque más utilizado del desarrollo de software ágil. Aunque las primeras actividades con las ideas y los métodos asociados a XP ocurrieron al final de la década de 1980 Una variante de XP llamada XP industrial [IXP] se propuso en una época más reciente. IXP mejora la XP y tiene como objetivo el proceso ágil para ser usado específicamente en organizaciones grandes.
1

Por su parte, Scrum es un método de desarrollo ágil de software concebido por Jeff Sutherland y su equipo de desarrollo a principios de la década de 1990. Los principios Scrum son congruentes con el manifiesto ágil y se utilizan para guiar actividades de desarrollo dentro de un proceso de análisis que incorpora las siguientes actividades estructurales: requerimientos, análisis, diseño, evolución y entrega. Dentro de cada actividad estructural, las tareas del trabajo ocurren con un patrón del proceso llamado sprint. El trabajo realizado dentro de un sprint (el número de éstos que requiere cada actividad estructural variará en función de la complejidad y tamaño del producto) se adapta al problema en cuestión y se define y con frecuencia se modifica en tiempo real por parte del equipo Scrum. Scrum acentúa el uso de un conjunto de patrones de proceso del software que han demostrado ser eficaces para proyectos con plazos de entrega muy apretados, requerimientos cambiantes y negocios críticos. Cada uno de estos patrones de proceso define un grupo de acciones de desarrollo.

7

La programación extrema XP es una de las más utilizadas por los desarrolladores agiles, esta define un conjunto de valores que debe tener el equipo: Comunicación, sin no existe no se podrán definir los requerimientos de software lo que lleva a elaborar un producto que no sea quizás lo que el cliente esperaba. Simplicidad, es impórtate resolver los requerimientos primero antes de agregar cualquier funcionabilidad extra. Retroalimentación, a medida que el proyecto avanza el equipo aprende y puede reutilizar los recursos (por recursos me refiero al software ya desarrollado) para las nuevas funcionalidades. Valentía, estar preparado para los cambios que se den en cualquier etapa del proyecto así incluyan un cambio total de los requerimientos. Respeto, es lo más importante en cualquier equipo. La metodología de desarrollo agil Scrum define un conjunto de acciones de desarrollo para la elaboración del proyecto: retraso, sprint, demostraciones preliminares y reuniones srum, cada una de estas se realizan en cada iteración que sería la presentación de un nuevo incremento de software.



domingo, 12 de febrero de 2017

Ensayo de Métodos Ágiles de Programación

Ensayo de Métodos Ágiles de Programación

El desarrollo de software no es una tarea fácil. Prueba de ello es que existen numerosas propuestas metodológicas que inciden en distintas dimensiones del proceso de desarrollo. Por una parte tenemos aquellas propuestas más tradicionales que se centran especialmente en el control del proceso, estableciendo rigurosamente las actividades involucradas, los artefactos que se deben producir, y las herramientas y notaciones que se usarán. Estas propuestas han demostrado ser efectivas y necesarias en un gran número de proyectos, pero también han presentado problemas en otros muchos. Una posible mejora es incluir en los procesos de desarrollo más actividades, más artefactos y más restricciones, basándose en los puntos débiles detectados. Sin embargo, el resultado final sería un proceso de desarrollo más complejo que puede incluso limitar la propia habilidad del equipo para llevar a cabo el proyecto. Otra aproximación es centrarse en otras dimensiones, como por ejemplo el factor humano o el producto software. Esta es la filosofía de las metodologías ágiles, las cuales dan mayor valor al individuo, a la colaboración con el cliente y al desarrollo incremental del software con iteraciones muy cortas.

Las metodologías ágiles son sin duda uno de los temas recientes en ingeniería de software que están acaparando gran interés. La curiosidad que siente la mayor parte de ingenieros de software, profesores, e incluso alumnos, sobre las metodologías ágiles hace prever una fuerte proyección industrial. Por un lado, 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 su introducción e inversión asociada en formación y herramientas. Por otro, las características de los proyectos para los cuales las metodologías ágiles han sido especialmente pensadas se ajustan a un amplio rango de proyectos industriales de desarrollo de software; aquellos en los cuales los equipos de desarrollo son pequeños, con plazos reducidos, requisitos volátiles, y/o basados en nuevas tecnologías.

El metodo que acutalmente mas se usa es XP (Programación Extrema por sus siglas en ingles), la cual es una metodología ágil centrada en potenciar las relaciones interpersonales como clave para el éxito en desarrollo de software, promoviendo el trabajo en equipo, preocupándose por el aprendizaje de los desarrolladores, y propiciando un buen clima de trabajo. XP se basa en realimentación continua entre el cliente y el equipo de desarrollo, comunicación fluida entre todos los participantes, simplicidad en las soluciones implementadas y coraje para enfrentar los cambios. XP se define como especialmente adecuada para proyectos con requisitos imprecisos y muy cambiantes, y donde existe un alto riesgo técnico. 

Tambien existen otras como SCRUM, cuyas principales características se pueden resumir en dos. El desarrollo de software se realiza mediante iteraciones, denominadas sprints, con una duración de 30 días. El resultado de cada sprint es un incremento ejecutable que se muestra al cliente. La segunda característica importante son las reuniones a lo largo proyecto. Éstas son las verdaderas protagonistas, especialmente la reunión diaria de 15 minutos del equipo de desarrollo para coordinación e integración. 

Como conclusión diría que no existe una metodología universal para hacer frente con éxito a cualquier proyecto de desarrollo de software. Toda metodología debe ser adaptada al contexto del proyecto (recursos técnicos y humanos, tiempo de desarrollo, tipo de sistema, etc. Históricamente, las metodologías tradicionales han intentado abordar la mayor cantidad de situaciones de contexto del proyecto, exigiendo un esfuerzo considerable para ser adaptadas, sobre todo en proyectos pequeños y con requisitos muy cambiantes. Las metodologías ágiles ofrecen una solución casi a medida para una gran cantidad de proyectos que tienen estas características. 

Diferencias entre Ingeniería de Sistemas e Ingeniería de Software

Diferencias entre Ingeniería de Sistemas e Ingeniería de Software

Ingeniería de Sistemas
La Ingeniería de Sistemas es un campo de la ingeniería que se encarga del diseño, la programación, la implantación y el mantenimiento de sistemas. Utiliza un enfoque interdisciplinario que permite estudiar y comprender la realidad, con el propósito de implementar u optimizar sistemas complejos. La Ingeniería de Sistemas no construye productos tangibles, sino sistemas abstractos mediante el uso de metodologías de la Ciencia de Sistemas. Algunas herramientas utilizadas por la Ingeniería de Sistemas son Modelación y Simulación, Optimización, Sistemas Dinámicos, Análisis de Confiabilidad y Análisis de Decisiones.

Ingeniería de Software
La Ingeniería del Software es una disciplina o área de la Informática o Ciencias de la Computación, que ofrece métodos y técnicas para desarrollar y mantener software de calidad que resuelven problemas de todo tipo. Hoy día es cada vez más frecuente la consideración de la Ingeniería del Software como una nueva área de la ingeniería, y el ingeniero del software comienza a ser una profesión implantada en el mundo laboral internacional, con derechos, deberes y responsabilidades que cumplir, junto a una, ya, reconocida consideración social en el mundo empresarial y, por suerte, para esas personas con brillante futuro.

Diferencias 
La ingeniería de sistemas se refiere a todos los aspectos del desarrollo y de la evolución de sistemas complejos donde el software desempeña un papel principal. Por lo tanto, la ingeniería de sistemas comprende el desarrollo de hardware, políticas y procesos de diseño y distribución de sistemas, así como la ingeniería del software. Los ingenieros de sistemas están involucrados en la especificación del sistema, en la definición de su arquitectura y en la integración de las diferentes partes para crear el sistema final. Están menos relacionados con la ingeniería de los componentes del sistema (hardware, software, etc.).

La ingeniería de sistemas es más antigua que la del software. Por más de 100 años, las personas han especificado y construido sistemas industriales complejos, como aviones y plantas químicas. Sin embargo, puesto que se ha incrementado el porcentaje de software en los sistemas, las técnicas de ingeniería del software tales como el modelado de casos de uso y la gestión de la configuración se utilizan en el proceso de ingeniería de sistemas. En el Capítulo 2 se traía con mayor detalle la ingeniería de sistemas.