jueves, 20 de marzo de 2014

Metodología de desarrollo de software orientada a objetos

MODELOS DE PROCESOS O CICLO DE VIDA:

Para cada fase o etapa, existen sub-etapas o tareas. El modelo de proceso o modelo de ciclo de vida utilizado para el desarrollo define el orden para las tareas o actividades involucradas, la coordinación entre ellas, enlace y realimentación.
Los más conocidos son:
 - modelo en cascada o secuencial.
 - modelo espiral.
 - modelo iterativo incremental.
Hay a su vez algunas variantes o alternativas, según la aplicación y sus requisitos.


Modelo en cascada o secuencial:

También llamado modelo clásico, tradicional o lineal secuencial. El modelo en cascada puro poco se utiliza al pie de la letra, ya que esto implicaría un previo y absoluto conocimiento de los requisitos, la no volatilidad de los mismos (o rigidez) y etapas subsiguientes libres de errores; ello sólo podría ser aplicable a escasos y pequeños desarrollos de sistemas. Por ejemplo pasar del Diseño a la Codificación implicaría un diseño exacto y sin errores ni probable modificación o evolución y es irreal pensar en que no vaya a haber variantes ni errores, ya que intrínsecamente el software es de carácter evolutivo, cambiante y difícilmente libre de errores, tanto durante su desarrollo como durante su ciclo operativo.


Algún cambio durante la ejecución de una cualquiera de las etapas en este modelo secuencial implicaría reiniciar desde el principio todo el ciclo completo, lo cual redundaría en altos costos de tiempo y desarrollo.
Sin embargo, es uno de los más utilizados actualmente por ser eficaz y simple, se produce alguna realimentación entre etapas, que no es completamente predecible ni rígida; para dar oportunidad al desarrollo de software en los cuales hay cambios y evoluciones en su ciclo de vida.

Tiene seis etapas:
 - Análisis del Sistema
 - Análisis de Requisitos de Software
 - Diseño
 - Codificación
 - Prueba
 - Mantenimiento

Lo normal en el modelo cascada es aplicar el mismo con sus etapas realimentadas y actualizadas de forma periódica, permitiendo retroceder de una a la anterior o volver a otras anteriores, si es requerido, lo que lo convierte en un modelo en cascada realimentado, el cual resulta muy atractivo si el proyecto presenta alta rigidez (pocos o ningún cambio), los requisitos son muy claros y están correctamente especificados.

Desventajas del modelo en cascada:

Los cambios introducidos durante el desarrollo pueden confundir al equipo profesional en las etapas tempranas del proyecto. Si los cambios se producen en etapa madura pueden ser desastrosos en un proyecto grande.

El cliente debe tener paciencia ya que el software no estará disponible hasta muy avanzado el proyecto. Un error detectado por el cliente (en fase de operación) puede ser desastroso, implicando reinicio del proyecto, con altos costos.

 Modelo evolutivo:

La evolución del software, los requisitos del usuario y producto suelen cambiar conforme se desarrolla el mismo. Las fechas de mercado y la competencia hacen que no sea posible esperar a poner en el mercado un producto absolutamente completo, por lo que se debe introducir una versión funcional limitada de alguna forma, para satisfacer al cliente y aliviar las presiones competitivas; es por esto que los desarrolladores necesitan modelos que evolucionen progresivamente.
En el modelo Cascada y Cascada Realimentado no se tiene en cuenta la naturaleza evolutiva del software, se plantea como estático; Los evolutivos son modelos iterativos, que permiten desarrollar versiones cada vez más completas y complejas, hasta llegar al objetivo final, incluso evolucionar más allá durante la fase de operación. Los modelos Iterativo Incremental y Espiral son dos de los más conocidos y utilizados del tipo evolutivo.

 
 Modelo iterativo incremental:
Permite la entrega de versiones parciales a medida que se va construyendo el producto final, Cada versión emitida incorpora a los anteriores incrementos las funcionalidades y requisitos, para mejorarlas.


