1.- DATOS DE LA ASIGNATURA Nombre de la asignatura: Desarrollo de Software Ágil Carrera: Ingeniería Informática Ingeniería en Sistemas Computacionales Ingeniería en Tecnologías de la Información y Comunicaciones Clave de la asignatura: ISD-1302 (Créditos) SATCA1 2-3-5 2.- PRESENTACIÓN Caracterización de la asignatura. Ésta asignatura es parte del grupo de asignaturas de la especialidad de Ingeniería de Software; corresponde al módulo que pueden elegir los alumnos de las carreras de Ingeniería en Sistemas Computaciones, Ingeniería en Informática e Ingeniería en Tecnologías de la Información y Comunicaciones. Ésta materia aporta elementos para que el futuro profesionista desarrolle habilidades que le permitan gestionar proyectos de desarrollos de software. Desarrollo Ágil se ubica después de que el estudiante ha delineado los aspectos generales para desarrollar software en un ámbito personal y en equipo durante la materia de Entornos de Desarrollo, por lo que el propósito de ésta asignatura es enriquecer y consolidar el conocimiento para desarrollar software aplicando alguna de las metodologías ágiles existentes. Esta asignatura aporta al perfil de los futuros profesionistas la capacidad para: Identificar las características del proyecto de software que pretenden desarrollar para poder seleccionar una metodología adecuada. Gestionar el trabajo en equipo. Plantear, analizar, diseñar, implementar, implantar y probar un proyecto de software. Adecuar una metoodología según las necesidades de un determinado proyecto. Intención didáctica. La asignatura se encuantra organizada en cuatro unidades de aprendizaje. 1 Sistema de asignación y transferencia de créditos académicos En la primera unidad Introducción al Desarrollo Ágil, se hace un ánilisis de las características prinicipales de las metodologías ágiles, así como de su historia y su impacto en el desarrollo de proyectos de software. En la unidad número dos Programación Extrema, se revisan sus principios básicos, los cuales deben emplearse durante todas las actividades incluídas dentro del proceso de desarrollo de un proyecto de software. La metodología ágil Scrum, abordada en la unidad tres, requiere del conocimiento de los spritns, los roles, las peculiares actividades y tareas que se llevan a cabo durante el proceso de desarrollo; por lo que en dicha unidad se contempla lo necesario para poder utilizar Scrum en un ambiente práctico. La última unidad, Metodologías Híbridas, hace referencia a la metodología pionera en esta clasificación: EssUP. Esta metodología utiliza algunas prácticas de Scrum, tomando base el Proceso Unificado y la Madurez de Procesos. Los contenidos se abordarán de manera secuencial como los marca el programa, buscando la aplicación del conocimiento, para ello en las últimas unidades, como punto final, se propone desarrollar un proyecto de software para aplicar cada una de las 3 metodologías contempladas en esta asignatura. La extrensión y profundidad de los temas será la suficiente para garantizar que el estudiante logre las competencias señaladas oportunamente. Por otro lado, el estudiante deberá comprometerse a trabajar permanentemente a fin de que logre dichas competencias antes de concluir la materia. EL profesor además de ser un motivador permanente en el proceso educativo, deberá ser promotor y director de la enseñanza a través de la transmisión de su conocimiento, así como de la aplicación de sus habilidades y destrezas utilizando las herramientas tradicionales y digitales a su alcance para cautivar a sus estudiantes e interesarlos en el tema. La lista de actividades de aprendizaje refiere a un conjunto de actividades por unidad a fin de asociar la información temática en la aplicación de la misma para fortalecer el aprendizaje significativo. 3.- COMPETENCIAS A DESARROLLAR Competencias específicas Competencias genéricas Aplica los conceptos básicos de las Competencias instrumentales metodologías ágiles. Capacidad de análisis, síntesis y abstracción. Capacidad de comunicación oral y escrita. Habilidad en el uso de tecnologías de información y comunicación. Capacidad para identificar, plantear y resolver problemas. Capacidad para gestionar y formular proyectos. Competencias interpersonales Capacidad para trabajar en equipo. Capacidad crítica y autocrítica. Compromiso ético. Competencias sistémicas Habilidades de investigación. Capacidad de aplicar los conocimientos en la práctica. Liderazgo. Capacidad de generar nuevas ideas (creatividad). Iniciativa y espíritu emprendedor. Búsqueda de logro. 4.- HISTORIA DEL PROGRAMA Lugar y fecha de elaboración o revisión Instituto Tecnológico de Morelia, Morelia, Mich. del 9 al 13 de Enero de 2012 Observaciones (cambios y justificación) M.C. José Alfredo Jiménez Diseño Curricular de los Murillo Módulos de Especialidad de M.C. Miriam Zulma las Carreras del Depto. de Hernández Sánchez. Sistemas y Computación Ing. Ignacio Aguilar Magaña. Lic. Jorge Sánchez Vega. M. A. Laura Nelly Alvarado Zamora. M.C. Juan Carlos Olivares Rojas. M.I. Adrián Núñez Vieyra Participantes 5.- OBJETIVO(S) GENERAL(ES) DEL CURSO (competencia específica a desarrollar en el curso) Conocer y comprender los conceptos básicos de las metodologías ágiles para aplicarlas en proyectos de desarrollo de software. 6.- COMPETENCIAS PREVIAS Habilidades cognitivas de abstracción, síntesis y reflexión. Habilidad y responsabilidad para trabajar en equipo. Aplica los elementos y conceptos integrados en los procesos de desarrollo de software basados en prácticas y estándares convenientes y adecuados para los diferentes entornos de desarrollo de software. 7.- TEMARIO Unidad Temas 1 Introducción al desarrollo ágil Subtemas 1.1. Historia del desarrollo ágil 1.2. Impacto de las metodologías ágiles 1.3. El manifiesto ágil 1.4. Características de las metodologías ágiles 1.4.1. Equipos de trabajo 1.4.2. Tiempos de desarrollo 1.4.3. Interacción con el cliente 1.4.4. Documentación generada 1.4.5. Modelos de ciclos de vida para desarrollo ágil 1.4.5.1. Prototipado 1.4.5.2. Espiral 1.4.5.3. Incremental 2 Programación Extrema (XP) 2.1. Definición 2.2. Historia 2.3. Principios básicos 1.3.1. Simplicidad 1.3.2. Comunicación 1.3.3. Retroalimentación (feedback) 1.3.4. Valentía 1.3.5. Respeto 2.4. Proceso de desarrollo 1.4.1. Programación en parejas 1.4.2. Pruebas unitarias continuas 1.4.3. Refactorización 1.4.4. Código compartido 3 Scrum (Melé) 3.1. Definición 3.2. Historia 3.3. Roles 1.3.1. Product Owner 1.3.2. Scrum Master 1.3.3. Scrum Team 1.3.4. Usuarios 1.3.5. Stakeholders 1.3.6. Managers 3.4. Sprint 3.5. Proceso de desarrollo 1.5.1. Daily Scrum (reuniones 15 min diarios) 1.5.2. Pizarra de trabajo 1.5.3. Poker cards 4 Metodologías híbridas 4.1. EssUP (Essential Unified Process, Proceso Unificado Esencial) 4.1.1. Definición 4.1.2. Historia 4.1.3. Principios básicos 4.1.3.1. Cherry picking 4.1.3.2. El proceso unificado 4.1.3.3. Casos de uso 4.1.3.4. Prácticas de Scrum 4.1.3.5. Madurez de procesos 8.- SUGERENCIAS DIDÁCTICAS (desarrollo de competencias genéricas) Propiciar actividades de metacognición. Propiciar actividades de búsqueda, selección y análisis de información en distintas fuentes. Propiciar el uso de las nuevas tecnologías en el desarrollo de la asignatura. Fomentar actividades grupales que propicien la comunicación, el intercambio argumentado de ideas, la reflexión, la integración y la colaboración de y entre los estudiantes. Desarrollar actividades de aprendizaje que propicien la aplicación los conceptos, modelos y metodologías que se van aprendiendo en el desarrollo de la asignatura. Promover actividades de educación holista. 9.- SUGERENCIAS DE EVALUACIÓN La evaluación debe ser continua y permanente por lo que se debe considerar el desempeño en cada una de las actividades de aprendizaje, haciendo especial énfasis en: Participación en clase. Información obtenida durante las búsquedas encomendadas. Lectura y análisis de textos. Autoevaluación, Coevaluación y evaluación de las actividades. Exámenes teórico-prácticos. Presentación y exposición de cada actividad de aprendizaje. 10.- UNIDADES DE APRENDIZAJE Unidad 1: Introducción al desarrollo ágil. Competencia específica a Actividades de Aprendizaje desarrollar Identifica el tipo de metodología Investigar en diferentes fuentes el concepto adecuada a un determinado de metodología ágil. proyecto de desarrollo de software. Elaborar un ensayo en el que se identifiquen las principales características de las metodologías ágiles. Elaborar un cuadro comparativo de las ventajas y desventajas de las metodologías ágiles vs. Metodologías tradicionales. Elaborar una lista de metodologías ágiles existentes. Formar equipos en el salón de clase y discutir el material investigado para llegar a conclusiones válidas para todo el grupo. Elaborar un mapa conceptual de la unidad de introducción al desarrollo ágil. Unidad 2: Programación extrema (XP) Competencia específica a Actividades de Aprendizaje desarrollar Aplica la metodología XP en un Investigar en diferentes fuentes el concepto ambiente real. de Programación Extrema. Elaborar un ensayo en el que se identifiquen sus principales características, así como las actividades que se incluyen dentro del proceso de desarrollo señalado por la misma metodología. Elaborar una lista de ventajas y desventajas de dicha metodología. Formar equipos en el salón de clase y discutir el material investigado para llegar a conclusiones válidas para todo el grupo. Elaborar un mapa conceptual de la unidad de Programación Extrema. Identificar un proyecto de software que sea candidato a ser desarrollado con Programación Extrema. Formar equipos para desarrollar un proyecto de software utilizando Programación Extrema. Elaborar una presentación digital para mostrar los resultados del proyecto de desarrollo de software utilizando Programación Extrema. Unidad 3: Scrum (Melé) Competencia específica a Actividades de Aprendizaje desarrollar Aplica la metodología Scrum en un Investigar en diferentes fuentes el concepto ambiente real. de Scrum. Elaborar un ensayo en el que se identifiquen sus principales características, así como las actividades que se incluyen dentro del proceso de desarrollo señalado por la misma metodología. Elaborar una lista de ventajas y desventajas de dicha metodología. Formar equipos en el salón de clase y discutir el material investigado para llegar a conclusiones válidas para todo el grupo. Elaborar un mapa conceptual de la unidad de Scrum. Identificar un proyecto de software que sea candidato a ser desarrollado con Scrum. Formar equipos para desarrollar un proyecto de software utilizando Scrum. Elaborar una presentación digital para mostrar los resultados del proyecto de desarrollo de software utilizando Scrum. Unidad 4: Metodologías híbridas Competencia específica a Actividades de Aprendizaje desarrollar Adecua una metodología de Investigar en diferentes fuentes el concepto desarrollo de software a las de Metodología Híbrida. necesidades específicas de un Elaborar un ensayo en el que se determinado proyecto. identifiquen las principales características de las metodologías híbridas. Investigar el concepto de EssUP. Elaborar un ensayo en el que se identifiquen las principales características de EssUP. Elaborar una lista de ventajas y desventajas de EssUP. Formar equipos en el salón de clase y discutir el material investigado para llegar a conclusiones válidas para todo el grupo. Elaborar en equipos una propuesta de metodología híbrida. 11.- FUENTES DE INFORMACIÓN 1. Ambler, Scott. (2002). Agile Modeling: Effective Practices for eXtreme Programming and the Unified Process. EUA: Wiley 2. Beck, Kent. (2004). Extreme Programing Explained: Embrace Change. 2ª Ed. EUA: Addiso-Wesley Professional. 3. Burke, Eric. (2003). Java Extreme Programming Cookbook. EUA: O’Reilly Media4. Crispin, Lisa. (2002). Testing Extreme Programming. EUA: AddisonWesley Professional. 5. Chromatic.(2003). Extreme Programming Pocket Guide. EUA: O’Reilly Media 6. Jacobson, Ivar. Essential Unified Process. Consultado el día 11 de enero del 2012 del sitio: http://www.ivarjacobson.com/process_improvement_technology/essentia l_unified_process_software/ 7. Jeffries, Ron.(2000). Extreme Programming Installed. EUA: AddisonWesley Professional. 8. Kniberg, Henrik. (2007). Scrum and XP from the Trenches (Enterprise Software Development). EUA: Lulu.com 9. Pichler, Roman. (2010). Agile Product Management with Scrum: Creating Products That Customers Love. EUA: Addison-Wesley Educational Publishers Inc. 10. Schwaber, Ken. (2004). Agile Project Management with Scrum. EUA: Microsoft Press 11. Shore, James. (2007). The art of Agile Development. EUA: O’Reilly Media. 12.- PRÁCTICAS PROPUESTAS Elaborar ensayos de cada unidad de la materia. Estructurar los mapas mentales de manera individual después de haber discutido entre todo el grupo las investigaciones de cada unidad. Utilizar la metodología XP en el desarrollo de un proyecto de software y redactar un reporte de la experiencia adquirida; así como presentar el software elaborado como producto y la documentación exigida por parte de la metodología. Utilizar la metodología Scrum en el desarrollo de un proyecto de software y crear un reporte de la experiencia adquirida; así como presentar el software elaborado como producto y la documentación exigida por parte de la metodología. Redactar en equipo una propuesta de metodología híbrida, tomando en cuenta la experiencia adquirida al utilizar las metodologías XP y Scrum de manera práctica.