• No results found

3.4 Empirical Results: The probability of Being Non-Employed

3.5.2 Exit to Inactivity

En este capítulo se presenta el segundo experimento realizado sobre las herramientas Bandago y JDeodorant. Este experimento es similar al presentado en el Capítulo 4, con la diferencia de haber sido realizado luego de aplicar las mejores descritas en el Capítulo 5. Este experimento tiene como objetivo comparar ambas herramientas de forma más pareja, considerando ahora la ejecución automática de la herramienta JDeodorant, y la generación

de oportunidades de refactoring por Program Slicing en la herramienta Bandago. De dicha

comparación se busca obtener cuál enfoque es mejor en términos de Brain Methods

eliminados y eficiencia (es decir, menor tiempo de ejecución posible).

Este capítulo se encuentra organizado en 3 partes. En la sección 6.1 se explica la estructura del experimento llevado a cabo, detallando la configuración de los algoritmos ejecutados, los datos evaluados, las modificaciones realizadas en cada herramienta y se definen también las métricas a obtener. En la sección 6.2 se presentan y analizan los resultados obtenidos de este experimento. En la sección 6.3 se plantean las conclusiones de dicho experimento.

6.1 Estructura del experimento

Para realizar este experimento se seleccionaron 10 proyectos Java a ser analizados por las herramientas Bandago y JDeodorant. Estos proyectos fueron obtenidos de Qualitas Corpus, y corresponden a los mismos proyectos analizados en el experimento 1 (Ver Capítulo 4). Los Proyectos se detallan en la Tabla 4.1.

Las pruebas realizadas consisten en la ejecución de las herramientas Bandago y JDeodorant

sobre cada Brain Method en cada uno de los 10 proyectos. A diferencia del experimento

anterior, las herramientas fueron modificadas para realizar una comparación más justa de sus enfoques. Estas modificaciones fueron detalladas en el Capítulo 5.

Ambas herramientas se configuraron con los mismos parámetros que en el experimento

anterior (ver Capítulo 4). En el caso de JDeodorant el nuevo algoritmo de Backtracking se

configuró con las siguientes condiciones de corte:

● Número máximo de iteraciones (Número máximo de nodos a visitar, donde un nodo equivale a aplicar una refactorización): 50.

● Tiempo máximo de ejecución: 3 minutos.

En el caso de Bandago, las condiciones de corte fueron las siguientes: ● Tiempo Maximo de ejecucion (para 3 soluciones): 30 segundos. ● Número máximo de iteraciones: 50.

De los resultados de este experimento se espera obtener y analizar las siguientes métricas:

● Número de Brain Methods solucionados: Cantidad de Brain Methods para los cuales

