lunes, 20 de octubre de 2014

CICLO DE VIDA

CICLO DE VIDA

El ciclo de vida es el conjunto de fases por las que pasa el sistema que se está desarrollando desde que nace la idea inicial hasta que el software es retirado o remplazado (muere).

Entre las funciones que debe tener un ciclo de vida se pueden destacar:

·                    Determinar el orden de las fases del proceso de software.
·                    Establecer los criterios de transición para pasar de una fase a la siguiente.
·                    Definir las entradas y salidas de cada fase.
·                    Describir los estados por los que pasa el producto.
·                    Describir las actividades a realizar para transformar el producto.
·                    Definir un esquema que sirve como base para planificar, organizar, coordinar, desarrollar, entre otros.

Las etapas de un ciclo de vida de un software son:

Inicio: éste es el nacimiento de la idea. Aquí definimos los objetivos del proyecto y los recursos necesarios para su ejecución. Hacia dónde queremos ir, y no cómo queremos ir. Las características implícitas o explícitas de cada proyecto hacen necesaria una etapa previa destinada a obtener el objetivo por el cual se escribirán miles o cientos de miles de líneas de código. Un alto porcentaje del éxito de nuestro proyecto se definirá en estas etapas que, al igual que la etapa de debugging, muchos líderes de proyecto subestiman.

Planificación: idearemos un planeamiento detallado que guíe la gestión del proyecto, temporal y económicamente.

Implementación: acordaremos el conjunto de actividades que componen la realización del producto.

Puesta en producción: nuestro proyecto entra en la etapa de definición, allí donde se lo presentamos al cliente o usuario final, sabiendo que funciona correctamente y responde a los requerimientos solicitados en su momento. Esta etapa es muy importante no sólo por representar la aceptación o no del proyecto por parte del cliente o usuario final sino por las múltiples dificultades que suele presentar en la práctica, alargándose excesivamente y provocando costos no previstos.

Control en producción: control del producto, analizando cómo el proceso difiere o no de los requerimientos originales e iniciando las acciones correctivas si fuesen necesarias. Cuando decimos que hay que corregir el producto, hacemos referencia a pequeñas desviaciones de los requerimientos originales que puedan llegar a surgir en el ambiente productivo. Si nuestro programa no realiza la tarea para lo cual fue creada, esta etapa no es la adecuada para el rediseño. Incluimos también en esta etapa el liderazgo, documentación y capacitación, proporcionando directivas a los recursos humanos, para que hagan su trabajo en forma correcta y efectiva.

Objetivos de cada etapa:

Expresión de necesidades: Esta etapa tiene como objetivo el armado de un documento en el cual se reflejan los requerimientos y funcionalidades que ofrecerá al usuario el sistema a implementar (qué, y no cómo, se va a implementar).

Especificaciones: Formalizamos los requerimientos; el documento obtenido en la etapa anterior se tomará como punto de partida para esta etapa.

Análisis: Determinamos los elementos que intervienen en el sistema a desarrollar, su estructura, relaciones, evolución temporal, funcionalidades, tendremos una descripción clara de qué producto vamos a construir, qué funcionalidades aportará y qué comportamiento tendrá.

Diseño: Ya sabemos qué hacer, ahora tenemos que determinar cómo debemos hacerlo (¿cómo debe ser construido el sistema en cuestión?); definimos en detalle entidades y relaciones de las bases de datos, seleccionamos el lenguaje que vamos a utilizar, el Sistema Gestor de Bases de Datos, entre otros).

Construcción: Empezamos a codificar algoritmos y estructuras de datos, definidos en las etapas anteriores, en el correspondiente lenguaje de programación o para un determinado sistema gestor de bases de datos. En muchos proyectos se pasa directamente a esta etapa; son proyectos muy arriesgados que adoptan un modelo de ciclo de vida de code & fix (codificar y corregir) donde se eliminan las etapas de especificaciones, análisis y diseño con la consiguiente pérdida de control sobre la gestión del proyecto.

