líneas de producto de software resolución de variabilidadmiso4204/dokuwiki/lib/ex… ·...

38
Líneas de Producto de Software – Resolución de variabilidad Material preparado por Rubby Casallas Departamento de Sistemas y Computación Universidad de los Andes, Bogotá

Upload: others

Post on 22-May-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Líneas de Producto de Software Resolución de variabilidadmiso4204/dokuwiki/lib/ex… · Referencias Systems and Software Variability Management: Concepts, Tools and Experiences

Líneas de Producto de

Software – Resolución de

variabilidad Material preparado por Rubby Casallas

Departamento de Sistemas y Computación

Universidad de los Andes, Bogotá

Page 2: Líneas de Producto de Software Resolución de variabilidadmiso4204/dokuwiki/lib/ex… · Referencias Systems and Software Variability Management: Concepts, Tools and Experiences

Referencias

Systems and Software Variability Management:

Concepts, Tools and Experiences. Editores: Rafael

Capilla, Jan Bosch, Kyo-Chul Kang. Springer. 2013

Disponible en línea a traves de los servicios electrónicos

de biblioteca.uniandes.edu.co

Mikael Svahnberg, Jilles van Gurp, and Jan Bosch.

2005. A taxonomy of variability realization

techniques: Research Articles. Softw. Pract. Exper. 35,

8 (July 2005), 705-754.

Page 3: Líneas de Producto de Software Resolución de variabilidadmiso4204/dokuwiki/lib/ex… · Referencias Systems and Software Variability Management: Concepts, Tools and Experiences

Vocabulario

Variabilidad

Feature

Obligatorio, Opcional, Variable, Externo

Variante

Colección de variantes

Punto de variación

“Binding Time”

Técnica de implementación de la variabilidad

Page 4: Líneas de Producto de Software Resolución de variabilidadmiso4204/dokuwiki/lib/ex… · Referencias Systems and Software Variability Management: Concepts, Tools and Experiences

Pasos para introducir variabilidad en una

SPL

1. Identificación de la variabilidad

2. Restricción de la variabilidad

3. Implementación de la variabilidad

4. Administración de la variabilidad

Page 5: Líneas de Producto de Software Resolución de variabilidadmiso4204/dokuwiki/lib/ex… · Referencias Systems and Software Variability Management: Concepts, Tools and Experiences

Identificación de la variabilidad

Por ejemplo utilizando el

modelo de variabilidad

ortogonal en cada paso

del ciclo de vida

Identificación de la

variabilidad de manera

incremental

Clasificandola

externa/interna

Page 6: Líneas de Producto de Software Resolución de variabilidadmiso4204/dokuwiki/lib/ex… · Referencias Systems and Software Variability Management: Concepts, Tools and Experiences
Page 7: Líneas de Producto de Software Resolución de variabilidadmiso4204/dokuwiki/lib/ex… · Referencias Systems and Software Variability Management: Concepts, Tools and Experiences

Restricción de la variabilidad

Restringir una variante:

Decidir cuándo la variante será introducida en

el diseño y la implementación en la línea o en

el producto específico

Decir cuándo y cómo las variantes serán

agregadas al sistema

Escoger un “binding time” para cada punto de

variación

Page 8: Líneas de Producto de Software Resolución de variabilidadmiso4204/dokuwiki/lib/ex… · Referencias Systems and Software Variability Management: Concepts, Tools and Experiences

Implementación de la variabilidad

Seleccionar una técnica de implementación

de los puntos de variación relacionados con

una determinada característica variante.

Page 9: Líneas de Producto de Software Resolución de variabilidadmiso4204/dokuwiki/lib/ex… · Referencias Systems and Software Variability Management: Concepts, Tools and Experiences

Administración de la variabilidad

Implica el mantenimiento (Extensiones,

correcciones, adaptaciones):

Las características variantes pueden cambiar a

medida que cambian los requerimientos

También implica la distribución de las nuevas

variantes de la base de clientes ya instalada

Page 10: Líneas de Producto de Software Resolución de variabilidadmiso4204/dokuwiki/lib/ex… · Referencias Systems and Software Variability Management: Concepts, Tools and Experiences

