Profesor : Hermón Alfaro F.  Hermon.alfaro@tm-mas.com    Curso Ingeniería de Software INFT.1 Universidad de  Los Lagos
Descripción de las actividades técnicas e ingenieriles que se llevan a cabo en  el ciclo de vida de un producto software Descripción de los problemas, principios, métodos y tecnologías asociadas con la Ingeniería del Software Presentación de la importancia de los requisitos en el ciclo de vida del software Introducción a las técnicas básicas de elicitación, documentación, especificación y prototipado de los requisitos de un sistema software Introducción a los métodos de análisis/diseño estructurado, y los métodos de análisis/diseño orientado a objetos Estudio y comprensión de los fundamentos del diseño de sistemas software Aplicar de forma práctica los conceptos teóricos sobre el desarrollo estructurado y orientado a objetos Objetivos
Motivación
La Ingeniería del Software dentro del currículo de los ingenieros en informática aporta la primera aproximación a la práctica  real  del desarrollo de software Proyectos realizados por equipos de desarrollo Programación a gran escala (programming in large) Obtención (elicitación) de los requisitos Modelos de ciclo de vida Gestión de la configuración Calidad del software Mantenimiento ……
¿Ingeniería? de Software
Ingeniería vs Métodos Tradicionales
Retraso respecto al potencial de hardware Insatisfacción de la demanda Bajo cumplimiento de compromisos – costos,  plazos Baja calidad y satisfacción de clientes/usuarios Mantención de sistemas legados   Grandes Problemas Históricos
Percepciones de la Disciplina Ineficiencia Altos costos Baja confiabilidad Escasa ingeniería
Crisis del Software Origina la disciplina “Ingeniería de Software” en los  60s Síntomas típicos funcionalidad incorrecta  costos y plazos excedidos  insatisfacción de clientes y usuarios  poca o nula visibilidad de lo que ocurre
Crisis del Software Algunas causas potenciales  carácter lógico del software  formación profesional (o falta de)  entrenamiento y actualización  resistencia al cambio Solución potencial  incorporar enfoque ingenieril en la forma de un  proceso de software …
Crisis del Software Algunos mitos bastantes arraigados también  estándares y procedimientos bastan  tecnología de punta basta más gente para ponerse al día  programación inmediata  fácil acomodo de los cambios  programación: fin del trabajo  calidad: sólo del ejecutable código es el único producto
Ingeniería de Software “  Establecimiento y uso de principios con caracteres de ingeniería apropiados para  obtener, eficientemente, software  confiable, que opere eficaz y  eficientemente en máquinas reales “ Concepto se acuñó en 1968, en Conferencia de la OTAN en Alemania , con la  intención de que mediante el uso de filosofías y paradigmas de disciplinas  ingenieriles establecidas se  resolviera la denominada crisis del software
Ingeniería de Software Objetivos  maximizar calidad  maximizar productividad  minimizar riesgos
Ingeniería de Software Implicancias  mejores técnicas de control de calidad  mejores herramientas y métodos  Todo en la forma de proceso de software adecuado  al tipo de problema que se resuelve y que permitan  gestionar de mejor manera los principales riesgos  relevantes para todos los stakeholders (involucrados  o afectados)
Proceso de Software Para Gestionar Riesgos
Proceso de Software Análisis Diseño Construcción y  Pruebas  Unitarias Pruebas Operación Mantención Desarrollo de software Procesos de apoyo: Gestión de proyectos, Gestión de Configuración,  Gestión de Requerimientos,  Gestión de la Calidad, ……….
Riesgos de Software Categorías - Top 10 Métricas inadecuadas Medición inadecuada Presión excesiva de tiempo Malas prácticas de gestión Estimación imprecisa de costos Síndrome del “silver bullet” Requerimientos Baja calidad Baja productividad Cancelación de proyectos
Proceso de Software Proveer un producto o un servicio, siempre consiste  en seguir una secuencia de pasos, para llevar a cabo  un conjunto de tareas Las tareas se ejecutan usualmente en el mismo  orden todas las veces Un proceso es una serie de pasos que involucran  actividades, restricciones y recursos, que producen  una salida esperada, de algún tipo. Un proceso involucra usualmente un conjunto de  herramientas y técnicas.
Proceso de Software Es importante, pues impone consistencia y  estructura al conjunto de actividades Es más que un procedimiento, es un conjunto  organizado de éstos. La estructura del proceso guía la acción,  permitiendo examinar, entender, controlar y  mejorar las actividades comprendidas por éste. También es importante pues permite capturar y  transmitir la experiencia, a proyectos futuros Cada proceso puede ser descrito por una  combinación de diferentes medios.
Un poco de Historia El modelo usado era de codificar-corregir:  Escribir el código.  Revisar y eliminar los errores o mejorar/aumentar  la funcionalidad. A medida que el hardware aumentó sus capacidades  y disminuyó sus costos, se amplió el ámbito de las  aplicaciones y se masificó el uso de computadores. Se incursionó en áreas donde los problemas no eran  tan bien acotados (ej. administrativos) y el  desarrollo se tornó más complejo.
Un poco de Historia Aparece un problema aún mayor: había que  mantener los sistemas. Esto escapó de las manos de los usuarios-  programadores, quienes ya no pudieron controlar el  proceso, pues sólo dominaban su especialidad, no el  desarrollo de software. Se incorporan tópicos organizacionales y  psicológicos, así como también la demanda por  mayor calidad y confiabilidad.
Un poco de Historia Además, ahora el desarrollo se convierte en una  actividad de grupo, lo cual demanda planificar,  organizar y estructurar el trabajo en torno a  “proyectos”. La comunicación entre humanos (usuario-  desarrollador y desarrollador-desarrollador) se  convierte en un problema. Se hace necesario definir un “Proceso
Un poco de Historia El proceso a la antigua, como “caja negra”.
Modelos de Proceso de Software En la Ingeniería de Software se describen muchos  Modelos de Proceso. Unos son prescriptivos: establecen la forma en que debería  progresar el proceso de software. Otros son descriptivos: dicen la forma en que el proceso de  software progresa en la realidad.
Algunos Modelos de Proceso de Software Modelo en Cascada. Modelo en V. Modelo de Prototipación. Modelo en Espiral. RUP Métodos Ágiles.
Modelo en Cascada  Es el más antiguo. Debe completarse un estado antes de  comenzar el siguiente. Es útil para que el  desarrollador visualice  lo que va a hacer. Su principal problema  es que no refleja la  realidad..
Modelo en Cascada
Modelo en Cascada Análisis de Requerimientos:   Se centra e intensifica especialmente en el software El ingeniero de software debe comprender el ámbito de la información del software, así como la función, el rendimiento y las interfaces requeridas Diseño (sistema y programa):   Se enfoca en cuatro atributos: la estructura de los datos, la arquitectura del software, el detalle procedimental y la caracterización de la interfaz  El proceso de diseño traduce los requisitos en una representación del software con la calidad requerida antes de que comience la codificación Codificación:   El diseño debe traducirse en una forma legible para la maquina. Si el diseño se realiza de una manera detallada la codificación puede realizarse automáticamente
Modelo en Cascada Prueba (unitario, integración, sistema, aceptación):   una vez que se ha generado el código comienza la prueba del programa.  La prueba se centra en la lógica interna del software, y en las funciones externas, realizando pruebas que aseguren que la entrada definida produce los resultados requeridos Mantenimiento:  el software sufrirá cambios después de que se entrega al cliente, los cambios ocurrirán debido a que hayan encontrado errores, a que el software deba adaptarse a cambios del entorno externo (sistema operativo o dispositivos periféricos), o debido a que el cliente requiera ampliaciones funcionales o del rendimiento
Modelo V
Modelo V La primera mitad es similar al Modelo en Cascada, y la otra mitad tiene como finalidad hacer pruebas e integración asociado a cada una de las etapas de la mitad anterior. Se puede identificar una ventaja principal con respecto al Modelo Cascada más simple, y se refiere a que este modelo involucra chequeos de cada una de las etapas del modelo de cascada.
Modelo de Prototipación Permite la construcción rápida del sistema (o parte  de éste). Usuario y desarrollador tienen una visión común. Se reduce el riesgo y lo incierto del desarrollo
Modelo en Espiral Se combinan las actividades de desarrollo con  Análisis de Riesgo. El modelo es de tipo iterativo: Planificación -> Análisis de Riesgo -> Ingeniería ->  Evaluación -> Planificación ->  ..En cada iteración, se evalúan las diferentes  alternativas y se elige una. Los gestores del proyecto intentan eliminar o  minimizar el riesgo.
Modelo en Espiral
RUP – Rational Unified Process  Su objetivo es asegurar la producción de software de calidad dentro de plazos  y presupuestos predecibles.  Dirigido por  casos de uso ,  centrado en la arquitectura, iterativo  (mini-proyectos)  e incremental  (versiones) Cada ciclo de vida del software abarca 4 fases en el siguiente  orden: concepción/planificación, elaboración, construcción y  transición La esencia de RUP es la iteración, y cada iteración resulta en  un entregable preferentemente ejecutable
RUP – Rational Unified Process
Mapa Conceptual de RUP
Se establece la oportunidad y alcance el proyecto. Se identifican todas las entidades externas con las que se trata (actores) y se define la interacción a un alto nivel de abstracción: Identificar todos los casos de uso Describir algunos en detalle La oportunidad del negocio incluye: Criterios de éxito Identificación de riesgos Estimación de recursos necesarios Plan de las fases incluyendo hitos  Fases de RUP:  Inception (Inicio)
Un documento de visión general: Requerimientos generales del proyecto Características principales Restricciones Modelo inicial de casos de uso (10% a 20 % listos). Glosario. Caso de negocio: Contexto Criterios de éxito Pronóstico financiero Identificación inicial de riesgos. Plan de proyecto. Uno o más prototipos. Fases de RUP:  Inception (Inicio) Productos:
Inicio Elaboración Construcción Transición Objetivos del  Ciclo de Vida Las partes interesadas deben acordar el alcance y la estimación de tiempo y costo. Comprensión de los requerimientos plasmados en casos de uso. Fases de RUP:  Inception  ( Inicio) Hito:
Objetivos: Analizar el dominio del problema Establecer una arquitectura base sólida Desarrollar un plan de proyecto Eliminar los elementos de mayor riesgo para el desarrollo exitoso del proyecto Visión de “una milla de amplitud y una pulgada de profundidad” porque las decisiones de arquitectura requieren una visión global del sistema. Fases de RUP: Elaboración
Es la parte más crítica del proceso: Al final toda la ingeniería “dura” está hecha Se puede decidir si vale la pena seguir adelante A partir de aquí la arquitectura, los requerimientos y los planes de desarrollo son estables. Ya hay menos riesgos y se puede planificar el resto del proyecto con menor incertidumbre. Se construye una arquitectura ejecutable que contemple: Los casos de uso críticos Los riesgos identificados Fases de RUP: Elaboración Productos:
Fases de RUP: Elaboración Modelo de casos de uso (80% completo) con descripciones detalladas. Otros requerimientos no funcio-nales o no asociados a casos de uso. Descripción de la Arquitectura del Software. Un prototipo ejecutable de la arquitectura. Lista revisada de riesgos y del caso de negocio. Plan de desarrollo para el resto del proyecto. Un manual de usuario preliminar. Productos:
Condiciones de éxito de la elaboración: ¿Es estable la visión del producto? ¿Es estable la arquitectura? ¿Las pruebas de ejecución demuestran que los riesgos han sido abordados y resueltos? ¿Es el plan del proyecto algo realista? ¿Están de acuerdo con el plan todas las personas involucradas? Inicio Elaboración Construcción Transición Arquitectura de  Ciclo de Vida Fases de RUP: Elaboración Hito:
En esta fase todas las componentes restantes se desarrollan e incorporan al producto. Todo es probado en profundidad. El énfasis está en la producción eficiente y no ya en la creación intelectual. Puede hacerse construcción en paralelo, pero esto exige una planificación detallada y una arquitectura muy estable. Fases de RUP: Construcción
El producto de software integrado y corriendo en la plataforma adecuada. Manuales de usuario. Una descripción del “release” actual. Fases de RUP: Construcción Productos:
Fases de RUP: Construcción Se obtiene un producto Beta que debe decidirse si puede ponerse en ejecución sin mayores riesgos. Condiciones de éxito: ¿El producto está maduro y estable para instalarlo en el ambiente del cliente? ¿Están los interesados listos para recibirlo? Inicio Elaboración Construcción Transición Capacidad Operacional Hito:
El objetivo es traspasar el software desarrollado a la comunidad de usuarios. Una vez instalado surgirán nuevos elementos que implicarán nuevos desarrollos (ciclos). Incluye: Pruebas Beta para validar el producto con las expectativas del cliente Ejecución paralela con sistemas antiguos Conversión de datos Entrenamiento de usuarios Distribuir el producto Fases de RUP: Transición
Obtener autosuficiencia de parte de los usuarios. Concordancia en los logros del producto de parte de las personas involucradas. Lograr el concenso cuanto antes para liberar el producto al mercado. Inicio Elaboración Construcción Transición Producto Fases de RUP: Transición Objetivos:
Métodos Ágiles  Interés creciente en los métodos ágiles (inicialmente  llamados ligeros, lightweight) en los últimos años enfrentamiento de requerimientos cambiantes tiempos de desarrollo escasos clientes y usuarios cada vez más exigentes Caracterizados alternativamente como   antídoto a la burocracia (métodos planificados, pesados)
Métodos Ágiles  Algunas características de los métodos ágiles Documentación mínima Ciclos iterativos breves Reacción rápida ante los cambios Estrecha relación con el cliente Diseño simple Satisfacción de necesidades inmediatas Foco en las personas Organización libre Procesos adaptables, no predictivos
Métodos Ágiles  El proceso de Desarrollo XP Fase inicial de captura de requerimientos es eliminada El ciclo de desarrollo de XP se divide en liberaciones cada una de las cuales es medida en historias de usuario Historia de usuario: unidad funcional en un proyecto XP, debe ser entendible tanto para el cliente como para los desarrolladores, verificable y pequeña
Métodos Ágiles  El proceso de desarrollo XP Fase de Exploración Fase de Planificación Fase de Iteraciones y Entregas Fase de Producción Fase de Mantenimiento Fase de Muerte
Métodos Ágiles
Principales Métodos Ágiles  Extreme Programming, XP Scrum Crystal Family Feature-Driven Design Adaptive Software Development DSDM Otros
Agilidad vs. Proceso Ultimamente, distintos trabajos han investigado la  relación entre modelos de proceso y métodos ágiles,  observando lo siguiente CMM/CMMI y XP pueden complementarse (foco en aspectos  de gestión vs. técnicos) Métodos ágiles calzan con la esencia del mejoramiento de  procesos bajo una interpretación menos literal (que CMMI,  por ejemplo) Métodos ágiles apuntan a gestión de proyectos, no a  gestión de procesos
Bibliografía Pressman Roger. “Ingeniería del Software”. Tercera Software Engineering: Theory and Practice (2nd Ed.) Shari Pfleeger, Prentice Hall (2001), Cap. 1&2 The Software-Research Crisis. Robert L. Glass, IEEE Software, Noviembre 1994 Using Risk to Balance Agile and Plan-Driven Methods Barry Boehm, Richard Turner, IEEE Computer, Junio 2003 Agile Alliance§  http://www.agilealliance.com/ What is extreme programming? http://www.xprogramming.com/
Anexos
Arquitectura de Sistemas Computacionales Estructuración de los Procesos Estructuración de las Comuni caciones Estructuración de los Datos Ingeniería de las comunicaciones Ingeniería de la Información Ingeniería de Software
Arquitectura de Sistemas Computacionales Datos Función Comunicaciones Nivel Conceptual (Esquema del Negocio) Nivel Lógico (S.I.A) Nivel Físico (Implementa ción Compu tacional) . . . .
 
