Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

Ingeniería de SW basada en Componentes

Tururu ♪
by

Bastián Véliz

on 1 August 2013

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of Ingeniería de SW basada en Componentes

Ingeniería de Software basada en Componentes
Agenda
Introducción
Contexto
Definición
Componente
¿Que es un Componente?
Perspectivas
Tipos de Componentes
Introducción
Dimitry Castex
Felipe Segovia
Bastián Véliz
Presentadores
Desarrollo Basado en Componentes
Historia y Evolución
Características
Metodología
Ciclo de Vida
Ejemplo Práctico
Conclusiones
Contexto
Definición
Este concepto de la reutilización, uno de los primeros que se nos enseñan a quienes entramos al mundo del desarrollo de software, habremos de utilizarlo desde el mismo instante en que escribamos nuestra primera línea de código.

Los sistemas de hoy en día son cada vez más complejos, deben ser construidos en tiempo récord y deben cumplir con los estándares más altos de calidad. Para hacer frente a esto, se concibió y perfeccionó lo que hoy conocemos como Ingeniería de Software Basada en Componentes (ISBC), la cual se centra en el diseño y construcción de sistemas computacionales que utilizan componentes de software reutilizables.
El interés por el desarrollo basado por componentes está basado en una larga historia de trabajo en sistemas modulares, diseño estructurado y más recientemente en sistemas orientados a objetos. El desarrollo basado en componentes extiende estas ideas enfatizando la necesidad de outsourcing de piezas de la aplicación y enfocándose en controlar el ensamblado de esas piezas a través de interfaces definidas.

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

Componente
Si hay algo que ha aprendido el ser humano desde tiempos muy antiguos es a reutilizar el conocimiento existente para sus cada vez más ambiciosas empresas. En efecto, al reutilizar trozos de experiencias, ideas y artefactos, no sólo nos aseguramos de no cometer los mismos errores del pasado, sino que logramos construir cosas cada vez más grandes y maravillosas, con bases firmes y calidad incomparable.

¿Que es un Componente?
La palabra componente es hoy utilizada de muchas formas. Identificando un modelo generalizado de lo que es y no es un componente necesariamente es una precondición del desarrollo por componentes.
Sterling Software ha dado la definición más completa de componente a la fecha. Un componente es: un paquete de software el cual ofrece servicios a través de interfaces.

Esta definición introduce tres perspectivas. cada perspectiva recibe un diferente énfasis desde la tecnologías las cuales soporta el desarrollo basado en componentes hasta un nivel u otro:

Perspectiva de paquete
Perspectiva como servicio
Perspectiva de integridad

Perspectiva de Paquete
Considera a un componente como un concepto organizacional enfocándose e identificando un set de elementos los cuales pueden ser reutilizados como una unidad.

Las clases, librerías y plantillas empatizan con la perspectiva de paquete.


Perspectiva Como Servicio
Esta perspectiva considera a un componente como una entidad de software que ofrece servicios a sus consumidores. Esto también enfatiza la noción de un contrato entre el proveedor y consumidor de esos servicios.


Perspectiva De Integridad
Define un componente como una implementación de un límite de encapsulamiento.
Se habla de un set de software el cuál colectivamente mantiene la integridad de los datos que maneja, y si por lo tanto es independiente de la implementación de otros componentes.

Este criterio es una condición realmente necesaria para que los componentes sean realmente actualizados.
El énfasis acá está en el reemplazo.


Caja Blanca
Son componentes de código abierto
Pueden ser leídos y modificados directamente por los programadores al momento de usar el componente.

Caja Negra
Se distribuyen compilados o en forma de binario.
Componentes discretos que no se pueden cambiar directamente.
Todo lo que el programador sabe acerca de ellos es la documentación que describe su funcionalidad y sus interfaces "conocidas públicamente"

Estas interfaces pueden incluir propiedades (o atributos) que pueden ser vistas y que se le pueden asignar nuevos valores.

Los métodos permiten que el componente hacer una acción predefinida o descrita con anterioridad.

Existen eventos, que se activan cuando el componente desea notificar el programador que se ha producido una acción.

