Social Icons

twitterfacebookgoogle pluslinkedinrss feedemail

Featured Posts

Desarrollo de software

Metodologías para el desarrollo de software.

Analista de sistemas

Trabajo de un analista de sistemas.

Desarrollo de Software

Proceso de desarrollo de software modelo Espiral.

martes, 3 de diciembre de 2013

METODOLOGÍAS PARA DESARROLLO DE SOFTWARE

Un proceso de software detallado y completo suele denominarse “Metodología”. Las metodologías se basan en una combinación de los modelos de proceso genéricos (cascada, evolutivo, incremental, etc.). Adicionalmente una metodología debería definir con precisión los artefactos, roles y actividades involucrados, junto con prácticas y técnicas recomendadas, guías de adaptación de la metodología al proyecto, guías para uso de herramientas de apoyo, etc. Habitualmente se utiliza el término “método” para referirse a técnicas, notaciones y guías asociadas, que son aplicables a una (o algunas) actividades del proceso de desarrollo, por ejemplo, suele hablarse de métodos de análisis y/o diseño. 
La comparación y/o clasificación de metodologías no es una tarea sencilla debido a la diversidad de propuestas y diferencias en el grado de detalle, información disponible y alcance de cada una de ellas. A grandes rasgos, si tomamos como criterio las notaciones utilizadas para especificar artefactos producidos en actividades de análisis y diseño (es decir, concentrándose no en el desarrollo sino más bien en el análisis y diseño como tal), podemos clasificar las metodologías en dos grupos: Metodologías Estructuradas y Metodologías Orientadas a Objetos. Por otra parte, considerando su filosofía de desarrollo, aquellas metodologías con mayor énfasis en la planificación y control del proyecto, en especificación precisa de requisitos y modelado, reciben el apelativo de Metodologías Tradicionales (o peyorativamente denominada Metodologías Pesadas, o Peso Pesado). Otras metodologías, denominadas Metodologías Ágiles, están más orientadas a la generación de código con ciclos muy cortos de desarrollo, se dirigen a equipos de desarrollo pequeños, hacen especial hincapié en aspectos humanos asociados al trabajo en equipo e involucran activamente al cliente en el proceso. A continuación se revisan brevemente cada una de estas categorías de metodologías.

ü  Metodologías Estructuradas

Los métodos estructurados comenzaron a desarrollarse a fines de los 70’s con la Programación Estructurada, luego a mediados de los 70’s aparecieron técnicas para el Diseño (por ejemplo: el diagrama de Estructura) primero y posteriormente para el Análisis (por ejemplo: Diagramas de Flujo de Datos). Estas metodologías son particularmente apropiadas en proyectos que utilizan para la implementación lenguajes de 3ra y 4ta generación.

La metodología de análisis y diseño estructurado, conocido por sus siglas en inglés como SA/SD (Structured Analysis and Structured Design) ha tenido mucho seguimientos durante las últimas décadas (Yourdon y Constantine 1978, DeMarco 1979, Page-Jones 1980, Ward y Mellor 1985, Yourdon 1989, Martin y Jackson). Existen múltiples variaciones al concepto básico estructurado como son SADT (Structured Analysis and Design Technique) (Ross, 1985) y RDD (Requirement Driven Design) basado en SREM (Alford, 1985). La metodología estructurada se basa primordialmente en la división entre funciones y datos. La metodología estructurada identifica durante el análisis las funciones del sistema, mientras que durante el diseño identifica los datos. Otros enfoques como la programación funcional rompen con este esquema (Backus 1977, Bird and Wadler 1988).

Mirar libro de Análisis Estructurado Whitten

Durante las fases de requisitos y análisis se utilizan las siguientes herramientas para describir el sistema lógico:
ü  Diagramas de flujo de datos
ü  Especificación de procesos
ü  Diccionario de datos
ü  Diagramas de transición de estados
ü  Diagramas de entidad-relación”.

Durante las fases de diseño e implementación, los detalles son incorporados a los modelos anteriores y los diagramas de flujo de datos son convertidos a cartas estructuradas (“charts”) las cuales especifican el código fuente.

Diagramas de flujo de datos (DFD) sirven para modelar la transformación de los datos en el sistema, y es uno de los modelos más importantes de SA/SD. Un diagrama de flujo de datos se compone:
ü  Procesos
ü  flujo de datos
ü  actores (entidades externas)
ü  almacenamiento de datos