Restricción e Implementación de la

variabilidad Binding Time o Momento de la selección

Punto de variación

V1 V2 Vn …

Sistema

Variantes

Page 11: Líneas de Producto de Software Resolución de variabilidadmiso4204/dokuwiki/lib/ex… · Referencias Systems and Software Variability Management: Concepts, Tools and Experiences

Binding Time o Momento de la

selección

Se define un punto de variación y se

pospone la decisión de cuál variante va a ser

seleccionada.

La elección de una variante particular es el

“binding” o la selección de la variante

Se puede hacer en las distintas etapas del

ciclo de vida de un sistema

Page 12: Líneas de Producto de Software Resolución de variabilidadmiso4204/dokuwiki/lib/ex… · Referencias Systems and Software Variability Management: Concepts, Tools and Experiences

Binding Time o Momento de la

selección

Figura tomada de [1] Capítulo 4 “Binding Time and Evolution”

Rafael Capilla and Jan Bosch

Page 13: Líneas de Producto de Software Resolución de variabilidadmiso4204/dokuwiki/lib/ex… · Referencias Systems and Software Variability Management: Concepts, Tools and Experiences

En Diseño

Todas las variantes y puntos variaciones se

definen en la arquitectura de software o en

un árbol de características complementario

Page 14: Líneas de Producto de Software Resolución de variabilidadmiso4204/dokuwiki/lib/ex… · Referencias Systems and Software Variability Management: Concepts, Tools and Experiences

Antes de la compilación

Desarrollo basado en modelos:

Antes de tiempo de compilación, variantes y

puntos de variación pueden describirse en un

perfil UML o en un lenguaje de dominio específico

Proceso de

generación de

código Modelos

Modelos Código

/ artefactos Código

/ artefactos

Page 15: Líneas de Producto de Software Resolución de variabilidadmiso4204/dokuwiki/lib/ex… · Referencias Systems and Software Variability Management: Concepts, Tools and Experiences

Antes de la compilación

Desarrollo basado en aspectos:

Antes de tiempo de compilación, variantes y

puntos de variación pueden describirse en

aspectos

Proceso de

entretejido de

código

Código

principal

Aspecto 1 Código

/ artefactos Código

Final

Aspecto 2

Aspecto n

Page 16: Líneas de Producto de Software Resolución de variabilidadmiso4204/dokuwiki/lib/ex… · Referencias Systems and Software Variability Management: Concepts, Tools and Experiences

En Compilación

La finalización del código fuente se hace

durante la compilación.

Esto incluye:

Quitar código de acuerdo con directivas al

compilador en el código fuente, #IFDEF

Extender el código al superponer comportamiento

adicional (por ejemplo, anotaciones, macros).

Page 17: Líneas de Producto de Software Resolución de variabilidadmiso4204/dokuwiki/lib/ex… · Referencias Systems and Software Variability Management: Concepts, Tools and Experiences

En Construcción

Cargar, encadenar, ensamblar

Identificación de dependencias entre los

módulos que implementan puntos de

variación y/o variantes

Herramientas:

Make (makefile)

Maven

Page 18: Líneas de Producto de Software Resolución de variabilidadmiso4204/dokuwiki/lib/ex… · Referencias Systems and Software Variability Management: Concepts, Tools and Experiences

En configuración y despliegue

Configurar las variantes después de la

compilación y del empaquetamiento puede ser

realizado en el lado desarrollador (antes o

durante el despliegue) o en el lado del cliente.

Las variables, opciones del sistema, se

configuran antes de la ejecución, durante la

primera puesta en marcha o en cada arranque.

Un programa puede leer un archivo de texto

de configuración con los valores

Page 19: Líneas de Producto de Software Resolución de variabilidadmiso4204/dokuwiki/lib/ex… · Referencias Systems and Software Variability Management: Concepts, Tools and Experiences

En ejecución

Es la forma más flexible para configurar las

variantes y puntos de variación.

Archivos dinámicos o librerías donde una o varias

variantes implementan una interface.

Ejemplos:

Apache que carga módulos dinámicamente

Eclipse que carga plugins

Reconfiguración dinámica

autonomic computing, self-adaptive, self-healing

