domingo, 26 de febrero de 2017

ETAPAS DEL CICLO DE VIDA DEL SOFTWARE

El ciclo de vida del software incluye varias etapas las cuales son  
  1. Inicio o Planeación
  2. Análisis
  3. Diseño 
  4. Desarrollo
  5. Pruebas
  6. Puesta en punto
  7. Entrega

Pero nos enfocaremos solo a 2, las cuales van a ser Inicio o Planeación y a la etapa de Análisis.

En la etapa de Inicio empiezan por definirse las actividades que va a hacer cada persona así como el tiempo estimado que se tiene para la realización de esa actividad, los costos, los posibles caminos a tomar, entre otras cosas. Para eso se elaboran los siguientes documentos que se explicaran a continuación:

Documento
Responsable
Descripción
Cronograma de Actividades
Administrador/Gerente del Proyecto
En este documento se definen las actividades que se van a realizar, indicando la fecha de inicio y fin, así como el responsable de realizar dicha actividad además de que permite realizar un seguimiento al progreso del proyecto
Ruta Crítica
Administrador/Gerente del Proyecto
Es un proceso administrativo (planeación, organización, dirección y control) por el que se muestran todas  y cada una de las actividades componentes de un proyecto que se deben desarrollarse durante un tiempo crítico y al costo óptimo.
Gantt
Administrador/Gerente del Proyecto
Es una herramienta que le permite al usuario modelar la planificación de las tareas necesarias para la realización de un proyecto.
A diferencia del cronograma de actividades en este documento se puede representar de manera gráfica el progreso del proyecto y ver que tareas faltan por realizar  


Por su parte en la etapa de Análisis primeramente se debe preguntar a la empresa cual es el proceso de negocio, ¿como hacen las cosas?, claro que si no lo obtenemos pues tendremos que definirlo nosotros mismos. Después en base al proceso de negocio empieza por elaborarse el documento de requerimientos que es donde se describirán las funciones que tendrá el sistema así como establecer las restricciones que se puedan aplicar.


Documento
Responsable
Descripción
Documento de Requerimientos
Analista  de requerimientos
Se describen las funcionalidades que va a tener el proyecto pero estas se dividen en tres apartados

  •  Funcionales: Se refiere a lo que hará el sistema, como va a funcionar cada modulo
  • No funcionales: Son las características Inherentes al sistema, es decir, son esenciales pero dependerá de cada proyecto. Se resumen en tres palabras Definición- métrica-compromisos
  • De Sistema: Aquí se definen las características que debe tener el hardware y software para que funcione el sistema, especificando para el cliente, servidor y Móvil.   
Casos de Uso
Analista  de Requerimientos
Es una descripción de los pasos o las actividades que deberán realizarse para llevar a cabo algún proceso. Los personajes o entidades que participarán en un caso de uso se denominan actores.
 En base a eso se hace la especificación de casos de uso que son las posibles funciones que puede tener el sistema según navegue el usuario.

“Ruta Crítica” extraído el 25 de Febrero 2017 desde la fuente: https://erods.files.wordpress.com/2012/02/ruta-critica.pdf

“El cronograma de actividades: herramienta clave en project management” extraído el 25 de Febrero 2017 desde la fuente: http://www.obs-edu.com/int/blog-project-management/herramientas-esenciales-de-un-project-manager/el-cronograma-de-actividades-herramienta-clave-en-project-management

“Diagrama de GANTT” extraído el 25 de Febrero 2017 desde la fuente: http://es.ccm.net/contents/580-diagrama-de-gantt

“Caso de Uso” extraído el 25 de Febrero 2017 desde la fuente: https://es.wikipedia.org/wiki/Caso_de_uso

¿XP (Extreme Programming) VS SCRUM?



