Title: Jons A' Montilva C'
1Universidad de Los Andes Facultad de
Ingeniería Escuela de Ingeniería de
Sistemas Mérida
Desarrollo de Software Basado en Componentes
- Jonás A. Montilva C.
- Prof. Titular
- Departamento de Computación
2Contenidos
- Reutilización de software
- Activos y componentes de software reutilizable
- Características de los Componentes de Software
Reutilizable (CSR) - La interfaz de un componente
- Mecanismos de composición de software
- El proceso de desarrollo de software basado en
CSR
3Definiciones de Reutilización de Software
- "Reutilización de software es el proceso de crear
sistemas de software a partir de software
existente, en lugar de desarrollarlo desde el
comienzo" (Sametinger, 1997) - La reutilización es un enfoque de desarrollo de
software que trata de maximizar el uso
recurrente de componentes de software existentes"
(Sommerville, 1995). - La reutilización de software es el proceso de
implementar o actualizar sistemas de software
usando activos de software existentes (Sodhi
Sodhi, 1999)
4Reutilización de Software
- La reutilización de software va más allá de la
reutilización de componentes de software - Involucra uso de otros elementos, denominados
activos de software, tales como - algoritmos,
- diseños,
- arquitecturas de software,
- planes,
- documentación y
- especificaciones de requerimientos
5Reutilización de Software
- La reutilización de software es un proceso de la
Ingeniería de Software que involucra el uso
recurrente de activos de software en - la especificación,
- el análisis,
- el diseño,
- la implementación y
- las pruebas de una aplicación o sistema de
software
6Efectividad de la Reutilización de Software
- Varios estudios han demostrado la efectividad de
la reutilización del software - 40-60 del código fuente es reutilizable de una
aplicación a otra. - Aproximadamente el 60 del diseño y del código de
aplicaciones administrativas es reutilizable. - Aproximadamente el 75 de las funciones son
comunes a más de un programa. - Sólo el 15 del código encontrado en muchos
sistemas es único y novedoso a una aplicación
específica. - El rango general de reuso potencial está entre el
15 y el 85.
7Efectividad de la Reutilización de Software
- La EAI (Enterprise Application Integración) es un
nuevo enfoque de reutilización de software - Su objetivo es la integración de aplicaciones
existentes con el propósito de compartir datos y
procesos - Forrester Research ha estimado que
- Más del 30 de los gastos globales en TI ocurren
en la integración de aplicaciones existentes - Mas del 35 del tiempo de desarrollo de
aplicaciones se invierte creando interfaces para
integrar la aplicación en desarrollo a otras
existentes o a fuentes de datos - El Gartner Group ha estimado que en los próximos
años la mayoría de proyectos de software se
ejecutarán mediante la integración de
aplicaciones existentes en lugar del desarrollo
de nuevas aplicaciones
8Activos de software
- Qué es un activo de software reutilizable
(ASR)? - Son productos de software diseñados expresamente
para ser reutilizados en el desarrollo de muchas
aplicaciones - Un activo de software puede ser
- Un componente de software
- Una especificación de requerimientos
- Un modelo o especificación de diseño
- Un algoritmo
- Un patrón de diseño
- Una arquitectura de dominio
- Un esquema de base de datos
- Una especificación de prueba
- La documentación de un sistema
- Un plan
9Definición de Componente de Software
- Un componente de software reutililizable (CSR) es
un artefacto de software auto-contenido y
claramente identificable que - ejecuta funciones específicas,
- tiene una interface clara a través de la cual se
integra a otros sistemas, - tiene una documentación apropiada y
- tiene un status de reuso definido
- Un componente de software reutilizable puede ser
- un módulo,
- una clase,
- un procedimiento o función,
- un subsistema,
- una aplicación
10Características de los CSR
- Definición del CBDi Forum
- Un componente es una pieza de software que
describe y/o libera un conjunto de servicios que
son usados sólo a través de interfaces bien
definidas - Características esenciales de un CSR
- Identificable
- Autocontenido
- Rastreable a través de su ciclo de desarrollo
- Reemplazable por otro componente
- Accesible solamente a través de su interfaz
- Inmutabilidad de sus servicios
- Documentación de sus servicios
- Mantenido sistemáticamente
11Características esenciales de un CSR
- Es identificable
- Debe tener una identificación clara y consistente
que facilite su catalogación y acceso - Es autocontenido
- Un componente no debe requerir la reutilización
de otros componentes para cumplir su función - Si el componente requiere de otros, el conjunto
de componentes o funciones, visto como un todo,
debe ser considerado como un componente de más
alto nivel - P.ej., los paquetes en Java permiten agrupar
varias clases en un componente al cual se le
asocia una funcionalidad bien definida. - Es rastreable
- Debe retener su identidad y ser rastreable
durante el ciclo de desarrollo
12Características esenciales de un CSR
- Es reemplazable
- Puede ser reemplazado por una nueva versión o por
otro componente que proporcione los mismos
servicios - Es accesible sólo a través de su interfaz
- Es accedido a través de una interfaz claramente
definida - La interfaz debe ser independiente de la
implementación física - debe ocultar los detalles de su diseño interno
- Sus servicios son inmutables
- Los servicios que ofrece un componente a través
de su interfaz no deben variar - La implementación física de estos servicios
pueden ser modificadas, pero no deben afectar la
interfaz
13Características esenciales de un CSR
- Está documentado
- Debe tener una documentación adecuada que
facilite - la recuperación del componente desde el
repositorio, - la evaluación del componente,
- su adaptación al nuevo ambiente y
- su integración con otros componentes del sistema
en que se reutiliza. - Es mantenido
- Debe ser mantenido para facilitar un reuso
sistemático - Su estado de reuso debe contener información
acerca de - quien es el propietario del componente,
- quien lo mantiene,
- a quien acudir cuando surjan problemas y
- cual es el estado de la calidad del componente.
14Características deseables de un CSR
- Es genérico
- Su implementación física está oculta
- Es independiente de otros componentes
- Está encapsulado
- Es independiente del lenguaje o a las
herramientas usadas en su desarrollo - Es independiente de la plataforma de ejecución
- Puede ser reusado dinámicamente
- Está certificado
15La interfaz de un componente
16La interfaz de un componente
- Una interface determina la manera en que un
componente se reutiliza y como puede conectarse a
otros componentes - Una interface define una operación o un conjunto
de operaciones llamadas servicios o
responsabilidades - Las interfaces son un aspecto fundamental en la
composición de componentes - Por lo general un componente produce (exporta) un
resultado que es consumido (importado) por otro
componente
17La interfaz de un componente
- La naturaleza de la interfaz varia dependiendo
del lenguaje empleado para implementar el
componente - En lenguajes OO
- las clases se diseñan de tal manera que la
interfaz sea visible y separada de la
implementación de las operaciones (métodos) - En lenguajes procedimentales
- la interfaz se define a través de
- La declaración de la función o procedimiento o
- El uso de variables globales
18La interfaz de un componente
- Existen varios tipos de interfaz
- Interfaces de datos
- Interfaces gráficas
- Interfaces de programación
19Tipos de interfaces
- Interfaces de datos
- Empleadas en componentes E-P-S
- Leen datos de Entrada, ejecutan un Proceso de
transformación de datos o cálculo y escriben
datos de Salida. - Tipos más comunes de formatos de datos empleados
en la interfaz - ASCII
- Bases de datos relacionales
20Tipos de interfaces
- Ejemplo de interfaz de datos
- El mecanismo de conducto (pipe) de UNIX
- la salida textual en ASCII de un componente
(llamado filtro) es la entrada del siguiente
componente. - P.ej more .tex grep Java wc -l
21Tipos de interfaces
- Interfaces de programación
- El mecanismo empleado es el API (Application
Programming Interface) - establece la interacción entre dos aplicaciones
con plataformas iguales o diferentes. - Un API es "un conjunto de subrutinas de interfaz
o llamadas a librerías que definen los métodos
empleados para que un programa pueda invocar
servicios externos" - Ejemplo Las interfaces empleadas en la librería
de clases del sistema en Java, la cual provee
diferentes paquetes (java.lang, java.util,
java.io) que contienen clases de uso común. - Cada paquete contiene una interfaz y una
colección de clases.
22Composición de software reutilizable
C2
C1
23Composición de software
- La composición de software es "el proceso de
construir applicaciones mediante la interconexión
de componentes de software a través de sus
interfaces de composición". - Tipos de composición de software
- Composición Interna/Externa
- Composición Textual
- Composición Funcional
- Composición Modular
- Composición Orientada a Objetos
- Composición de Subsistemas
- Parametrización de Código Fuente
- Computación Distribuida
- Modelos de Objetos
- Documentos Compuestos
- Aplicaciones compuestas
- Ambientes Integrados
- Composición en Plataformas Abiertas
24Composición de software
- Composición Orientada a Objetos
- Basada en la reutilización de clases o tipos
escritos en un lenguaje OO - Emplean varios mecanismos de reutilización
herencia, delegación, polimorfismo y
encadenamiento dinámico - Ejemplos de componentes OO
- La colección de clases reutilizables del lenguaje
Eiffel - La librería de clases GNU para C
- La librería del sistema en el lenguaje Java
25Composición de software
- Composición de Subsistemas
- Un subsistema es una colección de módulos o
clases que tienen una funcionalidad bien
definida, así como interfaces de importación y
exportación de clases o módulos. - Ejemplo Los paquetes de clases en Java
- Reuso del paquete
- import subsistemaE/S.
- class MiClase
- ...
- C1 x new C1(15, 20)
- ...
- Definición del paquete
- package subsistemaES
- import java.util.
- ...
- public class C1 ...
- public class C2...
- ...
26Composición de software
- Arquitecturas de Objetos Distribuidos
- Fueron desarrolladas para facilitar la
computación distribuidas en sistemas heterogéneos - Constituyen la base para la interoperabilidad de
componentes distribuidos en plataformas
heterogéneas - Ejemplos
- CORBA del consorcio OMG
- Component Object Model (COM) y DCOM (Distributed
COM) de Microsoft - System Object Model (SOM) de IBM
- Enterprise JavaBeans de SUN
27Composición de software
- Arquitecturas de Objetos Distribuidos (cont.)
- Corba (Common object request broker architecture)
es una especificación propuesta por el consorcio
de industrias de software Object Management Group
(OMG) - Corba se basa en la OO para definir un tipo de
middleware que permite la interoperabilidad de
componentes almacenados en plataformas
heterogéneas a través de un bus de objetos (ORB)
28Composición de Software
- Cómo trabajan los objetos distribuidos en CORBA?
29Composición de software
- Arquitecturas de Objetos Distribuidos (cont.)
- La composición de componentes en CORBA se logra a
través de un lenguaje denominado IDL (Interface
Definition Language). - IDL es un lenguaje declarativo que asegura la
independencia de lenguajes entre los diferentes
componentes distribuidos. - Se usa para definir la interface de cada
componente y establecer la correspondencia con el
lenguaje de programación en el cual se ha
implementado cada componente - C, C, Java, COBOL, Smalltalk, Ada, Lisp,
Python, and IDLscript. - La comunicación entre los componentes es
responsabilidad del ORB (Object Request Broker),
quien se encarga de - encontrar las implementaciones de los métodos u
operaciones requeridas por un cliente, - ejecutar el pre-procesamiento necesario y
- comunicar los datos requeridos
30El proceso de desarrollo basado en componentes
31El proceso de reutilización de software
- Los procesos de desarrollo basados en la
reutilización de software se clasifican en - Desarrollo de componentes de software
reutilizable - Adaptación o desarrollo de componentes con el
propósito expreso de ser reutilizados en futuras
aplicaciones - Desarrollo de software con reutilización de
componentes - El desarrollo de una nueva applicación involucra
el reuso de un conjunto de componentes existente
32El proceso de reutilización de software
- El modelo de procesos gemelos
Ingeniería de Dominios
Diseño del Dominio
Desarrollo de Componentes
Análisis del Dominio
modelos de análisis
diseños genéricos
componentes
Especificación de requerimentos
Diseño de la Arquitectura
Especificación De Componentes
Búsqueda de Componentes
Adapt / Des. Componentes
Integración de Componentes
Ingeniería de Aplicaciones
33El desarrollo de CSR
- Desarrollo de componentes de software
reutilizable - Su objetivo es producir repositorios de activos o
componentes de software reutilizables que puedan
ser reutilizados en el desarrollo de software - El desarrollo de componentes se lleva a cabo a
través de - la adaptación de componentes existentes o
- la creación de repositorios aplicando los
procesos de la Ingeniería de Dominio.
Base de Componentes
34El desarrollo de CSR
- El proceso de adaptación de un componente de
software - Generalización del nombre
- El nombre del componente debe referirse a
entidades genéricas del dominio. - Generalización de operaciones
- La funcionalidad del componente puede ser
extendida agregando nuevas operaciones - Las operaciones específicas deben ser removidas
- Generalización de excepciones
- Las excepciones específicas de una aplicación
deben ser removidas - Los mecanismos de manejo de excepciones se
agregan al componente para incrementar su
robustez. - Certificación del componente
- El componente es certificado como un componente
reutilizable. - Involucra asegurar la calidad y confiabilidad del
componente
35Reutilización de CSR
- Desarrollo de software con reutilización de
componentes - Es un enfoque de desarrollo de software que
- maximiza la reutilización de componentes software
existentes y/o - reduce el número de componentes que requieren ser
desarrollados desde el comienzo - Condiciones mínimas para la reutilización
- Existencia de repositorios o bases de componentes
reutilizables - Los componentes son confiables y actuán de
acuerdo a sus especificaciones - Los componentes están debidamente documentados
36El Método Watch
37Las formas de reutilización de CSR
- Reutilización caja-negra
- El componente es utilizado "tal como es", sin
modificaciones y sin que se requiera conocer los
detalles internos de su implementación - El usuario del componente sólo requiere conocer
la funcionalidad del componente (qué hace) y como
se usa (su interfaz) - Reutilización caja-blanca
- El componente puede ser modificado para adaptarlo
a las necesidades del sistema en el que se
reutiliza - Su implementación es visible y puede ser
modificada por el usuario. - Se requiere un esfuerzo adicional al de la
modificación del componente - debe ser verificado una vez modificado
38Conclusiones
- Los CSR son las unidades básicas de producción de
la nueva industria del software - La reutilización de componentes de software
impacta positivamente - la calidad del software producido
- incrementa la confiabilidad ( de errores
presentes) - mejora el rendimiento del componente en cada
reutilización - la productividad de los grupos de desarrollo
- reduce la cantidad de código que debe producirse
- reduce la redundancia de esfuerzo
- el tiempo de entrega
- reduce el tiempo de colocación del producto en el
mercado - los costos
- reduce los costos de desarrollo y mantenimiento
de nuevas aplicaciones
39Fin de la conferencia