miércoles, 20 de marzo de 2013



2 METODOLOGÍA DE DESARROLLO DE SOFTWARE

Metodología de desarrollo de software en ingeniería de software es un marco de trabajo usado para estructurar, planificar y controlar el proceso de desarrollo en sistemas de información.
Una metodología de desarrollo de software se refiere a un framework que es usado para estructurar, planear y controlar el proceso de desarrollo en sistemas de información.
A lo largo del tiempo, una gran cantidad de métodos han sido desarrollados diferenciándose por su fortaleza y debilidad.
El framework para metodología de desarrollo de software consiste en:
·         Una filosofía de desarrollo de programas de computación con el enfoque del proceso de desarrollo de software
·         Herramientas, modelos y métodos para asistir al proceso de desarrollo de software
Estos frameworks son a menudo vinculados a algún tipo de organización, que además desarrolla, apoya el uso y promueve la metodología. La metodología es a menudo documentada en algún tipo de documentación formal.

2.1 METODOLOGÍAS CLÁSICAS

Los modelos de proceso dependen de las opiniones o creencias de las personas involucradas en un proyecto. Por ejemplo, algunas de estas opiniones o creencias implican que es necesario comprender el problema antes de desarrollar una solución, el proceso para resolver un problema debe dar un resultado predecible (sin importar qué individuo hace el trabajo), es indispensable planear y calcular el proceso con gran precisión, para que  proceso tenga éxito es importante evaluar y administrar el riesgo y la entrega de etapas intermedias bien definidas aumenta la confianza que se tiene en el resultado final. A continuación se describen los modelos de procesos “clásicos”, analizando las creencias en las cuales se basan.

2.1.1 MODELO DE CASCADA

En Ingeniería de software el desarrollo en cascada, también llamado modelo en cascada, es el enfoque metodológico que ordena rigurosamente las etapas del proceso para el desarrollo de software, de tal forma que el inicio de cada etapa debe esperar a la finalización de la etapa anterior.
Llamado también Lineal secuencial. Proporciona una simple visión del desarrollo del Software. A los procesos los representa como fases separadas y secuenciales en tiempo.
Antes de codificar debemos diseñar el software, además probarlo antes de construirlo y ponerlo en operación.

Un ejemplo de una metodología de desarrollo en cascada es:
1.     Análisis de requisitos.
2.     Diseño del Sistema.
3.     Diseño del Programa.
4.     Codificación.
5.     Pruebas.
6.     Implantación.
7.     Mantenimiento.
De esta forma, cualquier error de diseño detectado en la etapa de prueba conduce necesariamente al rediseño y nueva programación del código afectado, aumentando los costos del desarrollo. La palabra cascada sugiere, mediante la metáfora de la fuerza de la gravedad, el esfuerzo necesario para introducir un cambio en las fases más avanzadas de un proyecto.
Si bien ha sido ampliamente criticado desde el ámbito académico y la industria, sigue siendo el paradigma más seguido al día de hoy.
VENTAJAS DEL MODELO CASCADA
1.      Modelo y planificación fácil y sencilla.
2.      Sus fases son conocidas por los desarrolladores.
3.      Los usuarios lo pueden comprender fácilmente.
DESVENTAJAS DEL MODELO CASCADA
1.      Alto riesgo en sistemas nuevos debido a problemas en las especificaciones y en el diseño.
2.      Bajo riesgo para desarrollos bien comprendidos utilizando tecnología conocida.

2.1.2 MODELO INCREMENTAL

El Modelo Incremental combina elementos del MLS con la filosofía interactiva de construcción de prototipos.
En una visión genérica, el proceso se divide en 4 partes: Análisis, Diseño, Código y Prueba. Sin embargo, para la producción del Software, se usa el principio de trabajo en cadena o “Pipeline”, utilizado en muchas otras formas de programación. Con esto se mantiene al cliente en constante contacto con los resultados obtenidos en cada incremento.

Es el mismo cliente el que incluye o desecha elementos al final de cada incremento a fin de que el software se adapte mejor a sus necesidades reales. El proceso se repite hasta que se elabore el producto completo.
De esta forma el tiempo de entrega se reduce considerablemente.
Al igual que los otros métodos de modelado, el Modelo Incremental es de naturaleza interactiva pero se diferencia de aquellos en que al final de cada incremento se entrega un producto completamente operacional.
El Modelo Incremental es particularmente útil cuando no se cuenta con una dotación de personal suficiente. Los primeros pasos los pueden realizar un grupo reducido de personas y en cada incremento se añadir• personal, de ser necesario. Por otro lado los incrementos se pueden planear para gestionar riesgos técnicos.