Metodologías ágiles
Las metodologías ágiles son una serie de técnicas, herramientas y procedimientos  en el desarrollo de software, las cuales surgieron como respuesta para los desarrolladores de software que buscaban implementar nuevos sistemas de información así como para los negocios pequeños los cuales tenían problema al usar las metodologías tradicionales pues terminaban centrándose más en la documentación que en la propia construcción del software.
Existen varias metodologías ágiles pero hablaremos principalmente de 2:

¿XP (Extreme Programming) VS SCRUM?

Extreme Programming (XP) ó Programación Extrema:
Se centra en las relaciones interpersonales como el éxito en el desarrollo de software. Se basa en la realimentación continua entre el cliente y el equipo de desarrollo, comunicación fluida entre todos los participantes, que se entreguen trabajos de calidad, la simplicidad en las soluciones que se estén implementando  así como la aceptación del cambio.
Principalmente se preocupa por la entrega de software en lapsos de tiempo menores y con reducidos costos pero incluyendo una buena calidad dejando de lado la exhaustiva  definición de requerimientos así como la producción de una extensa documentación.
Algunas de las prácticas de XP son:
  • Juego de la planificación
  • Pequeñas entregas
  • Diseño simple
  • Pruebas
  • Programación por parejas
  • Integración continua
  • Estándares de codificación
  • Propiedad colectiva




ROLES
DESCRIPCIÓN
Cliente
Se encarga de escribir las historias de Usuario y las pruebas funcionales para validar su implementación
Programador
Escribe las pruebas unitarias y produce el código del sistema.
Encargado de Pruebas (TESTER)
Ayuda a escribir las pruebas funcionales, ejecuta las pruebas y se encarga de dar a conocer los resultados a los demás miembros del equipo.
Encargado de seguimiento (Tracker)
Da realimentación al equipo además de que lleva un seguimiento de cada iteración que se hace
Entrenador (COACH)
O Tutor
Es responsable del equipo y verifica que se apliquen las prácticas de XP
Ayuda en todo
Gestor(BIG BOSS)
Se encarga de coordinar de modo que entre el cliente y el equipo trabajen de forma adecuada
ARTEFACTOS
DESCRIPCIÓN
Historias de Usuarios
Breve descripción del comportamiento del sistema. Se realiza una por cada funcionalidad que se quiera.
Tareas de Ingeniería
Describe las actividades o tareas que realizara un programador conforme a las historias de Usuario. Se debe incluir el nombre y el número de historia a la que pertenece, los puntos a realizar para terminar la tarea, el nombre del responsable, fechas, etc.
Tarjetas CRC
Clase-Responsabilidad-Colaborador
Es una representación en tarjetas de cartón o de papel en donde se muestra el nombre de las clases, los métodos de esta y el nombre de las clases con las que colabora.







PROCESO:



SCRUM
Desarrollada por Ken Schwaber, Jeff Sutherland y Mike Beedle. Esta especialmente diseñada para proyectos con requisitos que suelen cambiarse de manera rápida. Se caracteriza por realizar el desarrollo de software mediante iteraciones denominadas sprints así como las reuniones a lo largo del proyecto para la coordinación e integración del trabajo.
También se utiliza cuando no se entrega al cliente lo que necesita en tiempo y forma así como cuando los costes se disparan o la calidad no es la que se esperaba


ROLES
DESCRIPCIÓN
Cliente (Product Owner)

Define las funcionalidades del proyecto así como las ordena en orden de importancia junto con cada iteración
Facilitador (Scrum Master)

Representa la gestión del proyecto además de que se encarga de vigilar que el equipo trabaje de forma productiva así como la existencia de la cooperación entre todos los roles
Equipo (Team)
Típicamente de 5 a 9 personas, deben ser auto-organizados y solo puede existir un cambio de  miembros entre los sprints.
ARTEFACTOS
DESCRIPCIÓN
Lista de requisitos priorizada (Product Backlog)

Una lista de todos los trabajos que se deseen en el proyecto, esta es priorizada por el product owner.
Lista de tareas de la iteración (Sprint Backlog)
Es la lista de tareas que el equipo hace en las reuniones para la p0lanificaciópn de cada iteración con el objetivo de completar los requisitos seleccionados para la iteración.
La lista permite ver las tareas en donde se esta teniendo problemas.