Debugging (Depuración): El objetivo de esta etapa es garantizar que nuestro programa no contiene errores de diseño o codificación. En esta etapa no deseamos saber si nuestro programa realiza lo que solicitó el usuario, esa tarea le corresponde a la etapa de implementación. En ésta deseamos encontrar la mayor cantidad de errores. Todas los programas contienen errores: encontrarlos es cuestión de tiempo. Lo ideal es encontrar la mayoría, si no todos, en esta etapa. También se pueden agregar pruebas de rendimiento.

Validación: Esta etapa tiene como objetivo la verificación de que el sistema desarrollado cumple con los requerimientos expresados inicialmente por el cliente y que han dado lugar al presente proyecto. En muchos proyectos las etapas de validación y debugging se realizan en paralelo por la estrecha relación que llevan. Sin embargo, tenemos que evitar la confusión: podemos realizarlos en paralelo, pero no como una única etapa.

Evolución: En la mayoría de los proyectos se considera esta etapa como Mantenimiento y evolución, y se le asigna, no sólo el agregado de nuevas funcionalidades (evolución); sino la corrección de errores que surgen (mantenimiento). En la práctica esta denominación no es del todo errónea, ya que es posible que aun luego de una etapa de debugging y validación exhaustiva, se filtren errores.


MODELOS DE CICLO DE VIDA


Las principales diferencias entre los distintos modelos de ciclo de vida están divididas en tres grandes visiones:
·                    Alcance del ciclo de vida: Hasta donde queremos llegar con el proyecto
·                    La cualidad y la cantidad de las etapas: Es decir en que dividiremos el ciclo de vida, según el que adptemos.
·                    Estructura y sucesión de las etapas: Es decir si hay realimentación o tenemos la libertad de repetirlas.

En los modelos de ciclo de vida existentes siempre hay riesgo, que esta catalogado como la probabilidad de retomar etapas anteriores, perdiendo tiempo, dinero y esfuerzo.

Modelo Lineal Secuencial (MLS)



También llamado "Ciclo de vida básico" o "Modelo de cascada" tiene su origen en el "Modelo de cascada" ingeniado por Winston Royce (1970) , sugiere un enfoque sistemático o más bien secuencial del desarrollo de software que comienza en un nivel de sistemas y progresa con el análisis, diseño, codificación, pruebas y mantenimiento.


El MLS tiene las siguientes actividades:

Análisis de los requerimientos del software: es la fase en la cual se reúnen todos los requisitos que debe cumplir el software. En esta etapa es fundamental la presencia del cliente que documenta y repasa dichos requisitos.

Diseño: es una etapa dirigida hacia la estructura de datos, la arquitectura del software, las representaciones de la interfaz y el detalle procedimental (algoritmo). En forma general se hace un esbozo de lo solicitado y se documenta haciéndose parte del software.

Generación del código: es la etapa en la cual se traduce el diseño para que sea comprensible por la máquina. Esta etapa va a depender estrechamente de lo detallado del diseño.

Pruebas: esta etapa se centra en los procesos lógicos internos del software, asegurando que todas las sentencias se han comprobado, y en la detección de errores.

Mantenimiento: debido a que el programa puede tener errores, puede no ser del completo agrado del cliente o puede necesitar, eventualmente acoplarse a los cambios en su entorno. Esto quiere decir que no se rehace el programa, sino que sobre la base de uno ya existente se realizan algunos cambios.


Características

·         Requerimientos del sistema de información son predecibles.
·         Requiere almacenamiento de datos en archivos y BD.
·         Sirve para modelar sistema que un gran volumen de transacciones y procedimientos.
·         Es necesaria validación de los datos de entrada
·         Requiere de la participación de personal de sistemas de varios secciones (análisis, diseño y programación).
·         El desarrollo del proyecto se hace por equipos de trabajo.

Ventajas

·         No exige experiencias del grupo de desarrollo.
·         El desarrollo de las actividades es secuencial, por lo tanto es fácil de seguir.

Desventajas

