domingo, 18 de mayo de 2014

MODELOS EVOLUTIVOS DE SOFTWARE


CORPORACIÓN UNIVERSITARIA REMINGTON 




MARIO JAVIER PARRA VALLEJO





Temas de Investigación: 

MODELOS EVOLUTIVOS DE SOFTWARE
PROBLEMAS EN EL DESARROLLO DE SOFTWARE
REFLEXION EVOLUCIÓN SISTEMAS DE SOFTWARE




Docente:
Ing. FABIAN PARRA PAY



ESPECIALIZACIÓN  EN GERENCIA DE INFORMÁTICA
SISTEMAS DE SOFTWARE

San Juan de Pasto, Mayo 2014


ACTIVIDAD 2

     1.       Cuáles son los modelos evolutivos de software y porque se caracterizan?

    2.       Cuáles son los problemas más frecuentes en el desarrollo de software, explíquelo con un ejemplo.

    3.    Que reflexión puede sacar frente a la evolución que ha presentado los sistemas de software frente a la facilidad de uso, adaptabilidad, costos.

    DESARROLLO ACTIVIDAD:

     1.       Cuáles son los modelos evolutivos de software y porque se caracterizan?

RTA./

MODELOS EVOLUTIVOS DE SOFTWARE

1.1 MODELO INCREMENTAL
1.2 MODELO EN ESPIRAL
1.3. MODELO WINWIN
1.4. MODELO DE DESARROLLO CONCURRENTE

Se caracterizan porque:

· Se adaptan más fácilmente a los cambios introducidos a lo largo del desarrollo.

· Iterativos

· En cada iteración se obtienen versiones más completas del SW.



Qué es un modelo de desarrollo?

Un modelo de desarrollo es una representación abstracta de un proceso de software, cada modelo representa el proceso de desarrollo de software de una manera en particular. A pesar de estar definidos claramente, no representan necesariamente la realidad de cómo se debe desarrollar el software, sino que establece un enfoque común. Un modelo puede ser modificado y adaptado de acuerdo a las necesidades del software en desarrollo.

En forma general podemos clasificar los modelos de desarrollo en 3 grupos:

1. El modelo en cascada. Considera las actividades fundamentales del proceso de especificación, desarrollo, validación y evolución, y los representa como fases separadas del proceso, tales como la especificación de requerimientos, el diseño del software, la implementación, las pruebas, etcétera.

2. 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.

3. Ingeniería del software basada en componentes. Este enfoque se basa en la existencia de un número significativo de componentes reutilizables. El proceso de desarrollo del sistema se enfoca en integrar estos componentes en el sistema más que en desarrollarlos desde cero.
Aunque existen muchos tipos de modelos de desarrollo, de forma genérica la mayoría está clasificada en una de estas 3 categorías, y estos a pesar de ser diferentes a veces son usados de manera simultáneamente especialmente en sistemas grandes. 


Desarrollo Evolutivo

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.


Desde el punto de vista de desarrollo de sistema el enfoque evolutivo suele traer más ventajas en comparación con un enfoque en cascada ya que el sistema se va ajustando a las necesidades del cliente, a la vez que él mismo entiende mejor sus propios requerimientos. Sin embargo el enfoque evolutivo desde una perspectiva de ingeniería y gestión suele tener dos grandes problemas:


1. El proceso no es visible. Los administradores tienen que hacer entregas regulares para medir el progreso. Si los sistemas se desarrollan rápidamente, no es rentable producir documentos que reflejen cada versión del sistema.


2. A menudo los sistemas tienen una estructura deficiente. Los cambios continuos tienden a corromper la estructura del software. Incorporar cambios en él se convierte cada vez más en una tarea difícil y costosa.
Aunque supone grandes ventajas el desarrollo evolutivo solo es recomendado para sistemas pequeños y medianos. En los sistemas grandes, los constantes cambios en el desarrollo solo dificultan la estabilidad y la integración de los avances de los distintos grupos de trabajo que puedan existir. La mayoría de las empresas que desarrollan grandes sistemas usan un modelo mixto que usa las mayores fortalezas de los enfoques evolutivos y de cascada.