Gráficos de trabajo pendiente (Burndown Chart)
Muestra la velocidad a la que se está completando los objetivos/requisitos. Y así estimar si el Equipo podrá completar el trabajo en el tiempo requerido, si se quitan requerimientos o se necesita otro equipo.









PROCESO





Actividades:    
  • Planificación de la iteración (Sprint Planning) El equipo selecciona los temas a partir del Product Backlog que pueden comprometerse a completar y Se crea el Sprint Backlog
  • Ejecución de la iteración (Sprint)
  • Reunión diaria de sincronización del equipo (Scrum Daily Meeting) Reunión Diaria entre el equipo que dura aproximadamente 15 minutos con el fin de coordinar.
  • Demostración de los requisitos completados (Sprint Review) Se presenta lo que se ha realizado durante el sprint
  • Retrospectiva (Sprint Retrospective) Participa todo el equipo y se revisa lo que funciona o no, dura normalmente de 15 a 30 minutos
  • Refinamiento de la lista de requisitos y cambios en el proyecto



Programación Extrema XP
Scrum
Roles
  •         Cliente
  •         Programador
  •         Encargado de Pruebas (TESTER)
  •         Encargado de seguimiento (Tracker)
  •         Entrenador (COACH) o Tutor
  •         Gestor(BIG BOSS)

  • Cliente (Product Owner) 
  • Facilitador (Scrum Master)
  • Equipo (Team)
Artefactos
  • Historias de Usuarios
  • Tareas de Ingeniería
  • Tarjetas CRC
  • Clase-Responsabilidad-Colaborador

  • Lista de requisitos priorizada (Product Backlog) 
  • Lista de tareas de la iteración (Sprint Backlog) 
  • Gráficos de trabajo pendiente (Burndown Chart)



Programación por parejas
Programación Individual

Creación del Producto, programación.
Se basa más en la administración del Producto

Pruebas
Funcionalidad







Conociendo los aspecto más importantes tanto de la programación extrema como de Scrum podemos concluir que Scrum es más formal puesto que  se va haciendo la documentación para definir los requerimientos de modo que se puedan ir elaborando los sprint  y se centra más en la funcionalidad del sistema, va más orientado a lo que viene siendo la administración del proyecto además de que durante el proceso aunque se tata de seguir el orden de las iteraciones según como las priorizó el Product owner, si el equipo de trabajo se da cuenta que es mejor modificar el orden lo harán para avanzar en el proyecto   mientras que en XP se enfoca más en las pruebas sobre el programa para así ver que es lo que falta, si funciona como se esperaba, se orienta más a la creación del producto y sigue estrictamente el orden que haya elegido el cliente, pues él es el que manda.
Otra diferencia es que en Scrum los miembros del equipo trabajan individualmente mientras que en XP se trabaja la programación por parejas pero aun así la metodología que se use dependerá del proyecto que se esté trabajando pues se tiene que establecer la metodología que se adecue más.


“¿Qué es Scrum?” extraído el 25 de Febrero de 2017 desde la fuente https://proyectosagiles.org/que-es-scrum/

Espinoza, S. (2007) Ingeniería de Software. Programación Extrema [Diapositivas PowerPoint]  Febrero 24, 2017 Sitio Web: https://es.slideshare.net/edgarespinoza/programacion-extrema

Grafeuille, E. (2008) Una Introducción a Scrum [Diapositivas PowerPoint] Febrero 25, 2017 Sitio Web: https://www.mountaingoatsoftware.com/.../Spanish-Redistributable-Intro-Scrum.ppt


Letelier, P., Sánchez,E.. (2003). Metodologías Ágiles en el Desarrollo de Software. [PDF File] Febrero 25, 2017, de Grupo ISSI Sitio web: http://issi.dsic.upv.es/archives/f-1069167248521/actas.pdf