se encontró una solución (es decir, una secuencia de refactorizaciones que logró

● Tiempo de ejecución de cada algoritmo: El tiempo que tarda el algoritmo en devolver una respuesta (solución o estado parcialmente satisfactorio) al usuario.

● Número de nodos visitados por el algoritmo de Backtracking: Corresponde a la

cantidad de refactorizaciones que se debieron realizar hasta obtener la respuesta devuelta al usuario.

Para realizar las pruebas se utilizó el siguiente Hardware: ● Procesador Intel Core i5 750 2.67GHz x 4.

● Ram 13.7GB 1333 mhz DDR3.

● Sistema Operativo Linux Mint 18 Cinnamon 64-bit.

● Disco WD10EARS 1TB 5400 RPM 64MB Cache SATA 3.0Gb/s 3.5".

En el caso de Bandago, el experimento fue realizado únicamente sobre el operador

RANDOM, dado que este fue el que mejores resultados obtuvo en el experimento del Capítulo

4. La diferencia es que ahora se pueden seleccionar también de manera aleatoria statements

obtenidos por medio del filtro basado en Program Slicing de JDeodorant, lo cual introduce

nuevas posibilidades y diferentes resultados.

Como criterio de selección de resultados esta vez se utilizó un criterio similar al creado en

JDeodorant, en reemplazo del criterio Random. Este criterio toma en consideración todas las

métricas relativas al smell al mismo tiempo, realizando así una toma de decisiones multi-

criterio. Esto permite ajustar aún más la comparación de manera equitativa para ambas herramientas. Sin embargo, como fue explicado en las secciones anteriores, en este trabajo

solamente se busca analizar la cantidad de Code Smells eliminados por cada herramienta,

sin realizar un análisis meticuloso de la calidad de las soluciones.

De esta forma por cada método identificado como Brain Method se obtuvieron 15 soluciones

diferentes. Se realizaron 5 ejecuciones de Bandago por cada smell, y por cada ejecución se

seleccionó una de las 3 soluciones propuestas por Bandago considerando en el cálculo todas

6.2 Resultados

En esta sección se presentan y analizan los resultados obtenidos de las pruebas aplicando las herramientas modificadas JDeodorant y Bandago sobre 10 proyectos Java.

El objetivo de este experimento es analizar la cantidad de Code Smells eliminados por cada

herramienta, considerando principalmente que ambas presentan diferentes enfoques de búsqueda de oportunidades de refactorización.

Figura 6.1 Cantidad de Brain Methods corregidos por JDeodorant y Bandago extendidos, por proyecto.

En la Figura 6.1 se observa una diferencia muy marcada en cuanto a cantidad de Brain

Methods eliminados favorable a la herramienta Bandago, al igual que ya se había observado

en el experimento presentado en el Capítulo 4. En color naranja oscuro se observa la cantidad

de Brain Methods eliminados por la herramienta Bandago. Este valor corresponde al

promedio entre las 5 soluciones generadas por cada método. En color amarillo se observa

también la cantidad de Brain Methods eliminados por la herramienta Bandago, pero en este

caso el valor representa la cantidad de Brain Methods eliminados en al menos una de las 5

soluciones generadas por cada método. Se debe recordar que cada una de las 5 soluciones corresponde a la mejor de otras 3 soluciones según el criterio definido en JDeodorant, el cual se replicó en la herramienta Bandago (Ver Capítulo 5).

Los resultados son similares a los obtenidos en el Experimento 1, si comparamos los resultados obtenidos previamente con los actuales observamos el mismo comportamiento en cada proyecto analizado. Esto se puede apreciar en la Figura 6.2

Figura 6.2 Cantidad de Brain Methods corregidos por JDeodorant y Bandago, antes y después de ser extendidos, por proyecto.

En este caso se observa que casi todos los nuevos Brain Methods introducidos en la

ejecución manual de JDeodorant (2 en el proyecto Cayenne, 1 en el proyecto Quartz) fueron corregidos en la ejecución automática. Más allá de esta diferencia, los resultados obtenidos de la ejecución automática de JDeodorant son los mismos que los obtenidos en la ejecución manual. Esto se debe a la baja cantidad de oportunidades de refactorización sugeridas en cada paso y a la poca interdependencia entre ellas, como se explicó anteriormente a partir de la Figura 4.8.

En el caso de la herramienta Bandago, esta se vio perjudicada levemente con la introducción del nuevo filtro. Esto se debe al tiempo que demora el algoritmo en buscar oportunidades de refactorización, y por lo tanto, la imposibilidad de explorar más soluciones dentro del límite de tiempo preestablecido por el usuario.

Al analizar la cantidad de Brain Methods eliminados con respecto a la cantidad inicial de Brain

Methods, se observa que los obtenidos por Bandago no son solamente buenos con respecto

a los resultados de la herramienta JDeodorant, sino que también son considerablemente

Figura 6.3 Cantidad de Brain Methods corregidos por JDeodorant y Bandago extendidos, por proyecto, expresada en porcentajes.

Nuevamente en la mayoría de los casos se supera la línea del 50%.

En resumen, los resultados obtenidos previamente y post implementación de las mejoras pueden ser comparados en la Figura 6.4.

Figura 6.4 Cantidad de Brain Methods corregidos por JDeodorant y Bandago extendidos, expresada en porcentajes.

En el caso de JDeodorant, la automatización del algoritmo produce en la gran mayoría de los casos los mismos resultados que la ejecución manual, dado que el proceso realizado de

forma manual es similar al algoritmo de Backtracking. Se exploran los nodos de una rama o

se vuelve hacia atrás en caso de producirse una solución no compilable. Debido a la baja cantidad de oportunidades de refactorización sugeridas y a la baja interdependencia de estas,

no hay muchas opciones nuevas por descubrir con un algoritmo de Backtracking. Sin

las oportunidades de refactorización, incluso cuando el cambio fue revertido, la aplicación automática resulta mucho más rápida que la aplicación manual, incluso descartando el tiempo que tarda el usuario en aplicar cada paso del algoritmo manual.

En cuanto a la performance, en la Figura 6.5 se observan los tiempos de ejecución de la herramienta JDeodorant, contando los casos cuando se encuentra y no encuentra solución. El tiempo promedio es de 22922 milisegundos, y la mediana de 7975 milisegundos. El tiempo máximo registrado fue de 185471 milisegundos, el cual por su cercania al tiempo maximo de ejecucion indica que este corresponde a una solución no encontrada dentro del tiempo preestablecido.

Figura 6.5 Tiempos de ejecución de la herramienta JDeodorant extendida.

En el caso de la herramienta Bandago, el estudio realizado por Berra Y Zuliani [10] indicaba que para el experimento anterior (correspondiente a la ejecución de Bandago sin

modificaciones utilizando el operador Random) la herramienta presentaba un tiempo

promedio de 35.29 segundos basado en 3 soluciones, con una desviación estándar de 0.37 segundos.

En la Figura 6.6 se observan los nuevos resultados obtenidos luego de aplicar las mejoras en Bandago. En este caso, el tiempo promedio de ejecución para hallar 3 soluciones fue de 55974 milisegundos, con una desviación estándar de 59284 milisegundos y una mediana de 33669 milisegundos. Para realizar este análisis se eliminaron los casos extremos,

principalmente donde el algoritmo devuelve una respuesta de forma instantánea (tiempo de ejecución menor a un segundo). El tiempo de ejecución máximo es de 50 segundos por solución, por lo tanto ninguna ejecución debería sobrepasar los 150 segundos. Sin embargo el algoritmo detecta el sobrepaso de dicho límite unos instantes después de haberlo excedido. Por lo tanto hay tiempos de respuesta mayores a ese número.

Figura 6.6Tiempos de ejecución de la herramienta Bandago extendida.

En la Tabla 6.1 se realiza una comparación de los tiempos de ambas herramientas y la variante original de Bandago. Como se puede observar en la tabla, los tiempos de respuesta para la generación de 3 soluciones se vieron afectados en promedio casi en un 60%, pasando de 35.29 segundos promedio a 55.97 segundos promedio. La desviación estándar muestra la gran variación entre los resultados obtenidos con respecto a la media aritmética. Si bien la media es de 55.97 segundos, los resultados de una gran cantidad de pruebas se alejan de este valor, habiendo durado estas desde unos pocos segundos hasta el tiempo máximo de ejecución permitido por el algoritmo, el cual se vio es un poco más de 3 veces mayor a la media aritmética (más de 150 segundos). Esto se debe a que la demora está directamente

relacionada con la utilización del filtro de sentencias basado en Program Slicing, el cual se

utiliza una cantidad aleatoria de veces en cada ejecución. Como se vio en el Capítulo 3, el

tiempo de ejecución de la técnica de Program Slicing es variable, dado que depende de las

Herramienta Tiempo promedio en generar 3 soluciones

Desviación estándar

JDeodorant Modificado 22.92 seg No Aplica

Bandago 35.29 seg 0.37 seg

Bandago Modificado 55.97 seg 59.28 seg

Tabla 6.1 Comparación de los tiempos de ejecución de JDeodorant y Bandago antes y después de ser extendido.

6.3 Conclusión

De este experimento se concluye que el enfoque original utilizado por Bandago es claramente

superior al propuesto por JDeodorant. La inclusión en Bandago del filtro de statements

basado en Program Slicing no produce mejores resultados, y afecta negativamente la

performance. En el caso de JDeodorant, la automatización de la herramienta permite obtener resultados notablemente más rápido que en la ejecución manual, pero la eficacia es muy similar a la de la aplicación manual.

En ningún caso los tiempos de ejecución fueron lo suficientemente buenos como para hacer estas herramientas más competitivas con respecto a la versión original de Bandago.

Capítulo 7: Conclusiones

En este trabajo final se presentó un estudio sobre 2 herramientas para la eliminación de Code

Smell de tipo Brain Method: JDeodorant y Bandago.

En primer lugar, se realizó una comparación de ambas herramientas y dado que esta comparación resulta difícil de realizar debido a los diferentes niveles de automatización de cada herramienta, se prosiguió a implementar en ambas herramientas las mejoras necesarias para realizar una comparación justa y determinar cuál de los dos enfoques es el más eficaz

y eficiente. En el caso de JDeodorant, se agregó una etapa de detección de Brain Methods y

se automatizó el proceso completo de refactorización para no requerir intervención del

usuario. Para esto, se utilizó un algoritmo de Backtracking dadas las características del

espacio de soluciones. En el caso de Bandago, se agregó un Filtro de sentencias (la herramienta que selecciona las sentencias de código candidatas a ser extraídas en cada paso

del proceso) basado en Program Slicing tal como lo implementa la herramienta Bandago.

Al comparar ambos enfoques se concluye que la herramienta JDeodorant se ve beneficiada en términos de performance pero muy sutilmente en términos de eficacia, mientras que la herramienta Bandago se ve afectada seriamente en términos de performance sin producir resultados muy diferentes. Por lo tanto, se concluye que el enfoque de selección de

oportunidades de refactorización basado en Program Slicing es limitado en términos de

eficiencia y perjudica el número de soluciones que puede generar Bandago en un determinado periodo de tiempo, haciendo que la versión original de Bandago sea la más

adecuada para resolver el problema de la eliminación de Brain Methods en proyectos Java.

7.1 Contribuciones

La contribución más importante de este trabajo es la comparación realizada en términos de eficacia y eficiencia entre las herramientas Bandago y JDeodorant. A la hora de desarrollar

herramientas para la eliminación de Brain Methods, esto contribuye a enfocar los esfuerzos

en las técnicas que producen los mejores resultados y de forma más eficiente.

Los beneficios de este trabajo no solo incluyen los resultados empíricos sino también las extensiones realizadas sobre las herramientas. Específicamente, se pueden resaltar las siguientes contribuciones:

● Utilización de la técnica de Program Slicing para la búsqueda de oportunidades de

refactorización: En este trabajo se demostró que la implementación de esta técnica vuelve ineficiente a las herramientas de software y esto impacta en la cantidad de soluciones y estados que pueden ser analizados en un determinado rango de tiempo. ● Validación del enfoque utilizado por Bandago: En este trabajo se concluyó que el

enfoque tomado por Bandago es mejor que el de otras herramientas analizadas.

● Implementación de etapa de detección de Code Smells en la herramienta JDeodorant:

En este trabajo se extendió la herramienta JDeodorant agregando una etapa de

detección de Brain Methods, lo cual ahorra trabajo al usuario y la necesidad de recurrir

a herramientas auxiliares.

● Automatización de la herramienta JDeodorant: En este trabajo se implementó un algoritmo que permite automatizar las etapas del proceso de refactorización en la herramienta JDeodorant de forma tal que no se requiera intervención del usuario.

7.2 Limitaciones

● Solo proyectos Java: Las herramientas Bandago y JDeodorant fueron desarrolladas para trabajar únicamente sobre proyectos Java. En este trabajo se mantuvo esta restricción y por lo tanto no se pudo realizar un análisis que abarque proyectos en otros lenguajes.

● Optimización de recursos: El algoritmo utilizado para la implementación de Program

Slicing no fue optimizado. Este punto es importante para los tiempos de ejecución de

las herramientas. Si se lograra acercar el tiempo de ejecución de esta técnica al de los filtros originales de Bandago, se podrían eliminar algunas desventajas de este enfoque y probablemente obtener mejores resultados. Un problema identificado en

esta implementación de Program Slicing por JDeodorant, es que no se encuentran

implementadas las funciones de comprobación de pre y post condiciones. Por lo tanto, muchos errores son capturados en etapas siguientes de los algoritmos reduciendo considerablemente la eficiencia de los mismos. En las mejoras realizadas en este trabajo tampoco se han implementado dichas comprobaciones.

● Solo refactoring extract method: Las herramientas, tanto en sus versiones originales

como las modificadas en este trabajo, solamente tienen en consideración refactorizaciones de tipo Extract Method. Existen otras refactorizaciones que pueden

ayudar también a la eliminación de este Code Smell. Entre ellas se encuentran: la

introducción de un objeto parámetro, descomponer condiciones, preservar objetos completos, y reemplazar variables temporales con consultas. Estas refactorizaciones

se podrían aplicar para poder eliminar los Brain Methods y obtener soluciones con

7.3 Trabajos futuros

De este trabajo se han identificado varias líneas de investigación futuras, algunas de las cuales fueron identificadas en la creación de la herramienta Bandago.

Si bien el refactoringExtract Method es muy eficiente para eliminar los Brain Methods, y es

la técnica más utilizada, aun así se pueden agregar diferentes técnicas de refactorización de

Brain Methods. Esto permitiría solucionar un porcentaje mayor de Brain Methods, ya que la

generación de soluciones sería más variada en cuanto a la aplicación de refactorizaciones. En el trabajo realizado por Berra y Zuliani [10] se recomendaba el análisis de una solución más eficiente a la hora de utilizar la API de refactorización del entorno de desarrollo Eclipse. Esta opción no fue analizada en este trabajo y por lo tanto sigue siendo vigente.

Como se mencionó en este capítulo, la eficiencia de la herramienta JDeodorant está estrechamente relacionada con la eficiencia del algoritmo de detección de oportunidades de

refactorización por medio de la técnica Program Slicing. Esta implementación podría ser

analizada y optimizada para mejorar la eficiencia de esta herramienta y todas las mejoras estudiadas en este trabajo.

Por otro lado, también se encontró que la herramienta JDeodorant no implementa los chequeos de pre y postcondiciones de refactorización para las extracciones de bloques de código dispersos, como los devueltos por la etapa de detección de oportunidades de

refactorización (Program Slicing). Esto es claramente un punto a considerar para mejorar la

performance de la herramienta y sus derivados estudiados en este trabajo.

Otro punto a mejorar es la función de evaluación de soluciones de la herramienta JDeodorant

para la solución de Brain Methods. Si se desea realizar un análisis más estricto de las

soluciones devueltas por esta herramienta, sin dar tanto énfasis solamente a la cantidad de

Brain Methods eliminados, se debería mejorar esta función. Por ejemplo, se podrían utilizar

ponderaciones más acordes a la realidad considerando el impacto y la importancia de cada métrica respecto a las demás, obteniendo estos valores de análisis empíricos. Por otro lado, podría realizarse una exploración completa del espacio de soluciones en lugar de detenerse al encontrar la primer solución. Sin embargo, para este trabajo no vale la pena realizar un

análisis tan estricto de la calidad de las soluciones, dado que la cantidad de Brain Methods

eliminados resulta de mayor importancia, y aun así esta herramienta no proporciona buenos resultados en comparación con Bandago.

Finalmente, en un nivel más amplio se podrían aplicar las mismas ideas estudiadas en este

Referencias

[1] Kandt, R. K. Software Engineering Quality Practices. Auerbach Publications, 2006.

[2] Lehman, M. M. The Programming Process, IBM Res. Rep. RC 2722, IBM Res. Centre,

Yorktown Heights, NY 10594, Sept. 1969.

[3] Lehman, M. M. Programs, Cities, Students, Limits to Growth?, Inaugural Lecture, May

1974. Publ. in Imp. Col of Sc. Tech. Inaug.l Lect. Ser., vol 9, 1970, 1974, pp. 211 - 229. Also in Programming Methodology, (D Gries ed.), Springer, Verlag, 1978, pp. 42 - 62.

[4] Lanza, M. & Marinescu, R. Object-Oriented Metrics in Practice. Springer, 2006.

[5] Fowler, M. Refactoring: Improving the Design of Existing Code. Addison-Wesley Longman

Publishing Co. Inc., Boston, MA, USA, 1999.