El Modelo Incremental se puede ver aquí en forma grafica:
- Se evitan proyectos largos y se entrega algo de valor a los usuarios con cierta frecuencia.
- El usuario se involucra más.
- Difícil de evaluar el coste total.
- Difícil de aplicar a los sistemas transaccionales que tienden a ser integrados y a operar como un todo.
- Requiere gestores experimentados.
- Los errores en los requisitos se detectan tarde.
- El resultado puede ser muy positivo.
Ventajas:
- Con un paradigma incremental se reduce el tiempo de desarrollo inicial, ya que se implementa la funcionalidad parcial.
- También provee un impacto ventajoso frente al cliente, que es la entrega temprana de partes operativas del Software.
- El modelo proporciona todas las ventajas del modelo en cascada realimentado, reduciendo sus desventajas sólo al ámbito de cada incremento.
- Permite entregar al cliente un producto más rápido en comparación del modelo de cascada.
- Resulta más sencillo acomodar cambios al acotar el tamaño de los incrementos.
- Por su versatilidad requiere de una planeación cuidadosa tanto a nivel administrativo como técnico.
Desventajas:
- 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.
- Requiere de mucha planeación, tanto administrativa como técnica.
- Requiere de metas claras para conocer el estado del proyecto.


2.1.3 MODELO EVOLUTIVO

Desarrollo evolutivo. Este enfoque entrelaza las actividades de especificación, desarrollo y validación. Un sistema inicial se desarrolla rápidamente a partir de especificaciones abstractas. Éste se refina basándose en las peticiones del cliente para producir un sistema que satisfaga sus necesidades.
El desarrollo evolutivo consta del desarrollo de una versión inicial que luego de exponerse se va refinando de acuerdo de los comentarios o nuevos requerimientos por parte del cliente o del usuario final. Las fases de especificación, desarrollo y validación se entrelazan en vez de separarse.
Existen dos tipos de desarrollo evolutivo:

1. Desarrollo exploratorio, donde el objetivo del proceso es trabajar con el cliente para explorar sus requerimientos y entregar un sistema final. El desarrollo empieza con las partes del sistema que se comprenden mejor. El sistema evoluciona agregando nuevos atributos propuestos por el cliente.

2. Prototipos desechables, donde el objetivo del proceso de desarrollo evolutivo es comprender los requerimientos del cliente y entonces desarrollar una definición mejorada de los requerimientos para el sistema. El prototipo se centra en experimentar con los requerimientos del cliente que no se comprenden del todo.

2.1.4 ESPIRAL

Este modelo en espiral es una de las metodologías más recomendables para el desarrollo y creación de un programa, ya que consta de pocas etapas o fases, las cuales se van realizando en una manera continua y cíclica.

Cada ciclo de la espiral se divide en 4 etapas:

1.-Definición de objetivos
2.-Evaluación y reducción de riesgos
3.-Desarrollo y validación
4.-Planeación

2.1.5 PROTOTIPOS

El modelo de prototipos permite que todo el sistema, o algunas de sus partes, se construyan rápidamente para comprender con facilidad y aclarar ciertos aspectos en los que se aseguren que el desarrollador, el usuario, el cliente estén de acuerdo en lo que se necesita así como también la solución que se propone para dicha necesidad y de esta forma minimizar el riesgo y la incertidumbre en el desarrollo.

1.-Etapas para la elaboración del prototipo
2.-Identificar requerimientos básicos del usuario
3.-Desarrollar prototipo inicial
4.-Usar el prototipo
5.-Revisión y mejora del prototipo

2.1.6 DESARROLLO BASADO EN COMPONENTES

El desarrollo de software basado en componentes permite reutilizar piezas de código pre -elaborado que permiten realizar diversas tareas, conllevando a diversos beneficios como las mejoras a la calidad, la reducción del ciclo de desarrollo y el mayor retorno sobre la inversión.

BENEFICIOS DEL DESARROLLO DE SOFTWARE BASADO EN COMPONENTES

El paradigma de ensamblar componentes y escribir código para hacer que estos componentes funcionen se conoce como Desarrollo de Software Basado en Componentes.

El uso de este paradigma posee algunas ventajas:

1.-Reutilización del software.
2.-Simplifica las pruebas.
3.-Simplifica el mantenimiento del sistema.
4.-Mayor calidad.

