INGENIERÍA DE SOFWARE
REUTILIZACIÓN DE SOFTWARE
CAPÍTULO 16
Ian Sommerville, Edición 9na.
INGENIERÍA DE SOFTWARE
Reutilización de Software
CAPÍTULO XVI
Ian Sommerville, Edición 9na.
Contenido
Introducción
16.1 Objetivos
16.2 Panorama de la reutilización
16.3 Frameworks de aplicación
16.5 Líneas de productos de software
16.5 Reutilización de productos COTS
16.6 Conclusiones
16.7 Referencias Bibliográficas
16.1 OBJETIVOS
• Comprender los beneficios y problemas de la
reutilización del software.
• Entender el concepto de framework de aplicación
como un conjunto de objetos reutilizables
• Conocer que son las líneas de producto de software,
que se constituyen con una arquitectura central
común
• Aprender cómo pueden desarrollarse sistemas al
configurar y componer sistemas de software de
aplicación comercial
16. Reutilización de software
La ingeniería de software basada en la reutilización es una estrategia
en la que se engrana el proceso de desarrollo para reutilizar el
software existente. Aunque la reutilización se propuso como una
estrategia de desarrollo hace más de 40 años (McIlroy, 1968), es
sólo a partir de 2000 cuando el “desarrollo con reutilización” se
convirtió en la norma de los nuevos sistemas empresariales.
El movimiento hacia el desarrollo basado en la
reutilización fue en respuesta a las demandas para
reducir los costos de producción y mantenimiento del
software, entregar los sistemas con mayor rapidez y
aumentar la calidad del software.
16. Reutilización de software
Las unidades de software que se reutilizan pueden ser de tamaños sustancialmente
diferentes.
Reutilización del sistema de aplicación Todo un
sistema de aplicación puede reutilizarse al incorporarlo
sin cambios en otros sistemas o al configurar la
aplicación para diferentes clientes.
Reutilización de componentes Los componentes de
una aplicación, que varían en tamaño desde subsistemas
hasta objetos individuales, pueden reutilizarse
Reutilización de objetos y funciones Pueden
reutilizarse los componentes de software que
implementan una sola función, tal como una función
matemática, o una clase de objeto.
Beneficios de la reutilización
El software de reutilización, que se experimentó y ensayó en
Confiabilidad creciente sistemas operativos, debe ser más confiable que el software
nuevo.
Reducción de riesgo Se conoce ya el costo del software existente, mientras que el de
de proceso desarrollo siempre es una cuestión de juicio.
En lugar de hacer el mismo trabajo una y otra vez, los
Uso efectivo de especialistas de aplicación pueden desarrollar software de
especialistas reutilización que encapsule su conocimiento.
Cumplimiento de Algunos estándares, como los de la interfaz de usuario, pueden
estándares implementarse como un conjunto de componentes de
reutilización.
Desarrollo acelerado Llevar un sistema al mercado tan rápido como sea posible con
frecuencia es más importante que los costos totales de
desarrollo.
Desventajas de la reutilización
Costos crecientes Si no está disponible el código fuente de un sistema o componente de
de mantenimiento reutilización, entonces los costos de mantenimiento podrían ser
superiores.
Falta de apoyo Algunas herramientas de software no apoyan el desarrollo con
de herramientas reutilización.
Síndrome “no se Algunos ingenieros de software prefieren rescribir los componentes,
inventó aquí” porque
consideran que pueden mejorarlos.
Creación, mantenimiento
Suele ser costoso dotar a una librería de componentes de reutilización y
y uso de una librería de garantizar que los desarrolladores de software puedan utilizar esta
componentes librería
Descubrimiento,
comprensión y adaptación Deben descubrirse componentes de software en una librería, entenderse
de componentes de y, en ocasiones, adaptarse para trabajar en un nuevo entorno.
reutilización
16.2 Panorama de la reutilización
Seleccionar una técnica adecuada depende de los requerimientos del sistema a desarrollar,
la tecnología y los activos reutilizables disponibles, y la experiencia del equipo de desarrollo.
Los factores clave que deben considerarse al planear la reutilización son:
El calendario de desarrollo para el software
Si el software debe desarrollarse rápidamente, usted debe
tratar de reutilizar sistemas comerciales en vez de
componentes individuales.
La vida esperada del software
Si usted desarrolla un sistema de prolongada duración, debe
enfocarse en la capacidad de mantenimiento del sistema.
Los antecedentes, las habilidades y la experiencia del equipo
de desarrollo
Todas las tecnologías de reutilización son bastante complejas, y es
necesario mucho tiempo para entenderlas y usarlas de manera
efectiva.
La criticidad del software y sus requerimientos no
funcionales
Para un sistema crítico que deba certificarse mediante un regulador
externo, quizá deba crear un caso de confiabilidad para el sistema.
Esto es difícil si no tiene acceso al código fuente del software.
El dominio de aplicación
En algunos dominios de aplicación, tales como los sistemas de
fabricación e información médica, existen muchos productos genéricos
que pueden reutilizarse al configurarlos para una situación local.
La plataforma en la que operará el sistema
Algunos modelos de componentes, como .NET, se especifican para plataformas
Microsoft. De igual modo, sistemas genéricos de aplicación pueden ser específicos
de plataforma y sólo podrá reutilizarlos si su sistema está diseñado para la misma
16.3 Frameworks de aplicación
Como sugiere el nombre, un framework es una estructura genérica que se extiende para
crear una aplicación o un subsistema más específico.
…un conjunto integrado de artefactos de software (tales como clases, objetos y
componentes), que colaboran en la facilitación de una arquitectura de
reutilización para una familia de aplicaciones relacionadas. (2004 Schmidt y
sus colaboradores)
Los frameworks brindan soporte para características genéricas que
es probable que sean utilizadas en todas las aplicaciones de un tipo
similar.
Los frameworks se implementan como una colección de clases
de objetos concretos y abstractos en un lenguaje de
programación orientado a objetos.
Los frameworks son específicos del lenguaje
Existen frameworks disponibles en todos los
lenguajes de programación orientados a
objetos de uso común
Java, C#, C++, así como lenguajes dinámicos
como Ruby y Python
Un framework puede incorporar muchos otros frameworks
Es posible usar un framework para crear una aplicación completa o implementar parte de una aplicación
Fayad y Schmidt (1997) analizan tres clases de frameworks:
Frameworks de infraestructura de sistema
Dichos frameworks apoyan el desarrollo de infraestructuras de sistema como
comunicaciones, interfaces de usuario y compiladores (Schmidt, 1997).
Frameworks de integración de middleware
Consisten en un conjunto de estándares y clases de objetos asociados que soportan
comunicación de componentes e intercambio de información. Los ejemplos de este tipo
de framework incluyen .NET de Microsoft y Enterprise Java Beans (EJB).
Frameworks de aplicación empresarial
Se ocupan de dominios de aplicación específicos, tales como los sistemas de
telecomunicaciones o financieros (Baumer et al., 1997). El conocimiento del dominio de
la aplicación integra y apoya el desarrollo de aplicaciones de usuario final.
Los frameworks de aplicación Web (WAF) son un tipo de framework más reciente e importante. Ahora los
WAF, que apoyan la construcción de sitios Web dinámicos, están ampliamente disponibles. La
arquitectura de un WAF se basa por lo general en el patrón Modelo-Vista-Controlador (Gamma et al.,
1995)
La mayoría de los frameworks de aplicación Web soportan las siguientes características:
Seguridad Gestión de sesión
Los WAF pueden incluir clases para ayudar a Clases para crear y administrar sesiones (algunas
implementar autenticación interacciones con el sistema por parte de un
usuario).
Páginas Web dinámicas
Se ofrecen clases para ayudar a definir las Interacción de usuarios
plantillas de la página Web La mayoría de los frameworks Web brindan ahora
soporte AJAX (Holdener, 2008), que permite la
Soporte de base de datos creación de páginas Web más interactivas.
Los frameworks usualmente no incluyen una
base de datos, sino suponen que se usará una
base de datos separada.
16.4 Líneas de productos de software
Son familias de aplicación, es un conjunto de aplicaciones con una arquitectura común y componentes
compartidos, con cada aplicación especializada para reflejar diferentes requerimientos.
El sistema central se diseña para configurarse y adaptarse a las necesidades de los diferentes clientes del
sistema. Esto puede implicar la configuración de algunos componentes, implementar componentes
adicionales y modificar varios de los componentes de acuerdo con nuevos requerimientos.
Desde luego, los frameworks de aplicación y las líneas de productos de software tienen mucho en común.
Ambos soportan una arquitectura y componentes comunes, y requieren un nuevo desarrollo para crear una
versión específica de un sistema.
Los frameworks de aplicación vs líneas de
productos de software
Líneas de
Frameworks
productos
• El código framework no se • Los componentes de
modifica. aplicación cambian, se
borran o rescriben.
• Se enfocan principalmente
en brindar apoyo técnico • Por lo general incrusta
antes que dominio información detallada de
específico. dominio y de plataforma.
• Con frecuencia están • Ofrecen soporte para
orientados al software. interfaz de hardware.
Tipos de especialización de una línea de
productos de software
2. Especialización de 4. Especialización de
entorno 3. Especialización proceso
1. Especialización de
funcional
plataforma Se crean versiones de El sistema se adapta
aplicación para Se crean versiones de para hacer frente a los
Se elaboran versiones
manejar entornos aplicación para procesos
de la aplicación para
operacionales clientes específicos empresariales
diferentes plataformas.
particulares y que tengan diferentes específicos.
dispositivos requerimientos.
periféricos.
La configuración puede ocurrir en diferentes
etapas en el proceso de desarrollo:
1. Configuración a tiempo de diseño
La organización que desarrolla el software modifica una línea común de
productos básicos mediante el desarrollo
2. Configuración a tiempo de implementación
Se diseña un sistema genérico para la configuración por parte de un cliente
o de algún consultor que trabaje con el cliente, debe proveer:
Selección de componentes
Definición de flujo de trabajo y reglas
Definición de parámetros
16.5 Reutilización de productos COTS
Un producto COTS (por las siglas de Comercial-Off-The-Shelf ) es un sistema de software que
puede adaptarse a las necesidades de diferentes clientes sin cambiar el código fuente del
sistema, este software se diseña para uso general, incluye regularmente muchas
características y funciones.
Los productos COTS se adaptan al usar mecanismos de configuración internos que permiten
que la funcionalidad del sistema se adecue a necesidades específicas del cliente.
Mercado global de componentes centrado en la reutilización de componentes, tiene
tecnología madura: OpenDoc/CORBA, OLE/COM
Este enfoque para la reutilización del software ofrece beneficios significativos sobre el
desarrollo de software personalizado:
1. La implementación más rápida de un sistema fiable.
2. Es posible ver qué funcionalidad ofrece la aplicación, ya que existen antecedentes de
experiencia con el sistema de parte de otros.
3. Se evitan algunos riesgos de desarrollo al usar software existente.
4. Las empresas pueden enfocarse en su actividad central sin tener que dedicar muchos
recursos al desarrollo de sistemas TI.
5. Actualizaciones de tecnología se pueden simplificar, ya que corresponde al proveedor del
producto COTS y no del cliente.
Este enfoque de reutilización tiene ciertos problemas:
1. Tienen que adaptarse los requerimientos puede conducir a rediseños bruscos en los
procesos empresariales existentes.
2. Puede basarse en suposiciones que sean casi imposibles de cambiar. Por lo tanto, el
cliente debe adaptar su empresa para reflejar dichas suposiciones.
3. Elegir el sistema COTS correcto para una empresa puede ser un proceso difícil.
4. El cliente deberá apoyarse a ayuda externa para obtener consejos de desarrollo.
5. Los proveedores de productos COTS controlan el soporte y la evolución del sistema.
Existen dos tipos de reutilización de productos
COTS:
• Sistemas de solución COTS: consisten en una
aplicación genérica de un solo proveedor que
se configura de acuerdo con los
requerimientos del cliente.
• Sistemas integrados COTS implican la
integración de dos o más sistemas COTS
(quizá de diferentes proveedores) para crear
un sistema de aplicación.
Sistemas de solución
Propiedad COTS Sistemas COST integrados
Varios productos integrados para
Funcionalidad Un único producto a un cliente personalización
Solución genérica, procesos Soluciones flexibles para el proceso del
Implementación estandarizados cliente
Desarrollo Configuración del sistema Se enfoca integración del sistema
Mantenimiento y
Plataforma Responsable proveedor Responsable dueño del sistema
Las pruebas son un gran problema cuando los sistemas se configuran en vez de programarse.
Los problemas se relacionan con las interacciones entre los procesos operacionales y la
configuración del sistema. Esto sólo puede ser detectable por parte de los usuarios finales.
Para desarrollar sistemas usando productos COTS, debe hacer algunas elecciones de diseño:
1. La elección de productos COTS para funcionalidad más adecuada para los requerimientos.
2. Diseñar adaptadores para que los componentes intercambien los datos
3. Evaluar las características de un producto se usarán realmente y se debe negar acceso a la
funcionalidad no utilizada.
Hay cinco problemas importantes de la integración de sistemas COTS:
1. Falta de control sobre la funcionalidad y el rendimiento
2. Problemas con la interoperabilidad del sistema COTS
3. Ningún control sobre la evolución del sistema
4. Soporte de los proveedores COTS
5. el costo de mantenimiento y evolución del sistema es mayor para los sistemas COTS
integrados.
16.6 CONCLUSIONES
•Con el análisis anterior se comprendió en que se basa la reutilización de software, los
beneficios y problemas de la misma cuando se desarrollan nuevos sistemas.
• Con la revision de las conceptos se logro entender que es framework de aplicación y
como nos puede ayudar en nuestro proyectos de desarrollo de software y que es
conveniente reutilizarlo.
•Se conoció conceptos claves de las líneas de productos de software y como estas
aplicaciones se desarrollan a partir de aplicaciones base y especializa para satisfacer
requerimientos específicos.
•Se aprendió que la reutilización de sistemas COTS ofrecen amplia funcionalidad, y es
posible que su reutilización reduzca radicalmente los costos y el tiempo de desarrollo.
16.7 REFERENCIAS BIBLIOGRÁFICAS
PRESSMAN, Roger. (2010). Ingeniería de Software. Un enfoque practico . México : Mc Graw
Hill.
SOMMERVILLE, Ivan. (2010). Ingeniería de Software, 9na edición: Pearson Educación.