jueves, 26 de enero de 2012

Diagramas de Colaboración



 Diagrama de Colaboración

Un diagrama de colaboración es una forma alternativa al diagrama de secuencia de mostrar un escenario. Este tipo de diagrama muestra las interacciones entre objetos organizadas entorno a los objetos y los enlaces entre ellos
Los conceptos fundamentales de un diagrama de colaboración:
-Objeto: Se representa con un rectángulo que contiene el nombre y la clase del objeto en un formato.
-Enlaces: Un enlace es una instancia de una asociación en un diagrama de clases. Se representa como una línea continua que une a dos objetos, acompañada por un número que indica el orden dentro de la interacción. Pueden darse varios niveles de subíndices para indicar anidamiento de operaciones. Se pueden utilizar estereotipos para indicar si el objeto que recibe el mensaje es un atributo, un parámetro de un mensaje anterior, si es un objeto local o global.
-Flujo de mensajes: Expresa el envío de un mensaje. Se representa mediante una flecha dirigida cerca de un enlace.
-Marcadores de creación y destrucción de objetos: Puede mostrarse en la gráfica qué objetos son creados y destruidos, agregando una restricción con la palabra new o delete respectivamente.
-Objeto compuesto: Es una representación alternativa de un objeto y sus atributos. En esta representación se muestran los objetos
contenidos dentro del rectángulo que representa al objeto que los contiene.
-Patrón de diseño: Un diagrama de colaboración puede especificar un contrato entre objetos, parte esencial para la descripción de un patrón de diseño. Este diagrama contiene todos los elementos citados de un diagrama de colaboración, dejando libres posiblemente los tipos exactos de algunos objetos o con nombres genéricos para los mensajes. Una instanciación del patrón se representa como una elipse unida mediante flechas punteadas a los objetos o clases que participan realmente en el patrón. Estas flechas pueden tener roles, indicando cuál es el papel de cada elemento dentro del patrón.
-Contexto: Un contexto es una vista de uno o más elementos dentro del modelo que colaboran en el desarrollo de una acción. Se usa para separar los demás elementos en el modelo de este problema en particular y darle énfasis. Puede mostrar sólo los detalles relevantes de las clases u objetos que contiene, para resaltar su utilidad.
-Objeto activo: Un objeto activo es el que contiene su propio flujo de control, a diferencia de un objeto pasivo que encapsula datos y sólo reacciona al enviarle mensajes. Un objeto activo se representa con un rectángulo de bordes gruesos. Puede contener otros objetos


 

Diagrama de Componentes

Diagrama de Componentes
Lo que distingue a un diagrama de componentes de otros tipos de diagramas es su contenido. Normalmente contienen componentes, interfaces y relaciones entre ellos. Y como todos los diagramas, también puede contener paquetes utilizados para agrupar elementos del modelo
Dado que los diagramas de componentes muestran los componentes software que constituyen una parte reusable, sus interfaces, y sus interrelaciones, en muchos aspectos se puede considerar que un diagrama de componentes es un diagrama de clases a gran escala. Cada componente en el diagrama debe ser documentado con un diagrama de componentes más detallado, un diagrama de clases, o un diagrama de casos de uso.
Un diagrama de componentes se representa como un grafo de componentes software unidos por medio de relaciones de dependencia (generalmente de compilación). Puede mostrar también que un componente software contiene una interfaz, es decir, la soporta. Normalmente los diagramas de componentes se utilizan para modelar código fuente, versiones ejecutables, bases de datos físicas, entre otros

Diagramas de Secuencia

Diagramas de Secuencia
Un diagrama de secuencia muestra las interacciones entre objetos ordenadas en secuencia temporal. Muestra los objetos que se encuentran en el escenario y la secuencia de mensajes intercambiados entre los objetos para llevar a cabo la funcionalidad descrita por el escenario. En aplicaciones grandes además de los objetos se muestran también los componentes y casos de uso. El mostrar los componentes tiene sentido ya que se trata de objetos reutilizables, en cuanto a los casos de uso hay que recordar que se implementan como objetos cuyo rol es encapsular lo definido en el caso de uso. El propósito de introducir estas clases es capturar y documentar los requisitos de interfaz, pero no el mostrar como se va a implementar dicha interfaz.