Se observa que existen actividades de desarrollo (para cada incremento) que son realizadas en paralelo o concurrentemente, por ejemplo, en la figura, mientras se realiza el diseño detalle del primer incremento ya se está realizando en análisis del segundo. Cada incremento concluye con la actividad de Operación y Mantenimiento. Por medio de este modelo se entrega software en partes funcionales más pequeñas, pero funcionales y reutilizables, con funciones suplementarias llamadas incrementos.
Estos incrementos, son escogidos en base a prioridades predefinidas de algún modo y permite una implementación con refinamientos sucesivos (ampliación y/o mejora); Con cada incremento se agrega una nueva funcionalidad, se cubren nuevos requisitos o se mejora la versión anterior del producto.

Además brinda flexibilidad durante el desarrollo, para incluir cambios en los requisitos por parte del usuario, dependiendo de sus necesidades. Luego de cada integración se entrega un producto con mayor funcionalidad que el anterior; Este proceso se repite hasta alcanzar el producto final.
El modelo es aconsejable para el desarrollo de software, donde se observa en su etapa inicial de análisis que posee áreas bastante bien definidas a cubrir, con suficiente independencia como para ser desarrolladas en etapas sucesivas.

A veces pueden no existir prioridades funcionales por parte del cliente, pero el desarrollador debe establecerlas de todos modos, con algún criterio, ya que en base de estas se desarrollarán y entregarán los distintos incrementos.
El hecho de que existan incrementos funcionales del software lleva inmediatamente a pensar en un esquema de desarrollo modular, por tanto este modelo facilita tal paradigma de diseño.

El modelo proporciona todas las ventajas del modelo en cascada realimentado, pero reduciendo sus desventajas sólo a la fase de cada incremento.
El modelo incremental no es recomendable para casos de sistemas de tiempo real, de alto nivel de seguridad, de procesamiento distribuido, y/o de alto índice de riesgos.

 Modelo espiral
Propuesto por Barry Boehm, modelo evolutivo que conjuga la naturaleza iterativa del modelo MCP con aspectos controlados y sistemáticos del modelo Cascada. Proporciona potencial para desarrollo rápido de versiones incrementales.

En el modelo Espiral el software se construye en una serie de versiones incrementales; En las primeras iteraciones la versión incremental puede ser un modelo en papel o un prototipo. En las últimas iteraciones se producen versiones cada vez más completas del sistema diseñado, tiene 4 etapas;
 - Planificación.
 - Análisis de Riesgos.
 - Ingeniería (Construcción del prototipo).
 - Evaluación por el cliente.

El modelo se divide en un número de Actividades de marco de trabajo, llamadas "regiones de tareas".
Las regiones definidas en el modelo de la figura anterior son:

1 - Tareas requeridas para establecer la comunicación entre el cliente y el desarrollador.
2 - Tareas inherentes a la definición de los recursos, tiempo y otra información relacionada con el proyecto.

3 - Tareas necesarias para evaluar los riesgos técnicos y de gestión del proyecto.
4 - Tareas para construir una o más representaciones de la aplicación software.

5 - Tareas para construir la aplicación, instalarla, probarla y proporcionar soporte al usuario o cliente (Ej. documentación y práctica).
6 - Tareas para obtener la reacción del cliente, según la evaluación de lo creado e instalado en los ciclos anteriores.

Se pueden aplicar a cualquier proyecto, grande, mediano o pequeño, complejo o simple. Las regiones que definen esas actividades comprenden un "conjunto de tareas" del trabajo: ese conjunto sí se debe adaptar a las características del proyecto en particular a emprender.
Proyectos pequeños requieren baja cantidad de tareas y también de formalidad. En proyectos mayores o críticos cada región de tareas contiene labores de más alto nivel de formalidad. En cualquier caso se aplican actividades de protección (por ejemplo, gestión de configuración del software, garantía de calidad, etc.).

