martes, 5 de octubre de 2010

Metodologias del desarrollo del software


Metodologías estructuradas

La metodología de desarrollo lo que pretende es resolver un problema o necesidad, y para ello parte de la petición del cliente y con sucesivas fases obtiene una solución informática.


Metodologías estructuradas orientadas a procesos

Estas metodologías orientadas a procesos estudian cómo son transformados los flujos de datos por los procesos, desde la entrada hasta la salida. Por tanto, hacen más hincapié en los procesos que en los datos.


Metodologías para sistemas de tiempo real

Un sistema informático que debe captar señales (como los radares) sin perder ninguna y que debe contestar a las mismas antes de un determinado momento es un sistema de tiempo real. En estos sistemas la velocidad de respuesta es fundamental.
 


Metodologías orientadas a objetos: RUP

Ha habido varias metodologías, pero la que se ha consolidado actualmente y tiene más presencia en la Ingeniería del software es el Proceso Unificado (RUP) que utiliza las técnicas proporcionadas por el Lenguaje de Modelado Unificado (UML). 


Metodologías de desarrollo ágil

Las metodologías tradicionales exigen demasiado esfuerzo, sobre todo para empresas de desarrollo pequeñas y en desarrollos de proyectos pequeños. En este contexto, el mercado necesita ciclos de desarrollo más cortos.

Desarrollo ágil: programación extrema
La metodología consiste en un desarrollo incremental con iteraciones cortas y programación rápida, cuya particularidad es dar mayor valor al individuo, a la colaboración con el cliente (que forma parte del equipo), pues son los requisitos para llegar al éxito del proyecto.
 

 
 

 

lunes, 4 de octubre de 2010

Modelos de ciclo de vida del software

Un modelo de ciclo de vida define el estado de las fases a través de las cuales se mueve un proyecto de desarrollo de software.

Definición de un Modelo de Ciclo de Vida

Un modelo de ciclo de vida de software es una vista de las actividades que ocurren durante el desarrollo de software, intenta determinar el orden de las etapas involucradas y los criterios de transición asociadas entre estas etapas.

Un modelo de ciclo de vida del software:
  • Describe las fases principales de desarrollo de software.
  • Define las fases primarias esperadas de ser ejecutadas durante esas fases.
  • Ayuda a administrar el progreso del desarrollo, y
  • Provee un espacio de trabajo para la definición de un detallado proceso de desarrollo de software.
Así, los modelos por una parte suministran una guía para los ingenieros de software con el fin de ordenar las diversas actividades técnicas en el proyecto, por otra parte suministran un marco para la administración del desarrollo y el mantenimiento, en el sentido en que permiten estimar recursos, definir puntos de control intermedios, monitorear el avance, etc.


Alternativas de Modelos de Ciclo de Vida

Modelo Cascada

Este es el más básico de todos los modelos, y sirve como bloque de construcción para los demás modelos de ciclo de vida. La visión del modelo cascada del desarrollo de software es muy simple; dice que el desarrollo de software puede ser a través de una secuencia simple de fases. Cada fase tiene un conjunto de metas bien definidas, y las actividades dentro de una fase contribuye a la satisfacción de metas de esa fase o quizás a una subsecuencia de metas de la fase. Las flechas muestran el flujo de información entre las fases. La flecha de avance muestra el flujo normal. Las flechas hacia atrás representan la retroalimentación.

El modelo de ciclo de vida cascada, captura algunos principios básicos:
  • Planear un proyecto antes de embarcarse en él.
  • Definir el comportamiento externo deseado del sistema antes de diseñar su arquitectura interna.
  • Documentar los resultados de cada actividad.
  • Diseñar un sistema antes de codificarlo.
  • Testear un sistema después de construirlo.

Modelo De Desarrollo Incremental

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. Es 100% compatible con el modelo en cascada.

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.
Modelo De Desarrollo Evolutivo