Multiplicidad y Navegabilidad

Multiplicidad y Navegabilidad
La navegabilidad es una propiedad del rol. Indica la posibilidad de ir desde el objeto fuente al objeto destino. En un extremo de una asociación se puede indicar la navegabilidad mediante una flecha. Significa que es posible navegar desde el objeto de la clase origen hasta el objeto de la clase destino y por tanto puede llamar a alguna de sus operaciones.
Multiplicidad indica la cardinalidad de la relación.  Una asociación binaria se representa mediante una línea sólida que une dos clases, se trata de una relación entre las dos clases no muy fuerte, es decir, no se exige dependencia existencial ni encapsulamiento. Es una restricción que se pone a una asociación, que limita el número de instancias de una clase que pueden tener esa asociación con una instancia de la otra clase.

Visibilidad entre Clases

Visibilidad entre Clases
  La visibilidad en un objeto debe ser capaz de ver a otro objeto con el fin de usarlo. Formas de establecer visibilidad de un objeto desde otro son:
 - Visibilidad de Parámetros - Pasar una referencia de un parámetro a un método en el objeto. Mientras que el método esté activo, el objeto especificado por el parámetro es visible (visibilidad temporal).
-Visibilidad de atributos - Use un atributo de objetos como referencia a otro objeto (Visibilidad permanente).
-Global - Hace que la referencia del objeto sea visible globalmente (visibilidad permanente).
-Local - Hace que la referencia del objeto sea visible localmente. Adquiere una referencia objeto a través de otro objeto. Activo solo mientras el método está ejecutándose (visibilidad temporal).
Define una determinada vinculación entre dos tipos. El conector puede indicar el rol de la asociación fuente  y destino, la cordialidad y el tipo de navegabilidad si es bidireccional o unidireccional.



Tipos de relaciones entre clases

Tipos de relaciones entre clases
La agregación: El elemento destino forma parte del elemento fuente. La relación puede romperse sin restricciones es una forma especial de asociación que especifica una relación todo-parte entre el agregado (todo) y una parte que lo compone.  Para modelar objetos complejos, bastan los tipos de datos básicos que proveen los lenguajes: enteros, reales y secuencias de caracteres. Cuando se requiere componer objetos que son instancias definidas por lo siguiente: Por Referencia: Es un tipo de relación dinámica, en donde el tiempo de vida del objeto incluido es independiente del que lo incluye
Es un tipo de relación estática, en donde el tiempo de vida del objeto incluido esta condicionado por el tiempo de vida del que lo incluye. Este tipo de relación es comúnmente llamada Composición (el Objeto base se construye a partir del objeto incluido, es decir, es ''parte/todo''). Es una agregación más fuerte. La composición se representa mediante un rombo relleno del lado de la clase que contiene a la otra en la agregación. Dicha relación sólo puede romperse cumpliendo unas restricciones determinadas
Otro tipo de relación es la Dependencia existencial, el elemento dependiente desaparece al destruirse el que lo contiene y, si es de cardinalidad 1, es creado al mismo tiempo. Se puede decir que el objeto contenido es parte constitutiva y vital del que lo contiene, es decir, tiene una pertenecía fuerte.
La relación de generalización, el elemento destino es una especialización del elemento fuente. Dentro de una escala de abstracción variable, el elemento fuente es el más abstracto. La generalización denotando herencia entre clases, se representa mediante un triángulo sin rellenar del lado de la superclase. La subclase hereda todos los atributos y mensajes descritos en la superclase. Indica que una subclase hereda los métodos y atributos especificados por una Súper Clase, por ende la Subclase además de poseer sus propios métodos y atributos, poseerá las características y atributos visibles de la Súper Clase.
La relación entre clases conocida como Asociación, permite asociar objetos que colaboran entre si. Cabe destacar que no es una relación fuerte, es decir, el tiempo de vida de un objeto no depende del otro. Ejemplo: Un proveedor puede tener asociadas muchas órdenes de compra, pero una orden de compra no puede tener asociadas muchos proveedores.

Diagramas de clase y Operaciones

