domingo, 26 de febrero de 2017

Análisis y Diseño del desarrollo de Software

Análisis y Diseño del desarrollo de Software
Como bien sabrá el lector un modelo de desarrollo de software es el de cascada, es utilizado frecuentemente en el ciclo de vida del software gracias a que lleva una jerarquía:
Las etapas de desarrollo son:
·         Inicio
·         Análisis
·         Diseño
·         Desarrollo
·         Pruebas
·         Puesto en Punto
·         Entrega
En este texto nos centraremos en el punto segundo y tercer punto.
Daremos una breve explicación de lo que se hace en cada una de estas etapas:
                Análisis:
                Es el proceso de recopilación de los requisitos, se enfoca especialmente en el software; Se centra en analizar las necesidades del cliente para determinar los objetivos que debe cumplir.
Formalmente cubre preguntas como:
·         ¿Qué haces?
·         ¿A qué te dedicas?
En esta etapa se usa un artefacto para enunciar o escribir los requerimientos que va a cubrir el proyecto, los requerimientos son: funcionales, no funcionales y de sistema
                Funcionales: Es lo que va a hacer el proyecto por esto mismo es súper importante preguntar en este punto al cliente ¿Cómo hace el proceso de negocio?, ¿Qué es lo que hace
                No Funcional: Característica inherente del sistema, para hacer un requerimiento no funcional es necesario que se ponga una métrica, y un valor esperado.
                Sistema: En esta sección se pone todo lo que necesita el proyecto para funcionar, es importante decir que se necesita por parte del usuario, del software y de hardware.
Otros artefactos que se utilizan son:
·         Cronograma de actividades: Se hace una lista de las actividades y de cuánto tiempo tardaran en hacerse y las fechas en las cuales se desarrollaran.
·         Ruta crítica: Es la ruta más larga por la cual se desarrollará el proyecto.
·         Diagrama de casos de Uso: Es un documento con los requerimientos funcionales del proyecto poniendo lo que va a hacer el usuario en diferentes escenarios.


                Diseño del Sistema:
                Esta etapa tiene una vital importancia en el desarrollo de software ya que descompone y organiza el sistema en elementos que pueden elaborarse por separado.
Un artefacto muy útil en esta etapa es: Documento de Diseño de Software:
Este documento contiene la descripción de la estructura relacional global del sistema y la especificación de lo que debe hacer cada una de sus partes.
Bibliografía:
Desarrollo en cascada. (2017).  https://es.wikipedia.org/wiki/Desarrollo_en_cascada#Dise.C3.B1o_del_sistema
Proceso para el desarrollo de software. https://es.wikipedia.org/wiki/Proceso_para_el_desarrollo_de_software#Implementaci.C3.B3n.2C_pruebas_y_documentaci.C3.B3n


XP VS SCRUM

SCRUM VS XP
En este texto veremos dos métodos agiles de programación: XP y SCRUM. Veremos la definición y las características de cada uno, los roles (función de cada persona en el equipo), artefactos (documentos), y una tabla comparativa entre los dos.
Definición: Se dará una corta definición de cada proceso para darle al lector una idea general de cada método
·         XP: Es una metodología agil centrada en potenciar las relaciones interpersonales como la clave para el éxito en desarrollo de software, promoviendo el trabajo en equipo. Se basa en la realimentación continua entre el cliente y el equipo de desarrollo de software.
·         SCRUM: Es un método ágil que nos permite centrarnos en ofrecer el más alto valor de negocio en el menor tiempo. Se podría decir que el objetivo principal es maximizar las ganancias que inversión de la empresa.
Características: En esta sección se pondrán características de ambos métodos
·         XP: Hay requisitos imprecisos y muy cambiantes, y existe  un alto riesgo técnico.
·         SCRUM: Equipo Auto-Organizado; El producto avanza en una serie de Sprints de dos semanas a un mes de duración; Los requisitos  son capturados como elementos de una lista de “Product Backlog”; No hay prácticas de ingeniería prescritas.
Roles: Esta sección es de suma importancia puesto que se verá los roles en cada método y que hace cada rol en el proyecto
-XP:
·         Cliente: Escribe las historias de usuario y las pruebas funcionales para validar su implementación. Además asigna la prioridad a las historias de usuario.
·         Tester: Ayuda al cliente a escribir las pruebas funcionales. Ejecuta las pruebas regularmente y difunde los resultados en el equipo.
·         Encargado de Seguimiento (Tracker): Proporciona realimentación al equipo. Verifica el grado de acierto entre las estimaciones realizadas en tiempo real dedicado para mejorar en  un futuro.
·         Entrenador (Coach): Es responsable del proceso global. Debe proveer guías el equipo de forma que se apliquen las practicas XP.
·         Consultor: Es un miembro externo del equipo con un conocimiento específico en algún tema necesario para el proyecto.
·         Gestor (Big Boss): Es el vínculo entre los clientes y los programadores.
-SRUM:
·         Product Owner: Es el responsable por la rentabilidad del producto, es el cliente del proyecto.
·         ScrumMaster: Es un experto de Scrum, sea segura que el equipo siga la teoría de Scrum, las prácticas y las reglas. Encuentra  técnicas para hacer efectivo el productBacklog. Remueve impedimentos, esto quiere decir que es el escudo del equipo de interferencias externas.
·         Team:   Es un equipo multifuncional esto quiere decir que los miembros deben ser capaces de ejecutar varias tareas, muchas son compartidas con el método de arriba , los miembros deben ser full-time.
·         StakeHolder: Conjunto de personas que no forman parte del proyecto, pero que pueden ser beneficiados con el mismo.
Artefactos: En este apartado se verán los documentos que ayudan al proceso de cada método.
                -XP:
·         Historias de Usuario: Son el documento que se utiliza para especificar los resultados del software. Se trata de tarjetas de papel en las cuales el cliente describe brevemente las características que el sistema debe poseer. Este documento es dinámico y flexible.
·         Tareas de Ingeniería
·         Pruebas de Aceptación
·         Pruebas Unitarias y de Integración
·         Plan de Entrega
·         Código
-SCRUM:
·         ProductBacklog: Lista de requisitos de usuario
·         SprintBacklog: Se decide cómo alcanzar el objetivo del sprint, Se hace una lista de las tareas, que es el documento, estas tareas tiene que estar basadas en los temas del product.
·         BurndownCharts: Es una representación gráfica de los pendientes que se tiene.
Proceso: En esta sección se ve cómo trabaja cada método y la logística que los rige.
                -XP: En XP el proceso esta dado por 6 pasos
·          El cliente define el proceso de negocio que se va a llevar a cabo para realizar el proyecto
·         El programador estima el esfuerzo necesario para su implementación.
·         El cliente selecciona qué construir, de acuerdo con sus prioridades y las restricciones de tiempo.
·         El programador construye ese valor de negocio.
·         Vuelve al paso 1.
-SCRUM:
·         Sprint Planning: Reunión durante la cual  el Product Owner presenta las historias del backlog por orden de prioridad, donde el equipo determina la cantidad de historias que puede comprometerse a completar en ese sprint, para luego, decidir y organizar cómo se va a lograr.
·           Sprint: Iteración de con un limite de tiempo, donde la iteración es entregada en un sistema operativo nuevo.
·           Daily sprint meeting: Reunión diaria de cómo máximo 15 min. en la que el equipo comenta que hizo el día anterior, que hará hoy y si hay impedimentos.
·           Demo y retrospectiva: Reunión que se hace después de cada sprint para comentar como mejorar lo hecho o perfeccionarlo.
XP
SCRUM
Las iteraciones de entrega son de una a tres semanas
Las iteraciones de entrega son de 2 a 4 semanas y se conocen como sprint
Las tareas que se van terminando en las diferentes entregas son susceptibles a modificaciones durante el transcurso de todo el proyecto.
Al finalizar un sprint, las tareas que se han realizado ya no se vuelven a tocar en ningún momento.
El equipo de desarrollo sigue estrictamente el orden de prioridad de tareas definido por el cliente
El Scrum Team trata de seguir el orden prioridad que marca el product Owner en el sprintBacklog
Se centra más en la propia programación o creación del producto.
Esta más enfocado en la administración de un proyecto.
Trabajan en parejas
Los miembros trabajan individualmente