Como el modelo de desarrollo incremental, el modelo de desarrollo evolutivo construye una serie de grandes versiones sucesivas de un producto. Sin embargo, mientras que la aproximación incremental presupone que el conjunto completo de requerimientos es conocido al comenzar, el modelo evolutivo asume que los requerimientos no son completamente conocidos al inicio del proyecto.

En el modelo evolutivo, los requerimientos son cuidadosamente examinados, y sólo esos que son bien comprendidos son seleccionados para el primer incremento. Los desarrolladores construyen una implementación parcial del sistema que recibe sólo estos requerimientos.

El sistema es entonces desarrollado, los usuarios lo usan, y proveen retroalimentación a los desarrolladores. Basada en esta retroalimentación, la especificación de requerimientos es actualizada, y una segunda versión del producto es desarrollada y desplegada. El proceso se repite indefinidamente.

Es 100% compatible con el modelo en cascada.



Modelo de Prototipado de Requerimientos.

El prototipado de requerimientos es la creación de una implementación parcial de un sistema, para el propósito explícito de aprender sobre los requerimientos del sistema. Un prototipo es construido de una manera rápida tal como sea posible. Esto es dado a los usuarios, clientes o representantes de ellos, posibilitando que ellos experimenten con el prototipo. Estos individuos luego proveen la retroalimentación sobre lo que a ellos les gustó y no les gustó acerca del prototipo proporcionado, quienes capturan en la documentación actual de la especificación de requerimientos la información entregada por los usuarios para el desarrollo del sistema real. En otro caso, el prototipado puede servir su papel inmediatamente antes de algún o todo el desarrollo incremental en modelos incremental o evolutivo.

Diferente del modelo evolutivo donde los requerimientos mejor entendidos están incorporados, un prototipo generalmente se construye con los requerimientos entendidos más pobremente.


Modelo Espiral