systems, etc.).

Page 20: Líneas de Producto de Software Resolución de variabilidadmiso4204/dokuwiki/lib/ex… · Referencias Systems and Software Variability Management: Concepts, Tools and Experiences

Niveles de abstracción para

implementar la variabilidad Arquitectura.

el principal mecanismo para la variabilidad es la

sustitución de componentes de primer nivel con

otras implementaciones de estos componentes o

la unión de componentes opcionales,

dependiendo del contexto en el que se despliega

el sistema.

Page 21: Líneas de Producto de Software Resolución de variabilidadmiso4204/dokuwiki/lib/ex… · Referencias Systems and Software Variability Management: Concepts, Tools and Experiences

Niveles de abstracción para

implementar la variabilidad Componente.

A nivel de componentes, la variabilidad es a

menudo más compleja porque un concepto

variable puede ser transversal a varios

componentes

Page 22: Líneas de Producto de Software Resolución de variabilidadmiso4204/dokuwiki/lib/ex… · Referencias Systems and Software Variability Management: Concepts, Tools and Experiences

Niveles de abstracción para

implementar la variabilidad Código.

A nivel de código, hay un gran conjunto de

mecanismos de variabilidad disponibles.

La principal preocupación, sin embargo, es que

los mecanismos a nivel de código se pueden

aplicar para la implementación algorítmica

normal, así como para la gestión de puntos de

variación.

Page 23: Líneas de Producto de Software Resolución de variabilidadmiso4204/dokuwiki/lib/ex… · Referencias Systems and Software Variability Management: Concepts, Tools and Experiences

Mikael Svahnberg, Jilles van Gurp, and Jan Bosch. 2005. A taxonomy of

variability realization techniques: Research Articles. Softw. Pract. Exper. 35, 8

(July 2005), 705-754

Page 24: Líneas de Producto de Software Resolución de variabilidadmiso4204/dokuwiki/lib/ex… · Referencias Systems and Software Variability Management: Concepts, Tools and Experiences

Técnicas de implementación

(1) Architecture Reorganization

(2) Variant Architecture Component

(3) Optional Architecture Component

(4) Binary Replacement - Linker Directives

(5) Binary Replacement – Physical

(6) Infrastructure-Centered Architecture

(7) Variant Component Specializations

(8) Optional Component Specializations

(9) Runtime Variant Component Specializations

(10) Variant Component Implementations

(11) Condition on Constant

(12) Condition on variable

(13) Code Fragment Superimposition

Page 25: Líneas de Producto de Software Resolución de variabilidadmiso4204/dokuwiki/lib/ex… · Referencias Systems and Software Variability Management: Concepts, Tools and Experiences

Condition on constant

Intención.

Dar soporte a varias formas de realizar una

operación.

Sólo una forma será usada

Motivación.

La variante no es lo suficientemente grande para

ser una clase en su propio derecho.

Se usa por razones de rendimiento, y para ayudar

a eliminar, antes de compilar, código no utilizado.

Page 26: Líneas de Producto de Software Resolución de variabilidadmiso4204/dokuwiki/lib/ex… · Referencias Systems and Software Variability Management: Concepts, Tools and Experiences

Condition on constant

#include <stdio.h>

int main(void) {

#ifdef MACRO1

printf("\nMACRO1 Defined\n");

#endif

#ifdef MACRO2

printf("\nMACRO2 Defined\n");

#endif

return 0;

}

$ gcc -Wall -DMACRO2 macro.c -o macro

Preprocesador

#include <stdio.h>

int main(void) {

printf("\nMACRO2 Defined\n");

return 0;

}

Page 27: Líneas de Producto de Software Resolución de variabilidadmiso4204/dokuwiki/lib/ex… · Referencias Systems and Software Variability Management: Concepts, Tools and Experiences

Condition on constant

Representación de la

variabilidad

Implícita

Binding Externo

Momento de introducción Implementación

Se resuelve Pre-compilación

Agregar más variantes Implementación

Page 28: Líneas de Producto de Software Resolución de variabilidadmiso4204/dokuwiki/lib/ex… · Referencias Systems and Software Variability Management: Concepts, Tools and Experiences

Consecuencias

