Full text
HADAS: Asistente de eco-eciencia con repositorio de consumo energético Daniel-Jesus Munoz, Mónica Pinto y Lidia Fuentes Universidad de Málaga, Andalucía Tech, Spain {danimg,pinto,lff}@lcc.uma.es , http://caosd.lcc.uma.es/ Resumen El interés por la Ingeniería del Software verde, o sea, sensible al consumo de energía, es relativamente reciente. Su objetivo es concienciar a los desarrolladores de software de la inuencia que tienen sus decisiones de diseño e implementación en el gasto energético del producto nal. Hasta el momento se han publicado muchos resultados experimentales que comparan el consumo de energía de varias soluciones alternativas, y que demuestran que se puede reducir dicho consumo hasta en un 70%. Aunque estos resultados sean de libre disposición, no es sencillo que un desarrollador aplique este conocimiento a sus aplicaciones. En consecuencia, en este artículo presentamos el eco-asistente HADAS cuya utilidad es: (i) los investigadores almacenarán sus resultados en un repositorio de libre disposición; (ii) los desarrolladores podrán razonar y obtener las conguraciones que menos energía consuman y que satisfaga sus requisitos. Nos centraremos en mostrar los elementos principales de nuestra propuesta y como se aplica a casos de estudio reales. Keywords: CVL, Energía, Línea de Productos Software, Variabilidad, Java, Servidor. 1. Introducción Las políticas eco-ecientes, que persiguen la eciencia energética, son una preocupación creciente, debido a las emisiones de CO 2 y al efecto invernadero, provocado en parte por los sistemas de información de uso personal e industrial. Aunque el software no consume directamente energía, sí que tiene impacto en el gasto energético del hardware donde se ejecuta (ej.: un dispositivo móvil). Este impacto del software en el consumo de energía no es precisamente despreciable, por lo que recientemente ha surgido un interés por concienciar al desarrollador de software, de la inuencia que tienen sus decisiones de diseño e implementación en el gasto energético del producto nal. Por tanto, el desarrollador de software no solamente debe tener en cuenta la modularización, rendimiento o mantenibilidad del software, sino que también debe tener en cuenta el ahorro energético. El interés por las tecnologías de información verdes y en especial por la Ingeniería del Software sensible al consumo energético (Energy-aware Software Engineering [10]) es relativamente reciente. La mayoría de los trabajos sobre e- ciencia energética del software son estudios empíricos que se centran en estudiar
qué partes del código son las que consumen más energía [7,14,15], o en comparar el consumo energético de varias soluciones alternativas [2,5,8,10,16]. Existen artículos que comparan el consumo de energía, tanto con métricas reales; en redes con dispositivos Android [13], en servidores [3] o en colecciones Java [8]; como con simulaciones, de aplicaciones Android [11] con eCalc, de aplicaciones Java Enterprise Edition (EE) [4], o de compresión de audio [10,17] con Palladio PCA. De estos trabajos se deduce que vale la pena optimizar el consumo de energía a nivel de código ya que se puede ahorrar entre un 2% y un 70%. Sin embargo, aunque todos estos trabajos empíricos muestran resultados muy interesantes, estos no son fáciles de trasladar a los procesos de desarrollo software industrial. Por ejemplo, en [8] se muestra el consumo de energía de las diferentes colecciones de datos (ej.: ArrayList, HashSet, Map, etc.) implementadas utilizando diferentes frameworks . Los autores han puesto de libre disposición sus resultados almacenados en cheros .csv, pero solo con estos cheros no es sencillo conseguir que un desarrollador reutilice este conocimiento en sus aplicaciones. En consecuencia, en este trabajo nos planteamos la denición de un ecoasistente (HADAS) que contenga los elementos funcionales que más inuyen en el consumo de energía de la aplicación (los consumidores de energía ), junto con sus alternativas de diseño (ej.: usar el algoritmo de cifrado AES) e implementación (ej.: Apache Commons Crypto). El objetivo del eco-asistente HADAS es el de concienciar al desarrollador de que debe analizar con cuidado las diferentes alternativas de diseño/implementación de estos consumidores, desde el punto de vista del consumo energético, y ayudarle a elegir la mejor. La utilidad del asistente es doble. Por un lado, los investigadores podrán almacenar sus resultados experimentales en un repositorio que quedarán disponibles para el resto de la comunidad. Por otro lado, los desarrolladores podrán utilizar estos para razonar acerca de las distintas versiones de los consumidores de energía, y elegir aquella solución que les satisfaga, siendo conscientes de la energía que podría consumir. Existen repositorios como el proporcionado por la herramienta de minería GreenMiner [12], orientado a almacenar resultados de pruebas experimentales relativos al consumo de energía. Sin embargo, este repositorio sirve únicamente para la ejecución y consulta de pruebas concretas y queda fuera de su alcance el aconsejarle al desarrollador sobre la solución más eco-eciente. De hecho, desarrollar un asistente como el que planteamos en este artículo es una tarea muy ambiciosa, a la vez que novedosa. En este artículo mostraremos los elementos principales de nuestra propuesta, centrándonos en presentar la estructura interna del asistente y en cómo este le permite a un desarrollador razonar sobre el consumo de energía de las diferentes conguraciones de los consumidores de energía. Concretamente, este razonamiento se basa en explotar un modelo de variabilidad que almacena las diferentes alternativas de los consumidores de energía y nos permite generar diferentes conguraciones válidas, y los datos de energía de cada una de ellas. Hay que tener en cuenta que el objetivo del asistente no es dar valores concretos de consumo de energía, ya que estos dependen mucho del hardware, sino mostrar en forma de grácas cómo varía el consumo de energía de dos o más soluciones. Por tanto, se pretende que el desarrollador
identique tendencias de consumo y no asegurarle que su aplicación consumirá una determinada cantidad de Julios. De hecho, ninguna de las mediciones de energía realizadas tanto con herramientas software como hardware (ej.: Monsoon Power Monitor, osciloscopios) pueden tomarse como valores absolutos dado que el consumo real de una aplicación en ejecución depende de multitud de factores que no pueden controlarse (ej.: temperatura, carga del dispositivo, recolectores de basura, etc.). Las ventajas del eco-asistente HADAS serían: (i) el desarrollador no necesita disponer de, ni conocer, las herramientas hardware y/o software disponibles para medir el consumo de energía; (ii) el desarrollador no tiene que simular o hacer mediciones del consumo de energía de las diferentes alternativas de los consumidores de energía; (iii) HADAS ofrece una interfaz web sencilla que le ayuda al desarrollador a identicar los consumidores de energía de su aplicación y navegar para congurar las diferentes alternativas; (iv) HADAS devuelve grácas comparativas que le mostrarán las tendencias de consumo de energía de varias implementaciones alternativas. El artículo se organiza de la siguiente manera. La Sección 2 describe los requisitos y la visión general del eco-asistente HADAS. La Sección 3 detalla la estructura y funcionamiento de HADAS. En la Sección 4 evaluamos nuestra propuesta mediante dos escenarios diferentes, y mostramos la mejora del análisis de sostenibilidad al usar HADAS. La Sección 5 describe el trabajo relacionado. Finalmente, la Sección 6 discute las conclusiones y el trabajo futuro. 2. Requisitos y Visión General del Eco-Asistente HADAS En esta sección vamos a describir los requisitos que el repositorio HADAS debe cumplir para que sea útil, tanto a los investigadores que llevan a cabo los experimentos de consumo de energía, como a los desarrolladores que quieren reutilizar los resultados de dichos experimentos en sus aplicaciones. Daremos también una visión general de las partes más relevantes del repositorio. En cuanto a los requisitos que el repositorio HADAS debería tener en cuenta, hemos identicado los descritos a continuación. Los requisitos R1-R3 son comunes tanto a investigadores como a desarrolladores, mientras que el requisito R4 es especíco de los desarrolladores de aplicaciones y el requisito R5 especíco de los investigadores en consumo de energía: R1. Identicar los Consumidores de Energía. El primer paso para poder razonar sobre el consumo de energía de una aplicación es identicar aquellos elementos que de forma recurrente pueden tener un mayor impacto en su consumo energético. Estos elementos serían los que llamamos consumidores de energía . HADAS, al menos en esta primera fase, debería incorporar aquellos consumidores que más se utilizan en las aplicaciones, y dejar de lado aquellos más especícos de un dominio particular.
R2. Modelar la Variabilidad de los Consumidores de Energía. Para un mismo referente de consumo energético podría haber disponible distintas soluciones, tanto de diseño como de implementación. Dado que queremos poder comparar entre distintas alternativas para un mismo referente, éstas deben ser modeladas, y su variabilidad representada de forma explícita. Dentro de este modelo también será necesario identicar las dependencias entre distintos consumidores (ej: entre autenticación y distribución). R3. Registrar el Consumo Energético de los Consumidores de Energía. Junto a cada referente, el repositorio HADAS debe almacenar información que permita calcular y razonar sobre el consumo energético de cada una de sus variantes, teniendo en cuenta los parámetros de conguración que afectan a dicho consumo. R4. Dar soporte para realizar un Análisis de Eco-eciencia. El desarrollador debe poder congurar los diferentes consumidores de energía (ej.: frameworks de desarrollo web PHP) de forma parcial, de manera que seleccione aquellas características variables sobre las que ya ha tomado una decisión, porque son imprescindibles de acuerdo a los requisitos de su aplicación (ej.: usar PHP plano) pero deje sin seleccionar otras características donde existe mayor exibilidad a la hora de elegir entre las alternativas disponibles. De esta forma el repositorio HADAS podría devolverle grácas comparativas con todas las soluciones posibles. El desarrollador podrá entonces realizar un análisis de la eco-eciencia de las distintas soluciones y optar por una de ellas. R5. Dar soporte para integrar los resultados de experimentación. Como ya hemos comentado anteriormente, no sería un objetivo viable el que los desarrolladores del eco-asistente HADAS fueran los encargados de medir y almacenar todas las conguraciones posibles de todos los consumidores de energía que existan en cualquier dominio de aplicación. Para esto, la idea es basarnos en un modelo colaborativo, donde el repositorio esté preparado para incluir las con- guraciones y mediciones aportadas por profesionales, investigadores e, incluso, extraídas de artículos ya publicados. Dada la gran variedad de hardware existente y las distintas posibilidades de medición, HADAS debería permitir agrupar aquellas medidas que se hayan realizado con el mismo hardware. Nuestra visión general de cómo debería ser el eco-asistente HADAS puede verse en la Figura 1. Por un lado, el Formulario y el Modelo de Variabilidad modelan de forma explícita cada uno de los consumidores de energía contenidos en el asistente, haciendo hincapié en la variabilidad existente y en su contexto energético. El Formulario es la interfaz con los desarrolladores, que les hace transparente los detalles del modelo de variabilidad, haciéndoles más fácil su utilización, mientras que el Modelo de Variabilidad es una representación formal de la variabilidad de los consumidores de energía y su contexto energético, que permite congurarlos y razonar sobre ellos. Toda la estructura que nos indica el modelo de variabilidad, junto a las mediciones de energía para cada consumidor
Formato HADAS Desarrolladores Desarrolladores Modelo de Variabilidad HADAS Consumidores de energía Contexto Energético Modelo de Variabilidad HADAS Consumidores de energía Contexto Energético Modelo de Variabilidad HADAS Consumidores de energía Contexto Energético Repositorio de Eficiencia Energética Mediciones de Energía Mediciones de Energía Diseño Implementación Diseño Implementación Repositorio de Eficiencia Energética Mediciones de Energía Diseño Implementación Modelo de Variabilidad HADAS Consumidores de energía Contexto Energético Repositorio de Eficiencia Energética Mediciones de Energía Diseño Implementación Eco-asistente HADAS Formulario (Vista de Árbol) Interfaz x Interfaz x Interfaz x Formulario (Vista de Árbol) Interfaz x Investigadores Investigadores Gráficas de Sostenibilidad Gráficas de Sostenibilidad Análisis de Sostenibilidad Datos Generados Configuración Insertar Métricas Consumidores de Energía Visualización de Gráficas Resultados de Experimentación Figura 1. Visión general del eco-asistente HADAS y cada contexto energético, estarán almacenados en el Repositorio de Eciencia Energética . Una vez generada una Conguración , total o parcial, a través del Formulario se accederá al repositorio para obtener información sobre las mediciones de energía asociadas a esa conguración, y se generarán las Grácas de Sostenibilidad necesarias para realizar el análisis energético de las variantes seleccionadas. Como hemos mencionado anteriormente se distinguen claramente dos roles, el de los Desarrolladores y el de los Investigadores . ¾Cómo utiliza el eco-asistente HADAS un investigador? El investigador dispone de datos de experimentación sobre una variante determinada de un consumidor de energía y quiere integrarlos en el eco-asistente HADAS para que los desarrolladores de aplicaciones puedan utilizarlos. Básicamente, de acuerdo a la Figura 1, el investigador tendrá que representar los datos tomados en un formato entendible por HADAS, y habrá que actualizar de forma adecuada tanto el modelo de variabilidad del consumidor de energí,a como el repositorio con las métricas. ¾Cómo utiliza el eco-asistente HADAS un desarrollador? Un desarrollador de aplicaciones desea conocer cuáles son los posibles puntos de fuga de energía de la aplicación que va a desarrollar, y quiere realizar un análisis eco-eciente de las distintas alternativas que le da el eco-asistente HADAS. Para ello, navegará por los formularios donde HADAS le muestra información de todos los consumidores de energía que tiene registrado junto a sus variantes. El desarrollador seleccionará qué consumidores de energía quiere analizar, qué variantes quiere pre-selecciona, cuales no para que el asistente le ayude a elegir. Con toda esa información el eco-asistente HADAS generará una conguración parcialmente
instanciada. Esto es posible porque por debajo de este formulario, transparente al desarrollador de aplicaciones, el eco-asistente tiene denido el modelo de variabilidad de todos los referentes de consumo y de todas sus variantes. Además, enlazado con este modelo de variabilidad, estará la información de las mediciones de energía que hay disponibles. Una vez denida una conguración de los consumidores de energía que se desean analizar, el eco-asistente generará las grácas que permitirán al desarrollador realizar su análisis de sostenibilidad. 3. Estructura de HADAS En la Figura 1 podemos visualizar que, tanto las métricas como su estructura (características de diseño e implementación), se encuentran en una base de datos, formando lo que hemos denominado repositorio de eciencia energética. La estructura del repositorio viene dada por el modelo de variabilidad, que en nuestro caso, sería una representación del árbol de variabilidad en un formato manejable para el eco-asistente HADAS. Hemos elegido una representación en modo texto, concretamente el formato EFM (Famas Extended Model) [18]. De esta forma es fácil chequear su corrección utilizando la herramienta FaMa-FW (del inglés Feature automated Model analyses - FrameWork) [1]. Como se ve en Alternativas de implementación Variantes de diseño Contexto energético Consumidores de energía 1..*1..* HADAS Referente 1 1 4 ... Eco-asistente HADAS Consumidores de energía Memoria Distribuido Seguridad Compresión Distribución P2P Cliente/Servidor Servidor PHP Servidor Web Contexto Energético Servidor Parámetros del Servidor Operación del Servidor Parámetros MaxUsuarios = 50 Referente n Diseño 1 Diseño 2 Diseño 2.1 Diseño 2.n Tecnología 1 Tecnología 2 Tecnologías Diseño 2.1 ContextoEnergético Diseño 2.1 Tecnología 2.1 Tecnología 2.n 1..11..1 1..*1..* 1..*1..* 1..11..1 Parámetros Diseño 2.1 TipodeDato Diseño 2.1 1..*1..* Operación Diseño 2.1 Variable 1: Int Variable n: Int 1..*1..* Tipo 1 Tipo n 1..11..1 Op 1 Op n 1..*1..* Opción Variable: Tipo 1..n1..n selección entre 1 y n selección obligatoria selección opcional Leyenda VSpec decisión si/no especificar un valor del tipo 2 3 Figura 2. Estructura por niveles de la variabilidad del árbol y del formulario la parte derecha de la Figura 2, y también en el ejemplo de la Figura 3, el árbol de variabilidad que usa HADAS se divide en tres niveles: (1) en este nivel se sitúan los consumidores de energía identicados no solamente por nosotros, sino en los diferentes trabajos de experimentación (ej.: seguridad, almacenamiento, distribución ...). en el primer nivel de la Figura 3); (2) para cada referente se denirá un sub-árbol con las opciones de diseño disponibles (ej.: en la Figura 3 para la distribución tenemos la arquitectura cliente/servidor). Dependiendo de la complejidad del consumidor de energía habrá uno o varios sub-niveles; (3) para cada hoja del sub-árbol de diseño (ej.: Diseño 2.1 en Figura 2) se dene un sub-árbol Tecnologías y otro sub-árbol con el Contexto Energético . El sub-árbol Tecnologías dene las diferentes alternativas que existen para implementar cada uno de los diseños. Aquí podemos distinguir entre diferentes frameworks, APIs,
etc., y sus respectivos lenguajes de programación. Esta información es la que nos permitirá darle al desarrollador el consumo de energía de un diseño concreto, implementado con diferentes tecnologías. El sub-árbol Contexto Energético contiene tres características hijas: (i) Parámetros : el consumo de energía de una implementación varía en función de algunos parámetros de su diseño, como por ejemplo la compresión de un chero dependerá del tamaño del chero a comprimir, por lo tanto, el desarrollador podría indicar un tamaño máximo; (ii) Tipo de Datos : normalmente los consumidores de energía manipulan datos de diferente tipo (ej.: texto plano, XML, etc.) y el tipo de datos suele inuir en el consumo de energía; (iii) Operaciones : cada diseño de un referente ofrece una interfaz de uso, que es el conjunto de operaciones que se invocarán desde la aplicación (ej.: para las colecciones de datos, las operaciones son insertar, borrar, etc.). Tanto las operaciones, como el tipo de datos, no tienen por qué estar implementadas en todas las tecnologías, y esto lo expresamos mediante restricciones entre sub-árboles del tipo Tecnología i implies NOT Op j . Una vez denimos nuestro modelo de variabilidad, este hay que representarlo mediante formularios dinámicos al desarrollador y permitirle que seleccione las diferentes alternativas, respetando las restricciones entre sub-árboles (ver parte izquierda de la Figura 2, que sigue la misma leyenda de colores que el esquema del árbol de variabilidad). Concretamente, el eco-asistente HADAS hace una representación web del modelo de variabilidad, en forma de árbol desplegable en profundidad. El formulario dinámico implementa las dependencias de manera dinámica, es decir, se marcarán y desplegarán las ramas objeto de restricciones, de manera automática, si son activadas. Pero este árbol de variabilidad no contiene las métricas, sino que éstas se almacenan en una base de datos. Por lo tanto, conectamos el árbol de variabilidad a una base de datos que, conjuntamente, conforman el repositorio. La estructura de la base de datos se corresponde con la del modelo de variabilidad, donde cada nivel tiene su referente en una tabla concreta (tablas Referente, Diseño, Tecnología, TipodeDato, Operación, Variable). Además, la tabla Métrica, relacionará estas tablas con el consumo y el tiempo de ejecución. Para permitir la inclusión de datos de energía diferentes (de distintas fuentes) para la misma conguración, se incluye la tabla Metadato, donde se incluirá el sistema de medición y el hardware usado para obtener éstos datos, lo que le permitirá al desarrollador realizar un análisis más rico, al poder basarse en varias fuentes. El desarrollador va generando diferentes conguraciones que se traducen a consultas en la base de datos del repositorio. Las conguraciones se generan con un razonador ( SAT solver ) que nos garantiza que se generan todas las con- guraciones válidas. A continuación, se formaliza la correspondencia entre una conguración del modelo de variabilidad y la información en la base de datos. Esta correspondencia permite la generación automática de las consultas SQL, que le darán al desarrollador la información necesaria para realizar un análisis. Nos basamos en la formalización del árbol de variabilidad denida en [6] extendiéndola. Dada una conguración parcial CP arcial del modelo de variabilidad y después de aplicarle un razonador (FaMa-FW) obtendremos un conjunto con
todas las conguraciones correspondientes. Para cada conguración completa CCompleta se denen los siguientes conjuntos y operaciones: V SP EC V SP EC V SP EC . Conjunto nito, no vacío, de identicadores (nombres únicos) de todas las características (VSpecs) de una conguración completa. V SP EC ={HADAS, Distribuci ó n, Cliente/Servidor, Servidor, T ecnolog í asServidor, P HP, P lainP HP, Lavarel, ...} hijos :V SP EC →P(V SP EC) hijos :V SP EC →P(V SP EC) hijos :V SP EC →P(V SP EC) . Función que dada una característica, devuelve todos sus hijos. padre :V SP EC →V SP EC padre :V SP EC →V SP EC padre :V SP EC →V SP EC . Función que dado una característica devuelve la característica padre, o ∅ si es la raíz. antecesores :V SP EC →P(V SP EC) antecesores :V SP EC →P(V SP EC) antecesores :V SP EC →P(V SP EC) . Función que dado una característica devuelve todos sus antecesores, o ∅ si es la raíz. Referentes :CCompleta →V SP EC Referentes :CCompleta →V SP EC Referentes :CCompleta →V SP EC . Dada una conguración completa devuelve los referentes de consumo de energía de la conguración, es decir: Referentes ={c∈CCompleta |c∈ hijos(HADAS)} T ECRa í z:CCompleta →P(V SP EC) T ECRa í z:CCompleta →P(V SP EC) T ECRa í z:CCompleta →P(V SP EC) . Dada una conguración completa devuelve las características raíz de las tecnologías: T ECRa í z={c∈CCompleta |c.startsW ith(”T ecnolog í as”)} VDise ñ o:CCompleta →P(V SP EC) VDise ñ o:CCompleta →P(V SP EC) VDise ñ o:CCompleta →P(V SP EC) . Dada una conguración completa devuelve todas sus variantes de diseño: VDise ñ o={c∈CCompleta | ∃t∈T ECRa í z, c =padre(t)} T ecnolog í as :CCompleta →P(V SP EC) T ecnolog í as :CCompleta →P(V SP EC) T ecnolog í as :CCompleta →P(V SP EC) . Dada una conguración completa devuelve todas las tecnologías usadas en la conguración: T ecnolog í as ={c∈CCompleta |hijos(c) = ∅ ∧ ∃a∈ antecesores(c)∧a∈T ECRa í z} P ARAMRa í z:CCompleta →P(V SP EC) P ARAMRa í z:CCompleta →P(V SP EC) P ARAMRa í z:CCompleta →P(V SP EC) . Dada una conguración completa devuelve las características raíz de los parámetros: P ARAMRaz ={c∈CCompleta |c.startsW ith(”P ar á metros”)} P ar á metros :CCompleta →P(V SP EC) P ar á metros :CCompleta →P(V SP EC) P ar á metros :CCompleta →P(V SP EC) . Dada una conguración completa devuelve todos los parámetros usados en la conguración: P ar á metros ={c∈CCompleta |hijos(c) = ∅ ∧ ∃a∈ antecesores(c)∧a∈P ARAMRa í z} value :p→R value :p→R value :p→R . Dado un parámetro p devuelve el valor seleccionado por el desarrollador en la interfaz. De manera análoga a la denición de las variantes de parámetros se denen los contextos energéticos, tipos de datos y operaciones. Con esta información, se genera una consulta SQL para cada conguración completa CCompleta : SELECT Energy, Time, Metadatos.* FROM TMétrica JOIN Metadatos ON Metadatos.idMétrica = TMétrica.id JOIN RefsMétrica ON RefsMétrica.idMétrica = TMétrica.id JOIN TReferente ON TReferente.id = RefsMétrica.idReferente ⇑ Enlazamos una medida a uno o varios referentes JOIN VsDisMétrica ON VsDisMétrica.idMétrica = TMétrica.id JOIN TVDiseño ON TVDiseño.id = VsDisMétrica.idVDiseño ⇑ Enlazamos una medida a una o varias variables de diseño JOIN TecsMétrica ON TecsMétrica.idMétrica = TMétrica.id JOIN TTecnología ON TTecnología.id = TecsMétricas.idTecnologia ⇑ Enlazamos una medida a una o varias alternativas tecnológicas ... ⇒ De manera análoga enlaza para cada tabla/conjunto WHERE (( ∀r∈Referentes , TReferente.nombre = r ) AND ( ∀v∈V Dise ñ o , TVDiseño.nombre = v ) AND ( ∀t∈T ecnolog í as , TTecnología.nombre = t ) AND ... ⇒ De manera análoga filtra para cada tabla/conjunto ( ∀p∈P ar á metros , TParámetro.nombre = p AND TParámetro.valor ≤value(p) )) ⇒ Acota por valores máximo Una vez obtenidos los datos para cada conguración, el sistema hará uso de la API Google Charts para mostrar las grácas de consumo y tiempo de ejecución pertinentes, permitiendo el análisis del caso de uso.
4. Evaluación En esta sección presentamos dos escenarios de uso de HADAS. En el primero mostramos que es posible integrar los datos generados por otros investigadores en el eco-asistente, mejorando el análisis de consumo de energía que se puede realizar, y en el segundo seguimos el proceso completo generando y almacenando primero los datos y usando después el eco-asistente. 4.1. Colecciones en Java En [8] se calcula el consumo de energía de distintas colecciones de Java (Lista, Mapa y Set) para diferentes operaciones (insertar al principio, en medio, al nal, borrar, iterar...), utilizando distintas APIs (JCF, ACC, Trove) y distintas implementaciones (HashMap, TreeMap...). Se realiza la experimentación teniendo en cuenta distintos tipos de datos (Int, Object) y tamaño de los datos (hasta 5000 elementos). Toda esta información está accessible mediante archivos CSV en una web. ¾Cómo utilizaría entonces un desarrollador esta información sin usar HADAS? Puede consultar las grácas estáticas proporcionados en la página web, pero no es trivial identicar todos los posibles análisis que existen, ya que no hay una forma fácil de conocer todas las variantes a analizar. Nosotros mostraremos como se pueden integrar estos datos en el eco-asistente y veremos que es posible realizar un análisis más rico del consumo de energía de las colecciones con dichas métricas. Dado que no existe información de estos referentes energéticos en el actual repositorio, el primer paso es evolucionar el árbol de nuestro modelo de variabilidad. Por tanto, en la Figura 2, al nivel de variantes de diseño, bajo la rama Memoria->Volátil incluiríamos los tres tipos List , Map y Set ), y, en cada uno, las alternativas tecnológicas, es decir, los tres frameworks usados en esta experimentación ( JCF , ACC , Trove ) y, de estos últimos, sus respectivas implementaciones ( HashMap , TreeMap ...). También se incluye el contexto energético de memoria volátil, donde contemplamos el máximo número de datos, el tipo de datos ( Int , Object ) y las operaciones. Para introducir los datos en el repositorio hemos implementado también una función de ltrado, la cual extrae los datos de diseño, implementación y energía que necesitamos de todos los CSV (tipo de dato, operación, clase, implementación, consumo en julios y tiempo de ejecución). A partir de estos datos se calcula la mediana de los Julios (ya que existen 32 pasadas para cada conguración completa), y esto es lo que añadiríamos a la base de datos de nuestro repositorio. Tras introducirlo en HADAS, junto a las restricciones necesarias (ej.: Map implica no Insert at the beginning|end ), hemos evaluado el árbol de variabilidad EFM correspondiente a este caso de estudio con FAMA-FW, y nos devuelve 11904 conguraciones correctas. Este alto nivel de variabilidad demuestra que no es viable realizar el análisis de forma manual, y, también, que la información proporcionada en [8] es muy interesante, pero que se podría ampliar analizando muchas otras opciones no contempladas por los autores en [8].