Diagramas de clase
            Un diagrama de clase es una representación grafica de una colección de elementos estáticos de modelado, es decir, representa las clases que serán utilizadas dentro de un sistema y las relaciones que existen entre ellas. Es el diagrama principal para el análisis y diseño, es decir, lo que el sistema puede hacer y cómo puede ser construido. Nos sirve para visualizar las relaciones entre clases que involucran el sistema las cuales pueden ser agregación, de herencia, de uso y de asociación. Un diagrama de clases está compuesto por los siguientes elementos: atributos, métodos y visibilidad



Operaciones
Una operación es un método o función que una instancia de una clase o interfaz puede ejecutar.  La firma de una operación es la línea de texto que la representa en una clase o interfaz de un diagrama de clases de UML. Donde cada uno de los parámetros en se denota igual que un atributo. Los demás elementos son los mismos que encontramos en la notación de un atributo.


Flujo de eventos y Relacion de asociacion



En un caso de uso, los flujos de eventos se refieren a los pasos que alternadamente van realizando los actores y el sistema en el contexto del requisito funcional capturado en el caso. Dichos pasos por claridad, se separan en el flujo principal y los flujos alternativos; de forma tal que en el flujo principal representamos el día feliz, donde todo ocurre sin problemas y en los flujos alternativos lidiamos con las situaciones de error y el comportamiento esperado del sistema en respuesta a dichos errores
Los flujos primarios son cuando una descripción de los eventos que se van aconteciendo en el uso no se presenta ningún tipo de problema
Flujo de evento alternativo,  es cuando hay algún tipo de variación o problema en el sistema, podemos encontrar tantos apartados de este tipo como situaciones excepcionales se puedan plantear, siendo que para cada uno de estos escenarios atípicos se definirá el flujo de eventos correspondiente.


Relacion de Asociación
Una asociación es una abstracción de la relación existente en los enlaces entre los objetos. Las asociaciones pueden funcionar en ambos sentidos. Las asociaciones no se limitan conectar una clase con otra, pueden conectarse varias clases con una. Cuando necesitamos especificar mas detalles en las asociaciones como restricciones podemos especificarlas encerrándolas entre llaves. Por ejemplo un cajero atiende a un cliente, pero cada cliente es atendido en el orden de su llegada





Flujo de Eventos

Casos de Uso.

Casos de Uso.
            Un caso de uso describe, posiblemente en lenguaje natural, una forma en que un actor del mundo real (persona, organización o sistema externo) interacciona con el modelo. En general, y aunque a menudo se utilizan los términos caso de uso y escenario indistintamente, nos referimos a escenario como un camino dentro de un caso de uso, es decir, un camino que muestra una combinación específica de condiciones en un caso de uso. Llamamos modelo de casos de uso a la combinación de casos de uso y sus correspondientes diagramas. Los modelos de casos de uso se suelen acompañar por un glosario que describe la terminología utilizada. El glosario y el modelo de casos de uso son importantes puntos de partida para el desarrollo de los diagramas de clases.


Entre los elementos de un diagrama de casos de uso pueden estar representadas por líneas dirigidas o no entre ellos:
-Asociación: Es el tipo de relación más básica que indica la invocación desde un actor o caso de uso a otra operación (caso de uso). Dicha relación se denota con una flecha simple.
-Generalización: es una relación que amplía la funcionalidad de un Caso de Uso o refina su funcionalidad original mediante el agregado de nuevas operaciones y/o atributos y/o secuencias de acciones.
-Inclusión: es una relación mediante la cual se re-usa un Caso de Uso encapsulado en distintos contextos a través de su invocación desde otros Casos de Uso.
-Dependencia o Instanciación: Es una forma muy particular de relación entre clases, en la cual una clase depende de otra, es decir, se instancia (se crea). Dicha relación se denota con una flecha punteada.
-Extensión: es una relación que amplía la funcionalidad de un Caso de Uso mediante la extensión de sus secuencias de acciones.
Por último en un diagrama de casos de uso, además de las relaciones entre casos de uso y actor (asociaciones) y las dependencias entre casos de uso (<> y <>), pueden existir relaciones de herencia ya sea entre casos de uso o entre actores.
Las tres relaciones principales entre los casos de uso son soportadas por el estándar UML, el cual describe notación gráfica para esas relaciones: Inclusión, Extensión, y Generalización.

Modelos de caso de Uso

Modelo de Casos de Uso