Durante el diseño, los procesos del DFD son agrupados en tareas y asignados para su ejecución en el sistema operativo. Procesos del DFD se convierten en funciones del lenguaje de programación, y una carta estructurada es creada mostrando el árbol de llamadas de procedimientos.

Especificación o Diagrama de procesos sirve para describir los procesos a nivel más detallado. Esta especificación comienza desde el nivel más alto del diagrama de flujo de datos, donde los procesos se dividen de manera recursiva, con ayuda de subdiagramas, hasta que existen procesos suficientemente pequeños que sean fáciles de implementar.
Esta especificación puede ser expresada con tablas de decisión, pseudo-código, u otras técnicas.


Diccionario de datos contiene detalles omitidos en los diagramas de flujo de datos, definiendo el significado de los nombres de los flujos y almacenamiento de datos.

Diagramas de transición de estados modelan el comportamiento que depende del tiempo. La mayoría de los diagramas de transición describen procesos de control o tiempo de ejecución de funciones y acceso a datos causado por eventos.

Diagramas de Entidad-Relación (ER) (Chen, 76) muestran la relación entre el almacenamiento de datos que de otra forma sólo serían vistos en la especificación o diagrama de proceso.


Cada elemento del ER corresponde a un dato almacenado. (La notación del diagrama de clases es una extensión del diagrama ER.) Este es el enfoque más común para el modelo de información. ER es una técnica gráfica que es popular ya que su notación es fácil de comprender, y suficientemente poderosa para modelar problemas del mundo real. Los diagramas ER son usualmente traducidos directamente a implementaciones de bases de datos.

MODELO DE PROTOTIPO

En Ingeniería de software el desarrollo con prototipación, también llamado modelo de prototipos que pertenece a los modelos de desarrollo evolutivo, se inicia con la definición de los objetivos globales para el software, luego se identifican los requisitos conocidos y las áreas del esquema en donde es necesaria más definición. Entonces se plantea con rapidez una iteración de construcción de prototipos y se presenta el modelado (en forma de un diseño rápido).

El diseño rápido se centra en una representación de aquellos aspectos del software que serán visibles para el cliente o el usuario final (por ejemplo, la configuración de la interfaz con el usuario y el formato de los despliegues de salida). El diseño rápido conduce a la construcción de un prototipo, el cual es evaluado por el cliente o el usuario para una retroalimentación; gracias a ésta se refinan los requisitos del software que se desarrollará. La interación ocurre cuando el prototipo se ajusta para satisfacer las necesidades del cliente. Esto permite que al mismo tiempo el desarrollador entienda mejor lo que se debe hacer y el cliente vea resultados a corto plazo.

Ventajas
-       Este modelo es útil cuando el cliente conoce los objetivos generales para el software, pero no identifica los requisitos detallados de entrada, procesamiento o salida.
-       También ofrece un mejor enfoque cuando el responsable del desarrollo del software está inseguro de la eficacia de un algoritmo, de la adaptabilidad de un sistema operativo o de la forma que debería tomar la interacción humano-máquina. 

La construcción de prototipos se puede utilizar como un modelo del proceso independiente, se emplea más comúnmente como una técnica susceptible de implementarse dentro del contexto de cualquiera de los modelos del proceso expuestos. Sin importar la forma en que éste se aplique, el paradigma de construcción de prototipos ayuda al desarrollador de software y al cliente a entender de mejor manera cuál será el resultado de la construcción cuando los requisitos estén satisfechos. De esta manera, este ciclo de vida en particular, involucra al cliente más profundamente para adquirir el producto.

Inconvenientes
-       El usuario tiende a crearse unas expectativas cuando ve el prototipo de cara al sistema final. A causa de la intención de crear un prototipo de forma rápida, se suelen desatender aspectos importantes, tales como la calidad y el mantenimiento a largo plazo, lo que obliga en la mayor parte de los casos a reconstruirlo una vez que el prototipo ha cumplido su función. Es frecuente que el usuario se muestre reacio a ello y pida que sobre ese prototipo se construya el sistema final, lo que lo convertiría en un prototipo evolutivo, pero partiendo de un estado poco recomendado.