1.1 MODELO INCREMENTAL

El modelo incremental es una unión de las mejores funcionalidades del modelo de cascada y del modelo de prototipos. A medida que se presenta un prototipo se produce un “incremento”, que es una iteración del proceso anterior pero aplicando las experiencias aprendidas del proceso anterior. A diferencia del modelo de prototipos, los prototipos de este modelo están orientados a ser operacionales en cada incremento y no ser solo una “previa” de cómo sería el sistema en su versión final.

Los riesgos asociados con el desarrollo de sistemas largos y complejos son enormes. Una forma de reducir los riesgos es construir sólo una parte del sistema, reservando otros aspectos para niveles posteriores. El desarrollo incremental es el proceso de construcción siempre incrementando subconjuntos de requerimientos del sistema. Típicamente, un documento de requerimientos es escrito al capturar todos los requerimientos para el sistema completo.

Note que el desarrollo incremental es 100% compatible con el modelo cascada. El desarrollo incremental no demanda una forma específica de observar el desarrollo de algún otro incremento. Así, el modelo cascada puede ser usado para administrar cada esfuerzo de desarrollo, como se muestra en la figura.


El modelo de desarrollo incremental provee algunos beneficios significativos para los proyectos:

· Construir un sistema pequeño es siempre menos riesgoso que construir un sistema grande.

· Al ir desarrollando parte de las funcionalidades, es más fácil determinar si los requerimientos planeados para los niveles subsiguientes son correctos.

· Si un error importante es realizado, sólo la última iteración necesita ser descartada.

· Reduciendo el tiempo de desarrollo de un sistema (en este caso en incremento del sistema) decrecen las probabilidades que esos requerimientos de usuarios puedan cambiar durante el desarrollo.

· Si un error importante es realizado, el incremento previo puede ser usado.

· Los errores de desarrollo realizados en un incremento, pueden ser arreglados antes del comienzo del próximo incremento.

En la figura se muestra un refino del diagrama previo, bajo un esquema temporal, para obtener finalmente el esquema del Modelo de ciclo de vida Iterativo Incremental, con sus actividades genéricas asociadas. Aquí se observa claramente cada ciclo cascada que es aplicado para la obtención de un incremento; estos últimos se van integrando para obtener el producto final completo. Cada incremento es un ciclo Cascada Realimentado, aunque, por simplicidad, en la figura 5 se muestra como secuencial puro.

Se observa que existen actividades de desarrollo (para cada incremento) que son realizadas en paralelo o concurrentemente, así por ejemplo, en la figura, mientras se realiza el diseño detalle del primer incremento ya se está realizando en análisis del segundo.

Ventajas:

El modelo proporciona todas las ventajas del modelo en cascada realimentado, reduciendo sus desventajas sólo al ámbito de cada incremento.

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.

Critica:

En este modelo se debe especificar con precisión todo lo que el sistema va a hacer antes de desarrollarlo. Lo cual lo hace manejable y disminuiría los costos.



1.2 MODELO EN ESPIRAL

Este es un modelo de proceso de software evolutivo, el cual enlaza la naturaleza iterativa de la construcción de prototipos, pero conservado aquellas propiedades del modelo en cascada.

El modelo en espiral fue desarrollado por Boehm, quien lo describe así:

El modelo de desarrollo en espiral es un generador de modelo de proceso guiado por el riesgo que se emplea para conducir sistemas intensivos de ingeniería de software concurrente y a la vez con muchos usuarios.

Características:

· Un enfoque cíclico para el crecimiento incremental del grado de definición e implementación de un sistema, mientras que disminuye su grado de riesgo.

· Un conjunto de puntos de fijación para asegurar el compromiso del usuario con soluciones de sistema que sean factibles y mutuamente satisfactorias.

El modelo espiral no es una alternativa del modelo cascada, ellos son completamente compatibles.

Funcionamiento del modelo Espiral



En cada vuelta tomamos en cuenta:

· Los Objetivos: Que necesidad debe envolver el programa.

· Alternativas: Los varios métodos de alcanzar los objetivos de manera exitosa, a través de diferentes puntos como son:

o Características: experiencia del personal, exigencias a efectuar. 

o Formas de gestión del programa. 

o Riesgo tomado con cada alternativa. 

· Desarrollar y Verificar: Programar y probar el programa .

· Se planificaran los siguientes pasos y se volverá a empezar la espiral. La espiral tiene una forma de caracola y se dice que mantiene dos dimensiones la radial y la angular:

o Angular=Avance del proyecto Software, dentro de un ciclo. 

o Radial=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 largos como pueden ser la creación de un Sistema Operativo. Y que necesitan constantes cambios.

Al ser un modelo de Ciclo de Vida orientado al riesgo se dice que uno de los aspectos fundamentales de su éxito radica en que el equipo que lo aplique sea capaz de detectar y catalogar correctamente dicho riesgo.

Desventajas: 
Requiere mucha experiencia y habilidad para la evaluación de los riesgos, lo cual es requisito para el éxito del proyecto. 
Es difícil convencer a los grandes clientes que se podrá controlar este enfoque evolutivo. 

Critica:

Este modelo es útil para grandes proyectos pero no ha sido utilizado tanto como el lineal secuencial o el de prototipos. Tiene similitud con el modelo en cascada, pero aquí lo enfoca en un sistema más real.


1.3. MODELO WINWIN

Una variante interesante del Modelo Espiral previamente visto es el "Modelo Espiral Win-Win" (Barry Boehm). El Modelo Espiral previo (clásico) sugiere 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 WinWin 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.

Critica:

En este modelo las actividades que se definen son importantes como lo son: la identificación del sistema, la determinación de las condiciones y la negociación de estas.



1.4. MODELO DE DESARROLLO 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. 

Esto no sorprende a nadie que ha estado involucrado con las diversas actividades que ocurren en algún tiempo del proceso de desarrollo de software. 

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 (después de todo, los problemas reales cambian, y nuestro entendimiento de los problemas desarrollados también). Es desaconsejado detener el diseño en este camino cuando los requerimientos cambian; en su lugar, existe una necesidad de modificar y rehacer líneas de base de los requerimientos mientras progresa el diseño. Por supuesto, dependiendo del impacto de los cambios de los requerimientos el diseño puede no ser afectado, medianamente afectado o se requerirá comenzar todo de nuevo. 

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. 

En algunos proyectos, múltiples etapas de un producto se han desarrollado concurrentemente. Por ejemplo, no es inusual estar haciendo mantención de la etapa 1 de un producto, y al mismo tiempo estar haciendo mantención sobre un componente 2, mientras que se está haciendo codificación sobre un componente 3, mientras se realiza diseño sobre una etapa 4, y especificación de requisitos sobre un componente 5. 

Critica:

Este modelo se utiliza cuando las actividades están ocurriendo simultáneamente así, se posibilita el conocimiento del estado real en el que se encuentra el proyecto. 


    2.       Cuáles son los problemas más frecuentes en el desarrollo de software, explíquelo con un ejemplo.

RTA./

Se Podría decir que hay tres problemas comunes, dos de ellos habituales y un tercero de índole social y se explica con un ejemplo a continuación:

A. Necesidades no satisfechas o no identificadas
En el caso de las necesidades no satisfechas o no identificadas, el error puede aparecer debido a que se omiten datos durante el desarrollo del proyecto, es por esto que es muy importante no saltar ninguna etapa del ciclo de vida del desarrollo de sistemas. Otra causa de insatisfacción de necesidades es la mala definición de las expectativas de un proyecto en sus orígenes, ya que si no están bien definidos los requerimientos máximos y mínimos que el proyecto debe satisfacer desde el comienzo, los desarrolladores verán afectado su trabajo por el “síndrome de las necesidades que crecen” el cual les dejara hacer cambios en el proyecto en cualquier momento sin detenerse a pensar si esos cambios serán buenos para el proyecto como un todo (por supuesto todos estas modificaciones acarrearan alteraciones en los costos y en los tiempos de entrega).

