Slide 1

Slide 1 text

Mejorando el ambiente de programación Cuis Smalltalk con refactorings esenciales Departamento de Ciencia y Tecnología Licenciatura en Informática Seminario Final por Nahuel Garbezza dirigido por Máximo Prieto co-dirigido por Hernán Wilkinson

Slide 2

Slide 2 text

Contexto y Objetivos

Slide 3

Slide 3 text

Refactoring Programa Programa mejorado Refactoring Input Robusto Extensible Legible ...

Slide 4

Slide 4 text

Contexto Refactoring Browser Implementación original de 1995 portada a diferentes distribuciones de Smalltalk Dos problemas conocidos: pérdida de formato y modelo “paralelo” del AST Refactorings en Cuis Smalltalk Modelo nuevo que intenta resolver los problemas del Refactoring Browser Desarrollado con Test-Driven Development Varios refactorings pendientes de implementación

Slide 5

Slide 5 text

Objetivos Generales Implementar un desarrollo de código abierto que pueda ser utilizado por toda una comunidad de desarrolladoras/es. Contribuir positivamente a la calidad del código de Cuis Smalltalk / Cuis University Específicos Implementar dos de los refactorings más necesarios: Extract Method y Extract Variable. Mejorar el parser agregando nuevos nodos de AST y source ranges.

Slide 6

Slide 6 text

Sobre el trabajo realizado

Slide 7

Slide 7 text

Ejemplo 1: Casos básicos de Extract Method y Extract Variable

Slide 8

Slide 8 text

Ejemplo 1: resumen ● Extract Method de un objeto literal ● Extract Variable de un objeto literal ● Casos de error ○ Nombre de mensaje o variable incorrectos ○ Selección de código incompleta ○ Selección de código inválida ● Interfaz de usuario: menú y atajos de teclado

Slide 9

Slide 9 text

Ejemplo 2: Extracción de envíos de mensaje

Slide 10

Slide 10 text

Ejemplo 2: resumen ● Source ranges para determinar correctamente los límites de cada elemento en el código ○ raw (existentes) ○ complete (implementados en este trabajo) ● Extract Method aplicado a envíos de mensaje ● Extract Variable aplicado a envíos de mensaje

Slide 11

Slide 11 text

Ejemplo 3: Extracción de código con variables locales

Slide 12

Slide 12 text

Ejemplo 3: resumen ● Nuevos nodos de AST para declaración de variables temporales, con sus respectivos source ranges ● Extract Method puede extraer código que incluya declaración de variables temporales ● Extract Method no agrega retorno en nuevo método si no es necesario ● Validación de uso de variables temporales fuera del intervalo seleccionado ● Parametrización y sugerencia del nombre de mensaje en la interfaz gráfica

Slide 13

Slide 13 text

Ejemplo 4: Extract Variable dentro de bloques

Slide 14

Slide 14 text

Ejemplo 4: resumen ● Extract Variable define la nueva variable en el scope más cercano posible ● La declaración se agrega en el caso de ser la primer variable, luego las variables nuevas se ubican dentro de la declaración existente

Slide 15

Slide 15 text

Conclusiones y trabajo futuro

Slide 16

Slide 16 text

Dimensión del trabajo (I) Modelo Tests Interfaz Gráfica Core de Cuis Total Cantidad de Clases 8 nuevas 2 extensiones 6 nuevas 1 extensión 2 nuevas 3 extensiones 3 nuevas 24 extensiones 19 nuevas 30 extensiones Cantidad de métodos 172 111 35 140 458 Líneas de código 625 837 173 652 2287

Slide 17

Slide 17 text

Extract Method Extract Variable Core de Cuis Total Cantidad de tests 41 25 22 89 Tiempo de ejecución de los tests 6780ms 3816ms 21ms 10616ms Dimensión del trabajo (II)

Slide 18

Slide 18 text

Conclusiones Sobre el resultado del trabajo Desarrollo de código abierto valorable por la comunidad y en producción Terreno propicio para introducir nuevos refactorings Beneficio para alumnxs y docentes que utilizan CuisUniversity Sobre el proceso Desarrollo iterativo e incremental Uso de Test-Driven Development Reuniones de seguimiento con directores y grupo de tesistas

Slide 19

Slide 19 text

Trabajo Futuro Cuis Smalltalk Mejorar interfaz y experiencia de usuario Implementar más nodos de AST y sus respectivos source ranges Refactorings Sugerir fragmentos de código duplicados Deshacer refactorings Implementar refactorings opuestos: Inline Method e Inline Variable

Slide 20

Slide 20 text

¿Preguntas?

Slide 21

Slide 21 text

¡Gracias!