domingo, 12 de febrero de 2017

TAREA 1 INGENIERÍA DE SOFTWARE BÁSICA

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


Ingeniería: Conjunto de conocimientos científicos y tecnológicos para la innovación, invención, desarrollo y mejora de técnicas y herramientas para satisfacer las necesidades de la empresa y la sociedad.

Ingeniería de sistemas:
Disciplina que se encarga de estudiar el diseño, programación y mantenimiento de sistemas, mnediante herramientas y tecnicas para producir una solución

Ingeniería de Software: Se encarga del analisis del proyecto para realizar el diseño, implementación y demas cosas, en conjunto tambien abarca el ciclo de vida del software, todo esto para desarrollar un sistema de forma adecuada.


INGENIERÍA DE SISTEMAS

INGENIERÍA DE SOFTWARE
Área de conocimiento variadas
Se enfoca en el software
Elabora un producto servicio
Programas
Satisface necesidades de producción
Satisface a un cliente
No hay cambios
Permite cambios
No existe retroalimentación de procesos
Permite La retroalimentación de procesos
Puede carecer de ayuda humana
Es necesario el humano
Área interdisciplinaria
Área de la computación
Producto
Diseño, Análisis, implementación del producto

Puede ser una parte de la ingeniería de Sistemas



Villalobos, N.. (2011). DIFERENCIAS CONCEPTUALES ENTRE ING. DE SOFTWARE, ING. DESISTEMAS, ING. INFORMÁTICA Y CIENCIAS DE LA COMPUTACIÓN. Febrero 11, 2017, de Universidad Latina Sitio web: https://es.scribd.com/doc/65205727/Diferencias-Conceptuales-Entre-Ingenieria-de-Software-Ingenieria-de-Sistemas-Ingenieria-Informatica-y-Ciencias-de-la-Computacion

Sitio Web: http://www.uniempresarial.edu.co/blog/diferencia-entre-ingenieria-de-software-y-la-ingenieria-de-sistemas/
Sitio Web: http://www.vc.ehu.es/jiwotvim/IngenieriaSoftware/Teoria/BloqueI/Transp-01IngSw-Pressman.pdf


TAREA 1 MÉTODOS ÁGILES DE PROGRAMACIÓN

Una metodología es una colección de procedimientos, técnicas, herramientas y documentos auxiliares que ayudan a los desarrolladores de software en sus esfuerzos por implementar nuevos sistemas de información, ademas de que la metodología se basa en una filosofía 

En los años 80 y principios de los 90 se tenia un proceso de desarrollo de software el cual mediante una rigurosa definición de roles, actividades y una planificación cuidadosa del proyecto se garantizaba la calidad de este así como el buen funcionamiento, Este proceso demostró ser efectivo y necesario en proyectos de gran tamaño (respecto a tiempo y recursos), sin embargo, cuando se trato de aplicar a sistemas de negocios pequeños y de tamaño medio, el proceso no resultaba óptimo, pues se ocupaba mas tiempo en hacer la documentación que en la realización del software. Por esta razón las metodologías ágiles se hicieron presentes, pues estaban orientadas principalmente para proyectos pequeños.

En febrero de 2001 en una reunión celebrada en Utah-EEUU, nace el término ágil aplicado al desarrollo de software. El objetivo de esta reunión fue  esbozar los valores y principios que deberían permitir a los equipos desarrollar software rápidamente y respondiendo a los cambios que puedan surgir a lo largo del proyecto.

Tras esta reunión se creo la organización The Agile Alliance, la cual partió del Manifiesto Ágil 
que se resume en:

  • Valorar las interacciones del equipo de desarrollo y el cliente  sobre el proceso de desarrollo. Es importante tener un buen equipo de trabajo.
  • Valora el desarrollo un software funcional más que conseguir una buena documentación. La regla a seguir es “no producir documentos a menos que sean necesarios de forma inmediata"
  • Se propone que exista una interacción constante entre el cliente y el equipo de desarrollo.
  • Responder a los cambios que puedan surgir a lo largo del proyecto. La planificación de este debe ser flexible y abierta.                                                             


