Abstract— Software systems are continuing changing because of new functionality has to be incorporated or the exiting one has to be changed. Systems have to be well evolved otherwise the will not be easily changed. Aspect orientation provides mechanisms to evolve and maintain systems by encapsulating systems crosscutting concerns in aspects. We have developed an object oriented grazed-based beef cattle simulator which has maintenance and evolution problems. For this reason, in order to take advantages of the aspect orientation we present in this work the migration of the simulator to the aspect orientation. The crosscutting concerns identified in the object- oriented system are presented and how these crosscutting concerns are transformed into aspect in the target aspect-oriented system. 1 Keywords— Aspect Oriented Development, System Evolution, Aspect Mining, Aspect Refactoring. I. INTRODUCCIÓN urante el ciclo de vida de las aplicaciones de software surgen nuevos requerimientos y los requerimientos existentes cambian. Modificaciones en el negocio, nuevos requerimientos funcionales, correcciones de errores existentes, adaptaciones a una nueva plataforma, mejoras en el rendimiento u otras características no funcionales, son ejemplos claros de los cambios a los que esta sujeto un sistema de software. Si las aplicaciones no son evolucionadas adecuadamente, no podrán adaptarse con facilidad a los cambios del ambiente, y por lo tanto, se volverán menos satisfactorias para los usuarios. Esta característica ha sido identificada por Lehman en su llamada primera Ley de evolución del software, denominada Ley de cambio continuo [1], la cual indica que un programa que se usa en un entorno real necesariamente debe cambiar o se volverá progresivamente menos útil en ese entorno. La reestructuración de software es una actividad muy importante en la evolución de software de acuerdo a la segunda Ley de evolución del software de Lehman, denominada Ley de complejidad creciente [1], la cual afirma que a medida que un programa cambia, su estructura tiende a ser cada vez más compleja. Se deben dedicar recursos extras para preservar y simplificar la estructura del programa. El objetivo del refactoring dentro de la reestructuración de software es mejorar la estructura interna de una aplicación sin C. Marcos, UNICEN-ISISTAN, Tandil, Argentina. También CIC. cmarcos@exa.unicen.edu.ar S. Vidal, UNICEN-ISISTAN, Tandil, Argentina. También CONICET. svidal@exa.unicen.edu.ar E. Abait, UNICEN-ISISTAN, Tandil, Argentina. eabait@exa.unicen.edu.ar M. Arroqui, UNICEN-ISISTAN, Tandil, Argentina. También ANPPCyT. mauriarroqui@gmail.com S. Sampaoli, UNICEN-ISISTAN, Tandil, Argentina. seba.sampaoli@gmail.com modificar su comportamiento externo [2]. Un ejemplo típico es la migración de código legado a una aplicación orientada a objetos equivalente (por ejemplo, COBOL a Java). Un sistema de software legado es una aplicación que ha sido desarrollada por otros desarrolladores diferentes a los actuales y que se ha heredado con el fin de continuar su desarrollo y mantenimiento. Cuando un desarrollador debe modificar un sistema legado encuentra problemas tales como que el sistema ha sido desarrollado utilizando un lenguaje de programación antiguo, su arquitectura inicial se ha alterado debido a muchas modificaciones y adaptaciones del software, o que no existe documentación del mismo [3]. Teniendo en cuenta estos potenciales inconvenientes, se puede concluir que el mantenimiento y adaptación de los sistemas legados puede llegar a ser muy costoso. La orientación a aspectos ha surgido como una nueva alternativa para mejorar la evolución y mantenimiento de los sistemas [4]. El objetivo es promover una mejor separación de concerns de un sistema y, de esta manera, aumentar la modularidad para permitir una mejor adaptación a los cambios de requerimientos y por lo tanto, a la evolución a la que se encuentran sometidos los sistemas de software [5]. Se ha desarrollado un simulador ganadero con base pastoril, el cual busca obtener la proyección de una empresa agropecuaria mediante simulación [6] [7]. Dicho simulador fue desarrollado aplicando el método ágil Crystal Clear [8]. En las retrospectivas de las iteraciones, una de las preocupaciones era que se presentaba cierta dificultad al querer identificar las componentes a modificar. En este ambiente, y debido a que constantemente se esta agregando y modificando funcionalidad para satisfacer las necesidades del cliente, la evolución del simulador resultaba costosa. De manera tal de poder resolver estos problemas, se migró el simulador ganadero, el cual se encontraba implementado con la orientación a objetos a la orientación a aspectos. Lo que se intentó con la propuesta de migración, es aprovechar los potenciales beneficios que provee la programación orientada a aspectos. Es decir, se buscó aumentar la modularización del simulador con el fin de poder identificar fácilmente las componentes a modificar en las próximas iteraciones, además de mejorar la evolución y mantenimiento del mismo ante eventuales requerimientos que involucren uno o más concerns. En este trabajo se describe cómo el simulador ha sido migrado y la experiencia obtenida al migrar un sistema real orientado a objetos a la orientación a aspectos. Este trabajo está organizado de la siguiente manera: en la Sección II se describen los beneficios del desarrollo de software orientado a aspectos. La Sección III presenta en detalle la migración del sistema de simulación ganadera a una orientación a aspectos. La Sección IV discute los trabajos D C. Marcos, S. Vidal, E. Abait, M. Arroqui y S. Sampaoli Refactoring of a Beef-Cattle Farm Simulator