8 de abr de 2023 Sergio Sánchez Rios
Ingeniería de SoftwareUnidad I
El proceso de Software
Sergio Sánchez Rios.
Ingeniero en Informática – Licenciado en Informática
8 de abr de 2023 Sergio Sánchez Rios
¿Qué es un proceso de software?
“ El proceso de software es un conjunto de actividades y resultados asociados que conducen a la creación de un producto de software”. [Sommerville 2002]
Cuando el proceso implica la construcción de algún producto, solemos referirnos al proceso como Ciclo de Vida.
El proceso de desarrollo de software suele denominarse ciclo de vida del software, porque describe la vida de un producto de software desde su concepción hasta su implementación, entrega, utilización y mantenimiento.
8 de abr de 2023 Sergio Sánchez Rios
Actividades comunes a todos los procesos de software
Aunque existen muchos procesos diferentes de software, tienen actividades fundamentales que son comunes para todos ellos Especificación del software: se debe definir la funcionalidad del software y las restricciones en sus operaciones.
Diseño e implementación del software: se debe producir un software que cumpla su especificación.
Validación del software: se debe validar el software para asegurar que hace lo que el cliente desea.
Evolución del software: el software debe evolucionar para cumplir con los cambios en las necesidades del usuario.
8 de abr de 2023 Sergio Sánchez Rios
Documentación de software
“Lo que no está escrito no existe...”
Algunos tipos de documentos:
Plan de software Especificación de Requerimientos Especificación de Diseño Plan de Pruebas Resultados de Revisiones Bitácoras
8 de abr de 2023 Sergio Sánchez Rios
Etapas generales en el desarrollo de software
Planificación Definición y análisis de requerimientos Diseño del sistema Codificación Pruebas unitarias Pruebas de integración Pruebas del sistema Liberación del producto Mantenimiento
8 de abr de 2023 Sergio Sánchez Rios
Planificación
Es proporcionar un marco de trabajo que permita al gestor hacer estimaciones razonables de recursos, costos y planificación temporal.
Objetivo
Antes de comprometer los fondos para el desarrollo de un software o el mantenimiento de un proyecto por lo general el cliente quiere una estimación de cuánto costará el proyecto y cuánto durará.
Producto de trabajoPlan del proyecto: deja por escrito las necesidades del cliente, así como lo que se espera hacer para satisfacerlas.
8 de abr de 2023 Sergio Sánchez Rios
Análisis y definición de requerimientos
Reunirse con los clientes para definir los requerimientos: son lo que los clientes y usuarios quieren que haga el sistema. Los requerimientos definen el sistema.
Objetivo
Producto de trabajo
Documento de Requerimientos
Definición de requerimientos (clientes)
Especificación de requerimientos (diseñadores)
8 de abr de 2023 Sergio Sánchez Rios
Diseño
Transformar el problema en una solución, es decir realizar un diseño del sistema que satisfaga las necesidades de los clientes.
Objetivo
El diseño consta de dos partes:
Diseño del sistema o conceptual: Se presenta el sistema desde la visión del Cliente, solo se describen apariencia y funcionalidad.
Diseño técnico: el objetivo, es que los constructores comprendan el hardware y el software concretos que se necesitarán para resolver el problema del cliente. Se utiliza el diseño global para generar los diseños de los programas.
8 de abr de 2023 Sergio Sánchez Rios
Diseño
Producto de trabajo
Especificación de Diseño
Documentación dirigida al cliente (lenguaje natural)
Terminología técnica para describir la estructura del sistema, datos y funciones.
8 de abr de 2023 Sergio Sánchez Rios
Codificación
Proceso creativo que traduce el diseño a un lenguaje de programación.
Objetivo
Producto de trabajo
Escribir los programas que implementen el diseño.
Código Fuente.
Documentación del programa.
Documentación interna.
Documentación externa.
8 de abr de 2023 Sergio Sánchez Rios
Prueba
Demoler el producto de software con el propósito de detectar defectos.
Objetivo
La etapa de Prueba consta de tres partes:
Prueba unitaria: prueba de los módulos por separado.
Prueba de integración: se reúnen piezas y se prueban.
Prueba del sistema: se prueba el sistema completo, para probar que las funciones y relaciones estén bien.
8 de abr de 2023 Sergio Sánchez Rios
Prueba
Producto de trabajo
Plan de Prueba
Objetivos de las pruebas.
Diseño de los casos de prueba.
Preparación escrita de los casos de prueba
Verificación casos de prueba.
Ejecución en las pruebas.
Evaluación de los resultados.
8 de abr de 2023 Sergio Sánchez Rios
Liberación del producto
Es más que solo la entrega del producto, sino que es el momento del desarrollo en que se ayuda a los usuarios a comprender el producto entregado y a sentirse cómodos con él.
Objetivo
Producto de trabajo
Manuales de usuario, Manuales del operador, guía general del sistema, etc..
Producto operando
8 de abr de 2023 Sergio Sánchez Rios
Mantenimiento
Mantener un sistema que evoluciona constantemente.
Objetivo
Producto de trabajo
Nuevo código fuente
Cambios en los documentos
8 de abr de 2023 Sergio Sánchez Rios
PLANEACION: ¿QUE SE QUIERE?
Planeación del Proyecto de Software
Análisis de requerimientos
Funciones de Software
Ing. en Sistemas
Revisión
Revisión
Plan de proyecto
Especificación de requerimientos
Prototipo
Resumen
8 de abr de 2023 Sergio Sánchez Rios
ResumenDESARROLLO ¿ CÓMO SE LOGRARÁ ?
Prototipo
Diseño de Sistema
Revisión
Diseño técnico
Codificación
Revisión
Revisión
Especificaciones del diseño preliminar
Especificación de Diseño detallado
Código del programa fuente
8 de abr de 2023 Sergio Sánchez Rios
Resumen MANTENIMIENTO: COMO SE CONTROLARÁ
EL CAMBIOPruebas unitarias
y validaciónPlan, procedimientos
y resultados de pruebas
Manual del usuario
Operación del programa
Liberación y
Distribución
MantenimientoCódigo del
programa fuentemodificado
Revisión
Depuración
RevisiónDocumento modificado
Se puede regresar a etapas previas debido a los errores
8 de abr de 2023 Sergio Sánchez Rios
Programador
Role
s d
e lo
s D
esarro
llad
ore
s
Análisis y Definición de
Requerimientos
Paso e
n e
l D
esarr
ollo d
e S
oft
ware
Analista
Diseñador
Tester
Diseño del sistema
Diseño técnico
Codificación
Prueba Unitaria
Prueba de integración
Prueba del sistema
Liberación del producto
Mantenimiento
Entrenador
Roles de los desarrolladores
8 de abr de 2023 Sergio Sánchez Rios
Modelos del Proceso de Software
“Es una representación abstracta de un proceso de software. Cada modelo de proceso representa un proceso desde una perspectiva particular por lo que sólo provee información parcial acerca de ese proceso”.
8 de abr de 2023 Sergio Sánchez Rios
Modelos del Proceso de Software
Paradigmas:
Modelo clásico. Modelo incremental. Modelo iterativo. Prototipos. Modelo espiral.
8 de abr de 2023 Sergio Sánchez Rios
Modelos del Proceso de SoftwareModelo Clásico
DISEÑO DEL SISTEMA
DISEÑO DE PROGRAMAS
IMPLEMENTACION DE PROGRAMAS
PRUEBA UNITARIA Y DE INTEGRACION
PRUEBA DEL SISTEMA
PRUEBA DE ACEPTACION
OPERACION Y MANTENIMIENTO
ANALISIS DE REQUERIMIENTOS
Modelo Cascada
8 de abr de 2023 Sergio Sánchez Rios
Es el modelo más antiguo y el más usado (1970 por Royce).
Asume secuencialidad y linealidad. En principio el resultado de cada fase es uno o más documentos aprobados (“firmados”). La siguiente fase comienza hasta que las otras hayan finalizado.
Captura preceptos básicos:
Planificar el proyecto antes de embarcarse en él. Definir el comportamiento externo de un sistema antes
que definir su arquitectura. Documentar los resultados de cada actividad. Diseñar antes de codificar. Probar después de la implementación.
Modelos del Proceso de SoftwareModelo Clásico
8 de abr de 2023 Sergio Sánchez Rios
El problema con el modelo cascada es su inflexibilidad al dividir el proyecto en estas etapas.
Requiere establecimiento explícito de los requerimientos desde el comienzo.
Exige al cliente/usuario gran paciencia. Dificulta la incorporación de modificaciones durante el
desarrollo.
Modelos del Proceso de SoftwareModelo Clásico
Este modelo sólo se debe utilizar cuando los requerimientos se comprendan del todo.
8 de abr de 2023 Sergio Sánchez Rios
Modelos del Proceso de SoftwareModelo V
8 de abr de 2023 Sergio Sánchez Rios
Modelos del Proceso de SoftwareModelo V
Fue creado en Alemania 1992.
Es una variación del modelo en cascada.
Su “ángulo” es la codificación.
Los sucesivos testing proceden como contraparte de las actividades de desarrollo.
Se forman “ciclos” desarrollo-verificación-desarrollo...
8 de abr de 2023 Sergio Sánchez Rios
Una manera para reducir el tiempo en el ciclo (desde la especificación de requerimientos al momento de la entrega) es la utilización del desarrollo por fases.
Modelos del Proceso de SoftwareDesarrollo por fases incrementos e iteraciones
Sistemas en Desarrollo
Sistemas en Producción
DES
AR
RO
LLA
DO
RE
SU
SU
AR
IOS
Construir liberación 1
Usar Lib. 1
Construir liberación 2
Usar Lib. 2
Construir liberación 3
Usar Lib. 3
Tiempo
8 de abr de 2023 Sergio Sánchez Rios
Existen varias maneras para que los desarrolladores decidan como organizar el desarrollo en versiones.
Modelos del Proceso de SoftwareDesarrollo por fases incrementos e iteraciones
Modelo incremental.
El sistema, tal como está especificado en los documentos de requerimientos, es particionado en subsistemas de acuerdo con sus funcionalidades.
Las versiones se definen comenzando con un subsistema funcional pequeño y agregando funcionalidad con cada nueva versión.
8 de abr de 2023 Sergio Sánchez Rios
Modelos del Proceso de SoftwareDesarrollo por fases incrementos e iteraciones
Modelo incremental.
Tan pronto como se completan los nuevos incrementos, se integran a los existentes de tal forma que la funcionalidad del sistema mejora con cada incremento.
8 de abr de 2023 Sergio Sánchez Rios
Modelos del Proceso de SoftwareDesarrollo por fases incrementos e iteraciones
Modelo incremental.
No es necesario utilizar el mismo proceso de desarrollo para cada incremento. Es compatible con el método clásico.
El modelo incremental disminuye los riesgos y permite manejar mejor los errores.
Es un modelo útil en proyectos críticos a gran escala.
Permite entregar un subproducto útil más tempranamente.
Permite evaluar la aceptación usuaria del producto.
Problemas: el tamaño de los incrementos y los recursos asignados a los incrementos.
8 de abr de 2023 Sergio Sánchez Rios
Modelos del Proceso de SoftwareDesarrollo por fases incrementos e iteraciones
Modelo iterativo.
Entrega un sistema completo desde el principio, y luego cambia la funcionalidad de cada subsistema con cada nueva versión.
8 de abr de 2023 Sergio Sánchez Rios
Modelos del Proceso de SoftwareDesarrollo por fases incrementos e iteraciones
Modelo iterativo.
El modelo solo trabaja con los requerimientos que se comprenden cabalmente.
Compatible con el modelo clásico.
Permite obtener feedback de los clientes y los usuarios.
8 de abr de 2023 Sergio Sánchez Rios
Modelos del Proceso de SoftwarePrototipos
8 de abr de 2023 Sergio Sánchez Rios
Modelos del Proceso de SoftwarePrototipos
Consiste en desarrollar rápidamente un modelo a escala.
Especialmente útil con herramientas de explicitación de requerimientos para cliente/usuario.
Idealmente los prototipos se desechan.
El cliente percibe resultados más tempranamente y se reducen los riesgos de incerteza en el desarrollo.
Prototipo Producto final diferencias funcionales, desempeño, calidad y en los acuerdos de desarrollo.
8 de abr de 2023 Sergio Sánchez Rios
Modelos del Proceso de SoftwareModelo espiral
Boehm (1988) examinó el proceso de desarrollo del software a la luz de los riesgos involucrados, sugiriendo que un modelo en espiral podría combinar las actividades del desarrollo con la gestión de riesgos, para minimizar y controlar el riesgo.
Más que representar el proceso del software como una sucesión de actividades con retrospectivas de una actividad a otra, se representa como un espiral.
8 de abr de 2023 Sergio Sánchez Rios
Modelos del Proceso de SoftwareModelo espiral
8 de abr de 2023 Sergio Sánchez Rios
Modelos del Proceso de SoftwareModelo espiral
En el modelo en espiral, las primeras iteraciones son las menos costosas. Es un modelo Iterativo: Planificación Análisis de Riesgo Ingeniería Evaluación Planificación …
El modelo es compatible con otros modelos de ciclo de vida.
Ventajas
Mientras los costos suben, los riegos disminuyen.
Proporciona al menos tanto control de gestión como el modelo en cascada, ya que tiene los punto de verificación al final de cada iteración.
Como el modelo esta orientado al riesgo, le proporciona con anterioridad indicaciones de cualquier riesgo insuperable.
8 de abr de 2023 Sergio Sánchez Rios
Modelos del Proceso de SoftwareModelo espiral
Desventajas
La única desventaja del modelo en espiral es que se trata de un modelo complicado. Requiere de una gestión concienzuda, atenta y que exige conocimientos profundos.
En algunos casos, el desarrollo del producto es suficientemente lineal, y los riegos del proyecto son tan pocos que no se necesita la flexibilidad y la gestión de riegos que ofrece este modelo.
8 de abr de 2023 Sergio Sánchez Rios
Modelos del Proceso de SoftwareRUP – Rational Unified Process
8 de abr de 2023 Sergio Sánchez Rios
Modelos del Proceso de SoftwareRUP – Rational Unified Process
Corresponde a un framework que puede ser usado para describir procesos de desarrollo específicos
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
8 de abr de 2023 Sergio Sánchez Rios
Modelos del Proceso de SoftwareMétodos Agiles
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: un antídoto a la burocracia (métodos planificados, pesados, heavyweight).
8 de abr de 2023 Sergio Sánchez Rios
Modelos del Proceso de SoftwareMétodos Agiles
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
8 de abr de 2023 Sergio Sánchez Rios
Modelos del Proceso de SoftwareMétodos Agiles – Principios Agiles
La alianza ágil definió 12 principios para quienes quieren alcanzar la agilidad:
1.- Nuestra mayor prioridad es satisfacer al cliente mediante la entrega temprana y continua de software valioso.
2.- BIENVENIDOS los requisitos cambiantes, incluso en fases tardías del desarrollo.
3.- Entregar con frecuencia software en funcionamiento, desde un par de semanas hasta un par de meses, con preferencia en las escalas de tiempo más cortas.
4.- La gente de negocio y los desarrolladores deben trabajar juntos a diario a lo largo del proyecto.
8 de abr de 2023 Sergio Sánchez Rios
Modelos del Proceso de SoftwareMétodos Agiles – Principios Agiles
5.- Construir proyectos alrededor de individuos motivados. Darles el ambiente y el soporte que necesitan, y confiar en ellos para obtener el trabajo realizado.
6.- El método más eficiente y efectivo de transmitir información hacia y dentro de un equipo de desarrollo es la conversación cara a cara.
7.- El software en funcionamiento es la medida primaría de progreso.
8.- Los procesos ágiles promueven el desarrollo sustentable. Los patrocinadores, desarrolladores y usuarios deben ser capaces de mantener un paso constante de manera indefinida.
9.- La atención continua a la excelencia técnica y al buen diseño mejora la agilidad.
8 de abr de 2023 Sergio Sánchez Rios
Modelos del Proceso de SoftwareMétodos Agiles – Principios Agiles
10.- La simplicidad – el arte de maximizar la cantidad de trabajo no realizado – es esencial.
11.- Las mejores arquitecturas, los mejores requisitos, y los mejores diseños emergen de equipos autoorganizados.
12.- A intervalos regulares el equipo refleja la forma en que se puede volver más efectivo; entonces su comportamiento se ajusta y adecua en concordancia.
8 de abr de 2023 Sergio Sánchez Rios
Modelos del Proceso de SoftwareMétodos Agiles – Principales Modelos
Algunos de los modelos ágiles más connotados son:
Programación Extrema (PE) – Extreme Programming (XP)
Desarrollo Adaptativo de Software (DAS)
Método de desarrollo de sistemas dinámicos (MDSD)
Scrum
Crystal Family
Desarrollo conducido por características (DCC)
8 de abr de 2023 Sergio Sánchez Rios
Modelos del Proceso de SoftwareMétodos Agiles – Extreme Programming (XP)
Planeación
Planeación DiseñoDiseño
PruebaPrueba Codificación
Codificación
-Historias del Usuario
Valores
Criterios de las pruebas de iteración
-plan de iteración
-Diseño simple cartas CRC
-Soluciones prototipos
-Programación en Parejas
-Integración Continua
-Refactoring
-Prueba de Unidad
-Pruebas de Aceptación
Modelos del Proceso de SoftwareMétodos Agiles – Extreme Programming (XP)
Modelos del Proceso de SoftwareMétodos Agiles – Scrum
8 de abr de 2023 Sergio Sánchez Rios
Modelos del Proceso de SoftwareSeleccionar un Modelo
8 de abr de 2023 Sergio Sánchez Rios
Bibliografía
Guía del Tópico:
Software Engineering 6a. ed.– Ian Sommerville – Pearson Education – 2000. (Cap. 3)Ingeniería de Software Teoría y Práctica – Shari Lawrence Pfleeger – Pearson Education – 2002.(Cap. 2)
Solo referencial:
Desarrollo y gestión de proyectos de software – Steven McConnell - Mc Graw Hill – 1996. (Cap. 7)