-       En aras de desarrollar rápidamente el prototipo, el desarrollador suele tomar algunas decisiones de implementación poco convenientes (por ejemplo, elegir un lenguaje de programación incorrecto porque proporcione un desarrollo más rápido). Con el paso del tiempo, el desarrollador puede olvidarse de la razón que le llevó a tomar tales decisiones, con lo que se corre el riesgo de que dichas elecciones pasen a formar parte del sistema final. 

DESARROLLO EN ESPIRAL

El modelo de desarrollo en espiral es actualmente uno de los más conocidos y fue propuesto por Boehm. El ciclo de desarrollo se representa como una espiralen lugar de una serie de actividades sucesivas con retrospectiva de una actividad a otra.
Cada ciclo de desarrollo se divide en cuatro fases:
·       Definición de objetivos: se definen los objetivos. Se definen las restricciones del proceso y del producto. Se realiza un diseño detallado del plan administrativo. Se identifican los riesgos y se elaboran estrategias alternativas dependiendo de estos.
·       Evaluación y reducción de riesgos: se realiza un análisis detallado de cada riesgo identificado. Pueden desarrollarse prototipos para disminuir el riesgo de requisitos dudosos. Se llevan a cabo los pasos para reducir los riesgos.
·       Desarrollo y validación: se escoge el modelo de desarrollo después de la evaluación del riesgo. El modelo que se utilizará (cascadasistemas formalesevolutivo, etc.) depende del riesgo identificado para esa fase. Así si por ejemplo si los riesgos en la interfaz de usuario son dominantes, un modelo de desarrollo apropiado podría ser la construcción de prototipos evolutivos. Si lo riesgos de protección son la principal consideración, un desarrollo basado en transformaciones formales podría ser el más apropiado.
·       Planificación: se determina si continuar con otro ciclo. Se planea la siguiente fase del proyecto.
Este modelo a diferencia de los otros toma en consideración explícitamente el riesgo, esta es una actividad importante en la administración del proyecto.
El ciclo de vida inicia con la definición de los objetivos. De acuerdo a las restricciones se determinan distintas alternativas. Se identifican los riesgos al sopesar los objetivos contra las alternativas. Se evalúan los riesgos con actividades como análisis detallado, simulación, prototipos, etc. Se desarrolla un poco el sistema. Se planifica la siguiente fase.


  
El desarrollo en espiral es un modelo de ciclo de vida del software definido por primera vez por Barry Boehm en 1988utilizado generalmente en la Ingeniería de software. Las actividades de este modelo se conforman en una espiral, en la que cada bucle o iteración representa un conjunto de actividadesLas actividades no están fijadas a priorisino que las siguientes se eligen en función del análisis de riesgo, comenzando por el bucle interior.

Introducción
La Ingeniería de software, se vale y establece a partir de una serie de modelos que establecen y muestran las distintas etapas y estados por lo que pasa un producto software, desde su concepción inicial, pasando por su desarrollo, puesta en marcha y posterior mantenimiento, hasta la retirada del producto. A estos modelos se les denomina «modelos de ciclo de vida del software». El primer modelo concebido fue el de Royce, más comúnmente conocido como desarrollo en cascada o desarrollo lineal secuencial. Este modelo establece que las diversas actividades que se van realizando al desarrollar un producto software se suceden de forma lineal.
Boehm, autor de diversos artículos de ingeniería del software; modelos de estimación de esfuerzo y tiempo que se consume en hacer productos software; y Modelos de Ciclo de Vida; ideó y promulgó un modelo desde un enfoque distinto al tradicional en Cascada: El Modelo Evolutivo Espiral. Su Modelo de Ciclo de Vida en Espiral tiene en cuenta fuertemente el riesgo que aparece a la hora de desarrollar software. Para ello, se comienza mirando las posibles alternativas de desarrollose opta por la de riesgo más asumible y se hace un ciclo de la espiral. Si el cliente quiere seguir haciendo mejoras en el software, se vuelve a evaluar las distintas nuevas alternativas y riesgos y se realiza otra vuelta de la espiral, así hasta que llegue un momento en el que el producto software desarrollado sea aceptado y no necesite seguir mejorándose con otro nuevo ciclo.
Este modelo fue propuesto por Boehm en 1988. Básicamente consiste en una serie de ciclos que se repiten en forma de espiralcomenzando desde el centro. Se suele interpretar como que dentro de cada ciclo de la espiral se sigue un Modelo Cascada, pero no necesariamente debe ser así. El Espiral puede verse como un modelo evolutivo que conjuga la naturaleza iterativa del modelo MCP (Modelo de prototipos) con los aspectos controlados y sistemáticos del Modelo Cascada, con el agregado de gestión de riegos.