2.2 OTRAS METODOLOGÍAS
·         Metodología SCRUM:

Es un marco de trabajo para la gestión y desarrollo de software basada en un proceso iterativo e incremental utilizado comúnmente en entornos basados en el desarrollo ágil de software.
Aunque Scrum estaba enfocado a la gestión de procesos de desarrollo de software, puede ser utilizado en equipos de mantenimiento de software, o en una aproximación de gestión de programas: Scrum de Scrums.
·         Programación extrema
La programación extrema o eXtreme Programming (XP) es una metodología de desarrollo de la ingeniería de software formulada por Kent Beck, autor del primer libro sobre la materia, Extreme Programming Explained: Embrace Change (1999). Es el más destacado de los procesos ágiles de desarrollo de software.
En  el siguiente diagrama nos muestra ciclo de entrega en la programación extrema.
 Al igual que éstos, la programación extrema se diferencia de las metodologías tradicionales principalmente en que pone más énfasis en la adaptabilidad que en la previsibilidad. Los defensores de la XP consideran que los cambios de requisitos sobre la marcha son un aspecto natural, inevitable e incluso deseable del desarrollo de proyectos. Creen que ser capaz de adaptarse a los cambios de requisitos en cualquier punto de la vida del proyecto es una aproximación mejor y más realista que intentar definir todos los requisitos al comienzo del proyecto e invertir esfuerzos después en controlar los cambios en los requisitos.
Se puede considerar la programación extrema como la adopción de las mejores metodologías de desarrollo de acuerdo a lo que se pretende llevar a cabo con el proyecto, y aplicarlo de manera dinámica durante el ciclo de vida del software.
·         Gile unified process
El proceso unificado ágil de scott ambler o agile unified process (aup) en inglés es una versión simplificada del proceso unificado de rational (rup). este describe de una manera simple y fácil de entender la forma de desarrollar aplicaciones de software de negocio usando técnicas ágiles y conceptos que aún se mantienen válidos en rup. el aup aplica técnicas ágiles incluyendo desarrollo dirigido por pruebas (test driven development - tdd), modelado agil, gestión de cambios agil, y refactorización de base de datos para mejorar la productividad.

2.2.1 GANAR-GANAR

El modelo ganar-ganar (en inglés, win-win)  extiende el modelo espiral, haciendo énfasis en la identificación de las condiciones de ganancia para todas las partes, creando un plan para alcanzar las condiciones ganadoras y evitar los riesgos correspondientes. Se establecen las reglas para definir el proceso de desarrollo del proyecto, tomando en cuenta todas las partes implicadas. El modelo no necesita mucho tiempo de gestión. Esto permite utilizarlo tanto en proyectos pequeños como grandes. Se consideran cuatro los ciclos, cada uno compuesto de cuatro actividades. Las cuatro actividades son: elaborar los objetivos, restricciones y alternativas del proceso y producto del sistema y subsistema; evaluar las alternativas con respecto a los objetivos y restricciones (identificando y resolviendo las fuentes principales de riesgo en el proceso y producto); elaborar la definición del producto y proceso; y planear el siguiente ciclo, actualizando el plan del ciclo de vida, incluyendo la partición del sistema en subsistemas para ser considerados en ciclos paralelos, lo cual puede incluir un plan para terminar el proyecto si es muy riesgoso o no es factible, asegurando el compromiso de la administración para continuar según lo planeado.
Una vez revisadas las actividades, los ciclos definen líneas específicas a seguir. En el Ciclo 0 (grupos de aplicación) se determina la viabilidad de un grupo apropiado de aplicaciones.
En el Ciclo 1 (objetivos del ciclo de vida de la aplicación) se desarrollan los objetivos del ciclo de vida, incluyendo prototipos, planes y especificaciones de aplicaciones individuales, y se verifica la existencia de al menos una arquitectura viable para cada aplicación. En el
Ciclo 2 (arquitectura del ciclo de vida de la aplicación) se establece una arquitectura del ciclo de vida detallado, se verifica su viabilidad, y se determina que no existen riesgos mayores en satisfacer los planes y especificaciones.
En el Ciclo 3 (capacidad de operación inicial) se alcanza una capacidad operacional inicial para cada etapa crítica del proyecto en el ciclo de vida del software.
Las creencias del modelo son: crear software basado en componentes para lograr mayor calidad en los sistemas de mayor tamaño, escribir software reutilizable para hacer eficiente el proceso de desarrollo, medir la calidad del sistema como aspecto clave del desarrollo del producto, lograr mayor calidad en el proceso de ensamblaje a partir de componentes menores, usar tecnologías basadas en objetos como aspecto básico para lograr la calidad, producir sistemas rápidamente (sencillos, confiables y de calidad) empleando procesos bien definidos, utilizar el modelo espiral como base del proceso, hacer flexible el proceso de creación del software para lograr los objetivos generales de eficiencia, involucrar al cliente mediante el manejo de prototipos y analizar los riesgos en el proceso del desarrollo del software para asegurar la calidad final del sistema.
En el sistema GA  se basa principalmente en resolver los problemas que puedan surgir en el software y así poder tener un mejor producto y uso del mismo, para lograr esto se usaran los manuales de contingencia y de mantenimiento.
Para justificar de una forma más exacta el uso de dicho modelo en el sistema GA  es porque este modelo se basa principalmente del modelo espiral el cual tiene una secuencias de actividades como son el análisis, diseño, pruebas, implementación; el sistema GA utilizo todas estas actividades para poder ser realizado con esto podemos destacar que se podrán obtener a su vez las diferentes versiones que pueden ser realizadas por medio de dichas actividades, ya que nuestro sistema GA  tendrá diferentes actualizaciones que se enfocan en las versiones de mismo. También podemos destacar que nuestro sistema se basa en la tecnología gratuita para el software y esto a su vez mejor la calidad del mismo, ya que el modelo Ganar-ganar se basa principalmente en la calidad y eficiencia de un sistema.