Los 13 Mandamientos en el Proceso de Definición  de Requisitos   Entonces Jehovah dijo al Analista Funcional: —  Escribe estas palabras, porque conforme a ellas he hecho pacto contigo y con el Equipo de Desarrollo. El Analista Funcional estuvo allí con Jehovah cuarenta días y cuarenta noches. No comió pan ni bebió agua. Y en las tablas escribió las palabras del pacto, los trece mandamientos: No pensarás el cómo, tan sólo el qué y el por qué. No te pronunciarás en tiempos condicionales; en todo caso, te pronunciarás en tiempos imperativos. Evitarás recoger Detalles de Diseño. No te pronunciarás con expresiones vagas en significado, como “generalmente …”,“comúnmente …” Evitarás recoger opcionalidad en la descripción de un Requisito. Si existen distintas opciones en un Requisito, las modelarás como atributos del Requisito o en nuevos Requisitos, pero nunca en el mismo Requisito. Detallarás en un Requisito cada necesidad, de forma individual. Muchos verbos concentrados en un Requisito dificultan su comprensión y su posterior trazabilidad. Evitarás el exceso de términos y de verbos en cada Requisito. Las necesidades o informaciones se mezclarán si se proporciona demasiado detalle; ese detalle se indicará en Casos de Uso, refinando los Requisitos. No recurrirás a los Acrónimos, salvo que se recojan en Glosarios u Ontologías de Términos y previamente se haya aprobado su uso. Respetarás el equilibrio entre la necesidad a describir y el número de sílabas por palabra y el de palabras por frase, usando  “,”  y  “;”  apropiadamente en la descripción de los Requisitos para fomentar la legibilidad de los mismos. No usarás pronombres. No usarás pseudocódigo: “si fecha es mayor que …”, “iterar sobre …”, etc. No usarás términos como accesible, amigable, rápido y eficiente, entre otros; son difíciles de medir. En su lugar usarás unidades físicas para medir, por ejemplo, cómo de rápido debe rendir un Requisito, o WAI AA, para especificar claramente cómo de accesible ha de ser el Requisito. Verificarás que las aserciones puedan ser medidas de forma sencilla. Como contraejemplo, abstente de expresiones del tipo “sin sobrecargar demasiado el servidor”. Estos diez mandamientos se encierran en dos: Amarás a la  desambiguación  y a lo  axiomático  sobre todas las cosas y a las 3 C´s ( concisión, claridad y concreción)  como a ti mismo.
Los 13 Mandamientos en el Proceso de Definición  de Requisitos   Entonces Jehovah dijo al Analista Funcional: —  Escribe estas palabras, porque conforme a ellas he hecho pacto contigo y con el Equipo de Desarrollo. El Analista Funcional estuvo allí con Jehovah cuarenta días y cuarenta noches. No comió pan ni bebió agua. Y en las tablas escribió las palabras del pacto, los trece mandamientos: No pensarás el cómo, tan sólo el qué y el por qué. No te pronunciarás en tiempos condicionales; en todo caso, te pronunciarás en tiempos imperativos. Evitarás recoger Detalles de Diseño. No te pronunciarás con expresiones vagas en significado, como “generalmente …”,“comúnmente …” Evitarás recoger opcionalidad en la descripción de un Requisito. Si existen distintas opciones en un Requisito, las modelarás como atributos del Requisito o en nuevos Requisitos, pero nunca en el mismo Requisito. Detallarás en un Requisito cada necesidad, de forma individual. Muchos verbos concentrados en un Requisito dificultan su comprensión y su posterior trazabilidad. Evitarás el exceso de términos y de verbos en cada Requisito. Las necesidades o informaciones se mezclarán si se proporciona demasiado detalle; ese detalle se indicará en Casos de Uso, refinando los Requisitos. No recurrirás a los Acrónimos, salvo que se recojan en Glosarios u Ontologías de Términos y previamente se haya aprobado su uso. Respetarás el equilibrio entre la necesidad a describir y el número de sílabas por palabra y el de palabras por frase, usando  “,”  y  “;”  apropiadamente en la descripción de los Requisitos para fomentar la legibilidad de los mismos. No usarás pronombres. No usarás pseudocódigo: “si fecha es mayor que …”, “iterar sobre …”, etc. No usarás términos como accesible, amigable, rápido y eficiente, entre otros; son difíciles de medir. En su lugar usarás unidades físicas para medir, por ejemplo, cómo de rápido debe rendir un Requisito, o WAI AA, para especificar claramente cómo de accesible ha de ser el Requisito. Verificarás que las aserciones puedan ser medidas de forma sencilla. Como contraejemplo, abstente de expresiones del tipo “sin sobrecargar demasiado el servidor”. Estos diez mandamientos se encierran en dos: Amarás a la  desambiguación  y a lo  axiomático  sobre todas las cosas y a las 3 C´s ( concisión, claridad y concreción)  como a ti mismo.