Desarrollo Basado en Componentes
Historia y Evolución
Metrópolis: Analogía de la Evolución del Software basado en Componentes

Pat Helland , uno de los arquitectos con mayor experiencia en Microsoft, ha desarrollado recientemente una metáfora llamada Metrópolis , en la cual compara la evolución de las tecnologías de la información con la forma como las ciudades de Estados Unidos han evolucionado durante los 2 últimos siglos. Al comprender la evolución de las ciudades actuales, podemos darnos una idea del futuro promisorio que tiene el desarrollo de software basado en componentes.


Ciudades - Casas de Software

Evolución
Independencia
Presión Económica
Modernización


Fábricas y Edificios - Aplicaciones

Industralización
Mercado Limitado
Nula interoperabilidad
Transporte
Especialización


Transporte - Comunicaciones

Mayor Demanda
Nace la la expectativa de que las cosas funcionen en conjunto
Al final del siglo XX llegó Internet
Requerimiento de estandarizacion


Bienes Fabricados - Datos Estructurados

"Partes Estandarizadas"
Expansion de la idea de estandarizar, cada aplicación modela la información a su propia manera y dependemos de operadores humanos para 'ajustar' las aplicaciones y así lograr integrarlas.


Ensamblados Fabricados - Empresas Virtuales

"La mayoría de los fabricantes de bicicletas no producen llantas"
'Creando ensamblados' como funcionalidad de negocios: outsourcing
Virtualización de las organizaciones


Comercialización y Distribución - Procesos de Negocio

Desarrollo
Producción Masiva
Proceso de negocios

Características
El paradigma de ensamblar componentes y escribir código para hacer que estos componentes funcionen se conoce como Desarrollo de Software Basado en Componentes. El uso de este paradigma posee algunas ventajas:

1. Reutilización del software. Nos lleva a alcanzar un mayor nivel de reutilización de software.


2. Simplifica las pruebas: Permite que las pruebas sean ejecutadas probando cada uno de los componentes antes de probar el conjunto completo de componentes ensamblados.

3. Simplifica el mantenimiento del sistema: Cuando existe un débil acoplamiento entre componentes, el desarrollador es libre de actualizar y/o agregar componentes según sea necesario, sin afectar otras partes del sistema.

4. Mayor calidad. Dado que un componente puede ser construido y luego mejorado continuamente por un experto u organización, la calidad de una aplicación basada en componentes mejorará con el paso del tiempo.
De la misma manera, el optar por comprar componentes de terceros en lugar de desarrollarlos, posee algunas ventajas:

1. Ciclos de desarrollo más cortos. La adición de una pieza dada de funcionalidad tomará días en lugar de meses ó años.

2. Mejor ROI. Usando correctamente esta estrategia, el retorno sobre la inversión puede ser más favorable que desarrollando los componentes uno mismo.

3. Funcionalidad mejorada. Para usar un componente que contenga una pieza de funcionalidad, solo se necesita entender su naturaleza, más no sus detalles internos. Así, una funcionalidad que sería impráctica de implementar en la empresa, se vuelve ahora completamente asequible.
Metodología
Independencia de componentes
Estandarización de componentes
Middleware
Proceso para el desarrollo
Asuntos de gestión:
Requerimientos ambiguos o no claros
Conflictos entre usabilidad y reusabilidad
Costos de mantención
Sensibilidad al cambio
Gestión de requisitos y selección de componentes

Ciclo de Vida
El proceso de desarrollo basado en componentes difiere del proceso clásico de desarrollo de software de muchas maneras, la principal es la separación entre el proceso de desarrollo de componentes del proceso de desarrollo de sistemas.


Si originalmente tomamos el Ciclo de Vida Cascada como referencia, para poder llevar a cabo el desarrollo de software basado en componentes debemos hacer las siguientes modificaciones:

1. Separación del proceso de desarrollo: se separan entre el proceso de desarrollo del sistema basado en componentes y el desarrollo de los componentes; éstos últimos ya deberían estar listos y haber sido usados en otros sistemas.