B. Los habituales: atrasos y costes
Uno de los rasgos característicos y síntoma de “normalidad informática” es que los proyectos informáticos se atrasan y se exceden en los presupuestos económicos.
Decir que el tiempo y dinero se duplican, triplican o cuadruplican ya no tiene sentido, es un hecho y tradición del vulgo. Esto sucede debido a que un proyecto generalmente exige un estudio de viabilidad en el cual muchas veces no se incluyen datos completamente precisos de la cantidad de recursos que cada tarea consumirá, y es en base a este estudio que se hacen estimaciones de los recursos totales que el proyecto va a necesitar. Ya se sabe que en un proyecto informático hay muchas cosas no definidas, pero si esto es sabido y repetido se puede prever. Basta con ver cómo otras profesiones han resuelto estos problemas sabiendo que existen y luego apoyándose con herramientas pero no dejando al azar el propio azar.
En cuanto al atraso, generalmente se debe a que los gestores del proyecto no son buenos gestionando los tiempos de entrega de cada una de las diferentes tareas que el proyecto involucra, es así que cuando tienen un retraso no son capaces de alterar los plazos de entrega finales creyendo que podrán recuperar el tiempo perdido con largas noches y extensos fines de semana. En general esta es una muy mala política de trabajo porque no siempre es posible acelerar otras tareas para ahorrar tiempo en la entrega final.
Por ejemplo, Glass señala que el 40% de los proyectos informáticos son cancelados por estos excesos; mientras, un 33% se enfrentan a cambios de tiempo, costes y alcance. Sin embargo, esta imagen no es propia de la informática, por ejemplo Ribera, nos muestra algunos ejemplos dignos de mención:
§     El proyecto del Opera House de Sidney pasó de 7 millones de dólares a 107 millones de dólares.
§       El proyecto de desarrollo del avión F-22 Raptor que ha superado un coste del billón de dólares.
§      El proyecto del túnel del Canal de la Mancha, cuyo coste inicial de 7,5 billones a llegado a los 17,5 billones de dólares, y se terminó en 1994 en lugar de 1992.
Pero no es necesario pensar en esas grandes empresas humanas, cuya complejidad puede justificar cualquier superación de estimaciones. Se puede pensar en el simple atraso en la construcción de un edificio, algo tan habitual y corriente que se nos pasa desapercibido. Lo que se quiere decir es que fuera de la Informática, los proyectos también se atrasan y cuestan más caros por motivos tan diversos y variopintos como los que se escuchan en informática. Lo que es preocupante es que dentro de la Informática estos problemas se manifiestan tanto a gran escala (como los ejemplos dados por Ribera) como a escala “casera”, viéndose afectado por tanto todo el tejido socio-económico, incluyendo aspectos como el crecimiento organizacional, los planes de empresa, o el presupuesto de una PyME. Y lo peor, se consideran “normales”(!!!!).
C. El social: la imposición de los resultados
Aparte de los comunes problemas de tiempo y coste, está en lo que podría llamarse el problema de ‘adopción por decreto’.
En muchas ocasiones los productos informáticos son impuestos por las jerarquías administrativas sin una asimilación y/o aceptación del personal o los trabajadores.
Según ciertas culturas este tema resulta conflictivo y un problema a ser resuelto. Un caso de cultura que rechaza esta situación es la escandinava, así, Iivari y Lyytinen destacan que los productos informáticos son artefactos surgidos y definidos por quienes les usarán, los trabajadores.
El problema es básicamente de los principios ligados a la historia de la ingeniería, donde ella busca ser generadora de soluciones a las necesidades de la humanidad, aportando artefactos con un valor agregado y márgenes de ganancia social siempre positivos para el ‘hombre de la calle’. Esta visión se contradice con la costumbre informática de imponer soluciones según el último avance en el área, la última tendencia o lo que sencillamente hay que tener. Al final, ocurren ajustes de trabajo de índole tayloristas que imponen aparentes mejores niveles de eficiencia, lo cual produce una confusión en los fines, por ejemplo, se confunde la búsqueda de procesos de negocios más eficientes (que muchas veces no requiere tecnología) con el aumento de velocidad computacional (se cree que con meter más maquinaria todo será mejor), y/o se confunden mejoras de la eficacia que se pueden conseguir con nuevas prácticas laborales con simples automatizaciones de prácticas de trabajo.
En una sociedad del conocimiento este tipo de actitudes no son permitidas. Imponer resultados no es positivo y más aún cuando existe una tecnología que es esencialmente socio organizacional como las TIC, pues es necesaria la participación libre y colaborativa de todas las personas involucradas en un proceso de construcción de productos informáticos, sean tanto diseñadores de sistemas como usuarios finales.