Curso ingeniería de software parte i

  • 1.
    Profesor : HermónAlfaro F. Hermon.alfaro@tm-mas.com Curso Ingeniería de Software INFT.1 Universidad de Los Lagos
  • 2.
    Descripción de lasactividades técnicas e ingenieriles que se llevan a cabo en el ciclo de vida de un producto software Descripción de los problemas, principios, métodos y tecnologías asociadas con la Ingeniería del Software Presentación de la importancia de los requisitos en el ciclo de vida del software Introducción a las técnicas básicas de elicitación, documentación, especificación y prototipado de los requisitos de un sistema software Introducción a los métodos de análisis/diseño estructurado, y los métodos de análisis/diseño orientado a objetos Estudio y comprensión de los fundamentos del diseño de sistemas software Aplicar de forma práctica los conceptos teóricos sobre el desarrollo estructurado y orientado a objetos Objetivos
  • 3.
  • 4.
    La Ingeniería delSoftware dentro del currículo de los ingenieros en informática aporta la primera aproximación a la práctica real del desarrollo de software Proyectos realizados por equipos de desarrollo Programación a gran escala (programming in large) Obtención (elicitación) de los requisitos Modelos de ciclo de vida Gestión de la configuración Calidad del software Mantenimiento ……
  • 5.
  • 6.
  • 7.
    Retraso respecto alpotencial de hardware Insatisfacción de la demanda Bajo cumplimiento de compromisos – costos, plazos Baja calidad y satisfacción de clientes/usuarios Mantención de sistemas legados Grandes Problemas Históricos
  • 8.
    Percepciones de laDisciplina Ineficiencia Altos costos Baja confiabilidad Escasa ingeniería
  • 9.
    Crisis del SoftwareOrigina la disciplina “Ingeniería de Software” en los 60s Síntomas típicos funcionalidad incorrecta costos y plazos excedidos insatisfacción de clientes y usuarios poca o nula visibilidad de lo que ocurre
  • 10.
    Crisis del SoftwareAlgunas causas potenciales carácter lógico del software formación profesional (o falta de) entrenamiento y actualización resistencia al cambio Solución potencial incorporar enfoque ingenieril en la forma de un proceso de software …
  • 11.
    Crisis del SoftwareAlgunos mitos bastantes arraigados también estándares y procedimientos bastan tecnología de punta basta más gente para ponerse al día programación inmediata fácil acomodo de los cambios programación: fin del trabajo calidad: sólo del ejecutable código es el único producto
  • 12.
    Ingeniería de Software“ Establecimiento y uso de principios con caracteres de ingeniería apropiados para obtener, eficientemente, software confiable, que opere eficaz y eficientemente en máquinas reales “ Concepto se acuñó en 1968, en Conferencia de la OTAN en Alemania , con la intención de que mediante el uso de filosofías y paradigmas de disciplinas ingenieriles establecidas se resolviera la denominada crisis del software
  • 13.
    Ingeniería de SoftwareObjetivos maximizar calidad maximizar productividad minimizar riesgos
  • 14.
    Ingeniería de SoftwareImplicancias mejores técnicas de control de calidad mejores herramientas y métodos Todo en la forma de proceso de software adecuado al tipo de problema que se resuelve y que permitan gestionar de mejor manera los principales riesgos relevantes para todos los stakeholders (involucrados o afectados)
  • 15.
    Proceso de SoftwarePara Gestionar Riesgos
  • 16.
    Proceso de SoftwareAnálisis Diseño Construcción y Pruebas Unitarias Pruebas Operación Mantención Desarrollo de software Procesos de apoyo: Gestión de proyectos, Gestión de Configuración, Gestión de Requerimientos, Gestión de la Calidad, ……….
  • 17.
    Riesgos de SoftwareCategorías - Top 10 Métricas inadecuadas Medición inadecuada Presión excesiva de tiempo Malas prácticas de gestión Estimación imprecisa de costos Síndrome del “silver bullet” Requerimientos Baja calidad Baja productividad Cancelación de proyectos
  • 18.
    Proceso de SoftwareProveer un producto o un servicio, siempre consiste en seguir una secuencia de pasos, para llevar a cabo un conjunto de tareas Las tareas se ejecutan usualmente en el mismo orden todas las veces Un proceso es una serie de pasos que involucran actividades, restricciones y recursos, que producen una salida esperada, de algún tipo. Un proceso involucra usualmente un conjunto de herramientas y técnicas.
  • 19.
    Proceso de SoftwareEs importante, pues impone consistencia y estructura al conjunto de actividades Es más que un procedimiento, es un conjunto organizado de éstos. La estructura del proceso guía la acción, permitiendo examinar, entender, controlar y mejorar las actividades comprendidas por éste. También es importante pues permite capturar y transmitir la experiencia, a proyectos futuros Cada proceso puede ser descrito por una combinación de diferentes medios.
  • 20.
    Un poco deHistoria El modelo usado era de codificar-corregir: Escribir el código. Revisar y eliminar los errores o mejorar/aumentar la funcionalidad. A medida que el hardware aumentó sus capacidades y disminuyó sus costos, se amplió el ámbito de las aplicaciones y se masificó el uso de computadores. Se incursionó en áreas donde los problemas no eran tan bien acotados (ej. administrativos) y el desarrollo se tornó más complejo.
  • 21.
    Un poco deHistoria Aparece un problema aún mayor: había que mantener los sistemas. Esto escapó de las manos de los usuarios- programadores, quienes ya no pudieron controlar el proceso, pues sólo dominaban su especialidad, no el desarrollo de software. Se incorporan tópicos organizacionales y psicológicos, así como también la demanda por mayor calidad y confiabilidad.
  • 22.
    Un poco deHistoria Además, ahora el desarrollo se convierte en una actividad de grupo, lo cual demanda planificar, organizar y estructurar el trabajo en torno a “proyectos”. La comunicación entre humanos (usuario- desarrollador y desarrollador-desarrollador) se convierte en un problema. Se hace necesario definir un “Proceso
  • 23.
    Un poco deHistoria El proceso a la antigua, como “caja negra”.
  • 24.
    Modelos de Procesode Software En la Ingeniería de Software se describen muchos Modelos de Proceso. Unos son prescriptivos: establecen la forma en que debería progresar el proceso de software. Otros son descriptivos: dicen la forma en que el proceso de software progresa en la realidad.
  • 25.
    Algunos Modelos deProceso de Software Modelo en Cascada. Modelo en V. Modelo de Prototipación. Modelo en Espiral. RUP Métodos Ágiles.
  • 26.
    Modelo en Cascada Es el más antiguo. Debe completarse un estado antes de comenzar el siguiente. Es útil para que el desarrollador visualice lo que va a hacer. Su principal problema es que no refleja la realidad..
  • 27.
  • 28.
    Modelo en CascadaAnálisis de Requerimientos: Se centra e intensifica especialmente en el software El ingeniero de software debe comprender el ámbito de la información del software, así como la función, el rendimiento y las interfaces requeridas Diseño (sistema y programa): Se enfoca en cuatro atributos: la estructura de los datos, la arquitectura del software, el detalle procedimental y la caracterización de la interfaz El proceso de diseño traduce los requisitos en una representación del software con la calidad requerida antes de que comience la codificación Codificación: El diseño debe traducirse en una forma legible para la maquina. Si el diseño se realiza de una manera detallada la codificación puede realizarse automáticamente
  • 29.
    Modelo en CascadaPrueba (unitario, integración, sistema, aceptación): una vez que se ha generado el código comienza la prueba del programa. La prueba se centra en la lógica interna del software, y en las funciones externas, realizando pruebas que aseguren que la entrada definida produce los resultados requeridos Mantenimiento: el software sufrirá cambios después de que se entrega al cliente, los cambios ocurrirán debido a que hayan encontrado errores, a que el software deba adaptarse a cambios del entorno externo (sistema operativo o dispositivos periféricos), o debido a que el cliente requiera ampliaciones funcionales o del rendimiento
  • 30.
  • 31.
    Modelo V Laprimera mitad es similar al Modelo en Cascada, y la otra mitad tiene como finalidad hacer pruebas e integración asociado a cada una de las etapas de la mitad anterior. Se puede identificar una ventaja principal con respecto al Modelo Cascada más simple, y se refiere a que este modelo involucra chequeos de cada una de las etapas del modelo de cascada.
  • 32.
    Modelo de PrototipaciónPermite la construcción rápida del sistema (o parte de éste). Usuario y desarrollador tienen una visión común. Se reduce el riesgo y lo incierto del desarrollo
  • 33.
    Modelo en EspiralSe combinan las actividades de desarrollo con Análisis de Riesgo. El modelo es de tipo iterativo: Planificación -> Análisis de Riesgo -> Ingeniería -> Evaluación -> Planificación -> ..En cada iteración, se evalúan las diferentes alternativas y se elige una. Los gestores del proyecto intentan eliminar o minimizar el riesgo.
  • 34.
  • 35.
    RUP – RationalUnified Process Su objetivo es asegurar la producción de software de calidad dentro de plazos y presupuestos predecibles. Dirigido por casos de uso , centrado en la arquitectura, iterativo (mini-proyectos) e incremental (versiones) Cada ciclo de vida del software abarca 4 fases en el siguiente orden: concepción/planificación, elaboración, construcción y transición La esencia de RUP es la iteración, y cada iteración resulta en un entregable preferentemente ejecutable
  • 36.
    RUP – RationalUnified Process
  • 37.
  • 38.
    Se establece laoportunidad y alcance el proyecto. Se identifican todas las entidades externas con las que se trata (actores) y se define la interacción a un alto nivel de abstracción: Identificar todos los casos de uso Describir algunos en detalle La oportunidad del negocio incluye: Criterios de éxito Identificación de riesgos Estimación de recursos necesarios Plan de las fases incluyendo hitos Fases de RUP: Inception (Inicio)
  • 39.
    Un documento devisión general: Requerimientos generales del proyecto Características principales Restricciones Modelo inicial de casos de uso (10% a 20 % listos). Glosario. Caso de negocio: Contexto Criterios de éxito Pronóstico financiero Identificación inicial de riesgos. Plan de proyecto. Uno o más prototipos. Fases de RUP: Inception (Inicio) Productos:
  • 40.
    Inicio Elaboración ConstrucciónTransición Objetivos del Ciclo de Vida Las partes interesadas deben acordar el alcance y la estimación de tiempo y costo. Comprensión de los requerimientos plasmados en casos de uso. Fases de RUP: Inception ( Inicio) Hito:
  • 41.
    Objetivos: Analizar eldominio del problema Establecer una arquitectura base sólida Desarrollar un plan de proyecto Eliminar los elementos de mayor riesgo para el desarrollo exitoso del proyecto Visión de “una milla de amplitud y una pulgada de profundidad” porque las decisiones de arquitectura requieren una visión global del sistema. Fases de RUP: Elaboración
  • 42.
    Es la partemás crítica del proceso: Al final toda la ingeniería “dura” está hecha Se puede decidir si vale la pena seguir adelante A partir de aquí la arquitectura, los requerimientos y los planes de desarrollo son estables. Ya hay menos riesgos y se puede planificar el resto del proyecto con menor incertidumbre. Se construye una arquitectura ejecutable que contemple: Los casos de uso críticos Los riesgos identificados Fases de RUP: Elaboración Productos:
  • 43.
    Fases de RUP:Elaboración Modelo de casos de uso (80% completo) con descripciones detalladas. Otros requerimientos no funcio-nales o no asociados a casos de uso. Descripción de la Arquitectura del Software. Un prototipo ejecutable de la arquitectura. Lista revisada de riesgos y del caso de negocio. Plan de desarrollo para el resto del proyecto. Un manual de usuario preliminar. Productos:
  • 44.
    Condiciones de éxitode la elaboración: ¿Es estable la visión del producto? ¿Es estable la arquitectura? ¿Las pruebas de ejecución demuestran que los riesgos han sido abordados y resueltos? ¿Es el plan del proyecto algo realista? ¿Están de acuerdo con el plan todas las personas involucradas? Inicio Elaboración Construcción Transición Arquitectura de Ciclo de Vida Fases de RUP: Elaboración Hito:
  • 45.
    En esta fasetodas las componentes restantes se desarrollan e incorporan al producto. Todo es probado en profundidad. El énfasis está en la producción eficiente y no ya en la creación intelectual. Puede hacerse construcción en paralelo, pero esto exige una planificación detallada y una arquitectura muy estable. Fases de RUP: Construcción
  • 46.
    El producto desoftware integrado y corriendo en la plataforma adecuada. Manuales de usuario. Una descripción del “release” actual. Fases de RUP: Construcción Productos:
  • 47.
    Fases de RUP:Construcción Se obtiene un producto Beta que debe decidirse si puede ponerse en ejecución sin mayores riesgos. Condiciones de éxito: ¿El producto está maduro y estable para instalarlo en el ambiente del cliente? ¿Están los interesados listos para recibirlo? Inicio Elaboración Construcción Transición Capacidad Operacional Hito:
  • 48.
    El objetivo estraspasar el software desarrollado a la comunidad de usuarios. Una vez instalado surgirán nuevos elementos que implicarán nuevos desarrollos (ciclos). Incluye: Pruebas Beta para validar el producto con las expectativas del cliente Ejecución paralela con sistemas antiguos Conversión de datos Entrenamiento de usuarios Distribuir el producto Fases de RUP: Transición
  • 49.
    Obtener autosuficiencia departe de los usuarios. Concordancia en los logros del producto de parte de las personas involucradas. Lograr el concenso cuanto antes para liberar el producto al mercado. Inicio Elaboración Construcción Transición Producto Fases de RUP: Transición Objetivos:
  • 50.
    Métodos Ágiles Interés creciente en los métodos ágiles (inicialmente llamados ligeros, lightweight) en los últimos años enfrentamiento de requerimientos cambiantes tiempos de desarrollo escasos clientes y usuarios cada vez más exigentes Caracterizados alternativamente como antídoto a la burocracia (métodos planificados, pesados)
  • 51.
    Métodos Ágiles Algunas características de los métodos ágiles Documentación mínima Ciclos iterativos breves Reacción rápida ante los cambios Estrecha relación con el cliente Diseño simple Satisfacción de necesidades inmediatas Foco en las personas Organización libre Procesos adaptables, no predictivos
  • 52.
    Métodos Ágiles El proceso de Desarrollo XP Fase inicial de captura de requerimientos es eliminada El ciclo de desarrollo de XP se divide en liberaciones cada una de las cuales es medida en historias de usuario Historia de usuario: unidad funcional en un proyecto XP, debe ser entendible tanto para el cliente como para los desarrolladores, verificable y pequeña
  • 53.
    Métodos Ágiles El proceso de desarrollo XP Fase de Exploración Fase de Planificación Fase de Iteraciones y Entregas Fase de Producción Fase de Mantenimiento Fase de Muerte
  • 54.
  • 55.
    Principales Métodos Ágiles Extreme Programming, XP Scrum Crystal Family Feature-Driven Design Adaptive Software Development DSDM Otros
  • 56.
    Agilidad vs. ProcesoUltimamente, distintos trabajos han investigado la relación entre modelos de proceso y métodos ágiles, observando lo siguiente CMM/CMMI y XP pueden complementarse (foco en aspectos de gestión vs. técnicos) Métodos ágiles calzan con la esencia del mejoramiento de procesos bajo una interpretación menos literal (que CMMI, por ejemplo) Métodos ágiles apuntan a gestión de proyectos, no a gestión de procesos
  • 57.
    Bibliografía Pressman Roger.“Ingeniería del Software”. Tercera Software Engineering: Theory and Practice (2nd Ed.) Shari Pfleeger, Prentice Hall (2001), Cap. 1&2 The Software-Research Crisis. Robert L. Glass, IEEE Software, Noviembre 1994 Using Risk to Balance Agile and Plan-Driven Methods Barry Boehm, Richard Turner, IEEE Computer, Junio 2003 Agile Alliance§ http://www.agilealliance.com/ What is extreme programming? http://www.xprogramming.com/
  • 58.
  • 59.
    Arquitectura de SistemasComputacionales Estructuración de los Procesos Estructuración de las Comuni caciones Estructuración de los Datos Ingeniería de las comunicaciones Ingeniería de la Información Ingeniería de Software
  • 60.
    Arquitectura de SistemasComputacionales Datos Función Comunicaciones Nivel Conceptual (Esquema del Negocio) Nivel Lógico (S.I.A) Nivel Físico (Implementa ción Compu tacional) . . . .
  • 61.
  • 62.
    Los 13 Mandamientosen el Proceso de Definición de Requisitos   Entonces Jehovah dijo al Analista Funcional: — Escribe estas palabras, porque conforme a ellas he hecho pacto contigo y con el Equipo de Desarrollo. El Analista Funcional estuvo allí con Jehovah cuarenta días y cuarenta noches. No comió pan ni bebió agua. Y en las tablas escribió las palabras del pacto, los trece mandamientos: No pensarás el cómo, tan sólo el qué y el por qué. No te pronunciarás en tiempos condicionales; en todo caso, te pronunciarás en tiempos imperativos. Evitarás recoger Detalles de Diseño. No te pronunciarás con expresiones vagas en significado, como “generalmente …”,“comúnmente …” Evitarás recoger opcionalidad en la descripción de un Requisito. Si existen distintas opciones en un Requisito, las modelarás como atributos del Requisito o en nuevos Requisitos, pero nunca en el mismo Requisito. Detallarás en un Requisito cada necesidad, de forma individual. Muchos verbos concentrados en un Requisito dificultan su comprensión y su posterior trazabilidad. Evitarás el exceso de términos y de verbos en cada Requisito. Las necesidades o informaciones se mezclarán si se proporciona demasiado detalle; ese detalle se indicará en Casos de Uso, refinando los Requisitos. No recurrirás a los Acrónimos, salvo que se recojan en Glosarios u Ontologías de Términos y previamente se haya aprobado su uso. Respetarás el equilibrio entre la necesidad a describir y el número de sílabas por palabra y el de palabras por frase, usando  “,”  y  “;”  apropiadamente en la descripción de los Requisitos para fomentar la legibilidad de los mismos. No usarás pronombres. No usarás pseudocódigo: “si fecha es mayor que …”, “iterar sobre …”, etc. No usarás términos como accesible, amigable, rápido y eficiente, entre otros; son difíciles de medir. En su lugar usarás unidades físicas para medir, por ejemplo, cómo de rápido debe rendir un Requisito, o WAI AA, para especificar claramente cómo de accesible ha de ser el Requisito. Verificarás que las aserciones puedan ser medidas de forma sencilla. Como contraejemplo, abstente de expresiones del tipo “sin sobrecargar demasiado el servidor”. Estos diez mandamientos se encierran en dos: Amarás a la  desambiguación  y a lo  axiomático  sobre todas las cosas y a las 3 C´s ( concisión, claridad y concreción)  como a ti mismo.
  • 63.
    Los 13 Mandamientosen el Proceso de Definición de Requisitos   Entonces Jehovah dijo al Analista Funcional: — Escribe estas palabras, porque conforme a ellas he hecho pacto contigo y con el Equipo de Desarrollo. El Analista Funcional estuvo allí con Jehovah cuarenta días y cuarenta noches. No comió pan ni bebió agua. Y en las tablas escribió las palabras del pacto, los trece mandamientos: No pensarás el cómo, tan sólo el qué y el por qué. No te pronunciarás en tiempos condicionales; en todo caso, te pronunciarás en tiempos imperativos. Evitarás recoger Detalles de Diseño. No te pronunciarás con expresiones vagas en significado, como “generalmente …”,“comúnmente …” Evitarás recoger opcionalidad en la descripción de un Requisito. Si existen distintas opciones en un Requisito, las modelarás como atributos del Requisito o en nuevos Requisitos, pero nunca en el mismo Requisito. Detallarás en un Requisito cada necesidad, de forma individual. Muchos verbos concentrados en un Requisito dificultan su comprensión y su posterior trazabilidad. Evitarás el exceso de términos y de verbos en cada Requisito. Las necesidades o informaciones se mezclarán si se proporciona demasiado detalle; ese detalle se indicará en Casos de Uso, refinando los Requisitos. No recurrirás a los Acrónimos, salvo que se recojan en Glosarios u Ontologías de Términos y previamente se haya aprobado su uso. Respetarás el equilibrio entre la necesidad a describir y el número de sílabas por palabra y el de palabras por frase, usando  “,”  y  “;”  apropiadamente en la descripción de los Requisitos para fomentar la legibilidad de los mismos. No usarás pronombres. No usarás pseudocódigo: “si fecha es mayor que …”, “iterar sobre …”, etc. No usarás términos como accesible, amigable, rápido y eficiente, entre otros; son difíciles de medir. En su lugar usarás unidades físicas para medir, por ejemplo, cómo de rápido debe rendir un Requisito, o WAI AA, para especificar claramente cómo de accesible ha de ser el Requisito. Verificarás que las aserciones puedan ser medidas de forma sencilla. Como contraejemplo, abstente de expresiones del tipo “sin sobrecargar demasiado el servidor”. Estos diez mandamientos se encierran en dos: Amarás a la  desambiguación  y a lo  axiomático  sobre todas las cosas y a las 3 C´s ( concisión, claridad y concreción)  como a ti mismo.