En cada vuelta o iteración hay que tener en cuenta
Los Objetivos: que necesidad debe cubrir el producto.
Alternativas: las diferentes formas de conseguir los objetivos de forma exitosa, desde diferentes puntos de vista como pueden ser:
  • Características: experiencia del personal, requisitos a cumplir, etc.
  • Formas de gestión del sistema.
  • Riesgo asumido con cada alternativa.
Desarrollar y Verificar: programar y probar el software.

Si el resultado no es el adecuado o se necesita implementar mejoras o funcionalidades
Se planificaran los siguientes pasos y se comienza un nuevo ciclo de la espiral. La espiral tiene una forma de caracola y se dice que mantiene dos dimensiones, la radial y la angular:
  • Angular: indica el avance del proyecto del software dentro de un ciclo.
  • Radial: indica el aumento del coste del proyecto, ya que con cada nueva iteración se pasa más tiempo desarrollando.
Este sistema es muy utilizado en proyectos grandes y complejos como puede ser, por ejemplo, la creación de un Sistema Operativo.
Al ser un modelo de Ciclo de Vida orientado a la gestión de riesgo se dice que uno de los aspectos fundamentales de su éxito radica en que el equipo que lo aplique tenga la necesaria experiencia y habilidad para detectar y catalogar correctamente los riesgos.

Mecanismos de control
ü  La dimensión radial mide el coste.
ü  La dimensión angular mide el grado de avance del proyecto.

Variaciones del Modelo En Espiral
ü  Modelo en Espiral Típico de seis regiones.
ü  Modelo en espiral WIN WIN.

Ventajas
El análisis del riesgo se hace de forma explícita y clara. Une los mejores elementos de los restantes modelos.
  • Reduce riesgos del proyecto
  • Incorpora objetivos de calidad
  • Integra el desarrollo con el mantenimiento, etc.
Además es posible tener en cuenta mejoras y nuevos requerimientos sin romper con la metodología, ya que este ciclo de vida no es rígido ni estático.

Desventajas
  • Genera mucho tiempo en el desarrollo del sistema
  • Modelo costoso
  • Requiere experiencia en la identificación de riesgos

Inconvenientes
Planificar un proyecto con esta metodología es a menudo imposible, debido a la incertidumbre en el número de iteraciones que serán necesarias. En este contexto la evaluación de riesgos es de la mayor importancia y, para grandes proyectos, dicha evaluación requiere la intervención de profesionales de gran experiencia.
El IEEE clasifica al desarrollo en espiral como modelo no operativo en sus clasificaciones de MCV.

Modelo espiral Win & Win
Una variante interesante del Modelo Espiral previamente visto es el «Modelo espiral Win-Win (Barry Boehm). El Modelo Espiral previo (clásicosugiere la comunicación con el cliente para fijar los requisitos, en que simplemente se pregunta al cliente qué necesita y él proporciona la información para continuar; pero esto es en un contexto ideal que rara vez ocurre. Normalmente cliente y desarrollador entran en una negociación, se negocia coste frente a funcionalidad, rendimiento, calidad, etc.
«Es así que la obtención de requisitos requiere una negociación, que tiene éxito cuando ambas partes ganan».
Las mejores negociaciones se fuerzan en obtener «Victoria & Victoria» (Win & Win), es decir que el cliente gane obteniendo el producto que lo satisfaga, y el desarrollador también gane consiguiendo presupuesto y fecha de entrega realista. Evidentemente, este modelo requiere fuertes 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; se definen las siguientes actividades:
1.     Identificación del sistema o subsistemas clave de los directivos (*) (saber qué quieren).
2.     Determinación de «condiciones de victoria» de los directivos (saber qué necesitan y los satisface)
3.     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.
El modelo Win & Win hace énfasis en la negociación inicial, también introduce 3 hitos en el proceso llamados «puntos de fijación», que ayudan a establecer la completitud de un ciclo de la espiral, y proporcionan hitos de decisión antes de continuar el proyecto de desarrollo del software.

 

Sample text

Redes Sociales

twitterfacebookgoogle pluslinkedinrss feedemail