El modelo de casos de uso documenta el comportamiento del sistema desde el punto de vista del usuario, permitiendo representar las funciones que se desean en el sistema, el entorno del sistema, y las relaciones entre ellos. Aunque la parte más visible de dicho modelo son los diagramas de casos de uso, suele ir acompañado de una especificación textual de cada uno de los casos de uso.



También se puede decir que es una situación particular que se presenta en el funcionamiento del programa, dirigida a algún usuario o modulo del sistema. Cada caso tiene una descripción que especifica la funcionalidad que se incorpora al sistema propuesto. Un caso de uso puede incluir la funcionalidad de otro, o puede extender otro, con su propio comportamiento. Algunos ejemplos son: Agregar Pedido, Eliminar Pedido, Modificar Pedido, etc.

Actores
Un actor es un usuario del sistema. Esto incluye usuario humanos y otros sistemas computacionales. Un actor utiliza un caso de uso para ejecutar alguna transacción del negocio, no forman parte del sistema, sino que representan elementos que interactúan con él; puede introducir, recibir, o introducir y recibir información desde o hacia el sistema. El conjunto de casos de uso al que tiene acceso define rol en el sistema y alcance de su acción.

miércoles, 25 de enero de 2012

Proceso Unificado


El Proceso Unificado y Artefactos.

El Proceso Unificado (UP, “Unified Process”) combina prácticas comúnmente aceptadas como "buenas prácticas", tales como el ciclo de vida iterativo y desarrollo dirigido por el riesgo, en una descripción consistente y bien documentada.

Un proceso es orientado por el riesgo cuando intenta identificar y definir estrategias para enfrentar los riesgos más graves del proyecto, resolviendo primero los puntos más difíciles, elaborando planes de contingencia y tratando de anticipar las dificultades.

Características del Proceso Unificado (UP).



·       Rápida retroalimentación y asimilación de los cambios, posibilitada por el tamaño limitado de lo realizado en cada iteración.



·         Se abordan, resuelven y prueban primeramente las decisiones de diseño críticas o de alto riesgo.



·         Si no se logra cumplir lo previsto dentro del plazo estipulado, se aconseja transferir tareas o requisitos para una iteración posterior, pero no modificar la fecha de entrega de la iteración actual.



·         Desarrollo iterativo e incremental: el proyecto se organiza en una serie de mini proyectos cortos de duración fija llamadas iteraciones, que elige un conjunto reducido de requerimientos, los diseña, implementa y prueba. El resultado de cada iteración es un sistema que puede ser probado, integrado y ejecutado. La salida es un subconjunto con calidad de producción final.




Fases del Proceso Unificado



            Las fases del proceso unificado son las siguientes:



1.-Inicio: visión aproximada, análisis del que hacer de la empresa cliente ("el negocio"), alcance del proyecto, estimaciones de plazos y costos. Se define la viabilidad del proyecto.



2.-Elaboración: visión refinada, implementación iterativa del núcleo central de la aplicación, resolución de los riesgos más altos, identificación de nuevos requisitos y nuevos alcances, estimaciones más ajustadas.



3.-Construcción: implementación iterativa del resto de los requisitos de menor riesgo y elementos más sencillos, preparación para el despliegue (entrega, instalación y configuración).



4.-Transición: pruebas beta, despliegue.




Marco de Desarrollo del Proceso Unificado


Disciplina
Artefacto                            interacciones
Modelado del negocio
Modelo de dominio
Requerimientos
Modelos de caso de uso, especificación, glosario, Visión análisis
Diseño
Modelo de diseño, arquitectura y datos
Implementación
Modelo de implementación
Gestión del proyecto
Plan de desarrollo
Pruebas
Modelo de pruebas
Entorno
Marco de desarrollo

Los Componentes del Proceso Unificado son:

            El cuadro describe las disciplinas de up  y sus artefactos, cada uno se indica en diferente fase. No todos los proyectos requieren todos los artefactos, ni con igual grado de profundidad o detalle. Los artefactos son opcionales y se recomienda usar pocos artefactos, eligiendo los más prácticos para cada proyecto.

Diferentes tipos de ciclos


Modelos de Ciclo de Vida

            Las formas de organizar y estructurar la secuencia de ejecución de las tareas en las diferentes fases de cada uno de los métodos puede dar lugar a un tipo de ciclo de vida diferente; Las principales diferencias entre distintos modelos de ciclo de vida están divididas en 3 grandes visiones:

1.-El alcance de ciclo de vida: depende de hasta donde deseamos llegar con el proyecto.

2.-La cualidad y cantidad de las etapas: que ciclo de vida se escogerá y el proyecto al cual se adaptara.

3.-La estructura y la sucesión de las etapas: si hay realimentación entre las etapas y hay libertad para repetirlas.


Ciclo de Vida en Cascada                             

            El ciclo de vida inicialmente propuesto por Winston Royce en 1970, es el más seguido por las organizaciones. Es un ciclo de vida que admite interacciones, es decir, durante las modificaciones que se hacen en el mantenimiento se puede ver por ejemplo la necesidad de cambiar algo en el diseño, lo cual significa que se harán los cambios necesarios en la codificación y se tendrán que realizar de nuevo las pruebas, es decir, si se tiene que volver a una de las etapas anteriores al mantenimiento hay que recorrer de nuevo el resto de las etapas.  Después de cada etapa se realiza una o varias revisiones para comprobar si se puede pasar a la siguiente. Este sirvió de base para el resto de los ciclos de vida.



 Trabaja en base a documentos, es decir, la entrada y la salida de cada fase es un tipo de documento específico. Idealmente, cada fase podría hacerla un equipo diferente gracias a la documentación generada entre las fases. Algunas de sus ventajas son las siguientes:

·         La planificación es sencilla.

·         La calidad del producto resultante es alta.

·         Permite trabajar con personal poco calificado.

Algunos de sus Inconvenientes


·         Generalmente no se cuenta con todos los requisitos y las especificaciones al principio y surgen necesidades imprevistas.

·         Si se cómete algún error ya avanzada una etapa es difícil regresar a corregir.

·         El cliente no verá resultados hasta el final. No se tiene el producto hasta el final.

·         No se tienen indicadores fiables del progreso del trabajo.

·         Es comparativamente más lento que los demás y el coste es mayor también.

      La necesidad de conocer los requerimientos al principio del proyecto es primordial al elegir este modelo a pesar de permitir iteraciones.


Ciclo de Vida en V

            Propuesto por Alan Davis, tiene las mismas etapas del ciclo de vida de cascada solo que a este se le agregaron dos sub-etapas de retroalimentación entre la etapa de análisis y mantenimiento y entre las de diseño y depuración.




Las ventajas y desventajas de este ciclo son las mismas que las de cascada, con el agregado de los controles entre etapas para lograr una mayor corrección. Este modelo lo podemos utilizar en aplicaciones simples pero de alta confiabilidad como por ejemplo en facturación. Este modelo nos ofrece mayor garantía de corrección al terminar el proyecto.

 

Ciclo de Vida Tipo Sashimi

            Según el modelo en cascada, una fase solo puede empezar cuando ha terminado la anterior. En este caso sin embargo, se permite un solapamiento entre fases. Por ejemplo, sin tener terminado del todo el diseño se comienza a implementar. El nombre ``sashimi’’ deriva del modo del estilo de presentación de rodajas de pescado crudo en Japón. Una ventaja de este modelo es que no necesita generar tanta documentación como el ciclo de vida en cascada debido a la continuidad del mismo personal entre fases.

Los problemas planteados son:

·         Es aún más difícil controlar el progreso del proyecto debido a que los finales de fase ya no son un punto de referencia claro.

·         Al hacer cosas en paralelo si hay problemas de comunicación pueden surgir inconsistencias.

            La fase de ``concepto’’ consiste en definir los objetivos del proyecto, beneficios, tipo de tecnología y el tipo de ciclo de vida. El diseño arquitectónico es el de alto nivel, el detallado el de bajo nivel.
Cuando necesitemos realizar una aplicación que comparta los recursos CPU, memoria y espacio de almacenamiento, con otras aplicaciones tratando de mantener un ambiente productivo, este modelo de ciclo de vida es una opción muy válida. El solapamiento de sus etapas nos permite jugar con el modelo de tres capas ahorrando recursos.

   El  modelo de tres capas es un modelo de programación para aplicaciones de acceso a datos que busca separar la arquitectura del programa en tres capas. En la capa de datos solo nos preocupamos por el almacenamiento de estos, en la capa de negocios situamos todas las transacciones  y validaciones  y en la capa de presentación solo encontramos las rutinas de visualización e interacción con el usuario.

