• No se han encontrado resultados

Etapa 1: Análisis e identificación del problema

5.5. Iteración 1: Re-estructuración del Proyecto

5.5.1. Etapa 1: Análisis e identificación del problema

La Anomalía 1 del sistema presenta el primer problema de calidad a resolver que es el de organizar la estructura del proyecto de forma ágil y sencilla. En el desarrollo de SocialGraph participan muchas personas con diferentes roles y con distintos tiempos. Normalmente no pertenecen a un mismo grupo de trabajo. La descarga y configuración del proyecto debe ser lo más rápida y amigable posible. Los desarrolladores que trabajan en SocialGraph pierden mucho tiempo configurando el proyecto para poder trabajar o estudiar el código.

5.5.1.1. Documentación del proyecto.

Al no tener documentación del proyecto, el desarrollador no sabe a ciencia cierta qué versiones se usan de cada biblioteca y si todas las dependencias son requeridas en la última versión del código. Para compilar y ejecutar SocialGraph es necesario resolver todas las inconsistencias en las rutas de las dependencias Java y en caso de que el siguiente desarrollador no tenga la misma estructura interna en sus sistema de archivos o utilice un sistema operativo diferente, tendrá que realizar este trabajo nuevamente. Durante el análisis se genera nueva documentación e información que en próximos refactorings permitirá tener una visión de cómo está estructurado el sistema y qué dependencias se usan para cada área de código.

5.5.1.2. Detección de code smells.

Para tener una noción de los principales síntomas de malas prácticas de implementación y diseño en el sistema se hace una primera detección de code smells utilizando la herramienta JSpIRIT [JSpIRIT]. De esta manera, se detectan 150 code smells en todo el sistema. En la

tabla 5.1 se muestra la distribución de code smells según su tipo. Se ve que los tipos Feature

Envy y Dispersed Coupling concentrán mas del 80% de los smells.

Tipo code smell Cantidad Porcentaje

Shotgun Surgery 13 8,67

Refused Parent Bequest 2 1,33

Intensive Coupling 3 2,00 God Class 5 3,33 Feature Envy 72 48,00 Dispersed Coupling 49 32,67 Data Class 2 1,33 Brain Method 4 2,67 Total 150 100,00

Tabla 5.1. Distribución de tipos de code smells en todo el sistema.

Componente Cantidad smells Porcentaje

Importer 43 28,67 GUI 36 24,00 Graph 31 20,67 Model 15 10,00 WordCram 12 8,00 Otros 13 8,66 Total 150 100,00

Tabla 5.2. Distribución de tipos de code smells en todo el sistema.

5.5.1.3. Identificación de los problemas en el diseño.

El principal problema que se trata en esta iteración es el manejo de dependencias del proyecto, se necesita una forma ágil y rapida para solucionar este problema. La configuración del proyecto en el ambiente de desarrollo debe ser fácil y eficiente para que el programador tarde la menos cantidad de tiempo en esta tarea.

El proyecto cuenta con código de terceros que no se sabe si es necesario ni si fue extendido o modificado para algún propósito especial. En particular, los frameworks a analizar y reestructurar son WordCram [WordCram] y GATE [GATE], utilizados para el procesamiento de textos en la aplicación.

5.5.2. Etapa 2: Planteo de solución y definición de escenarios

5.5.2.1. Definir refactorings a realizar

Para la reestructuración del proyecto, dados los problemas que se identificaron en la etapa anterior, se decide dividir la solución del problema en tres refactorings. Dado que se necesita una forma ágil y eficiente de manejo de dependencias se decide utilizar Maven y en el proceso verificar cuáles dependencias se están utilizando y cuáles no. Se reestructurará y documentará todo el código y dependencias verificando el uso de las aplicaciones WordCram y GATE-5.2.1.

Los cambios que se proponen son:

• Mavenizar el proyecto.

• Reestructurar dependencia con aplicación WordCram.

• Reestructurar dependencia con aplicación GATE-5.2.1.

5.5.2.2. Especificar Escenarios de Modificabilidad

Según los refactorings a realizar especificamos los escenarios de modificabilidad propuestos para la reestructuración del proyecto.

5.5.2.2.1. Escenario 1.1. Mavenizar Proyecto