El MLS es el paradigma de desarrollo de software más antiguo que existe, sin embargo esto no ha impedido que se haya creado una desconfianza alrededor de él basada en los siguientes errores reales:

·         Los proyectos raramente siguen el paradigma secuencial que propone el proyecto.
·         A menudo es difícil que el cliente exponga exactamente todos los requisitos.
·         El cliente debe tener paciencia.
·         Los responsables del desarrollo de software siempre se retrasan innecesariamente.
·         Es una técnica que para entregar un producto final, necesita de mucho tiempo.
·         Exige que las personas que suministren los requerimientos estén comprometidas con el proyecto.
·         La técnica arranca solo si se tienen TODOS los requerimientos.
·         Las pruebas se hacen en etapas que están al final, por lo que encontrar un error es  muy costoso.
·         No se sigue un ciclo de vida estrictamente secuencial, porque en la vida real hay etapas que se traslapan.

·         Solo se dispone de una versión funcional de software al final.

Modelo de ciclo de vida en V




Propuesto por Alan Davis fue desarrollado para regular el proceso de desarrollo de software por la Administración Federal Alemana, tiene las mismas fases que el anterior pero se considera el nivel de abstracción de cada una. Una fase además de utilizarse como entrada para la siguiente, sirve para validar o verificar otras fases posteriores.

La unión mediante líneas discontinuas entre las fases de la parte izquierda y las pruebas de la derecha representa una doble información. Por un lado sirve para indicar en qué fase de desarrollo se deben definir las pruebas correspondientes. Por otro sirve para saber a qué fase de desarrollo hay que volver si se encuentran fallos en las pruebas correspondientes.

Por lo tanto el modelo en V hace más explícita parte de las iteraciones y repeticiones de trabajo que están ocultas en el modelo en cascada. Mientras el foco del modelo en cascada se sitúa en los documentos y productos desarrollados, el modelo en V se centra en las actividades y la corrección.


Objetivos

Proporciona una guía para la planificación y realización de proyectos. Los siguientes objetivos están destinados a ser alcanzados durante la ejecución del proyecto:

Minimización de los riesgos del proyecto

Mejora la transparencia del proyecto y control del proyecto, especificando los enfoques estandarizados, describe los resultados correspondientes y funciones de responsabilidad. Permite una detección temprana de las desviaciones y los riesgos y mejora la gestión de procesos, reduciendo así los riesgos del proyecto.

Mejora y Garantía de Calidad

Como un modelo de proceso estándar, asegura que los resultados que se proporcionan sean completos y contengan la calidad deseada. Los resultados provisionales definidos se puede comprobar en una fase temprana. La uniformidad en el contenido del producto mejora la legibilidad, comprensibilidad y verificabilidad.

Reducción de los gastos totales durante todo el proyecto y sistema de Ciclo de Vida

El esfuerzo para el desarrollo, producción, operación y mantenimiento de un sistema puede ser calculado, estimado y controlado de manera transparente mediante la aplicación de un modelo de procesos estandarizados. Reduciendo la dependencia en los proveedores y el esfuerzo para las siguientes actividades y proyectos.

Mejora de la comunicación entre todos los inversionistas

La descripción estandarizada y uniforme de todos los elementos pertinentes y términos es la base para la comprensión mutua entre todos los inversionistas. De este modo, se reduce la pérdida por fricción entre el usuario, comprador, proveedor y desarrollador.


Ventajas:


• La relación entre las etapas de desarrollo y los distintos tipos de pruebas facilitan la localización de fallos.
• Es un modelo sencillo y de fácil aprendizaje
• Hace explícito parte de la iteración y trabajo que hay que revisar
• Especifica bien los roles de los distintos tipos de pruebas a realizar
• Involucra al usuario en las pruebas

Desventajas:

• Es difícil que el cliente exponga explícitamente todos los requisitos
• El cliente debe tener paciencia pues obtendrá el producto al final del ciclo de vida
• Las pruebas pueden ser caras y, a veces, no lo suficientemente efectivas
• El producto final obtenido puede que no refleje todos los requisitos del usuario