Ciclo de Vida en Cascada con Subproyectos

            Una vez que se ha llegado al diseño arquitectónico, se comprueba que el sistema se divide en varios subsistemas independientes entre sí, sería razonable suponer que a partir de ese punto cada uno se puede desarrollar por separado y en consecuencia en paralelo con los demás. Cada uno tendrá seguramente fechas de terminación distintas. Una vez que han terminado todos se integran y se prueba el sistema en su conjunto.

Es ideal cuando se cuenta con un plantel numeroso de programadores, es una ventaja tener más gente trabajando al mismo tiempo. Pero la desventaja es que pueden surgir ciertas dependencias entre las distintas subetapas que detengan el proyecto temporalmente si no es gestionado de manera correcta, es un modelo donde hay que administrar y poner demasiada atención a los tiempos.

Ciclo de Vida en Cascada Incremental

            En este caso se va creando el sistema añadiendo pequeñas funcionalidades. Se realiza construyendo por módulos que cumplen las diferentes funciones del sistema; esto permite ir aumentando gradualmente las capacidades del software. Este ciclo de vida  facilita la tarea del desarrollo permitiendo a cada del equipo desarrollar un modulo del proyecto. Es una repetición del ciclo de vida en cascada, aplicando se este ciclo en cada funcionalidad del programa a construir.


Cada uno de los pequeños incrementos es parecido a lo que ocurre dentro de la fase de mantenimiento. La ventaja de este método es que no es necesario tener todos los requisitos en un principio. El inconveniente es que los errores en la detección de requisitos se encuentran tarde.


Hay dos partes en el ciclo de vida, por un lado está el análisis y el diseño global. Por otra parte están los pequeños incrementos, con las fases de diseño detallado, codificación y mantenimiento.


Ciclo de Vida en Espiral

Propuesto inicialmente por Boehm en 1988. Consiste en una serie de ciclos que se repiten. Cada uno tiene las mismas fases y cuando termina da un producto ampliado con respecto al ciclo anterior. En este sentido es parecido al modelo incremental, la diferencia importante es que tiene en cuenta el concepto de riesgo. Un riesgo puede ser muchas cosas: requisitos no comprendidos, mal diseño, errores en la implementación, etc.

Hay cuatro actividades que envuelven a las etapas:

Determinar los objetivos a través de una entrevista hecha directamente con el cliente incluyendo todo tipo de requerimientos. La planificación que es el relevamiento de los requerimientos iníciales o luego de una interacción el análisis de riesgo que va de acuerdo con la planificación para ver si es factible continuar con el desarrollo y después se procede a las pruebas y evaluación.
Al terminar una iteración se comprueba que lo que se ha hecho efectivamente cumple con los requisitos establecidos, también se verifica que funciona correctamente. El propio cliente evalúa el producto. No existe una diferencia muy clara entre cuando termina y cuando empieza una fase. Cuando hay que hacer un cambio, este puede consistir en un nuevo ciclo.

Ventajas de este tipo de ciclo: No necesita una definición completa de los requisitos para empezar a funcionar. Al entregar productos desde el final de la primera iteración es más fácil validar los requisitos. El riesgo en general es menor, porque si todo se hace mal, solo se ha perdido el tiempo y recursos invertidos en una iteración (las anteriores iteraciones están bien). El riesgo de sufrir retrasos es menor, ya que al identificar los problemas en etapas tempranas hay tiempo de subsanarlos.

Algunas desventajas serian: Es difícil evaluar los riesgos. Necesita de la participación continua por parte del cliente. Cuando se subcontrata hay que producir previamente una especificación completa de lo que se necesita, y esto lleva tiempo.


Ciclo de Vida Orientado a Objetos

considerarse como un modelo pleno a seguir, técnica presentada en los 90´s, tal vez como una de las mejores metodologías para la creación de productos software. Cada funcionalidad o requerimiento solicitado por el usuario, es considerado un objeto. Los objetos están representados por un conjunto de propiedades llamadas atributos, por otra parte el comportamiento que tendrán estos objetos se denominaran métodos.