Conclusión: No se puede decir cuál es mejor o cual es peor, todo depende de la situación y del proyecto que se va a desarrollar, como pudimos ver, SCRUM es un proceso ágil, mientras que XP es una metodología por lo tanto no se puede hacer una preferencia, son cosas muy distintas en muchos aspectos, aunque como se puede observar también tienen cosas en común, ambas siguen el documento de método ágil.
Bibliografía:
Ernesto Grafeuille. (2008). Introducción a Scrum
Métodologías Ágiles en el Desarrollo de Software;José H. Canós, Patricio Letelier y Ma Carmen Penadés;DSIC -Universidad Politécnica de Valencia;Camino de Vera s/n, 46022 Valencia
 Que es Scrum. 2015, de proyectosagiles Sitio web: https://proyectosagiles.org/que-es-scrum/


domingo, 12 de febrero de 2017

Métodos Ágiles de Programación



Por lo general cuando se habla de método se habla de un conjunto de herramientas y tecnicas para llevar a cabo una tarea o un objetivo seleccionado.
El software no se salva de los métodos, y es por eso que hay un sin fin de ellos para desarrollar programas, a esta metodología de desarrollo en donde se sigue una serie de pasos se le conoce como ciclo de vida del Software.

Muchos desarrolladores de software han buscado la mejor metodología para el desarrollo de los mismos, sin embargo no se puede decir cual es el mejor depende de la situación y de un sin fin de factores externos al software.
A continuación tocaremos algunos de ellos, sin embargo nos enfocaremos en el método ágil que posteriormente tocaremos más a fondo a lo largo de el artículo.

Modelo Iterativo e incremental:  Este modelo Ambos rompen el ciclo de desarrollo y repiten el modelo waterfall en cada una de las partes en que lo divide.
Estos modelos buscan reducir el tiempo de desarrollo.
Modelo Secuencial:Este es uno de los métodos más conocidos, también se le llama modelo de cascada o Waterfall. Se inicia con un amplio análisis de los requerimientos del cliente.
Modelo Espiral:Comprende las mejores características de ciclo de vida clásico y el prototipado 


Vistos estos modelos entraremos de lleno en el método Ágil, usaremos el siguiente mapa conceptual para describir de donde surge, por que surge, y las características de este modelo




Como se puede ver empezó por la necesidad de otro enfoque en el desarrollo de software y fue por que en la crisis de software había una gran cantidad de documentación necesario para llevar a cabo los proyectos, a pesar de que si era necesario, los desarrolladores mostraron cierta incomodidad a este modelo, por lo que se busco un cambio.
Este nuevo modelo se inicio en Febrero de 2001 por "The Agile Allience" en Utah-Estados Unidos. En esta reunión se juntaron 17 expertos de la industria del software.
La filosofía del método ágil es buscar desarrollar el software de manera cambiante para complacer al cliente en la medida que se va desarrollando el mismo.
Por esta razón el cliente forma parte del equipo y el software puede cambiar constantemente con el fin de moldear las ideas del cliente. Este proceso se realiza con a mayor simplicidad posible.
Es importante decir que este metodo se usa normalmente en proyectos pequeños en donde el equipo es de maximo 20 programadores, y se busca que trabajen en pareja, es de vital importancia que el grupo este motivado.

Dicho esto pasamos a colocar los 12 puntos que The Agile Allience publico en su manifiesto ágil:
I. La prioridad es satisfacer al cliente mediante tempranas y continuas entregas de
software que le aporte un valor.
II. Dar la bienvenida a los cambios. Se capturan los cambios para que el cliente tenga una
ventaja competitiva.
III. Entregar frecuentemente software que funcione desde un par de semanas a un par de
meses, con el menor intervalo de tiempo posible entre entregas.
IV. La gente del negocio y los desarrolladores deben trabajar juntos a lo largo del proyecto.
V. Construir el proyecto en torno a individuos motivados. Darles el entorno y el apoyo que
necesitan y confiar en ellos para conseguir finalizar el trabajo.
VI. El diálogo cara a cara es el método más eficiente y efectivo para comunicar información
dentro de un equipo de desarrollo.
VII. El software que funciona es la medida principal de progreso.
VIII. Los procesos ágiles promueven un desarrollo sostenible. Los promotores,
desarrolladores y usuarios deberían ser capaces de mantener una paz constante.
IX. La atención continua a la calidad técnica y al buen diseño mejora la agilidad.
X. La simplicidad es esencial.
XI. Las mejores arquitecturas, requisitos y diseños surgen de los equipos organizados por sí
mismos.
XII. En intervalos regulares, el equipo reflexiona respecto a cómo llegar a ser más efectivo, y
según esto ajusta su comportamiento.

