Grandes empresas con una importante necesidad de extender sus software a menudo se encuentran con problemas de mantenimiento. Un software es muy dependiente del hardware sobre el que funciona, de las necesidades de los clientes y del ambiente. Un ejemplo de esto es lo que ocurre con el cambio a un nuevo milenio o con los software de bancos cuando tienen que cambiar una moneda a Euros. Las razones a esta situación son varias: falta de diseño, de unit tests, pobre conocimiento de programación con objetos. Este curso presenta técnicas (reverse engineering, program visualization, refactoring, design, data mining) que son efectivas para re-engineer y evolucionar software industriales. Los objetivos de este curso son: - Hacer del participante un mejor programador - Desarrollar técnicas de diseño - Desarrollar técnicas de visualización - Analizar y discutir sobre el proceso de mantener la calidad de un software - Identificar el problema relacionado a la evolución de sistemas - Realizar una experiencia práctica con el objetivo de conseguir cartas de software que identifiquen las deficiencias de este. Cada alumno va a tener un proyecto personal que va a desarrollar en clase, durante el semestre. La comunidad Pharo y Moose evaluará cada proyecto y dará feedback. Cada proyecto tiene que ser un beneficio para Pharo en general.