Este caso de estudio presenta un gran problema a la hora de configurar la aplicación ya que para comenzar a programar o utilizar el código se puede perder mucho tiempo en configurar el proyecto. Hay que entender cómo configurar la herramienta, qué bibliotecas utiliza y cómo obtenerlas si no fueron entregadas junto con el código y, por último, recomponer los java paths de las mismas. Por eso, se decide utilizar Maven para organizar las dependencias del proyecto y la configuración. Utilizando Maven, un nuevo desarrollador puede incorporarse al proyecto a través del repositorio de código, obteniendo las bibliotecas de manera transparente ya que los repositorios de librerías son públicos. De esta manera, se reduce el tiempo de startup para que el programador aboque su tiempo a desarrollar y no a configurar el proyecto. En este proceso también se analiza si las dependencias se están usando realmente junto con su número de versión.

Porción del Escenario

Valores

Fuente del Estímulo El cambio debe ser realizado por el desarrollador

Estímulo Reorganizar las dependencias del proyecto usando Maven para tener mayor facilidad de configuración del ambiente.

Artefacto Estructura del proyecto Ambiente Implementación.

Respuesta Realiza modificaciones sin afectar funcionalidades del sistema. Medida de la

Respuesta

Tiempo de realización: 12 horas/hombre.

Reducción del tiempo de configuración del ambiente de desarrollo para una nueva terminal del trabajo.

Tabla 5.3. Especificación de escenario 1.1: Mavenizar Proyecto

El proyecto viene acompañado de una cantidad importante de dependencias JAR para su funcionamiento, de la cuales no se sabe a ciencia cierta cuáles se están usando realmente y cuáles han quedado obsoletas.

Dado este problema y el overhead en el tiempo de configuración, se decide usar Maven para la configuración del proyecto y así tener un mejor manejo de las dependencias del proyecto y, al mismo tiempo, “limpiar” todas las dependencias que no sean necesarias para el funcionamiento del proyecto.

5.5.2.2.2. Escenario 1.2. Reestructurar dependencia con aplicación

WordCram

Dentro del proyecto se tienen las clases del paquete WordCram, una API que podría estar fuera del proyecto como un JAR y agregarla como una dependencia de Maven.

Porción del Escenario

Valores

Fuente del Estímulo El cambio debe ser realizado por el desarrollador

Estímulo Reorganizar las dependencia WordCram del proyecto para tener mayor facilidad de configuración del ambiente.

Artefacto Estructura del proyecto Ambiente Implementación.

Respuesta Realiza modificaciones sin afectar funcionalidades del sistema. Medida de la

Respuesta

Tiempo de realización: 6 horas/hombre.

para una nueva terminal del trabajo.

Tabla 5.4. Especificación escenario 1.2: Reestructurar dependencia con aplicación WordCram Proyecto.

La biblioteca WordCram realiza el procesamiento de análisis de texto y detección de colisiones que permite generar nubes de palabras de forma sencilla. En SocialGraph es utilizada para generar nubes de tags a partir de los contenido intercambiados entre usuarios.

5.5.2.2.3. Escenario 1.3. Reestructurar dependencia con aplicación GATE

GATE es un software de código abierto capaz de resolver diferentes problemas de procesamiento de texto. Cuenta con una comunidad madura y extensa de desarrolladores, usuarios, educadores, estudiantes y científicos. Es un proceso definido y repetible para crear flujos de trabajo de procesamiento de texto de forma robusta y fácil de mantener. En SocialGraph es utilizado para analizar los contenidos de tipo texto intercambiados entre los usuarios.

Al igual que en los escenarios anteriores, se analizan los componentes del sistema relacionados a GATE y sus dependencias, pasando estas a Maven si son requeridas.

Porción del

Escenario Valores

Fuente del Estímulo El cambio debe ser realizado por el desarrollador

Estímulo Reorganizar las dependencia GATE-5.2.1 del proyecto para tener mayor facilidad de configuración del ambiente.

Artefacto Estructura del proyecto Ambiente Implementación.

Respuesta Realiza modificaciones sin afectar funcionalidades del sistema. Medida de la

Respuesta

Tiempo de realización: 6 horas/hombre.

Reducción del tiempo de configuración del ambiente de desarrollo para una nueva terminal del trabajo.

Tabla 5.5. Especificación escenario 1.3: Reestructurar dependencia con aplicación GATE.

5.5.2.3. Agregar al backlog

Los escenarios 1.1, 1.2 y 1.3 son agregados al backlog de tareas a realizar por los desarrolladores. En la próxima etapa se define la priorización del mismo.