Ingeniería de Software Tabla de Contenidos PARTE I INTRODUCCIÓN Capítulo 1: Evolución Los hitos en la evolución histórica del Desarrollo de Software Problemas y soluciones... Fallas, malas estimaciones y metodologías... Herramientas de Desarrollo... El concepto de calidad en el software... Venta de proyectos de Desarrollo de Software Visibilidad de los proyectos de desarrollo... Calidad versus Velocidad de Desarrollo... Incumbencias de la nueva ingeniería... Conocimientos de procesos versus conocimientos tecnológicos... Formación de un Ingeniero de Software... Nuestro caso testigo... Descripción del problema a resolver... Conclusión... Capítulo 2: Condiciones de trabajo en el desarrollo de software Proyectos de Software y los escenarios donde acontecen Desarrollo de sistemas... Desarrollo de productos... Desarrollo remoto... Software Factory... Proyectos de Código Abierto... Servicios para clientes internos... Proyectos de Software y las Personas que participan Trabajo en equipo... Proyectos de Software y las Condiciones de Trabajo... Propiedades versus procesos... Propiedades y metodologías... Manifestación en la gestión de los proyectos... 1
Propiedades... Conclusión... Capítulo 3: Paradigmas y lenguajes del desarrollo de software Paradigmas de Programación... Programación con Procedimientos... Conceptos... Su uso en la actualidad... Ejemplo... Programación Funcional... Conceptos... Su uso en la actualidad... Ejemplo... Programación Lógica... Conceptos... Su uso en la actualidad... Ejemplo... Programación Orientada a Objetos... Conceptos... Su uso en la actualidad... Ejemplo... Programación Orientada a Aspectos... Conceptos... Su uso en la actualidad... Programación Genérica... Conceptos... Su uso en la actualidad... Ejemplo... El modelo de Múltiple Paradigma... Conceptos... 2
Su uso en la actualidad... Ejemplo... Especificación... Solución... Lenguajes de Programación... Clasificación en categorías... Métricas del grado de utilización... Conclusiones... PARTE II PROCESO DE DESARROLLO DE SOFTWARE / METODOLOGÍAS Capítulo 4: Proceso de Desarrollo y Metodologías Metodologías... Clasificación... Metodologías conducidas por los planes... Cascada... Prototipado... DRA (Desarrollo Rápido de Aplicaciones)... Incremental... Espiral... Metodologías ágiles... Diferencias de enfoque... Diferencias de aplicabilidad... Conclusión... Capítulo 5: Metodologías conducidas por los planes El Proceso Unificado de Desarrollo de Software... Conducido por los planes... El flujo de trabajo... Las fases y los hitos... Las iteraciones... El organigrama, los roles y actividades... Roles asociados a la organización... 3
Roles derivados de la forma de trabajo... Los activos como nexo entre los roles... Los hitos y entregables... Planes... Preventa... Plan de proyecto... Otros planes... Activos de trabajo... Especificación de Requerimientos de Software... Especificación de Arquitectura de Software... Conclusión... Capítulo 6: Metodologías Ágiles Extreme Programming y Scrum... Procesos de gestión y procesos técnicos... Extreme Programming (XP)... Valores... Principios... Prácticas... Flujo de trabajo... Integración Xp Scrum... Ágiles... El flujo de trabajo... Ciclo de vida... Organigrama y seguimiento del proyecto... Conclusión... PARTE III MODELOS Y DOCUMENTACIÓN Capítulo 7: El lenguaje UML y sus modos de utilización Introducción... Qué es UML?... Preguntas frecuentes... Evolución histórica... Cómo es utilizado en la comunidad informática?... 4
Dibujo (Sketch)... Plan (Blueprint)... Lenguaje de Programación... Perspectivas... Problema (Concepción y Análisis)... Solución (Diseño)... Respuestas a las preguntas frecuentes... Madurez y nivel de conocimiento de los desarrolladores... Diagramas... Diagramas Estáticos... Diagramas Dinámicos... Relación con el proceso de desarrollo... Selección del modo de uso... Capítulo 8: Diagramas estáticos Introducción... Diagramas... Clases... Paquetes... Componentes... Nodos... Ejemplo... Conclusión... Capítulo 9: Diagramas dinámicos Introducción... Actividades... Casos de Uso... Secuencia... Estado... Ejemplo... Conclusión... 5
PARTE IV RELEVAMIENTO, MODELADO Y ANÁLISIS DE REQUERIMIENTOS Capítulo 10: Relevamiento de requerimientos Relevamiento de requerimientos... Objetivos... Especificación de qué desarrollar... Definición del alcance... Acuerdo del proyecto... Técnicas de relevamiento... Entrevistas... Simulación de usuario... Historietas (Stoyboard)... Prototipado... Casos de uso... Paquetes funcionales... Refinamiento de los casos de uso... Especificación de los casos de uso... Organización del trabajo con requerimientos... Planificación... Forma de trabajo... Productos generados... Priorización de requerimientos... Capítulo 11: Análisis de requerimientos Análisis de requerimientos... Objetivo Entender del negocio... Modelo de comportamiento y control... Reglas de Negocio Clasificación y asignación... Propiedades... Patrones de implementación... Trazabilidad de los requerimientos... 6
Capítulo 12: Pruebas a los requerimientos Pruebas a los requerimientos... Validación... Validación de la aplicación... Validación del Modelo de Negocio... Verificación... Casos de pruebas... Ciclo de vida y herramientas... PARTE V ARQUITECTURA Y DISEÑO DE SOFTWARE Capítulo 13: Arquitectura de Software Definiciones generales... El concepto de arquitectura... Arquitectura de negocio... Arquitectura conceptual... Arquitectura física... Definición de la arquitectura... Vista estática... Selección de componentes... Plataformas marco (Framework)... Comunicación con sistemas externos... Atributos de calidad... Pruebas a la arquitectura... Herramientas de desarrollo... Referencias Capítulo 14: Diseño de Software El proceso de diseño... Criterios de buen diseño... Economía... Visibilidad... Espaciamiento... 7
Simetría... Emergencia... Inversión en la cadena de dependencia... Código clausurado ante cambios... Principio de substitución... Segregación de interfaces... Dependencias no cíclicas... Patrones de diseño... Desarrollo del Caso Testigo... Presentación... Acceso al negocio... Negocio... Persistencia... Conexión con sistemas externos... Web Service... Capítulo 15: Métricas del diseño El proceso de evaluación... Construyendo un sistema... Manteniendo un sistema... Primera aproximación al diseño de un sistema... Adentrándonos en los subsistemas... Métricas... Indicadores... Escalas... Medidor... Polimétricas... Desarmonías... Buenas prácticas de codificación... Estándares... Chequeos de estilo... Objetivos... Beneficios... Tipos de revisiones... Formales... Informales... 8
PARTE VI CODIFICACIÓN Y PRUEBAS Capítulo 16: Pruebas de Software Definiciones... Objetivos y filosofía... Principios... Niveles y Tipos de pruebas... Métodos de prueba... Caja Negra... Caja Blanca... Estrategias de prueba... Propiedades básicas... Evolución de las pruebas con el desarrollo... Top Down... Bottom Up... Incrementales... Tácticas... Claves del cambio en la forma de trabajo... Razones para automatizar las pruebas... Adelanto de las pruebas en el ciclo de vida... Obstáculos para automatizar las pruebas... Pruebas sistemáticas... Trabajo con código compartido... Herramientas de tipo xunit... Las pruebas como criterio de diseño... Ejemplo... Capítulo 17: El proceso de Prueba de Software El Proceso de Prueba de Software... Plan de Pruebas... Caso testigo... Qué probar... 9
Hasta cuando probar... Métricas... Automatización de las pruebas... Por qué automatizar las pruebas... Qué debería automatizarse... Estrategia para comenzar la automatización... Integración continua... Fases del flujo de trabajo... Pasos... Principios... Infraestructura... Resultados... Herramientas... PARTE VII GESTIÓN DE PROYECTOS Capítulo 18: Gestión de proyectos Estimación y Planificación Gestión de proyectos de desarrollo de software... Estimación... Venta de proyectos de desarrollo de software Estimaciones iniciales... Propuesta técnico económica... Acuerdos... Metodología conducida por los planes... Metodologías ágiles... Planificación... Metodología conducida por los planes... Plan de Proyecto... Estrategia de conducción del proyecto... Visión y Objetivos... Requerimientos y prioridades... Estimaciones de alcance y esfuerzo... Administración de riesgos... Metodologías ágiles... Visión... Acuerdos... 10
Product Backlog... Release... Sprint... Estimación de esfuerzo... Conclusión... Apéndice A Cuestionario Guía de Relevamiento Preliminar Aspectos vinculados al contexto... Reingeniería de sistemas (Sistemas a ser reemplazados) Aspectos funcionales del negocio... Aspectos no funcionales... Aspectos de arquitectura y tecnología... Aspectos de interfaces... Aspectos vinculados al alcance... Migración de datos... Aspectos vinculados al proyecto... Sistemas a desarrollar en proyectos integrales Aspectos funcionales del negocio... Aspectos no funcionales... Aspectos de arquitectura y tecnología... Sistemas relacionados ya existentes... Aspectos de alcance... Migración de datos... Aspectos vinculados al proyecto... Capítulo 19: Gestión de proyectos Monitoreo y control Monitoreo y control de proyectos... Metodologías conducidas por los planes... Seguimiento del estado... Seguimiento del avance... Revisión de Fases... Revisión de iteraciones... Replanificación... Metodologías ágiles... Daily Scrum... Sprint review meeting... Sprint retrospectives... Informes... 11
Product Backlog Burn down chats... Capítulo 20: Gestión de proyectos Caso Testigo, estimación y planificación Preventa... Propuesta Técnico Económica... Relevamiento preliminar... Contrato... Acuerdo Colaborativo... Metodología conducida por los planes... Selección de la metodología... Participantes... Reunión de discusión... Estimación y planificación del proyecto... Estimación de esfuerzo... Entregables... Administración de riesgos... Estrategia del proyecto [7]... Cronograma del proyecto... Organigrama del proyecto... Ciclo de vida... Plan de Calidad... Seguimiento... Metodología ágil... Selección de la metodología... Participantes... Reunión de discusión... Estimación y planificación del proyecto... Organigrama y forma de trabajo... Construcción del Product Backlog... Planificación de los Sprints... Apéndice Visión del Proyecto... Requerimientos del Negocio... Estado actual... Oportunidades de negocio... 12
Objetivos de negocio y criterios de éxito... Necesidades de clientes / mercado... Riesgos de negocio... Visión de la Solución... Propósito, intención... Características salientes... Descripción general del sistema a desarrollar... Beneficios esperados... Supuestos y dependencias... Alcance y Limitaciones... Alcance de la versión inicial... Alcance de versiones siguientes... Limitaciones y exclusiones... Contexto del proyecto... Perfiles de los involucrados... Prioridades del proyecto... Ambiente operacional... Capítulo 21: Gestión de proyectos Caso Testigo, monitoreo y control Metodología conducida por los planes... Monitoreo y control del proyecto... Evolución del estado... Evolución del alcance... Cierre del Proyecto... Cierre I... Cierre II... Metodología ágil... Monitoreo y control del proyecto... Daily Scrum... Revisión de Sprints Review, Retrospective... Cierre del Proyecto... Cierre I... Cierre II... 13
PARTE VIII CALIDAD DE SOFTWARE Capítulo 22: Calidad de procesos y productos de software Calidad de procesos y productos de software El concepto de calidad aplicado al software... Calidad de productos... Calidad de procesos... Validación y verificación... Checklists... Ejemplo de uso... Métricas... Herramientas... Métricas en la mejora de procesos... Plan de medidas... Objetivos de medidas... Indicadores... Capítulo 23: Organización del área de calidad de una organización Introducción... Origen... Primeros pasos... Implementación del área de calidad... Alternativas de Organigrama... Roles... Actividades... Recursos... Ejemplo de Uso... Conclusiones... Referencias Capítulo 24: Planificación de las actividades de control de calidad de un proyecto de desarrollo Introducción... Plan de Calidad... Objetivos... 14
Flujo de Trabajo... Ejemplo de Uso... Conclusiones... Referencias Capítulo 25: Estándares de calidad de software Introducción... Normas y modelos de referencia... Norma ISO 9001 2000... Modelo CMMI... Enfoque y alcance de aplicación... Conclusiones... Referencias PARTE IX CIERRE Capítulo 26: Conclusiones Acerca de la tecnología... Acerca de la forma de trabajo... Acerca de la calidad... Acerca de la Ingeniería de Software... Referencias APÉNDICES 15