El modelo espiral se puede adaptar, y aplicarse a lo largo del ciclo de vida del software (en el caso del modelo en cascada, el proceso termina a la entrega del software).
Un proyecto de "Desarrollo de Conceptos" comienza al inicio de la espiral, hace múltiples iteraciones hasta que se completa, es la zona marcada con verde.

Si lo anterior se va a desarrollar como producto real, se inicia otro proyecto: "Desarrollo de nuevo Producto". Que evolucionará con iteraciones hasta culminar; es la zona marcada en color azul.
Eventual y análogamente se generarán proyectos de "Mejoras de Productos" y de "Mantenimiento de productos", con las iteraciones necesarias en cada área (zonas roja y gris, respectivamente).

El modelo espiral da un enfoque realista, que evoluciona igual que el software; se adapta muy bien para desarrollos a gran escala; Pero requiere considerar riesgos técnicos en todas las etapas del proyecto.

Es apto para el desarrollo de software más complejo como Sistemas Operativos o en sistemas de alto riesgos o críticos (navegadores y controladores aeronáuticos).

Desventajas:
 - Requiere mucha experiencia y habilidad para la evaluación de los riesgos, lo cual es requisito para el éxito del proyecto.

 - A veces es difícil convencer a los clientes de poder controlar este enfoque evolutivo.
 - No es tan usado como el de Cascada por lo que no se pude medir completamente su eficacia.

 
Modelo espiral Win & Win:
Una variante del Modelo Espiral, busca ganar obteniendo el producto que pueda satisfacer al cliente, busca obtener "Victoria & Victoria" (Win & Win), es decir que tanto el cliente como el desarrollador ganen consiguiendo presupuesto y fecha de entrega realista. Este modelo requiere buenas habilidades de negociación.

El modelo Win-Win define un conjunto de actividades de negociación al principio de cada paso alrededor de la espiral, que son:
 - Identificación del sistema o subsistemas clave de los directivos (saber qué quieren).
 - Determinación de "condiciones de victoria" de los directivos (saber qué necesitan y los satisface)
 - Negociación de las condiciones "victoria" de los directivos para obtener condiciones "Victoria & Victoria" (negociar para que ambos ganen).
 - Directivo: Cliente escogido con interés directo en el producto, que puede ser premiado por la organización si tiene éxito o criticado si no.

 Modelo Concurrente:
Como el modelo espiral, el modelo concurrente provee una meta-descripción del proceso software. Mientras que la contribución primaria del modelo espiral es en realidad que esas actividades del software ocurran repetidamente, la contribución del modelo concurrente es su capacidad de describir las múltiples actividades del software ocurriendo simultáneamente.

Los requerimientos son usualmente "líneas de base", cuando una mayoría de los requerimientos comienzan a ser bien entendidos, en este tiempo se dedica un esfuerzo considerable al diseño. Sin embargo, una vez que comienza el diseño, cambios a los requerimientos son comunes y frecuentes.
Durante el diseño de arquitectura, es posible que algunos componentes comiencen a ser bien definidos antes que la arquitectura completa sea estabilizada. En tales casos, puede ser posible comenzar el diseño detallado en esos componentes estables. Similarmente, durante el diseño detallado, puede ser posible proceder con la codificación y quizás regular testeando en forma unitaria o realizando testeo de integración previo a llevar a cabo el diseño detallado de todos los componentes.

Usando técnicas de modelación concurrente, es posible conoce el verdadero estado en el que se encuentra el proyecto.

Modelo fuente:
Creado por Henderson-Sellers y Edwards en 1990. Es un tipo de ciclo de vida pensado para la orientación a objetos, se divide en las siguientes fases:

 - Planificación del negocio
 - Construcción: La más importante y que se divide a su vez en otras cinco actividades: Planificación, Investigación, Especificación, Implementación y Revisión.

 - Entrega.
La primera y la tercera fase son independientes de la metodología de desarrollo orientado a objetos. Además de las tres fases, existen dos periodos:

Crecimiento: Es el tiempo durante el cual se construye el sistema
Madurez: Es el periodo de mantenimiento del producto. Cada mejora se planifica igual que el periodo anterior, es decir, con las fases de Planificación del negocio, Construcción y Entrega.

Cada clase puede tener un ciclo de vida sólo para ella debido a que cada una puede estar en una fase diferente en un momento cualquiera.
 
 
 Los factores a tener en cuenta, en el momento de elegir un modelo de proceso de software o un modelo de ciclo de vida son:
 - Viabilidad del proyecto en comparación con las funciones y tamaño de la empresa, la aplicación que se va a desarrollar o a la que se va tener en funcionamiento y las características que va a tener el producto.
- Análisis, construir un modelo de los requisitos suficientes o superiores de los demandados, para poderlos aplicar adecuadamente al tipo de proyecto apropiado. Al identificar los problemas en etapas tempranas hay tiempo de subsanarlos.
- Objetivos, se hacen de la mano con el cliente, para concordar un proyecto adecuado a su necesidad.
- Restricciones, se deben analizar antes de implementar el proyecto, para prever posibles bloqueos, atrasos o perjuicios, que disminuyan el rendimiento, eficiencia, calidad, etc. Es bueno poder desarrollar construcción de prototipos.
 - Alternativas, en caso de tener diferentes opciones se debe proveer de alternativas y formas de gestionar de mejor manera el modelo, para adecuar el proyecto y el desarrollo del mismo hasta su culminación.
- Planificación, donde se analiza y se prevé, posibles soluciones o modificaciones según las aplicaciones a utilizar, puede ser que surjan necesidades imprevistas. Poder descubrir errores en la fase de análisis y no hasta la entrega, genera confianza y respaldo ante el cliente final, además de optimizar los recursos.
 - Diseño, a partir del modelo de análisis se debe poder deducir y planear la estructura de datos, amigable y funcional para el sistema y la interfaz de usuario.
 - Codificación, adecuada para construir el sistema y ajustable a la fase ejecutable del código, para que facilite su operación.
 - Documentación, es una tarea importante que se realiza en todas las etapas, para estimar y evaluar, distintos percances en el sistema, o para poder realizar modificaciones o adiciones a sus funciones de acuerdo a la finalidad y necesidad del proyecto.

 - Pruebas, etapa para comprobar que se cumplen los requisitos dentro del criterio de corrección y calidad, para el producto final.
 - Mantenimiento, es la fase después de la entrega, donde se asegura que el sistema sigue funcionando adecuadamente y está presto cualquier requisito nuevo.
Por ejemplo, para una empresa que desea desarrollar una aplicación para la administración de los pedidos, donde no tienen claro lo que quieren, el modelo de proceso que yo recomendaría, sería el modelo Iterativo incremental, ya que este permite la entrega de versiones parciales a medida que se va construyendo el producto final, y da posibilidad de realizar cambios, modificaciones,  
Conforme se va viendo el desarrollo de la aplicación, o los requisitos; además tiene la facilidad de mejorar cada versión emitida, incorporando nuevas funciones a las versiones anteriores.
Por otro lado para una el proyecto de una empresa de desarrollo de software que desea elaborar un procesador de palabra, se puede usar por ejemplo un modelo en cascada o un modelo incremental, entonces, realmente ningún modelo es perfecto, pero se busca siempre el que se acomode a la aplicación y desarrollo y finalidad del producto.
Conforme se va viendo el desarrollo de la aplicación, o los requisitos; además tiene la facilidad de mejorar cada versión emitida, incorporando nuevas funciones a las versiones anteriores.
Por otro lado para una el proyecto de una empresa de desarrollo de software que desea elaborar un procesador de palabra, se puede usar por ejemplo un modelo en cascada o un modelo incremental, entonces, realmente ningún modelo es perfecto, pero se busca siempre el que se acomode a la aplicación y desarrollo y finalidad del producto.

No hay comentarios:

Publicar un comentario