Entre otras situaciones que se presentan con mayor frecuencia en todo desarrollo de software y en especial en el mundo, el desarrollo de software, son los siguientes:
1. Presión excesiva en el tiempo de ejecución.

2. Cambios en las especificaciones del proyecto.

3. Ausencia de especificaciones técnicas.

4. Ausencia de un proyecto documentado o correctamente documentado.

5. y 6. Demasiadas innovaciones superficiales.

7. Añadir en el desarrollo funcionalidades que no estaban originalmente. (features creep ó requirements creep).

8. Ausencia del método científico.

9. Ignorar lo obvio.

10. Comportamiento poco ético.

A continuación aparecen estos 10 errores más comunes y las medidas que habría que adoptar para evitarlos:

1. Estimación del proyecto con tiempos demasiado ajustados: 
Realizar estimaciones objetivas. 
Asignar más recursos. 
Utilizar mejores recursos. 
Priorizar los requerimientos. 
Requerimientos no especificados. 
Versiones de definitivas por fases. 

2. Cambios en las especificaciones: 
Desarrollo iterativo. 
Modificar el control de la gestión. 

3. Ausencia de especificaciones técnicas:

Desarrollo de las especificaciones iniciales. 
Gestión correcta de las actualizaciones en lo relativo a las especificaciones. 
Gestión a nivel de base de las especificaciones. 
Tener un arquitecto del software. 

4. Ausencia de un proyecto documentado o correctamente documentado:

Desarrollo de un plan inicial. 
Llevar registro periódico y actualizado del proyecto. 
Gestión de las líneas maestras del plan de proyecto. 
La designación de un jefe de proyectos capacitado. 

5. y 6. Demasiadas innovaciones superficiales:

Estudio de los fundamentos. 
Análisis de impacto. 
Una gestión continua de los riesgos. 
Tener un arquitecto de software. 

7. Añadir en el desarrollo funcionalidades que no estaban originalmente proyectadas:

Requerimiento de los fundamentos iniciales. 
Gestión de los fundamentos del proyecto. 
Gestión de los riesgos del proyecto. 
Tener un arquitecto del software. 

8. No utilizar el método científico: 
Realizar prototipos. 
Desarrollo incremental. 
Medición de las prestaciones técnicas. 

9. Ignorar lo obvio:

Los cálculos que van por detrás. 
Asimilación de las lecciones aprendidas. 

10. Comportamiento poco ético:

Ambientes de trabajo ético y de cultura de trabajo. 
Estar adherido al código de ética. 

Estos 10 mandamientos que no deberían violarse en el desarrollo de todo software.

¿ Por qué fallan los Proyectos ? de Software?
1. Planificación Irreal
2 Mala Calidad del Trabajo
3 Personal Inapropiado
4 No Controlar los Cambios

1.Planificación Irreal
“El sistema es para hoy y con costo 0”

Los ingenieros no son capaces de enfrentar un plan porque:
• NO están entrenados para usar métodos de planificación.
• Frecuentemente, las estimaciones NO se basan en datos reales.

2 Mala Calidad del Trabajo
CAUSAS
•Prácticas pobres de ingeniería
•Carencia de métricas de calidad
•Inadecuado entrenamiento en calidad
•Decisiones de los directivos guiadas por una planificación irreal

