Unidad 1.- Introducción a la Ingeniería de Software Ing. José Alberto Rojas Aragón Modelado de Procesos de Desarrollo de Software Tecnologías de la Información y Comunicación
Contenido
• Definición de Ingeniería de Software y su importancia • Ciclo de vida de un sistema de software
Modelado de Procesos de Desarrollo de Software
IngenierĂa de software y su importancia Modelado de Procesos de Desarrollo de Software
¿Qué es ser ingeniero?
• Ingeniero: Persona que aplica los conocimientos de una o varias ramas de la ciencia para resolver cierto tipo de necesidades de la gente – Mediante el diseño, construcción u operación de algún tipo de artefacto o sistema Modelado de Procesos de Desarrollo de Software
Características de una ingeniería
• Se necesitan conocimientos avanzados para diseñar y construir el tipo de sistemas que le caracteriza. Diferencia entre técnico e ingeniero. • Existen dos “momentos”: – Primero, conocer el problema, y – Sólo después, podemos diseñar y construir la solución.
• Para conseguir buenos resultados (en calidad, tiempo y costo) es necesario trabajar de forma organizada y sistemática. • La creatividad es necesaria (diseño), pero no es suficiente, Diferencia entre artista e ingeniero. Modelado de Procesos de Desarrollo de Software
• El sentido común es muy importante
Consideraciones
– Ley del mínimo esfuerzo • Entre las opciones correctas elegir la más sencilla • Reutilización (código, artefactos y conocimiento)
– No inventar la rueda • Emplear estándares y metodologías
– Aprender de la experiencia • Utilizar “buenas prácticas” y “lecciones aprendidas”
Modelado de Procesos de Desarrollo de Software
¿Qué es el Software?
• Software es la suma total de los programas de computadora, procedimientos, reglas, la documentación asociada y los datos que pertenecen a un sistema de cómputo Modelado de Procesos de Desarrollo de Software
• A que se parece el software:
Modelado de Procesos de Desarrollo de Software
Tipos de Software
• Un producto de software es un producto diseñado para un usuario – Genéricos – Hechos a la medida
• Tipos de Software – Interfaces Hombre Maquina – Compiladores – Bases de Datos – Sistemas basados en Web – Sistemas Operativos – Etc…. Modelado de Procesos de Desarrollo de Software
Características de un buen software
• Mantenibles – Debe ser posible que el software evolucione y que siga cumpliendo con sus especificaciones.
• Confiabilidad – El software no debe causar daños físicos o económicos en el caso de fallos.
• Eficiencia – El software no debe desperdiciar los recursos del sistema.
• Utilización adecuada – El software debe contar con una interfaz de usuario adecuada y su documentación. Modelado de Procesos de Desarrollo de Software
¿Qué es Ingeniería de Software?
• Ingeniería de Software es la rama de la ingeniería que aplica los principios de la ciencia de la computación y las matemáticas para lograr soluciones costo-efectivas (eficaces en costo o económicas) a los problemas de desarrollo de software.
Modelado de Procesos de Desarrollo de Software
Definición IEEE
• Aplicación de un enfoque sistemático, disciplinado y cuantificable al desarrollo, operación (funcionamiento) y mantenimiento del software; es decir, la aplicación de los principios y hábitos de la ingeniería al software. • Instituto de Ingenieros en Electricidad y Electrónica (IEEE), 1993
Modelado de Procesos de Desarrollo de Software
Procesos de Desarrollo de Software
• Proceso de desarrollo de software – Conjuntos sistemático de actividades cuya meta es el desarrollo o la evolución del software
• No existe un proceso universal efectivo para todos los contextos de proyectos de desarrollo
Modelado de Procesos de Desarrollo de Software
Definiciones Básicas
• ¿Cuál es proceso de desarrollo del software? – Especificación: lo que el sistema debería hacer y sus restricciones de desarrollo – Desarrollo: producción del sistema – Validación: comprobar que el software es lo que el cliente quiere – Evolución: cambios y mantenimiento al software con relación a los cambios de requerimientos y demandas
Modelado de Procesos de Desarrollo de Software
Otra perspectiva
• Esta perspectiva establece relaciones entre elementos que permiten responder ¿Quién debe hacer? ¿Qué debe hacer? ¿Cómo debe hacerlo?
Modelado de Procesos de Desarrollo de Software
• Modelo de Cascada
Modelos de Proceso Genéricos
– Separar en distintas fases de especificación y desarrollo.
• Desarrollo Evolutivo – La especificación y el desarrollo están intercalados.
• Prototipado – Un modelo sirve de prototipo para la construcción del sistema final.
• Transformación Formal – Un modelo matemático del sistema se transforma formalmente en la implementación.
• Desarrollo basado en Reutilización – El sistema es ensamblado a partir de componentes existentes.
Modelado de Procesos de Desarrollo de Software
¿Cuánto cuesta hacer Sofwtare?
• Los costos del software a menudo dominan al costo del sistema. El costo del software en un PC es a menudo mas caro que la PC. • Cuesta mas mantener el software que desarrollarlo. Para sistemas con una larga vida, este costo se multiplica. • La distribución de los costos depende del modelo empleado para el desarrollo del software Modelado de Procesos de Desarrollo de Software
Costo de Eficiencia
Costos
Eficiencia Modelado de Procesos de Desarrollo de Software
Metodologías de Desarrollo de Software
• Proceso de desarrollo de software detallado y completo • Definen con precisión los artefactos, roles y actividades involucrados, junto con prácticas y técnicas recomendadas, guías de adaptación de la metodología al proyecto, guías para uso de herramientas de apoyo, etc. • Metodologías tradicionales (no ágiles) – Fuerte planificación durante todo el proceso de desarrollo – Intensa etapa de análisis y diseño antes de la construcción del sistema.
• Metodologías ágiles – incremental (entregas pequeñas de software, con ciclos rápidos) – cooperativo (cliente y desarrolladores trabajan juntos constantemente con una cercana comunicación) – sencillo (el método en sí mismo es fácil de aprender y modificar, bien documentado) – adaptable (permite realizar cambios de último momento)
Modelado de Procesos de Desarrollo de Software
MetodologĂas
Tradicional RUP
Agil SCRUM
Extreme Programming AUP Crystal Modelado de Procesos de Desarrollo de Software
Herramientas CASE
• Sistemas de software cuya finalidad es la de proveer soporte automatizado para actividades de proceso o desarrollo de software. • Los sistemas CASE son usados con frecuencia como soporte dentro de la metodología de desarrollo. – Herramientas CASE tempranas o Superiores • Herramientas para soportar las actividades tempranas de requerimientos y diseño dentro del proceso de software;
– Herramientas CASE tardías o Inferiores • Herramientas para soportar actividades posteriores como ser la programación, depuración y prueba o testeo.
Modelado de Procesos de Desarrollo de Software
Desafíos de la Ingeniería de Software
• Heterogeneidad, entrega y confianza. • Heterogeneidad – Técnicas de desarrollo para la construcción de software que puedan encararse con plataformas heterogéneas y ambientes de ejecución apropiados;
• Entrega – Técnicas de desarrollo que lleven a una entrega de software más rápida;
• Confianza – Técnicas de desarrollo que demuestren que el software es de confianza para con sus usuarios. Modelado de Procesos de Desarrollo de Software
Responsabilidad ética y profesional
• La Ingeniería de Software implica responsabilidades mayores que el simple uso de habilidades técnicas • Los ingenieros de software deben comportarse de manera honesta y éticamente responsable si van a ser respetados como profesionales • Comportamiento éticamente responsable es mucho más que simplemente actuar dentro de la ley Modelado de Procesos de Desarrollo de Software
Aspectos de responsabilidad profesional
• Confidencialidad – Los ingenieros deberían normalmente respetar la confidencialidad de sus clientes independientemente de que se haya firmado o no un previo acuerdo de confidencialidad.
• Capacidad – Los ingenieros no deberían pretender tener mayor capacidad (intelectual y laboral) de la que tienen, deben aceptar conscientemente trabajo que esté acorde a su capacidad.
Modelado de Procesos de Desarrollo de Software
Aspectos de responsabilidad profesional
• Derechos de propiedad intelectual – Los ingenieros deberían estar conscientes de las leyes que gobiernan el uso de propiedad intelectual, como ser patentes y derechos reservados. Deben ser cuidadosos al garantizar que la propiedad intelectual de sus clientes está protegida.
• Mal uso de la computadora – Los ingenieros de software no deberían usar sus habilidades técnicas para un mal uso de las computadoras de otras personas. El mal uso de una computadora comprende desde lo relativamente simple (jugar en la computadora del cliente) hasta lo extremamente serio (diseminar virus). Modelado de Procesos de Desarrollo de Software
• Juicio
Código de Etica Principios
– Los ingenieros de software mantendrán su integridad e independencia de juicio como profesional.
• Gerencia – Gerentes y líderes de Ingeniería de Software suscribirán y promoverán un acercamiento ético hacia el manejo de desarrollo de software y evolución.
• Profesión – Los ingenieros de Software incrementarán la integridad y reputación de la profesión en constancia con el interés público. Modelado de Procesos de Desarrollo de Software
• Colegas
Código de Etica Principios
– Los ingenieros de software serán condescendientes y brindarán apoyo a sus colegas.
• Uno Mismo – Los ingenieros de software participarán en la formación continua con respecto a la práctica de su profesión y promoverán un acercamiento ético a la práctica de la profesión.
Modelado de Procesos de Desarrollo de Software
Dilemas Eticos
• Desacuerdo en principio con las políticas de administración superior. • El empleador actúa de un modo no ético y lanza un sistema de seguridad crítico sin terminar la prueba del sistema. • Participación en el desarrollo de armamento militar o sistemas nucleares.
Modelado de Procesos de Desarrollo de Software
Ciclos de Vida del Software Modelado de Procesos de Desarrollo de Software
Modelos de Desarrollo de Software
• Representación formal o simplificada del proceso de software. • Modelos Genéricos: – Modelo de Cascada: Separar en distintas fases de especificación y desarrollo
– Desarrollo Evolutivo: La especificación y el desarrollo están intercalados
– Prototipado: Un modelo sirve de prototipo para la construcción del sistema final
– Transformación Formal: Un modelo matemático del sistema se transforma formalmente en la implementación
– Desarrollo basado en Reutilización: El sistema es ensamblado a partir de componentes existentes
Modelado de Procesos de Desarrollo de Software
Modelo de Cascada (gráfica)
Definición de Requerimientos
Diseño del Software y del Sistema
Implementación y Prueba de unidades
Integración y Prueba del Sistema
Operación y Mantenimiento
Modelado de Procesos de Desarrollo de Software
Fases del Modelo de Cascada
• Análisis de requerimientos y definición. • Diseño del sistema y del software. • Implementación y prueba de unidades • Integración y prueba del sistema. • Operación y mantenimiento. • La dificultad en esta modelo reside, en la dificultad de hacer cambios entre etapas.
Modelado de Procesos de Desarrollo de Software
Desarrollo Evolutivo
Actividades Concurrentes
Especificaciรณn
Descripciรณn del sistema
Modelado de Procesos de Desarrollo de Software
Versiรณn Inicial
Desarrollo
Versiones Intermedias
Validaciรณn
Versiรณn Final
• Problemas
Desarrollo Evolutivo
– – –
Poca visibilidad en el proceso Los sistemas están pobremente especificados Se requieren habilidades especiales.
• Aplicabilidad – – –
Para sistemas interactivos pequeños o medianos. Para partes de sistemas grandes (p.ej. la interfaz de usuario). Para sistemas de corta vida.
Modelado de Procesos de Desarrollo de Software
• Prototipado exploratorio
Prototipado
– El objetivo es trabajar con clientes hasta evolucionar a un sistema final, a partir de una especificación inicial. Se debe comenzar con unas especificaciones bien entendidas.
• Prototipado de “throw-away”. –
El objetivo es entender los requerimientos del sistema. Se puede comenzar con especificaciones poco entendidas.
Modelado de Procesos de Desarrollo de Software
Problemas y Riesgos con los Modelos.
• Cascada. – Alto riesgo en sistemas nuevos debido a problemas en las especificaciones y en el diseño. – Bajo riesgo para desarrollos bien comprendidos utilizando tecnología conocida. • Prototipado. – Bajo riesgo para nuevas aplicaciones debido a que las especificaciones y el diseño se llevan a cabo paso a paso. – Alto riesgo debido a falta de visibilidad • Evolutivo. – Alto riesgo debido a la necesidad de tecnología avanzada y habilidades del grupo desarrollador. Modelado de Procesos de Desarrollo de Software
Manejo de Riesgos
• La tarea principal del administrador consiste en minimizar riesgos. • El “riesgo” inherente en una actividad es se mide en base a la incertidumbre que presenta el resultado de esa actividad. • Las actividades con alto riesgo causan sobre-costes en cuanto a planeación y costos • El riesgo es proporcional al monto de la calidad de la información disponible. Cuanto menos información, mayor el riesgo. Modelado de Procesos de Desarrollo de Software
Modelos de Procesos Híbridos
• Los sistemas grandes están hechos usualmente de varios subsistemas. • No es necesario utilizar el mismo modelo de proceso para todos los subsistemas. • El prototipado es recomendado cuando existen especificaciones de alto riesgo. • El modelo de cascada es utilizado en desarrollos bien comprendidos.
Modelado de Procesos de Desarrollo de Software
Modelo de Proceso de Espiral Modelado de Procesos de Desarrollo de Software
Fases del Modelo de Espiral
• Planteamiento de Objetivos – Se identifican los objetivos específicos para cada fase del proyecto
• Identificación y reducción de riesgos. – Los riesgos clave se identifican y analizan, y la información sirve para minimizar los riesgos
• Desarrollo y Validación. – Se elige un modelo apropiado para la siguiente fase del desarrollo • Planeación. – Se revisa el proyecto y se trazan planes para la siguiente ronda del espiral
Modelado de Procesos de Desarrollo de Software
Plantilla para una ronda del espiral
• • • • • • • •
Objetivos. Restricciones. Alternativas. Riesgos. Resolución de riesgos. Resultados. Planes. Garantías (commitments).
Modelado de Procesos de Desarrollo de Software
Ventajas del Modelo de Espiral
• Centra su atención en la reutilización de componentes y eliminación de errores en información descubierta en fases iniciales. • Los objetivos de calidad son el primer objetivo. • Integra desarrollo con mantenimiento. • Provee un marco de desarrollo de hardware/software.
Modelado de Procesos de Desarrollo de Software
Problemas con el Modelo de Espiral
• El desarrollo contractual especifica el modelo del proceso y los resultados a entregar por adelantado. • Requiere de experiencia en la identificación de riesgos. • Requiere refinamiento para uso generalizado.
Modelado de Procesos de Desarrollo de Software
Que modelo utilizar ?
• Para sistemas bien comprendidos utiliza el Modelo de Cascada. La fase de análisis de riesgos es relativamente fácil. • Con requerimientos estables y sistemas de seguridad críticos, utiliza modelos formales. • Con especificaciones incompletas, utiliza el modelo de prototipado. • Pueden utilizarse modelos híbridos en distintas partes del desarrollo. Modelado de Procesos de Desarrollo de Software
Visibilidad de Procesos
• Los sistemas de software son intangibles por lo que los administradores necesitan documentación para identificar el progreso en el desarrollo. • Esto puede causar problemas.. •El
tiempo planeado para entrega de resultados puede no coincidir con el tiempo necesario para completar una actividad. •La necesidad de producir documentos restringe la iteración entre procesos. •.El tiempo para revisar y aprobar documentos es significativo.
• El modelo de cascada es aún el modelo basado en resultados mas utilizado. Modelado de Procesos de Desarrollo de Software
Documentos del Modelo de Cascada
Actividad
Documentos Producidos
Análisis de Requerimientos
Documento de Requerimientos
Definición de Requerimientos
Documento de Requerimientos.
Especificación del Sistema.
Codificación
Especificación Funcional, Plan de Pruebas de Aceptación. Especificación de la Arquitectura, y Plan de Pruebas del Sistema Especificación de la Interfaces y Plan de pruebas de Integración. Especificación del diseño y Plan de prueba de Unidades. Código de Programa
Prueba de Unidades
Reporte de prueba de unidades
Prueba de Módulos
Reporte de prueba de módulos
Prueba de Integración
Reporte de prueba de integración y Manual de usuario final Reporte de prueba del sistema
Diseño Arquitectural Diseño de Interfaces Diseño Detallado
Prueba del Sistema Prueba de Aceptación Modelado de Procesos de Desarrollo de Software
Sistema final mas la documentación.
Visibilidad del Modelo
Modelo de Proceso
Visibilidad del Proceso
Modelo de Cascada
Buena visibilidad, cada actividad produce un documento o resultado
Desarrollo Evolutivo
Visibilidad pobre, muy caro al producir docuementos en cada iteraci贸n.
Modelos Formales
Buena visibilidad, en cada fase deben producirse documentos.
Desarrollo orientado a la reutilizaci贸n
Visibilidad moderada. Importante contar con documentaci贸n de componentes reutilizables.
Modelo de Espiral
Buena visibilidad, cada segmento y cada anillo del espiral debe producir un documento.
Modelado de Procesos de Desarrollo de Software
Actividades de Evaluación
Modelado de Procesos de Desarrollo de Software
• Construye un mapa conceptual sobre los conceptos tratados en esta presentación Modo de entrega: correo electrónico • Realiza un investigación sobre los ciclos de vida y las metodologías de Desarrollo que se mencionan en la presentación. Recuerda agregar tu cuestionario. Min. 5 Max. 10 Preguntas Modo de entrega: impreso