El manifiesto ágil también cuenta con 12 principios los cuales son: 
  1. La prioridad es satisfacer al cliente .
  2.  Dar la bienvenida a los cambios. 
  3. Entregar frecuentemente software que funcione desde un par de semanas a un par de meses.
  4.  La gente del negocio y los desarrolladores deben trabajar juntos a lo largo del proyecto.
  5. Construir el proyecto en torno a individuos motivados. 
  6. Diálogo cara a cara.
  7. Tener un software funcional.
  8.  Los promotores, desarrolladores y usuarios deberían ser capaces de mantener una paz constante.
  9.  La atención continua a la calidad técnica y al buen diseño. 
  10. Simplicidad.
  11. Tener un equipo organizado por si mismo.
  12. En intervalos regulares, el equipo descubre la manera de ser más efectivo, y según esto ajusta su comportamiento para la culminación del proyecto.
Con todo esto podríamos decir que una metodología de desarrollo de software ágil es 
un conjunto de técnicas para la gestión de proyectos los cuales incluyen mejoras continuas, se realiza de forma colaborativa y con la mayor simplicidad posible.
No se basa tanto en la arquitectura del software.

Finalmente sin importar la metodología que se use se debe tomar en cuenta el contexto del proyecto 
(tiempo de desarrollo, tipo de sistema, recursos técnicos, etc.) 



Algunos nombres de las metodologías ágiles mas usadas son:
  • SCRUM: Indicada para proyectos con un rápido cambio de requisitos. Sus principales características son  las  iteraciones, denominadas sprints, con una duración de 30 días y  las reuniones a lo largo proyecto, entre ellas destaca la reunión diaria  del equipo de desarrollo para coordinación e integración.
  • Crystal Methodologies: Conjunto de metodologías para el desarrollo de software caracterizadas por estar centradas en las personas que componen el equipo y la reducción al máximo del número de artefactos producidos.
  • Dynamic Systems Development Method (DSDM):  Sus principales características son: es un proceso iterativo e incremental y el equipo de desarrollo y el usuario trabajan juntos. Propone cinco fases: estudio viabilidad, estudio del negocio, modelado funcional, diseño y construcción, y finalmente implementación.
  • Adaptive Software Development (ASD): Sus principales características son: iterativo, orientado a los componentes software más que a las tareas y tolerante a los cambios. El ciclo de vida que propone tiene tres fases esenciales: especulación, colaboración y aprendizaje. 
  • Feature -Driven Development (FDD): Define un proceso iterativo que consta de 5 pasos.  Las iteraciones son cortas (hasta 2 semanas). Se centra en las fases de diseño e implementación del sistema.
  • Lean Development (LD): Los cambios se consideran riesgos, pero si se manejan adecuadamente se pueden convertir en oportunidades que mejoren la productividad del cliente.


Respuestas al Cuestionario:
  1. b
  2. a
  3. a
  4. e
  5. b






Canós, H., Letelier, P., & Penadés, Ma.. Metodologías Ágiles en el Desarrollo de Software. 
Febrero 11, 2017, de DSIC -Universidad Politécnica de Valencia Sitio web: http://www.willydev.net/descargas/prev/TodoAgil.Pdf

Carvajal, J.. (Septiembre 2008). Metodologías Ágiles. Febrero 11, 2017, de Máster en Tecnologías de la Información - UPC Sitio web: http://upcommons.upc.edu/pfc/bitstream/2099.1/5608/1/50015.pdf pg 80-89

Pérez, J.,  Guía Comparativa de Metodologías Ágiles. Febrero 11, 2017, de Universidad de Valladolid Sitio web: https://uvadoc.uva.es/bitstream/10324/1495/1/TFG-B.117.pdf