Usar IFDEFs o similares es riesgoso, ya que

el número de rutas de ejecución posibles

tiende a explotar haciendo el mantenimiento

y corrección de errores difíciles.

Los puntos de variación sueles estar

dispersos por todo el sistema, por lo cual se

hace difícil hacer un seguimiento de cuáles

partes de un sistema pertenecen realmente a

una variante.

Page 29: Líneas de Producto de Software Resolución de variabilidadmiso4204/dokuwiki/lib/ex… · Referencias Systems and Software Variability Management: Concepts, Tools and Experiences

#ifdef Considered Harmful, or

Portability Experience With C News. Henry Spencer. 1992

https://www.usenix.org/legacy/publications/library/proceedings/sa92/spencer.pdf

Page 30: Líneas de Producto de Software Resolución de variabilidadmiso4204/dokuwiki/lib/ex… · Referencias Systems and Software Variability Management: Concepts, Tools and Experiences

Linux

Ofrece más de 10.000 funciones, un número

que tiene duplicado en los últimos cinco años.

Configuración a través de #ifdef

Incluye 80.000 bloques de código condicionales

Leviathan: Taming the #ifdef Beast in Linux et al.* Wanja Hofer, Christoph Elsner, Frank

Blendinger, Wolfgang Schröder-Preikschat, Daniel Lohmann. Friedrich–Alexander

University Erlangen–Nuremberg. 2010

Page 31: Líneas de Producto de Software Resolución de variabilidadmiso4204/dokuwiki/lib/ex… · Referencias Systems and Software Variability Management: Concepts, Tools and Experiences

Condition on variable

if (a == 1) {

}

else if (a == 2) {

}

else if (a == n) {

} else {

}

PV

V1 V2 … Vn

a == 1

Page 32: Líneas de Producto de Software Resolución de variabilidadmiso4204/dokuwiki/lib/ex… · Referencias Systems and Software Variability Management: Concepts, Tools and Experiences

Condition on variable

Representación de la

variabilidad

Implícita o Explícita

Momento de introducción Implementación

Se resuelve Ejecución

Agregar más variantes Implementación

Page 33: Líneas de Producto de Software Resolución de variabilidadmiso4204/dokuwiki/lib/ex… · Referencias Systems and Software Variability Management: Concepts, Tools and Experiences

Condition on variable

Consecuencias

Es parte de los lenguajes d eprogramación para

manejar el flujo de control

Cuando se utiliza para resolver variantes se corre

el mismo riesgo que en el caso de los #IFDEFS

Page 34: Líneas de Producto de Software Resolución de variabilidadmiso4204/dokuwiki/lib/ex… · Referencias Systems and Software Variability Management: Concepts, Tools and Experiences

Variant Component Implementations

Varias implementaciones simultaneas y

coexistentes de un componente

arquitectónico.

Page 35: Líneas de Producto de Software Resolución de variabilidadmiso4204/dokuwiki/lib/ex… · Referencias Systems and Software Variability Management: Concepts, Tools and Experiences

Variant Component Implementations

Tener varias implementaciones de la misma

interfaz

Patrones de diseño [Gamma et al. 1995]:

Strategy

Broker

Abstract Factory

Builder

Page 36: Líneas de Producto de Software Resolución de variabilidadmiso4204/dokuwiki/lib/ex… · Referencias Systems and Software Variability Management: Concepts, Tools and Experiences

Variant Component Implementations

Esta técnica se introduce durante el diseño

arquitectónico

El binding se hace en tiempo de ejecución:

Inyección de dependencias

Parámetro de arranque

Page 37: Líneas de Producto de Software Resolución de variabilidadmiso4204/dokuwiki/lib/ex… · Referencias Systems and Software Variability Management: Concepts, Tools and Experiences

Colección de las variantes Explícita

Momento de introducción Architecture Design

Se resuelve Ejecución

Agregar más variantes Detailed Design

Variant Component Implementations

Page 38: Líneas de Producto de Software Resolución de variabilidadmiso4204/dokuwiki/lib/ex… · Referencias Systems and Software Variability Management: Concepts, Tools and Experiences

Code Fragment Superimposition

Ver material Aspectos