CONSECUENCIAS
• Tiempos de pruebas impredecibles
• Productos con muchos defectos
• Demoras en la aceptación de los usuarios
• Extensa garantía de servicio y reparaciones

“Una pobre calidad afecta la planificación y torna ineficente el proceso de prueba”

3. Personal Inapropiado

PROBLEMAS COMUNES
Demora del personal
• Escaso personal
• Miembros del equipo a tiempo parcial
• Personal con conocimientos inapropiados

CONSECUENCIAS

El trabajo se demora o descuida
• Trabajo ineficiente
• Sufre la moral del equipo
Con independencia del plan, los proyectos deben comenzar en tiempo y con todo el personal.

4 Cambios NO controlados

HECHOS a RECORDAR:
• Siempre ocurren cambios en los requerimientos.
• Los planes del proyecto se basan en el alcance del trabajo conocido.
• Los cambios siempre requieren más trabajo.
• Sin planes detallados, los equipos no pueden estimar el efecto o magnitud de los cambios.
• Si los equipos no controlan cada cambio, se pierde gradualmente el control del plan del
Proyecto.

A continuación se resumen los errores que ocurren con mayor frecuencia, los  que ocurren con menor frecuencia y los que de ocurrir tienen más impacto:
Errores que ocurren con mayor frecuencia
1.    Planificaciones demasiado optimistas
2.    Expectativas no realistas (o pedirle a un proyecto algo imposible)
3.    Excesivas tareas (cuando, por ejemplo, los desarrolladores están en muchos proyectos a la vez)
4.    Insuficiente aseguramiento de la calidad
5.    Oficinas ruidosas
6.    Incorporación de características (por ejemplo, introducir nuevos requisitos a mitad de proyecto)
7.    Hacerse ilusiones (por ejemplo, cerrar los ojos a lo que se nos viene encima)
8.    Gestión del riesgo insuficiente
9.    Confundir estimaciones con objetivos (cuando por ejemplo el objetivo es tener el software en 3 meses, y de ahí se fija que el desarrollo serán 3 meses)
10.    Omitir tareas relacionadas con la estimación (no guardar históricos para realizar mejores estimaciones, al estimar obviar tareas como son las reuniones, etc.)
Errores que ocurren con menor frecuencia
1.    Cambio de herramientas en mitad del proyecto
2.    Falta de control automatizado del código fuente
3.    Desarrollo dirigido por la investigación
4.    Convergencia prematura o muy frecuente (forzar el cierre de una versión antes de que sea posible)
5.    Estimar obviando el uso de nuevas herramientas o métodos (obviando, por ejemplo, el coste de aprendizaje)
6.    Negociaciones y el “tira y afloja” (entre, por ejemplo, desarrollo y comerciales)
7.    El síndrome de la bala de plata
8.    Errores en la subcontratación
9.    Llevar al equipo en la oscuridad (cuando, por ejemplo, los jefes de proyecto ocultan al equipo el avance y plan de proyecto)
10.    Problemas con el equipo
Errores que provocan problemas de mayor impacto
1.    Expectativas no realistas (o pedirle a un proyecto algo imposible)
2.    Equipo poco preparado
3.    Planificaciones demasiado optimistas
4.    Hacerse ilusiones (por ejemplo, cerrar los ojos a lo que se nos viene encima)
5.    Insuficiente aseguramiento de la calidad
6.    Diseño inadecuado
7.    Falta de apoyo al proyecto
8.    Confundir estimaciones con objetivos (cuando por ejemplo el objetivo es tener el software en 3 meses, y de ahí se fija que el desarrollo serán 3 meses)
9.    Excesivas tareas (cuando, por ejemplo, los desarrolladores están en muchos proyectos a la vez)
10.    Falta de involucración del usuario.



 3.    Que reflexión puede sacar frente a la evolución que ha presentado los sistemas de software frente a la facilidad de uso, adaptabilidad, costos.

RTA./

