Universidad Nacional del Santa Facultad de Ingeniería EAP Ingeniería de Sistemas e Informática Desarrollo de Software Orientado a Objetos Versión Mayo – 2009 Por: Ing. Camilo Ernesto Suárez Rebaza Docente UNS Dpto. Acad. Ing. Civil y Sistemas EAP Ingeniería de Sistemas e Informática -2- INDICE I. Fundamentos de la Tecnología Orientada a Objetos....................................... 4 1.1. Conceptos Básicos de la Orientación a Objetos .................................................. 4 1.2. Tecnologías Orientadas a Objetos ........................................................................... 5 II. Sistemas de Información .................................................................................... 7 2.1. Ciclo de Vida de los Sistemas de Información .................................................... 7 2.2. Tipos y Usos de los Sistemas de Información ...................................................... 7 2.3. Metodología para el desarrollo de Sistemas ......................................................... 9 III. Arquitectura Cliente/Servidor ......................................................................... 10 3.1. Terminología y Conceptos ....................................................................................... 11 3.2. Capas en una Arquitectura Cliente /Servidor ..................................................... 13 IV. Lenguaje Unificado de Modelado (UML) ....................................................... 18 4.1. Modelo Conceptual de UML................................................................................... 19 4.2. Modelado de la Arquitectura de un Sistema ....................................................... 24 V. Proceso Unificado de Rational (RUP) ............................................................. 26 5.1. Mejores Prácticas para el desarrollo de Software.............................................. 26 5.2. Estructura del Proceso: Dos dimensiones ............................................................ 30 5.3. Core Workflows (Flujos de Trabajo Central) ..................................................... 36 VI. Rational Rose ..................................................................................................... 39 VII. Bibliografía ........................................................................................................ 41 2 INTRODUCCION En la actualidad los sistemas de información basados en computadoras, son el centro de actividades de muchas organizaciones y objeto de gran consideración en la toma de decisiones. Las tecnologías de información aplicadas eficientemente a los sistemas automatizados hacen posible que las organizaciones tengan una estructura funcional de alto desempeño para actuar como negocios integrados. Esto motiva a que varias organizaciones traten de adoptar los nuevos avances tecnológicos de la información con el propósito de integrar y mejorar el control de su carga procesal. La implantación de sistemas informáticos en las organizaciones no está siendo cabalmente explotada, ya que son pocos los colegios que utilizan adecuadamente sus equipos computarizados, llegando a usar en sus áreas administrativas herramientas ofimáticas para la presentación de documentos y mecanismos manuales para el procesamiento de Datos. Esto conlleva a buscar una mejora en la actual forma de trabajo administrativo de los colegios, automatizando sus principales procesos de control con el fin de obtener información rápida, exacta y oportuna. I. Fundamentos de la Tecnología Orientada a Objetos 1.1. Conceptos Básicos de la Orientación a Objetos Algunas de las ideas fundamentales que subyacen en la tecnología orientada a objetos son las siguientes: Objeto: Los objetos son construcciones representacionales de las entidades. Los objetos encapsulan las características estructurales conocidas como atributos y las características de comportamiento conocidas como operaciones. Los atributos son construcciones que representan las características estructurales de las entidades y determinan los posibles estados de un objeto. Las operaciones son construcciones representacionales de las características de comportamiento de las entidades y determinan los comportamientos posibles de un objeto invocado, en respuesta a la recepción de un mensaje. Los objetos son instanciamientos de clases. Clases: Las clases son descripciones de objetos con una implementación en común. Las clases están ligadas a la implementación uniforme de las características estructurales y de comportamiento, es decir especifica una estructura de datos y los métodos operativos permisibles que se aplican a cada uno de sus objetos. Fundamentalmente, las clases son descripciones de objetos con atributos, implementación de operaciones, semánticas, asociaciones e interacciones comunes. Métodos: Los métodos especifican la forma en que se controlan los datos de un objeto. Los métodos en una clase sólo hacen referencia a las estructuras de datos de ese tipo de objeto. No tienen acceso directo a las estructuras de datos de otros objetos, debiéndoles enviar un mensaje para utilizar su estructura. Herencia: Es un mecanismo mediante el cual se puede crear una nueva clase partiendo de una existente, se dice entonces que la nueva clase hereda las características de la clase existente, aunque se le puede añadir 4 más capacidades o modificar las que tiene. Por lo tanto una subclase puede heredar la estructura de datos y los métodos o algunos de los métodos de su clase padre o superclase. Polimorfismo: Hace referencia a la posibilidad de que dos métodos implementen distintas acciones, aun teniendo el mismo nombre, dependiendo del objeto que lo ejecuta o de los parámetros que recibe. Es una operación que adopta varias formas de implantación, es decir se puede hacer una solicitud de una operación sin conocer el método que debe ser llamado. Estos detalles de la implantación quedan ocultos para el usuario. Mensajes: Un mensaje es una solicitud para llevar a cabo una operación indicada y producir un resultado. Una solicitud invoca una operación específica, con uno o más objetos como parámetros. 1.2. Tecnologías Orientadas a Objetos La Tecnología Orientada a Objetos es un nuevo enfoque sobre la manera de organizar las diferentes piezas que componen un sistema de información (software), el equipo físico (hardware) o una base de datos. Estas piezas son denominadas "objetos", los cuales son pequeños subsistemas independientes con datos propios caracterizados por clases y tipos, y que están regidos por propiedades como herencia, comunicación con lenguejes, poliformismos y otros que en conjunto permiten diferentes ventajas prácticas. Análisis Orientado a Objetos (AOO): En el AOO se distinguen los objetos que van a ser parte de la aplicación. En un primer momento, no se debe enfocar con rigurosidad los objetos que pueden hacer falta en una aplicación. Lo que se hace, es un Brain Storming (tormenta de ideas depuradas con posterioridad), para luego explicar con mayor claridad los puntos funcionales definidos utilizando escenarios. Hay que tener en claro la idea de que un buen análisis puede acortar 5 considerablemente la fase de desarrollo de programas, por ello, no se debe escatimar horas en organizar y estructurar la aplicación en cuestión. Diseño Orientado a Objetos (DOO): El DOO de una aplicación es la implementación del AOO, teniendo en cuenta el lenguaje con el que se va a programar. El enfoque particular del análisis orientado a objetos (AOO), modela la forma en que las personas comprenden y procesan la realidad a través de los conceptos que adquieren. Estos conceptos se pueden implantar por diversos medios, entre los que están las máquinas, computadoras y personas. Así uno de los objetivos del diseño se restringe al software de aplicación, en donde los diseños orientados a objetos (DOO) no necesitan de un lenguaje de programación orientado a objetos para implantarse. Programación Orientada a Objetos (POO): Anteriormente la mayoría de las personas programaban de un modo TOPDown, en el que la programación era totalmente secuencial. En la POO los mismos programas son vistos como objetos. El interés creciente en el campo del análisis y el diseño orientado a objetos es debido a que la programación orientada a objetos (POO) permite la producción de diseños con esquemas flexibles, haciendo posible una fácil estructuración del programa, similar a la forma de pensar humana. Base de Datos Orientada a Objetos (BDOO) : Una base de datos orientada a objetos (BDOO) es una base de datos inteligente que está diseñada para ser físicamente eficiente en el almacenamiento de datos complejos. Las bases de datos orientadas a objetos toman la idea de las bases inteligentes de datos a su conclusión lógica. No se tiene acceso a dato alguno si no es a través de los métodos almacenados en la base de datos. Estos métodos están listos para entrar en acción al momento en que reciben una solicitud. Los datos de todos los objetos quedan entonces encapsulados. 6 II. Sistemas de Información 2.1. Ciclo de Vida de los Sistemas de Información El concepto de ciclo de vida de un sistema de información es medular en las investigaciones de sistemas. Durante su desarrollo, cada sistema se mueve a través de varias fases de un ciclo de vida, después del cual sólo funciona por varios años con un mínimo mantenimiento. El sistema se deteriora gradualmente hasta el punto en que cesa de funcionar por completo y se comienza un nuevo ciclo de vida con el desarrollo de un nuevo sistema. Los autores sobre sistemas de información ilustran el ciclo de vida con diferentes números de fases. Los ciclos de vida de sistemas varían en gran manera en términos de longitud, pero por lo regular el ciclo de vida de un sistema de información está en el rango de 3 a 8 años. 2.2. Tipos y Usos de los Sistemas de Información Los Sistemas de Información cumplen tres objetivos básicos: 1) Automatizar los procesos operativos. 2) Proporcionar información que sirva como apoyo al proceso de toma de decisiones organizacionales. 3) Lograr ventajas competitivas a través de su implantación y uso. Los Sistemas de Información que logran la automatización de procesos operativos dentro de una organización, son llamados frecuentemente Sistemas Transaccionales, ya que su función primordial consiste en procesar transacciones tales como pagos, cobros, entradas, salidas y sus controles. Por otra parte, los Sistemas de Información que apoyan el proceso de toma de decisiones son llamados Sistemas de Soporte a la Toma de Decisiones. El tercer tipo de sistemas, de acuerdo con su uso y objetivo, es el de los Sistemas Estratégicos, los cuales se desarrollan en las organizaciones con el fin de lograr ventajas competitivas, a través del uso de la tecnología de información. Por último se considera un cuarto tipo de Sistemas de Información denominado Sistemas Personales de Información, enfocado a incrementar la productividad de los usuarios. 7 Sistemas de Control de Información: El Control es un sistema que permite asegurar que la puesta en marcha de los objetivos institucionales se desarrolle de acuerdo a la planificación, o bien, que se ajusten los procesos a aquellas variables que no pudieron ser previstas durante el período de planificación. Para diseñar un proceso de control de información, se reconocen cinco pasos esenciales, que son: a) Definición de los resultados deseados por la Institución, para ello los objetivos deben expresarse en términos precisos. b) Establecer predictores de resultados, para controlar el conjunto de actividades durante la marcha del proyecto. c) Definir los estándares para los predictores y los resultados, determinando normas para evaluar tanto los resultados intermedios como los finales. d) Diseñar una red de información y retroalimentación, recopilando información en las diversas etapas del proyecto, y comparándola con las normas definidas. e) Evaluar la información y poner en marcha la acción correctiva. Un Sistema de Control de Información es un Sistema de Informacción transaccional y estratégico que abarca el control de: La planeación y administración de recursos, para apoyar los objetvos del sistema de información Los recursos de cómputo, para ser utilizado en forma efectiva proporcionando controles de entrada y salida adecuados, y guardando los archivos de datos en un almacenamiento seguro. El software del sistema, siguiendo procedimientos sistemáticos para mantener y usar el software adquirido o desarrollado. El acceso a los recursos de cómputo, para prever la seguridad física y lógica de los recursos de cómputo evitando el uso no autorizado. Integridad de Sistemas: La integración es el método o procedimiento que sigue una Institución con el fin de aprovechar todos los medios señalados por la mecánica 8 administrativa. La integridad es considerada como una de las fuerzas de diseño que actúa sobre los componentes principales de un Sistema de Información, permitiendo la comunicación entre dependencias dentro y fuera de un área Institucional. Para desarrollar un Sistema Integral es necesario seguir tres pasos bien marcados, que son: a) Usar métodos adecuados para la selección de elementos y recursos necesarios en cada dependencia institucional. b) Articular rápida y eficazmente los nuevos elementos a la funcionalidad de cada dependencia. c) Estudiar las necesidades de progreso y desarrollo de las nuevas funcionalidades de la institución. La integración de los sistemas de información tienden a diseñarse con un acoplamiento más estrecho entre sus diversas dependencias funcionales, permitiendo que la conectividad y la comunicación mejore dentro de las mismas. La tecnología informática está insertada y enlazada en las organizaciones para una sincronización completa y una coordinación de sus operaciones. Un sistema integral evita la separación funcional y espacial del lugar de trabajo, dando como resultado una malla de información organizacional. 2.3. Metodología para el desarrollo de Sistemas La metodología del desarrollo de sistemas es el camino que siguen los analistas de sistemas para realizar su trabajo. Se emplea el término genérico de analista de sistemas para describir a la persona que tiene la responsabilidad principal de conjuntar los componentes estructurales, dándoles forma y sustancia en conformidad con las fuerzas del diseño para construir sistemas de información exitosos. En una organización pequeña, el analista quizás no solo diseñará el sistema de información, sino que también hará la programación y operará la computadora. En una organización grande el analista de sistemas solo preparará las especificaciones del diseño que se darán a los técnicos. 9 III. Arquitectura Cliente/Servidor La tecnología informática permite no sólo disminuir el papeleo y en general agilizar las operaciones, sino también aumentar la competitividad de la empresa. Los tiempos actuales han modificado substancialmente la forma de operar de las organizaciones y ha inducido modificaciones en el quehacer de la tecnología computacional dentro de ellas. Algunos de los aspectos que han cambiado son los siguientes: Las aplicaciones deben ser desarrolladas más rápidamente pues los requerimientos del negocio cambian rápidamente. La importancia de contar con una buena información destaca el fundamental papel que juegan los sistemas de información. Cada vez es más importante el poder hacer que la información esté disponible en donde se necesita. A medida que crece la competencia, las organizaciones tienen cada vez menos recursos disponibles para los proyectos internos. Con el fin de aumentar la productividad y de facilitar el uso de las aplicaciones por parte de los usuarios, se requieren interfaces simples e intuitivas, y que proporcionen un acceso transparente a la información. Cada vez es mayor la tendencia hacia la integración de los sistemas evitando las "islas de información" en las diferentes dependencias de una empresa. Las aplicaciones deben adaptarse al ritmo vertiginoso de desarrollo de la tecnología, para que puedan aprovechar sus potencialidades. Las tecnologías computacionales modernas buscan responder a éstas necesidades empresariales y para ello plantean nuevas formas de hacer las cosas. Entre ellas una de las más importantes es el llamado modelo o Arquitectura Cliente/Servidor. En el sentido más estricto, el término Cliente/Servidor describe un sistema en el que una máquina cliente solicita a una segunda máquina llamada servidor que ejecute una tarea específica. El cliente suele ser una computadora personal común conectada a una LAN, y el servidor es, por lo general, una máquina anfitriona, como un servidor de archivos PC. Algunas de las principales LAN cliente/servidor con servidores especializados que pueden realizar trabajos para clientes, incluyen a Windows NT, NetWare de Novell, 10 VINES de Banyan y LAN Server de IBM entre otros. Todos estos sistemas operativos de red pueden operar y procesar solicitudes de aplicaciones que se ejecutan en clientes, mediante el procesamiento de las solicitudes mismas. 3.1. Terminología y Conceptos Cliente: Una aplicación que inicia una comunicación con otra se la califica como Cliente. Los usuarios finales invocan aplicaciones cliente cuando utilizan un servicio de red. Cada vez que se ejecuta una aplicación cliente, esta contacta con el servidor, le envía una solicitud de servicio y espera la respuesta o resultados del servicio. Los Clientes interactúan con el usuario, usualmente en forma gráfica. Frecuentemente se comunican con procesos auxiliares que se encargan de establecer conexión con el servidor, enviar el pedido, recibir la respuesta, manejar las fallas y realizar actividades de sincronización y de seguridad. Por lo tanto, un proceso cliente es el encargado de llevar a cabo la interacción con el usuario y de mostrar los resultados de las peticiones de servicio. En la mayoría de las ocasiones los Clientes son mas fáciles de diseñar que los servidores, y no suelen precisar privilegios especiales del sistema para poder funcionar. En general el programa cliente cumple dos funciones distintas: por un lado gestiona la comunicación con el servidor, solicita un servicio y recibe los datos enviados por aquél. Por otro, maneja la interface con el usuario: presenta los datos en el formato adecuado y brinda las herramientas y comandos necesarios para que el usuario pueda utilizar las prestaciones del servidor de forma sencilla. Servidor: Un Servidor es un programa que espera peticiones de servicio por parte de un cliente. El Servidor recibe la petición del cliente, ejecuta el servicio solicitado y retorna los resultados al cliente. No existe una interacción directa entre el usuario y el servidor, de esto se encarga la aplicación 11 cliente. El programa servidor en cambio, sólo tiene que encargarse de transmitir la información de manera eficiente. De esta forma un mismo servidor puede atender a varios clientes al mismo tiempo. Por consiguiente, los Servidores proporcionan un servicio al cliente y devuelven los resultados. En algunos casos existen procesos auxiliares que se encargan de recibir las solicitudes del cliente, verificar la protección, activar un proceso servidor para satisfacer el pedido, recibir su respuesta y enviarla al cliente. Además deben manejar los interbloqueos, la recuperación ante fallas, y otros aspectos afines. Por las razones anteriores la plataforma computacional asociada con los servidores es más poderosa que la de los clientes. Por esta razón se utilizan PCs poderosos, estaciones de trabajo, minicomputadores o sistemas grandes. Por otro lado deben manejar servicios como administración de la red, mensajes, control, administración de la entrada al sistema (“login”), y recuperación. Usualmente en los servidores existe además algún tipo de servicio de bases de datos. Infraestructura de Comunicaciones: Para que los clientes y los servidores puedan comunicarse se requiere una infraestructura de comunicaciones, la cual proporciona los mecanismos básicos de direccionamiento y transporte. La mayoría de los sistemas Cliente/Servidor actuales se basan en redes locales y por lo tanto utilizan protocolos no orientados a conexión, lo cual implica que las aplicaciones deben hacer las verificaciones. La red debe tener características adecuadas de desempeño, confiabilidad, transparencia y administración. En una red de comunicaciones, el cliente es la máquina solicitante y el servidor es la máquina proveedora mediante un software especializado en ambos extremos. Por ejemplo, en un sistema de base de datos basado en redes, la interface de usuario reside en el cliente, y las funciones de almacenamiento y recuperación de datos, en el servidor. 12 Privilegios y Complejidad: Debido a que los servidores a menudo tienen la necesidad de acceder a datos, funciones, o puertos que el sistema operativo protege, el software servidor suele precisar de privilegios del sistema especiales para poder realizar la tarea para la cual ha sido creado. Como consecuencia de esto se tiene mucho cuidado para evitar que los privilegios concedidos al servidor sean aprovechados por los clientes para obtener permisos especiales. Por ejemplo, un servidor de objetos que se ejecuta como un programa privilegiado debe contener código para verificar si un cliente dado tiene permiso para acceder a un objeto en concreto. El servidor no puede relegar esta función sobre el sistema operativo, ya que su estado privilegiado le sitúa, en ciertos aspectos concretos, por encima del sistema. Los programas servidores deben contener código que maneje situaciones de: Autenticación : Verificar la identidad del cliente. Autorización : Determinar si un cliente dado posee permisos para acceder al servicio que suministra. Seguridad de datos : Garantizar que la información no es revelada, de manera no intencionada, a clientes sin autorización. Privacidad : Preservar la información de un usuario de accesos no autorizados. Protección : Garantizar que las aplicaciones de red no puedan abusar de los recursos del sistema. Los servidores que realizan un intensivo uso de la potencia del procesador o que manejan grandes volúmenes de información operan más eficientemente si manejan las solicitudes de servicio concurrentemente. La combinación de privilegios especiales y ejecución concurrente, por norma general, hace que los servidores sean más difíciles de diseñar e implementar que los clientes. 3.2. Capas en una Arquitectura Cliente /Servidor En un esquema Cliente/Servidor clásico (Figura 1) existen dos capas, el cliente y el servidor: éste último está ubicado normalmente en otra 13 máquina, y suele ser un gestor de base de datos, como DB2, SQL Server, Sybase Adaptive Server, Oracle, aunque también puede ser una base de datos más pequeña, como Paradox, dBase, etc., a los cuales se acceden directamente desde una aplicación cliente. Los mejores gestores de base de datos relacionales proporcionan soporte para implementar en ellos diversas reglas de negocio, mediante el uso de claves primarias, integridad referencial, triggers, etc., mientras que sistemas como dBase y otros apenas proporcionan soporte para reglas de negocio. Figura 1 Arquitectura Cliente /Servidor en dos capas Suponiendo que se tenga la información en un gestor de bases de datos potente, entonces se podrá llevar a cabo la codificación de numerosas validaciones: así, si en la base de datos se crea una regla de integridad referencial que indique que todo pedido pertenece a un cliente, el gestor de base de datos rechazará cualquier intento de almacenar un pedido en el que no se indique al mismo. Cualquier aplicación que acceda a esta base de datos se beneficiará de esta y otras validaciones automáticamente, sin tener que añadir ni una línea de código. Si se utiliza una base de datos menos potente, casi todas las reglas de negocio deberán implementarse dentro de los programas que accedan a la base de datos. Si los programas que acceden a la base de datos son varios, garantizar que en todos ellos se respetan todas las reglas puede llegar a ser muy difícil y engorroso, especialmente si se desarrollan con distintas herramientas. Las bases de datos relacionales son cada vez más potentes, pero no todas las reglas de negocio pueden reflejarse en ellas: por ejemplo, las reglas de flujo son bastante difíciles de implementar dentro de la base de datos, y 14 suelen ser las aplicaciones cliente las que controlan que la información siga una ruta válida a través del sistema. El problema se agrava cuando la información del negocio se encuentra en distintas bases de datos, en donde no hay manera de establecer una regla de integridad referencial entre tablas almacenadas en dos bases de datos distintas y correspondientes a distintos gestores de base de datos. De nuevo, la solución al problema es implementar el chequeo en cada aplicación cliente. Por lo tanto es conveniente encontrar la manera de centralizar la gestión de estas reglas en un único lugar, de modo que todo el código necesario no se tenga que duplicar en cada una de las aplicaciones. La solución es crear una aplicación que se encargue de llevar a cabo estas tareas, de modo que todos los clientes pidan o envíen información a la misma, no al gestor de base de datos en el servidor: a éste solo accederá la nueva aplicación, que conforma una nueva capa dentro de un sistema Cliente/Servidor, la capa intermedia o middle-tier (Figura 2), con lo que el sistema pasa de ser un sistema Cliente/Servidor convencional a ser un sistema con tres capas (three-tiered), en la que puede haber varias de estas aplicaciones, llamadas servidores de aplicación, lo que permite distribuir la carga de trabajo. Figura 2 Arquitectura Cliente /Servidor en tres capas (Three-Tiered) Ubicación de las Reglas o la lógica del Negocio : La decisión de dónde ubicar una determinada regla de negocio dentro de una arquitectura Cliente/Servidor en tres capas puede simplificarse mucho 15 si se atiende al tipo de regla. Las reglas del modelo de datos especifican los valores válidos para cada campo de cada tabla. Estas reglas deben ser reforzadas en el servidor. Como complemento de esto, sin embargo, se debe implementar estas validaciones también a nivel de cliente, por una simple razón: evitar trabajo y esperas innecesarias a los usuarios. Por lo que respecta a las reglas de relación, el lugar más adecuado para implementarlas es el servidor. La mayor parte de los gestores de base de datos proporcionan integridad referencial y los mecanismos necesarios para implementar fácilmente estas reglas. Además, el hecho de que los datos necesarios para verificar si se respetan las relaciones residan en la misma base de datos hace que las verificaciones sean rápidas, mientras que si el chequeo se hace en el cliente se incrementará el tráfico de red. Las reglas de derivación pueden variar mucho en complejidad. Lo ideal es implementar las reglas de derivación complejas en la capa intermedia para su ejecución en el servidor, posiblemente mediante un procedimiento almacenado, o mediante una sentencia SQL. Por otro lado, las reglas más sencillas pueden también implementarse en la capa intermedia, de modo que se tenga las reglas de cálculo centralizadas en una única aplicación. Las reglas de restricción deben implementarse en el servidor, o en la capa intermedia. Dado que estas reglas contemplan restricciones en los datos que dependen casi siempre de información presente en varias tablas, llevar a cabo el control en el cliente puede implicar cierto tráfico de red, por lo que es más conveniente situar la implementación de la regla más cerca de los datos. Por último, quedan las reglas de flujo: estas reglas son excelentes candidatas a ser implementadas en la capa intermedia, dado que su complejidad suele ser bastante grande, lo que las hace inmanejables por un gestor de bases de datos. 16 Figura 3 Ubicación de las reglas de negocio dentro del esquema de tres capas Sistemas Cliente/Servidor en tres Capas: Un Sistema Cliente/Servidor en tres capas representa un Sistema Distribuido en el que se han separado los distintos servicios que componen el sistema. La división que normalmente se sigue para estos sistemas es la definición de tres capas lógicas (que posteriormente se convertirán en diferentes capas físicas) de la siguiente manera: En la capa más inferior se encuentra la capa de datos, en esta capa se ubican las diferentes bases de datos de las que la aplicación obtendrá y añadirá datos, en ésta capa también se encuentran los procedimientos almacenados que ayudan a simplificar los accesos, modificaciones e inserciones sobre los datos. La siguiente capa contiene las reglas o la lógica de negocios, en esta capa se definen los componentes (entendiéndose por componente un conjunto de clases que hacen algo) que contienen la definición de las operaciones que son necesarias para que el sistema haga su trabajo, además en dichos componentes residen las operaciones que manejan los datos de la capa inferior. En éstos componentes están las reglas que dicen como utilizar los datos y mantienen la integridad de los mismos. Por otro lado la capa de negocios oculta una posible distribución física de los datos. Por último está la capa de presentación, ésta capa se encarga únicamente de presentar los datos a los usuarios y de establecer la interface para que 17 exista una comunicación entre los mismos usuarios y el sistema. Esta capa carece de procesamiento y se limita únicamente a mostrar los datos a los usuarios y comprobar que las peticiones de los mismos son, por lo menos, semánticamente, correctas y de esta manera evitar que se hagan peticiones a la capa de negocio que a priori son inviables debido a que incumplen algún requisito previo. En éste sentido, un sistema cliente/servidor en tres capas establece, al menos, tres capas donde los usuarios no tienen constancia sobre como se almacenan ni donde residen los datos, estos sólo se comunican con la capa de presentación, ésta se ocupa de procesar las peticiones de los usuarios y transmitirlas a los componentes de la capa de negocios, en esta capa se procesará la petición modificando, pidiendo o consultando los datos necesarios, que son provistos por la capa de datos que además de proveer dichos datos a la capa superior se encarga de almacenarlos y mantenerlos correctamente. IV. Lenguaje Unificado de Modelado (UML) El Lenguaje Unificado de Modelado es un lenguaje estándar para escribir planos de software. UML puede utilizarse para visualizar, especificar, construir y documentar los artefactos de un sistema que involucra una gran cantidad de software. UML es apropiado para modelar desde sistemas de información en empresas hasta aplicaciones distribuidas basadas en la web. Es un lenguaje de modelado que proporciona un vocabulario y reglas para su uso en la representación conceptual y física de un sistema. La decisión de usar actualmente UML como notación para procesos software se debe a que se ha convertido en un estándar de facto que tiene las siguientes características: Permite modelar sistemas utilizando técnicas orientadas a objetos (OO). Cubre la especificación de todas las decisiones de análisis, diseño e implementación, permitiendo la construcción de modelos precisos. Puede conectarse con lenguajes de programación usando Ingeniería directa e inversa (Java, C++, Visual Basic). 18 Permite documentar todos los artefactos de un proceso de desarrollo (requisitos, arquitectura, pruebas, versiones, etc.) Cubre las cuestiones relacionadas con el tamaño propias de los sistemas complejos y críticos. Es un lenguaje muy expresivo que cubre todas las vistas necesarias para desarrollar y luego desplegar los sistemas. Existe un equilibrio entre expresividad y simplicidad, pues no es difícil de aprender ni de utilizar. UML es independiente del proceso, aunque para utilizarlo óptimamente debe ser usado en un proceso dirigido por los casos de uso, centrado en la arquitectura, iterativo e incremental. 4.1. Modelo Conceptual de UML Para comprender UML, se necesita adquirir un modelo conceptual del lenguaje, y esto requiere aprender tres elementos principales: los bloques de construcción de UML, las reglas que dictan cómo se pueden combinar estos bloques básicos y algunos mecanismos comunes que se aplican a través de UML. Bloques de Construcción UML: El vocabulario de UML incluye tres clases de bloques de construcción: Elementos, Relaciones y Diagramas. Los ELEMENTOS son abstracciones de primera clase en un modelo. Hay cuatro tipos de elementos en UML: Elementos estructurales, Elementos de Comportamiento, Elementos de agrupación y Elementos de anotación. Los elementos estructurales, son los nombres de los modelos UML. En su mayoría son las partes estáticas de un modelo, y representan cosas que son conceptuales o materiales. Hay siete tipos de elementos estructurales. 1) Clase: Es una descripción de un conjunto de objetos que comparten los mismos atributos, operaciones, relaciones y semántica. Una clase implementa una o más interfaces. Gráficamente una clase se representa 19 como un rectángulo, que normalmente incluye su nombre, atributos y operaciones. 2) Interfaz : Es una colección de operaciones que especifican un servicio de una clase o componente. Una interfaz puede representar el comportamiento completo de una clase o componente o sólo una parte de ese comportamiento. Gráficamente una interfaz se representa con un círculo junto con su nombre. 3) Colaboración: Define una interacción y es una sociedad de roles y otros elementos que colaboran para proporcionar un comportamiento cooperativo mayor que la suma de los comportamientos de sus elementos. Gráficamente, una colaboración se representa como una elipse de borde discontinuo, incluyendo normalmente sólo su nombre. 4) Caso de Uso: Es una descripción de un conjunto de secuencias de acciones que un sistema ejecuta y que produce un resultado observable de interés para un actor particular. Gráficamente, un caso de uso se representa como una elipse de borde continuo, incluyendo normalmente sólo su nombre. 5) Componente: Es una parte física y reemplazable de un sistema que conforma un conjunto de interfaces y proporciona la implementación de dicho conjunto. Gráficamente, un componente se representa como un rectángulo con pestañas, incluyendo normalmente sólo su nombre. 6) Nodo: Es un elemento físico que existe en tiempo de ejecución y representa un recurso computacional, que por lo general dispone de algo de memoria y, con frecuencia, capacidad de procesamiento. Gráficamente un nodo se representa como un cubo. Los elementos de comportamiento, son las partes dinámicas de los modelos UML. Estos son los verbos de un modelo y representan comportamiento en el tiempo y el espacio. Hay dos tipos principales de elementos de comportamiento. 20 1) Interacción: Es un comportamiento que comprende un conjunto de mensajes intercambiados entre un conjunto de objetos. Gráficamente, un mensaje se muestra como una línea dirigida con el nombre de su operación. 2) Máquina de estados: Es un comportamiento que especifica las secuencias de estados por las que pasa un objeto o una interacción. Gráficamente, un estado se representa como un rectángulo de esquinas redondeadas, incluyendo su nombre y sus subestados. Los elementos de agrupación, son las partes organizativas de los modelos UML. Estos son las cajas en las que puede descomponerse un modelo. Hay un elemento de agrupación principal, los paquetes. 1) Paquete : Es un mecanismo de propósito general para organizar elementos en grupos. Gráficamente, un paquete se visualiza como una carpeta, incluyendo sólo su nombre y, a veces, su contenido. Los elementos de anotación, son las partes explicativas de los modelos UML. Hay un tipo principal de elemento de anotación llamado nota. 1) Nota : Es simplemente un símbolo para mostrar restricciones y comentarios. Gráficamente, una nota se representa como un rectángulo con una esquina doblada, junto con un comentario textual o gráfico. Las RELACIONES en UML son de cuatro tipos: Dependencia, Asociación, Generalización y Realización. Una dependencia, es una relación semántica entres dos elementos, en la cual un cambio a un elemento puede afectar a la semántica del otro elemento. Gráficamente una dependencia se representa como una línea discontinua, posiblemente dirigida, que incluye a veces una etiqueta. Una asociación, es una relación estructural que describe un conjunto de enlaces. La agregación es un tipo especial de asociación, que representa una relación estructural entre un todo y sus partes. Gráficamente, una asociación se representa como una línea continua dirigida, que a veces 21 incluye una etiqueta, y a menudo incluye otros adornos, como la multiplicidad y los nombres del rol. Una generalización, es una relación de especialización/generalización en la cual los objetos del elemento especializado (el hijo) pueden sustituir a los objetos del elemento general (el padre). Gráficamente, una relación de generalización se representa como una línea continua con una punta de flecha vacía apuntando al padre. Una realización, es una relación semántica entre clasificadores, en donde un clasificador especifica un contrato que otro clasificador garantiza que cumplirá. Gráficamente una relación de realización se representa como una mezcla entre una generalización y una relación de dependencia. Los DIAGRAMAS en UML son la representación gráfica de un conjunto de elementos. En teoría, un diagrama UML puede contener cualquier combinación de elementos y relaciones. En la práctica, sin embargo, sólo surge un pequeño número de combinaciones, las cuales son consistentes con las cinco vistas más útiles que comprenden la arquitectura de un sistema. Por esta razón UML incluye nueve diagramas: Un diagrama de clases, muestra un conjunto de clases, interfaces y colaboraciones, así como sus relaciones. Los diagramas de clases cubren la vista de diseño estática de un sistema. Un diagrama de objetos, muestra un conjunto de objetos y sus relaciones. Estos diagramas cubren las vista de diseño estática o la vista de procesos estática de un sistema. Un diagrama de casos de uso, muestra un conjunto de casos de uso y actores relacionados. Los diagramas de casos de uso cubren la vista de casos de uso estática de un sistema. Los diagramas de interacción cubren la vista dinámica de un sistema. Un diagrama de secuencia, es un diagrama de interacción que resalta la ordenación temporal de los mensajes; un diagrama de colaboración, es un diagrama de interacción que resalta la organización estructural de los objetos que envían y reciben mensajes. 22 Un diagrama de estados, muestra una máquina de estados, que consta de estados, transiciones, eventos y actividades. Los diagramas de estados cubren la vista dinámica de un sistema. Un diagrama de actividades, es un tipo especial de diagrama de estados que muestra el flujo de actividades dentro de un sistema. Los diagramas de actividades cubren la vista dinámica de un sistema. Un diagrama de componentes, muestra la organización y las dependencias entre un conjunto de componentes. Los diagramas de componentes cubren la vista de implementación estática de un sistema. Un diagrama de despliegue, muestra la configuración de nodos de procesamiento en tiempo de ejecución y los componentes que residen en ellos. Los diagramas de despliegue cubren la vista de despliegue estática. Reglas de UML: Los bloques de construcción de UML, no pueden simplemente combinarse de cualquier manera. Como cualquier lenguaje, UML tiene un número de reglas que especifican a qué debe parecerse un modelo bien formado. UML tiene reglas semánticas para: Nombres : Cómo llamar a los elementos, relaciones y diagramas. Alcance : El contexto que da un significado específico a un nombre. Visibilidad : Cómo se pueden ver y utilizar esos nombres por otros. Mecanismos Comunes en UML: La construcción de modelos UML se hace más simple y armonioso al ajustarse a un patrón de características comunes. En UML existen cuatro mecanismos comunes: Especificaciones: Proporcionan una base semántica que incluye a todos los elementos de todos los modelos de un sistema. Adornos: Sirven para conferir a los modelos de más semántica, proporcionando a un elemento o modelo más nivel de detalle. Divisiones comunes: Permiten que los modelos se dividan al menos en un par de formas diferentes para facilitar su comprensión. 23 Mecanismos de extensibilidad: Sirven para poder representar ciertos matices, incluye a los estereotipos, los valores etiquetados, y las restricciones. Figura 4 Vista General del Modelo Conceptual de UML 4.2. Modelado de la Arquitectura de un Sistema La visualización, especificación, construcción y documentación de un sistema con gran cantidad de software requiere que el sistema sea visto desde varias perspectivas. La arquitectura de un sistema es quizás el artefacto más importante que puede emplearse para manejar estos diferentes puntos de vista y controlar el desarrollo iterativo e incremental de un sistema a lo largo de su ciclo de vida. La arquitectura de un sistema con gran cantidad de software puede describirse mejor a través de cinco vistas interrelacionadas. Cada vista es una proyección de la organización y la estructura del sistema, centrada en un aspecto particular de ese sistema. 24 La vista de casos de usos, comprende los casos de uso que describen el comportamiento del sistema tal y como es percibido por los usuarios finales, analistas y encargados de las pruebas. La vista de diseño, comprende las clases, interfaces y colaboraciones que forman el vocabulario del problema y su solución. La vista de procesos, comprende los hilos y procesos que forman los mecanismos de sincronización y concurrencia del sistema. La vista de implementación, comprende los componentes y archivos que se utilizan para ensamblar y hacer disponible el sistema físico. La vista de despliegue, contiene los nodos que forman la topología hardware sobre la que se ejecuta el sistema. Figura 5 Modelado de la arquitectura de un sistema 25 V. Proceso Unificado de Rational (RUP) El Proceso Unificado de Rational es un proceso de ingeniería de software que se adapta especialmente a UML. Proporciona una disciplina metodológica para la asignación de tareas y responsabilidades dentro del desarrollo organizacional. Tiene por objetivo asegurar la producción de software de alta calidad de acuerdo a las necesidades de los usuarios finales dentro de un cronograma y presupuesto predecible. RUP es un producto proceso. Es desarrollado y mantenido por Software Rational y viene integrado con un conjunto de herramientas desarrolladoras de software. RUP es también un proceso armazón (framework) que puede ser adaptado y extendido para satisfacer las necesidades de una organización. Esta metodología captura muchas de las mejores prácticas para desarrollar software modernos, de una forma que sea adecuada a un amplio rango de proyectos y organizaciones. 5.1. Mejores Prácticas para el desarrollo de Software Si las causas de los problemas para el desarrollo de software son tratadas de raíz, no sólo se eliminarán los síntomas, sino también se tendrá una mejor posición para desarrollar y mantener software de calidad de un modo repetible y predecible. La mejor práctica software radica en probar todas los posibles métodos en el desarrollo del mismo, de manera que el equipo de trabajo pueda descubrir la causa que origina los problemas durante el desarrollo de software. Estas son las “mejores prácticas” no porque se pueda cuantificar las causas de los problemas en forma precisa, sino porque su uso permitirá el éxito de una organización. Las mejores prácticas para el desarrollo de software son las siguientes: Desarrollar software iterativamente. Manejar requerimientos. Usar una arquitectura basada en componentes. Modelar visualmente el software. Verificar continuamente la calidad del software. Controlar los cambios en el software. 26 Desarrollo de software iterativo El desarrollo de software iterativo ofrece las siguientes soluciones a las causas de los problemas encontrados en su desarrollo: 1) Hace evidente serios errores de manera fácil durante el ciclo de vida, siendo posible reaccionar a ellos. 2) Esta metodología facilita y estimula el uso de la retroalimentación, de manera que responda a los requerimientos reales del sistema. 3) El equipo de desarrollo es forzado para centrarse en los temas más críticos del proyecto, evitando de esta manera los riesgos reales durante su ciclo de vida. 4) Continuas iteraciones permiten probar un objetivo estimado del estado del proyecto. 5) Las inconsistencias entre requerimientos, diseños, e implementaciones son detectadas fácilmente. 6) La carga de trabajo del equipo, especialmente del equipo de pruebas, es dividida más uniformemente a lo largo del ciclo de vida del proyecto. 7) El equipo de trabajo puede usar enseñanzas aprendidas y por consiguiente puede mejorar el proceso continuamente. 8) Pueden detectarse riesgos en el proyecto, proporcionando la evidencia concreta del estado del proyecto a lo largo de su ciclo de vida. Figura 6 Proceso Iterativo e Incremental de RUP 27 Manejo de requerimientos El manejo de requerimientos en un proyecto ofrece las siguientes soluciones a las causas de los problemas durante el desarrollo de software: 1) Una metodología disciplinada que se construye bajo la administración de requerimientos. 2) Las comunicaciones son basadas en requerimientos definidos. 3) Los requerimientos pueden ser priorizados, filtrados, y trazados. 4) Posibilita un objetivo estimado de funcionalidad y rendimiento. 5) Las inconsistencias son detectadas más fácilmente. 6) Con apoyo de la herramienta adecuada, es posible proveer un repositorio para los requerimientos del sistema, atributos, y trazos, con enlaces automáticos a documentos externos. Uso de Arquitectura basada en componentes El uso de una arquitectura basada en componentes ofrece las siguientes soluciones a las causas de los problemas durante el desarrollo de software: 1) Los componentes facilitan la arquitectura elástica. 2) La modularidad permite una clara separación de intereses entre los elementos de un sistema que están sujetas al cambio. 3) El reuso es facilitado para apoyar la estandarización de armazones y poder comercializar los componentes disponibles. 4) Los componentes proveen una base natural para el manejo de configuraciones. 5) Las herramientas de modelamiento visual proveen la automatización para el desarrollo de componentes. Modelado visual del software El modelado visual del software ofrece las siguientes soluciones a las causas de los problemas encontrados en su desarrollo: 1) Los casos de uso especifican comportamientos no ambiguos. 2) Los modelos no ambiguos capturan el diseño del software. 3) La no modularidad y las arquitecturas inflexibles son expuestas. 28 4) Los detalles pueden ser ocultados cuando sea necesario. 5) Los diseños no ambiguos revelan sus inconsistencias más rápidamente. 6) Las herramientas de modelado visual proveen soporte a modelamientos basados en UML. 7) La calidad de la aplicación empieza con un buen diseño. Figura 7 Modelamiento de un Sistema desde diversas perspectivas Verificación continua de la calidad del software La verificación continua de la calidad del software ofrece las siguientes soluciones a las causas de los problemas encontrados en su desarrollo: 1) La estimación del estado del proyecto se hace objetiva, y no subjetivamente, porque prueba los resultados, y no los documentos. 2) Esta estimación del objetivo expone inconsistentes requerimientos, diseños e implementaciones. 3) Las pruebas y las verificaciones se enfocan en las áreas de más alto riesgo, aumentando la calidad y efectividad de estas áreas. 4) Los defectos son identificados tempranamente, reduciendo en forma radical el costo de arreglos. 5) Las herramientas de pruebas automatizadas proveen funcionalidad, fiabilidad, y rendimiento. 29 Control de los cambios en el software El control de los cambios en el software ofrece las siguientes soluciones a las causas de los problemas encontrados en su desarrollo: 1) El flujo de trabajo de los cambios en los requerimientos es definido y repetible. 2) Las peticiones de cambio facilitan comunicaciones claras. 3) Las áreas de trabajo aisladas reducen la interferencia entre los miembros del equipo que trabajan en paralelo. 4) Los cambios en las proporciones estadísticas proveen una buena métrica para evaluar el estado del proyecto objetivamente. 5) Las áreas de trabajo contienen todos los artefactos, que facilitan la consistencia de un cambio. 6) La propagación de un cambio es tasable y controlada. 7) Los cambios pueden mantener a un sistema robusto y personalizado. 5.2. Estructura del Proceso: Dos dimensiones Figura 8 Arquitectura Global del RUP (Dos dimensiones) La figura 8 muestra la arquitectura global del Rational Unified Process. El proceso tiene dos estructuras, o dos dimensiones: El eje horizontal representa el tiempo y muestra como son desplegados los aspectos del ciclo de vida del proceso. 30 El eje vertical representa los flujos de trabajo del proceso central (core process), que agrupa las actividades lógicas por naturaleza. La primera dimensión representa el aspecto dinámico del proceso, tal como es implementado, y es expresado en términos de ciclos, fases, iteraciones e hitos. La segunda dimensión representa el aspecto estático del proceso y sé describe en términos de componentes del proceso, actividades, flujos de trabajo, artefactos y trabajadores. Aspecto Dinámico del RUP Es la dinámica de la organización del proceso a lo largo del tiempo. El ciclo de vida del software está dividido en ciclos y en cada ciclo se trabaja una nueva generación del producto. RUP divide un ciclo de desarrollo en cuatro fases consecutivas: Fase de Iniciación (Inception). Fase de Elaboración (Elaboration). Fase de Construcción (Construction). Fase de Transición (Transition ). Cada fase concluye con un hito o hecho bien definido, que es un punto en el tiempo en donde ciertas decisiones críticas deben hacerse, y por consiguiente en donde se deben haber logrado metas importantes. Fase de Iniciación: Durante la fase de iniciación, se establece los casos de negocio del sistema y se delimita el alcance del proyecto. El resultado de esta fase es: Un documento visión: que es una visión general de los requerimientos centrales del proyecto, características importantes, y restricciones principales. Un modelo de casos de uso inicial (10%-20% completo). Un glosario inicial del proyecto (opcionalmente puede expresar en forma parcial un modelo del dominio). 31 Un caso de negocio inicial que incluye el contexto del negocio, criterios de éxito (proyección de réditos, reconocimiento de mercados, etc.) y la proyección financiera. Un plan del proyecto, mostrando fases e iteraciones. Un modelo de negocio, si es necesario. Uno o varios prototipos. Al final de la fase de iniciación está el primer hito principal del proyecto: Objetivos del ciclo de vida. El proyecto puede ser cancelado o repensado considerablemente si falla al pasar el hito. Entre los principales criterios de evaluación para la fase de iniciación tenemos: Requerimientos entendidos como evidencias fidedignas de los casos de uso primarios. Profundidad y amplitud de cualquier prototipo arquitectónico desarrollado. Fase de Elaboración: El propósito de la fase de elaboración es analizar el dominio del problema, estableciendo un convincente fundamento arquitectónico; además se desarrolla el plan del proyecto. El resultado de la fase de la elaboración es: Un modelo de casos de uso (por lo menos 80% completo), en donde se han identificado todos los casos de uso y actores, y se han desarrollado la mayoría de descripciones de casos de uso. Requerimientos suplementarios que capturan los requerimientos no funcionales y cualquier requerimiento que no está asociado con un caso de uso específico. Una descripción de la Arquitectura del Software. Un prototipo arquitectónico ejecutable. Una lista de casos de negocio revisados. Un plan de desarrollo para el proyecto global, mostrando las “iteraciones” y el criterio de evaluación para cada iteración. Un caso de desarrollo actualizado especificando el proceso a ser usado. 32 Un manual de usuario preliminar (optativo). Al final de la fase de elaboración está el segundo hito principal del proyecto: Arquitectura del ciclo de vida. Aquí se examinan los alcances y los objetivos detallados del sistema, de la arquitectura escogida. El proyecto puede abortarse o ser repensado considerablemente si no pasa este hito. Los principales criterios de evaluación para la fase de la elaboración involucra las respuestas a las siguientes preguntas: ¿Es la visión del producto equilibrada?. ¿Es la arquitectura equilibrada?. ¿Es el plan para la fase de construcción suficientemente detallado y exacto? Fase de Construcción: Durante la fase de construcción, se desarrollan todos los componentes restantes y las características de la aplicación, los cuales son integrados dentro del producto para luego ser cuidadosamente probados. El resultado de la fase de construcción es un producto listo para ser puesto en manos de los usuarios finales. Como mínimo consiste de: El producto software integrado sobre plataformas adecuadas. Los manuales de usuario (optativo). Una descripción de la actual puesta en marcha. Al final de la fase de construcción está el tercer hito principal del proyecto: Capacidad Operacional Inicial. Aquí se decide si el software, las localizaciones, y los usuarios están listos para operar. Esta versión es llamada mayormente “beta”. La transición puede tener que ser pospuesta si el proyecto no alcanza este hito. Los principales criterios de evaluación para la fase de construcción involucra la respuesta a la siguiente pregunta: ¿Es esta versión del producto lo suficientemente estable y madura para ser desplegada en la comunidad usuaria?. 33 Fase de Transición: La fase de transición está completa cuando el producto base es suficientemente maduro para ser desplegado en el dominio del usuario final. Esta fase incluye: Una “Prueba beta” para validar el nuevo sistema contra las expectativas del usuario. Conversión de base de datos operacionales. Capacitación de usuarios y manejadores. Al final de la fase de transición está el cuarto hito principal del proyecto: Puesta en marcha del Producto. Aquí se decide si los objetivos fueron alcanzados, y si se debe empezar otro ciclo de desarrollo. En algunos casos, este hito puede coincidir con el extremo de la fase de iniciación del próximo ciclo. Los principales criterios de evaluación para la fase de transición involucra la respuesta a las siguiente pregunta: ¿Está el usuario satisfecho?. Iteraciones : Cada fase del RUP puede adicionalmente ser dividida en iteraciones. Una iteración es un bucle de desarrollo completo que produce la puesta en marcha (interna o externa) de un producto ejecutable o un subconjunto del producto final, mediante el desarrollo incremental de iteración a iteración hasta covertirse en el sistema final. Comparado con el proceso lineal, el proceso iterativo tiene las siguientes ventajas: Los cambios son más manejables. Un alto nivel de reuso. Mejor calidad global. Aspecto Estático del RUP Worker (Trabajador): Un worker define la conducta y las responsabilidades de un individuo, o un conjunto de individuos que trabajan grupalmente. Un individuo puede tener muchos workers diferentes. En el RUP un worker representa más que 34 un rol definiendo como un individuo lleva a cabo su trabajo. Las responsabilidades asignadas a un worker incluyen tanto la realización de ciertos conjuntos de actividades así como la responsabilidad sobre un conjunto de artefactos. Activy (Actividad): Una actividad de un worker específico es una unidad de trabajo que un individuo puede realizar en ese rol. La actividad tiene un propósito claro, usualmente expresado en términos de crear o actualizar algunos artefactos, tales como un modelo, una clase o un plan. Cada actividad es asignada a un worker específico. La granularidad de una actividad es generalmente de unas cuantas horas a cuantos días, normalmente involucra a un worker, y afecta a uno o solo a un pequeño número de artefactos. Una actividad debe ser usada como un elemento de planeación y desarrollo; si es demasiada pequeña debe ser abandonada, y si es demasiada grande, el desarrollo tiene que ser expresado en términos de partes de la actividad. Artifac (Artefacto): Un artefacto es un fragmento de información que puede ser producido, modificado, o usado por un proceso. Los artefactos son los productos tangibles del proyecto, los objetos del proyecto se producen o se usan mientras se trabaja hacia el final del proyecto. Los artefactos son usados por los workers como entradas para realizar una actividad, y como salidas de resultados o rendimientos de tal actividad. En términos de diseño orientado a objetos, las actividades son las operaciones en un objeto activo (el worker) y los artefactos son los parámetros de estas actividades que pueden tomar los siguientes estados o formas: Un modelo, como el modelo de casos de uso o el modelo de diseño. Un modelo elemental, es decir un elemento dentro de un modelo, como una clase, un caso de uso o un subsistema. Un documento, como el documento de casos del negocio o de la arquitectura del Software. Código fuente y Ejecutables. 35 Workflows (Flujos de Trabajo): La enumeración de todos los workers, actividades y artefactos no constituyen un proceso realmente. Se necesita describir de manera significativa la secuencia de las actividades para producir resultados valiosos, y para mostrar las interacciones entre workers. Un workflow es una secuencia de actividades que produce un resultado de valor observable. En términos de UML, un workflow puede ser expresado como un diagrama de secuencia, un diagrama de colaboración, o un diagrama de actividades. 5.3. Core Workflows (Flujos de Trabajo Central) Hay nueve procesos de flujos de trabajo central en el RUP, que representan una visión de todos los workers y actividades dentro de una distribución lógica. Los procesos de flujos de trabajo están divididos en seis flujos de trabajo central de “Ingeniería”: Modelo del negocio, Requerimientos,Análisis y Diseño, Implementación, Prueba, y Despliegue; y en tres flujos de trabajo central de “soporte”: Administración del proyecto, Configuración y Administración de cambios, y Entorno. Business Model (Modelo del Negocio): RUP proporciona un idioma común entre la ingeniería del negocio y la ingeniería de software. Este modelo documenta los procesos del negocio usando los llamados casos de uso del negocio. Los casos de uso del negocio son analizados para comprender cómo el negocio debe soportar sus procesos. Esto es documentado en un modelo de objetos del negocio. Requeriments (Requirimientos): El objetivo del flujo de trabajo de requerimientos es describir lo que hace el sistema , permitiendo el mutuo acuerdo entre los desarrolladores y los clientes. Se crea un documento visión, y se solicitan los grupos de trabajo necesarios. Se identifican los Actores (Actors) representando los usuarios, y cualquier otro sistema que puede interactuar con el sistema a desarrollar. 36 Además se identifican los Casos de uso (Uses case) representando la conducta del sistema. Los casos de uso son desarrollados de acuerdo a las necesidades del actor y describen lo que hace el sistema y como interactúa paso a paso con el actor. Analysis and Design (Análisis y Diseño): El objetivo del análisis y diseño es mostrar cómo será realizado el sistema en la fase de implementación. Este flujo de trabajo resulta en un modelo de diseño y opcionalmente en un modelo de análisis. El modelo de diseño sirve como una abstracción del código fuente y consiste de clases de diseño estructurados dentro de paquetes y subsistemas con interfaces bien definidas. Comprende: El cumplimiento de todos los requerimientos. La Ejecución de las tareas y funciones especificadas es la decripción de los casos de uso. Una estructuración robusta (deben cambiar fácilmente si cambian los requerimientos funcionales) Implementation (Implementación): El sistema es realizado a través de la implementación de componentes. RUP describe cómo se reusará los componentes existentes, o cómo se implementará los nuevos componentes, haciendo el sistema más fácil de mantener e incrementando las posibilidades de reuso. El propósito de la implementación es: Definir el código de la organización, en términos de implementación de subsistemas organizados en capas. Implementar clases y objetos en términos de componentes. Probar los componentes desarrollados como unidades. Integrar los resultados producidos por implementadores individuales (o equipos), dentro de un sistema ejecutable. 37 Test (Prueba): La prueba es llevada a cabo a lo largo de tres dimensiones de calidad: funcionalidad, rendimiento de la aplicación, y rendimiento del sistema. El propósito de la prueba es: Verificar la interacción entre los objetos. Verificar la correcta integración de todos los componentes del software. Verificar que todos los requerimientos han sido correctamente implementados. Identificar y asegurar que los defectos sean tratados antes del despliegue del software. Deployment (Despliegue): El propósito del flujo de trabajo de despliegue es producir un producto exitoso para su puesta en marcha, y entregar el software a los usuarios finales. Cubre un amplio rango de actividades que incluye: Producción del software para su puesta en marcha externa. Empaquetamiento del software. Distribución del software. Instalación del software. Proporción de ayuda y asistencia a los usuarios. Administración del proyecto: Este flujo de trabajo se enfoca principalmente sobre el aspecto específico de un proceso de desarrollo iterativo. El objetivo de este flujo es proporcionar: una estructura para manejar los proyectos de software intensivos, las pautas prácticas para planear, proveer el personal, ejecutar, y monitorear el proyecto, y una estructura para manejar los riesgos. Configuración y Administración de cambios: En este flujo de trabajo se describe cómo controlar los diferentes artefactos producidos por las personas que trabajan en un proyecto común. Los 38 controles ayudan a evitar la confusión costosa, y aseguran que los artefactos resultantes no entren en conflicto debido a: la actualización simultánea, la notificación simultánea y las versiones múltiples. Entorno: El propósito del este flujo de trabajo es proporcionar la organización del software de desarrollo con su entorno (procesos y herramientas) para soportar el desarrollo en equipo. VI. Rational Rose Rational Rose es una de las mejores herramientas de modelado de software que forma parte del Rational Suite, un conjunto de herramientas unificadas con soporte a Rational Unified Process (RUP). Estas herramientas facilitan el trabajo durante todo el ciclo de vida de un proyecto. Rational Rose permite el desarrollo de aplicaciones software así como el modelamiento de sus componentes visuales. Además está comprensivamente integrada a la resolución de diseños apropiados para afrontar a los actuales desafíos en el desarrollo de software. Rational Rose unifica el desarrollo en equipo, integrando el modelamiento y el entorno de desarrollo usando Unified Modeling Languaje (UML), y permitiendo a todos los miembros del equipo el desarrollo individual, la comunicación entre ellos y la entrega de un mejor software. Esta herramienta crea una robusta arquitectura del sistema con la habilidad para modelar elásticas arquitecturas basadas en componentes, permitiendo que la evolución del proceso software sea controlada, manejada e identificada. Rational Rose es una herramienta Case para todas las necesidades tecnológicas, ya que ofrece una integración con todos los principales Entornos de Desarrollo Integrado, maximizando la velocidad y simplicidad del esfuerzo de desarrollo. Rational Rose puede soportar el modelado de arquitecturas cliente/servidor en tres capas. Con el modelamiento de la arquitectura en tres capas se hace factible la creación de una familia de aplicaciones basadas en un conjunto común de componentes para su fácil distribución, extensibilidad, y mantenimiento. Al modelar un esquema basado en tres capas se brinda una forma más poderosa de 39 modelamiento orientado a objetos para el diseño, programación e implementación del sistema, siendo posible modelar arquitecturas conducidas por procesos de desarrollo iterativo. Los métodos de desarrollo de software recomiendan el uso de vistas estáticas y dinámicas para el modelado lógico y físico de los artefactos de un proceso durante el análisis y diseño orientado a objetos. Usando ésta notación Rational Rose permite crear y refinar éstas vistas dentro de un modelo global representando el dominio del problema y el sistema software. Este modelo global contiene clases, casos de uso, objetos, paquetes lógicos, operaciones, paquetes de componentes, componentes, procesos, dispositivos y las relaciones existentes entre ellos. Además cada uno de éstos elementos poseen propiedades que identifican sus características. Un modelo también contiene diagramas y especificaciones, que proporcionan un medio de visualización y manipulación de los elementos. Puesto que los diagramas son usados para ilustrar múltiples vistas de un modelo, los íconos que representan un elemento pueden aparecer en ninguno, uno o varios diagramas. Rational Rose permite controlar qué elementos, relaciones y propiedades aparecen en cada diagrama a través de ventanas independientes. Un add-in (programa de ayuda) permite a un lenguaje de programación integrarse a Rational Rose a través del uso de una sola sesión de software. Se puede tener add-ins con la instalación personalizada de Rational Rose o por intermedio de links brindados por las empresas desarrolladoras de software, permitiendo el soporte de diferentes necesidades de desarrollo. 40 VII. Bibliografía 1. Berson, Alex; “Client Server Architecture: Three Tier”; 3°Edición, 1999, Edit. McGraw Hill ,USA. 2. Booch, G., Rumbaugh, I.; “The Unified Modeling Languaje”; 2ºEdición, 1999, Edit. Addison-Wesley, USA. 3. Booch G., Rumbaugh, I.; “The Unified Software Development Process”; 2ºEdición, 1999, Edit. Addison-Wesley Longman, USA. 4. Grupo Eidos; “Diseño Orientado a Objetos con UML”; Versión 1.0.0, 2000. 5. Letelier Torres, Patricio; “Análisis y Diseño Orientado a Objetos usando la Notación UML”; 2°Edición, 2001, Edit. U.P.V, Madrid – España. 6. McClanahan, David; “Power Builder 7.0: A Developer’s Guide”; 2000, Editorial M&T Books, USA. 7. Mora Uriarte, Felipe; “Metodología de la Investigación Científica y Técnicas de Estudio”; 7°Edición, 1998, Lima – Perú. 8. OnLine Books Help; “Técnicas para Construir Aplicaciones Distribuidas con Power Builder V8.0”; 2001. 9. OnLine Help; Rational Rose 2001. 10. Universidad de Oviedo, Area de Sistemas; “Proceso Software Basado en UML para Aplicaciones Distribuidas”; 2001, España. 11. Stoner, James; “Administración de Sistemas”; 3°Edición, 1998, Ed, Prinfice Holl Hispanoamérica S.A, Mexico. 12. Rational Suite; “Rational Unified Process”; 2001. 41