**Resumen: ** 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. **Resultados de Aprendizaje: ** Los objetivos de este curso son: * Hacer del participante un mejor programador * Desarollar técnicas de diseño * 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. * {{:teaching:formato_programa_de_curso.pdf|Programa de curso}}