Un nuevo proceso denominado “Testeo de componentes”, en donde se prueban, se evalúan y se etiquetan. El resultado de este proceso es un repositorio que contenga varios componentes en conjunto con sus especificaciones, documentaciones, pruebas y los ejecutables.

Cambios en los enfoques del desarrollo: en el nivel de desarrollo del sistema, se debe hacer énfasis en buscar los mejores componentes y verificarlos, mientras que en el nivel de desarrollo de componentes se debe hacer énfasis en desarrollar para que sean lo más reutilizables posibles.


Ciclo de vida de producto de software basado en componentes ( a su vez basado del ciclo de vida cascada )
Procesos paralelos del desarrollo basado en componentes

Tipos de Desarrollo Basados en Componentes
Ejemplo Práctico
Desarrollo de componentes impulsados por la arquitectura
Desarrollo de línea de productos
Desarrollo basado en COTS(*)
Desarrollo de componentes impulsados por la arquitectura.

Integración de componentes
La integración de las componentes en e-PELSse realiza mediante la composición de componentes que ocurre en tiempo de ejecución (Composición Tardía) .
Desarrollo de línea de productos.

Desarrollo basado en COTS
Desarrollo de software educativo basado en componentes: el caso de e-pels
Transformación de un software educativo utilizando una arquitectura de componentes de software, resaltando las ventajas de utilizar esta arquitectura.

COTS = Componentes de Software ya desarrollados y de índole comercial
Un problema fundamental que presenta dicha aplicación es su concepción monolítica, que no permite una modificación acelerada ni la incorporación de nueva funcionalidades.

La transformación de dicha aplicación consistió en pasar de una aplicación monolítica a una aplicación basada en componentes de software.
Contexto
La variedad y complejidad de los requerimientos educativos impone sobre el desarrollo de software una serie de demandas que permitan atenderlos de manera eficiente, con calidad y con una relación costo-beneficio razonable.
• Excesivo coste de desarrollo, tanto en recursos como en tiempo que es difícil de estimar previamente.
• Deficiente calidad en el proceso de desarrollo así como del producto final.
• Falta de capacidad para adaptarse a requerimientos cambiantes, de forma rápida y eficiente.
Para resolver en parte esta problemática se ha planteado la necesidad de modificar el proceso de desarrollo de software encaminándolo hacia una mayor reutilización composicional; adoptando para ello un modelo de desarrollo de software basado en componentes.
Desarrollo
Focus Group con profesores para determinar requerimientos nuevos.
Pasar de el antiguo diagrama de clases a un diagrama por componentes.
Conclusiones Generales
La idea principal del desarrollo por componentes es construir sistemas desde componentes existentes
Lo ideal es codificar lo menos posible (en el caso ideal, no codificar nada) para implementar funcionalidades.
Revisar que componentes servirán para la nueva versión.
Búsqueda y selección de componentes, se contaba con organizadores gráficos interactivos.
Adaptación de componentes.
FIN

Gracias por su Atención
Resultados
De los resultados obtenidos se desprende que la nueva versión de e-PELS puede ser considerada una componente basada en componentes de software debido a que presenta las siguientes características:
Composición: El antiguo software su composición era en tiempo de compilación (No se podían hacer cambios). En cambio en nuevo software su composición es en tiempo de ejecución mediante la edición de un archivo xml ( cargar nuevas funciones etc).
Encapsulamiento.
Interoperabilidad entre componentes por medio de interfaces definidas.
Autocontenido.

El software nuevo se convirtió a sí mismo en una componente.

Conclusiones
De los resultados obtenidos se puede concluir que el desarrollo orientado a componentes presenta varias ventajas para el desarrollo de software, permitiendo la reutilización de activos de software, ya sea aquellos existentes o bien, en el desarrollo de futuras aplicaciones. Por ejemplo, en el desarrollo de e-PELS se reutilizaron los componentes de software denominados organizadores gráficos interactivos. Esta reutilización es factible debido a que presentan interfaces de componentes, que le permiten actuar como “caja negras”.
Full transcript