Modelo de ciclo de vida tipo Sashimi



Según el modelo en cascada puro una fase solo puede empezar cuando ha terminado la anterior. En este caso sin embargo, se permite un solapamiento entre fases. Por ejemplo, sin tener terminado del todo el diseño se comienza a implementar. El nombre ``sashimi'' deriva del modo del estilo de presentación de rodajas de pescado crudo en Japón. Una ventaja de este modelo es que no necesita generar tanta documentación como el ciclo de vida en cascada puro debido a la continuidad del mismo personal entre fases. La fase de ``concepto'' consiste en definir los objetivos del proyecto


Ventajas

·         La ganancia de calidad en lo que respecta al producto final, la falta de necesidad de una documentación detallada (el ahorro proviene por el soplado de las etapas).
·         Otra ventaja de este modelo es que no necesita generar tanta documentación como el ciclo de vida en cascada debido a la continuidad del mismo personal entre fases.

Desventajas

·         También se refieren al solapamiento de las etapas: es muy difícil gestionar el comienzo y fin de cada etapa y los problemas de la comunicación, si aparecen, generan inconsistencias en el proyecto.
·         Más difícil controlar el progreso del proyecto debido a que los finales de fase ya no son un punto de referencia claro.
·         Al hacer cosas en paralelo si hay problemas de comunicación pueden surgir inconsistencias.


Modelo de ciclo de vida en cascada con sub-proyectos



Si una vez que se ha llegado al diseño arquitectónico, se comprueba que el sistema se divide en varios subsistemas independientes entre sí, sería razonable suponer que a partir de ese punto cada uno se puede desarrollar por separado y en consecuencia en paralelo con los demás. Cada uno tendrá seguramente fechas de terminación distintas. Una vez que han terminado todos se integran y se prueba el sistema en su conjunto.


Ventaja


Puede tener a más gente trabajando en paralelo de forma eficiente. El riesgo es que existan interdependencias entre los sub-proyectos.

Modelo de ciclo de vida Cascada Incremental



En este caso se va creando el sistema añadiendo pequeñas funcionalidades. Cada uno de los pequeños incrementos es parecido a lo que ocurre dentro de la fase de mantenimiento.

La ventaja de este método es que no es necesario tener todos los requisitos en un principio.

El inconveniente es que los errores en la detección de requisitos se encuentran tarde.


Hay dos partes en el ciclo de vida, similares al anterior. Por un lado está el análisis y el diseño global. Por otra parte están los pequeños incrementos, con las fases de diseño detallado, codificación y mantenimiento.

Ciclo de vida iterativo



También derivado del ciclo de vida en cascada puro, este modelo busca reducir el riesgo que surge entre las necesidades del usuario y el producto final por malos entendidos durante la etapa de solicitud de requerimientos.

Es la iteración de varios ciclos de vida en cascada. Al final de cada iteración se le entrega al cliente una versión mejorada o con mayores funcionalidades del producto. El cliente es quien luego de cada iteración, evalúa el producto y lo corrige o propone mejoras.

Estas iteraciones se repetirán hasta obtener un producto que satisfaga al cliente.


Se suele utilizar en proyectos en los que los requerimientos no están claros de parte del usuario, por lo que se hace necesaria la creación de distintos prototipos para presentarlos y conseguir la conformidad del cliente.

Podemos adoptar el modelo mencionado en aplicaciones medianas a grandes, en las que el usuario o cliente final no necesita todas las funcionalidades desde el principio del proyecto. Quizás una empresa que debe migrar sus aplicaciones hacia otra arquitectura, y desea hacerlo paulatinamente, es un candidato ideal para este tipo de modelo de ciclo de vida.

Ventajas

·         Desde la primera iteración ya puedes dar resultados al cliente.
·         No necesitamos todos los requisitos desde el principio.

Desventajas

·         Se necesitan psicoanálisis de requerimiento.
·         Alto costo.

·         Tiempo de corrección por defecto en el software es más rápido, sin embargo se maximizan como el número de iteraciones en el ciclo.