El modelo espiral de los procesos software es un modelo del ciclo de meta-vida. En este modelo, el esfuerzo de desarrollo es iterativo. Tan pronto como uno completa un esfuerzo de desarrollo, otro comienza. Además, en cada desarrollo ejecutado, puedes seguir estos cuatros pasos:


  • Determinar qué quieres lograr.

  • Determinar las rutas alternativas que puedes tomar para lograr estas metas. Por cada una, analizar los riesgos y resultados finales, y seleccionar la mejor.

  • Seguir la alternativa seleccionada en el paso 2.

  • Establecer qué tienes terminado.

  •  
    Durante el primer viaje alrededor de la espiral, analizamos la situación y determinamos que los mayores riesgos son la interfaz del usuario. Después de un cuidadoso análisis de las formas alternativas de direccionar esto (por ejemplo, construir un sistema y esperar lo mejor, escribir una especificación de requerimientos y esperar que el cliente lo entienda, y construir un prototipo), determinamos que el mejor curso de acción es construir un prototipo.

    Lo realizamos. Luego proveemos el prototipo al cliente quien nos provee con retroalimentación útil. Ahora, comenzamos el segundo viaje alrededor de la espiral. Este tiempo decidimos que el mayor riesgo es ese miedo a que muchos nuevos requerimientos comiencen a aparecer sólo después de que el sistema sea desplegado. Analicemos las rutas alternativas, y decidimos que la mejor aproximación es construir un incremento del sistema que satisfaga sólo los requerimientos mejor entendidos.

    Hagámoslo ya. Después del despliegue, el cliente nos provee de retroalimentación que dirá si estamos correctos con esos requerimientos, pero 50 nuevos requerimientos ahora se originarán en las cabezas de los clientes. Y el tercer viaje alrededor de la espiral comienza.

    El modelo espiral captura algunos principios básicos:
    • Decidir qué problema se quiere resolver antes de viajar a resolverlo.
    • Examinar tus múltiples alternativas de acción y elegir una de las más convenientes.
    • Evaluar qué tienes hecho y qué tienes que haber aprendido después de hacer algo.
    • No ser tan ingenuo para pensar que el sistema que estás construyendo será "EL" sistema que el cliente necesita, y
    • Conocer (comprender) los niveles de riesgo, que tendrás que tolerar.
    El modelo espiral no es una alternativa del modelo cascada, ellos son completamente compatible.


    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.


    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.
    En todos estos casos, diversas actividades están ocurriendo simultáneamente. Eligiendo seguir un proyecto usando técnicas de modelación concurrente, se posibilita el conocimiento del estado verdadero en el que se encuentra el proyecto.

    El ciclo de vida del software

    El término ciclo de vida del software describe el desarrollo de software, desde la fase inicial hasta la fase final. El propósito de este programa es definir las distintas fases intermedias que se requieren para validar el desarrollo de la aplicación, es decir, para garantizar que el software cumpla los requisitos para la aplicación y verificación de los procedimientos de desarrollo: se asegura de que los métodos utilizados son apropiados.
    Estos programas se originan en el hecho de que es muy costoso rectificar los errores que se detectan tarde dentro de la fase de implementación. El ciclo de vida permite que los errores se detecten lo antes posible y por lo tanto, permite a los desarrolladores concentrarse en la calidad del software, en los plazos de implementación y en los costos asociados. 

    El ciclo de vida básico de un software consta de los siguientes procedimientos :
    • Definición de objetivos: definir el resultado del proyecto y su papel en la estrategia global.
    • Análisis de los requisitos y su viabilidad: recopilar, examinar y formular los requisitos del cliente y examinar cualquier restricción que se pueda aplicar.
    • Diseño general: requisitos generales de la arquitectura de la aplicación.
    • Diseño en detalle: definición precisa de cada subconjunto de la aplicación.
    • Programación (programación e implementación): es la implementación de un lenguaje de programación para crear las funciones definidas durante la etapa de diseño.
    • Prueba de unidad: prueba individual de cada subconjunto de la aplicación para garantizar que se implementaron de acuerdo con las especificaciones.
    • Integración: para garantizar que los diferentes módulos se integren con la aplicación. Éste es el propósito de la prueba de integración que está cuidadosamente documentada.
    • Prueba beta (o validación), para garantizar que el software cumple con las especificaciones originales.
    • Documentación: sirve para documentar información necesaria para los usuarios del software y para desarrollos futuros.
    • Implementación
    • Mantenimiento: para todos los procedimientos correctivos (mantenimiento correctivo) y las actualizaciones secundarias del software (mantenimiento continuo).
    El orden y la presencia de cada uno de estos procedimientos en el ciclo de vida de una aplicación dependen del tipo de modelo de ciclo de vida acordado entre el cliente y el equipo de desarrolladores.

    Fases del desarrollo del software

    ANÁLISIS : aquí se decide que hacer

    - Estudio de viabilidad

    - Deducción de requisitos

    - Análisis de requisitos

    - Modelado del sistema

    - Prototipado

    - ...


    DISEÑO : aquí se decide como hacerlo

     - Arquitectura del sistema

    - Detallado

    - Interfaz de usuario

    - Datos

    - ...


    CONSTRUCCIÓN

    - CODIFICACIÓN. Hacerlo.
    - PRUEBAS. Probar el producto.
    - INSTALACIÓN. Usar el producto obtenido.


    MANTENIMIENTO : seguimiento del producto durante su funcionamiento real

    - Inspecciones y revisiones

    - Planificación de prueba

    - Pruebas de unidad

    - Pruebas de integración

    - Pruebas de regresión

    - Pruebas del sistema

    - Pruebas de aceptación

    - ...

    Durante todas estas fases tiene que haber una aceptación de producto

    jueves, 30 de septiembre de 2010

    Fundamentos de la ingenieria del SW

    Los fundamentos de la Ingenieria del Software se basa en el uso de unos métodos, procedimientos y herramientas específicos para poder facilitar la realización de tareas del ser humano a traves de un producto de software fiable, de alta calidad  y de bajo coste.

    Dichos métodos son :

    - Planificación y estimación : Por esto, el primer paso del ciclo de vida de un proyecto consiste en un análisis de las características y el comportamiento del sistema del cual el software va a formar parte.

    - Análisis de Requisitos : El ingeniero del software debe comprender cuáles son los datos que se van a manejar, cuál va a ser la función que tiene que cumplir el software, cuáles son los interfaces requeridos y cuál es el rendimiento que se espera lograr.

    - Diseño : El diseño es el proceso que traduce los requisitos en una representación del software de forma que pueda conocerse la estructura de los datos, la arquitectura de las aplicaciones, la estructura interna de los programas y las interfaces antes de comenzar la codificación.

    - Codificación : La codificación consiste en la traducción del diseño a un formato que sea legible para la máquina.

    - Prueba : El objetivo es comprobar que no se hayan producido errores en alguna de las fases de
    traducción anteriores, especialmente en la codificación.

    - Utilización : Una vez superada la fase de pruebas, el software se entrega al cliente y comienza
    la vida útil del mismo.

    - Mantenimiento :

    El software sufrirá cambios a lo largo de su vida útil. Estos cambios pueden ser
    debidos a tres causas:

    · Que, durante la utilización, el cliente detecte errores en el software: los errores
    latentes.
    · Que se produzcan cambios en alguno de los componentes del sistema
    informático: por ejemplo cambios en la máquina, en el sistema operativo o en los
    periféricos.
    · Que el cliente requiera modificaciones funcionales (normalmente ampliaciones)
    no contempladas en el proyecto.

    En cualquier caso, el mantenimiento supone volver atrás en el ciclo de vida, a las
    etapas de codificación, diseño o análisis dependiendo de la magnitud del cambio.

    Existen herramientas específicas que resultan realmente útiles apra facilitar determinadas acciones del ser humano como :

    - Herramientas CASE : son diversas aplicaciones informáticas destinadas a aumentar la productividad en el desarrollo de software reduciendo el costos de las mismas en términos de tiempo y de dinero. Estas herramientas nos pueden ayudar en todos los aspectos del ciclo de vida de desarrollo del software en tareas como el proceso de realizar un diseño del proyecto, calculo de costes, implementación de parte del código automáticamente con el diseño dado, compilación automática, documentación o detección de errores entre otras.

     - Herramientas CAD : herramientas que permiten el diseño asistido desde un ordenador

    miércoles, 29 de septiembre de 2010

    Tipos de Sistemas de Información


    La primera clasificación se basa en la jerarquía de una organización y se llamó el modelo de la pirámide. Según la función a la que vayan destinados o el tipo de usuario final del mismo, los SI puedes clasificarse en:

    • Sistema de Procesamientro de transacciones (TPS). - Gestiona la información referente a las transacciones producidas por una empresa u organización.
    • Sistema de información general (MIS). - Orientados a solucionar problemas empresariales en general.
    • Sistemas de información gerencial (DDS). - Herramienta para realizar el análisis de los diferentes variables de negocio con la finalidad de apoyar el proceso de toma de decisiones.
    • Sistemas de soporte a decisiones (EIS). - Herramienta orientada a usuarios de nivel gerencial, que eprmite monitorizar el estado de las variables de un área o unidad de la empresa a partir de información interna y externa a la misma.


    Estos sistemas de información no surgieron simultáneamente en el mercado; los primeros en aparecer fueron los TPS, en la década de los 60, sin embargo, con el tiempo, otros sistemas de información comenzó a evolucionar.

    • Sistemas de automatización de oficianas (OAS). - Aplicaciones destinadas a ayudar al trabajo diario del administrativo de una empresa u organización.
    • Sistema de planificación de recursos (ERP). - Integran la información y los procesos de una organización en un solo sistema.
    • Sistema experto (SE). - Emulan el comportamiento de un experto en un dominio concreto  
    Los últimos fueron los SE, que alcanzaron su auge en los 90 (aunque estos últimos tuvieron una tímida aparición en los 70 que no cuajó, ya que la tecnología no estaba suficientemente desarrollada).