2.2.2 PROCESO UNIFICADO (UP)

El proceso unificado (en inglés, UPunifi ed process) 13 es una extensión al proceso objectory (del inglés object factory),14 que tiene sus orígenes en la década de los años 80. Estos modelos de proceso se basan principalmente en la especificación de requerimientos de un sistema mediante casos de uso (maneras de utilizar un sistema).
El proceso unificado considera como aspecto esencial del desarrollo de software una visión que parte de la arquitectura del sistema, siguiendo un proceso iterativo e incremental. El proceso considera e integra diferentes aspectos, como son los ciclos, fases, flujos de trabajo, mitigación de riesgo, control de calidad, administración de proyecto y control de configuración. De manera adicional, el proceso unificado considera las cuatro P del desarrollo de software: personas, proyecto, producto y proceso.
El proceso unificado tiene las siguientes creencias: para construir un sistema exitoso se debe conocer qué quieren y necesitan los usuarios potenciales; al igual que la arquitectura, en la construcción, permite diseñar edificios desde múltiples puntos de vista, estructura, electricidad, etc., las arquitecturas de los sistemas de software deben permitir visualizar un sistema desde múltiples perspectivas; y el desarrollo de un producto de software comercial puede significar un gran esfuerzo continuando por meses, años o incluso más, por lo que es práctico dividir el trabajo en pedazos, donde cada iteración resulta en un incremento del proyecto.

2.2.3 INGENIERÍA WEB

¿Qué es un navegador? “Un navegador, navegador red o navegador web (del inglés, web browser) es una aplicación de software que permite al usuario recuperar y visualizar documentos de hipertexto, comúnmente descritos en HTML.
Protocolos comunes soportados por un Web Browser:
·         HTTP / HTTPS
·         E-mail
·         FTP
·         NNTP (Usenet)
·         SSL
·         IRC
·         Gopher
·         EV
·         IDN
·         data:URL
·         BitTorrent
·         IPv6

Navegadores comunes;
·         Internet Explorer,
·         Mozilla Firefox,
·         Safari, Opera,
·         Avant Browser,
·         Konqueror,
·         Lynx,
·         Google Chrome,
·         Maxthon,
·         Flock,
·         Arachne,
·         Epiphany,
·         K-Meleon,
·         AOL Explorer.


2.2.4 METODOLOGÍAS ÁGILES

Esta metodología nace en febrero del 2001 en una reunión celebrada en Utah, EEUU.
Principales ideas de la metodología ágil:

·         Se encarga de valorar al individuo y las iteraciones del equipo más que a las herramientas o los procesos utilizados.
·         Se hace mucho más importante crear un producto software que funcione que escribir mucha documentación.
·         El cliente está en todo momento colaborando en el proyecto.
·         Es más importante la capacidad de respuesta ante un cambio realizado que el seguimiento estricto de un plan