Estos puntos si se observan detalladamente es lo que se describió previamente
Como se puede observar en el mapa hay varios métodos ágiles, aqui solo los mencionaremos:
-XP
-Crystal
-Scrum

Evaluación

1.  Los métodos ágiles se utilizan en:
a)  Programación Orientada a Objetos
b)  Desarrollo de software
c)  Soporte de Software
d)  Programación estructurada
e)  Calidad de Software
2.  ¿Qué modelo de desarrollo de software utilizan los métodos ágiles?
a)  Cascada
b)  Lineal
c)  Iterativo
d)  Espiral
e)  Evolutivo

3.  ¿Cuáles son las principales características en las que se basa el método ágil?
a)  Trabajo en equipo, adaptable, avances funcionales
b)  Satisfacción del cliente, reduce tiempo, una sola entrega final.
c)  Comunicación, no se adapta a los cambios, no es interactivo.
d)  Orientado a resultados, no hay comunicación, no hay trabajo en equipo

4.  ¿Cuáles son las características que  diferencian al método ágil del convencional?
a)  El cliente participa en el equipo de desarrollo
b)  Trabajo en equipo
c)  Satisfacción del cliente
d)  Presenta avances incrementales del proyecto al cliente
e)  Adaptable en cualquier etapa del proyecto

5.  En los métodos ágiles el cliente:
a)  Desarrolla Software
b)  Se incorpora al equipo de trabajo
c)  Trabaja en otros proyectos de software
d)  Resuelve problemas de comunicación del equipo
e)  Proporciona los recursos materiales

Conclusión: 
Para llevar a cabo el cliclo de vida de desarrollo de software hay varios métodos sin embargo todo depende de la circunstancia,de la magnitud del proyecto, del tiempo, entre otros factores.
El método ágil busca cambiar muchas cosas del método clásico o tradicional, adaptandose a las necesidades que se van presentado, otro punto importantes es que en ocasiones el aplicar método ágil, nadie garantiza que será más rápido por lo que hay que tener mucho cuidado en esto
Bibliografía:
-Jose Carlos Carvajal Riola. (Septiembre 2008). METODOLOGÍAS ÁGILES: HERRAMIENTAS Y MODELO DE DESARROLLO PARA APLICACIONES JAVA EE COMO METODOLOGÍA EMPRESARIAL. España
José H. Canós, Patricio Letelier y Mª Carmen Penadés. (2000). Métodologías Ágiles en el Desarrollo de Software. 8.


Ingeniería de Software e Ingeniería de Sistemas

Antes de entrar en un cuadro comparativo es bueno definir ambas ramas de la Ingeniería, por lo tanto empezaremos definiendo cada una.
De acuerdo con la Universidad Autónoma de México la Ingeniería en Sistemas se define como: "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."

Procedemos a definir a la Ingeniería en Software.
Ingeniería en Software de acuerdo de B. Boehm: La Ingeniería del Software incluye la aplicación práctica del conocimiento científico en el diseño y construcción de los programas y la documentación requerida para su desarrollo, operación y mantenimiento.

Viendo estas definiciones podemos ver entonces que la Ingeniería en Sistemas es el conjunto de métodos cientificos que busca implementar diferentes mecanismos para la resolución de un problema de la humanidad.

Y la Ingeniería en Software da pie a la creación de programas para resolver una problemática de algún cliente.

Diferencias:

Ingeniería de Sistemas
Ingeniería en Software
Áreas del conocimiento
Muy variado
Software y documentación
Brinda
Productos, servicios y mecanismos
Programas
Satisface
Necesidades de la humanidad
A un cliente
Aceptación al cambio
No hay cambios
Hay varios cambios
Retroalimentación
No hay retroalimentación
Si la hay
Necesidad del ser humano
Solo ayuda en el proceso, busca generalmente la automatización
Es estrictamente necesario en el proceso


Bibliografía:
-Universidad Autónoma de México. Ingeniería en Sistemas. , de Universidad Autónoma de México Sitio web: http://www.iingen.unam.mx/es-mx/Investigacion/Especialidad/Paginas/IngenieriaDeSistemas.aspx
-Barry W. Boehm . (1976). Software Engineering .  de UAL Sitio web: http://csse.usc.edu/TECHRPTS/1976/usccse76-500/usccse76-500.pdf