Se pueden sacar las siguientes reflexiones frente a la evolución que han presentado los sistemas de Software así:

En los modelos evolutivos se produce un sistema inicial que evoluciona según las necesidades del cliente hasta cumplir con los requisitos de este, para luego producir un sistema que satisfaga sus necesidades. Este enfoque enlaza las actividades de especificación, desarrollo y validación. La cual podemos mencionar algunas ventajas como:

- 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.

- Reduce el riesgo de construir productos que no satisfagan las necesidades de los usuarios.

- Reduce costos y aumenta la probabilidad de éxito.

- Exige disponer de las herramientas adecuadas.

- Una vez identificados todos los requisitos mediante el prototipo, se construye el producto de ingeniería.

- Puede adaptarse y aplicarse a lo largo de la vida del software.

- Como el software evoluciona, a medida que progresa el proceso, el desarrollador y el cliente comprenden y reaccionan mejor ante riesgos en cada uno de los niveles evolutivos.

- Permite a quien lo desarrolla aplicar el enfoque de construcción de prototipos en cualquier etapa de evolución del producto.

- Demanda una consideración directa de los riesgos técnicos en todas las etapas del proyecto. Reduce los riesgos antes de que se conviertan en problemáticos.

Las metodologías de desarrollo comienzan a interesarse no sólo en lograr que el proyecto sea puesto en funcionamiento sino en minimizar costos durante su desarrollo y sobre todo durante su mantenimiento. Los nuevos métodos van buscando minimizar riesgos y, puesto que los errores más perjudiciales se producen en los primeros pasos, se comienza ya desde la fase más general del estudio por analizar los riesgos que significa seguir con las siguientes fases del desarrollo.

La trascendencia de las metodologías se ha hecho notoria, pasando de solo programar, luego a establecer funciones en etapas o módulos, continuar en resaltar en la primera etapa el análisis de los requisitos, seguido de basarse en objetos, y por último agilizar el desarrollo del software y minimizar los costos. Estos cambios de paradigma han logrado las mejoras para desarrollar software y aunque principalmente buscar acortar el tiempo de solución sin reprochar los recursos disponibles

Además un proceso de desarrollo de software tiene como propósito la producción eficaz y eficiente de un producto software que reúna los requisitos del cliente. Este proceso es intensamente intelectual, afectado por la creatividad y juicio de las personas involucradas. Aunque un proyecto de desarrollo de software es equiparable en muchos aspectos a cualquier otro proyecto de ingeniería, en el desarrollo de software hay una serie de desafíos adicionales, relativos esencialmente a la naturaleza del producto obtenido. 

Un producto software en sí es complejo, es prácticamente inviable conseguir un 100% de confiabilidad de un programa por pequeño que sea. Existe una inmensa combinación de factores que impiden una verificación exhaustiva de las todas posibles situaciones de ejecución que se puedan presentar (entradas, valores de variables, datos almacenados, software del sistema, otras aplicaciones que intervienen, el hardware sobre el cual se ejecuta, etc.). 

Los modelos de procesos permiten al analista de sistemas desarrollar un plan de requisitos del software, permiten establecer un trabajo en forma ordenada, además que existen muchos modelos que se adaptan a las exigencias del proyecto, solo debemos saber cual nos conviene, pero lo mas importante, es que estos modelos nos llevan a presentar los proyectos al cliente de manera que éste vea su diseño y sus funciones y que la mayoría de ellos están orientados al mantenimiento.


BIBLIOGRAFIA

- http://tema3isoftware.blogspot.com/p/modelos-de-desarrollo-tecnicas-y.html

- www.slideshare.net/jpbthames/modelos-evolutivos-incremental-y-espiral

- «Ingeniería del Software», 7ª Edición, por Ian Sommerville, 4.1.2.

- http://cestay.wordpress.com/2012/01/28/ingenieria-del-proyecto-el-problema-del-desarrollo-de-software-27-problemas-comunes/




GRACIAS

MARIO JAVIER PARRA VALLEJO
Ingeniero de Sistemas



No hay comentarios.:

Publicar un comentario