Unidad 3
Ingeniería de Software:
Concepto de Software:
Muchas personas asocian el término software con los programas de computadora. Sin embargo, una definición más amplia donde el software
no son sólo programas, sino todos los documentos asociados y la configuración de datos que se necesitan para hacer que estos programas
operen de manera correcta.
Sistemas de Software:
Diversos programas independientes, archivos de configuración que se utilizan para ejecutar estos programas, un sistema de documentación
que describe la estructura del sistema, la documentación para el usuario que explica cómo utilizar el sistema y sitios web que permitan a los
usuarios descargar la información de productos recientes.
Productos de Software:
Son software que se venden a un cliente, producidos normalmente por un ingeniero de software.
Tipos de productos:
Genéricos: Son sistemas aislados producidos por una organización de desarrollo y que se venden al mercado abierto a cualquier cliente que
le sea posible comprarlos.
Personalizados: Son sistemas requeridos por un cliente en particular (Hechos a medida). Un contratista de software desarrolla el software
especialmente para ese cliente.
Diferencias
Mientras que en los genéricos la especificación (requerimientos) es controlada por la organización desarrolladora de software, en los
personalizados es controlada y desarrollada por la organización que compra el software(cliente).
Ingeniería del Software:
Es una disciplina de la ingeniería que se enfoca en hacer que las cosas funcionen. Los ingenieros aplican teorías, métodos y herramientas de
forma selectiva para resolver problemas, incluso cuando no existen soluciones teóricas claras. Consideran restricciones financieras y
organizacionales al buscar soluciones.
Esta disciplina abarca todos los aspectos de la producción de software, no solo el desarrollo técnico, sino también la gestión de proyectos de
software y la creación de herramientas, métodos y teorías que apoyen la producción de software.
Proceso de desarrollo de Software:
Es un conjunto de actividades y resultados asociados que producen un producto de software. Estas actividades son llevadas a cabo por los
ingenieros de software.
Estas actividades son:
1. Especificación de! software: donde los clientes e ingenieros definen el software a producir y las restricciones sobre su operación.
2. Desarrollo del software: donde el software se diseña y programa.
3. Validación del software: donde el software se valida para asegurar que es lo que el cliente requiere.
4. Evolución del software: donde el software se modifica para adaptarlo a los cambios requeridos por el cliente y el mercado.
Metodología de Desarrollo del Software: Hace referencia al camino o al conjunto de procedimientos que implica la elección de una forma o
método de desarrollo de software aplicable. Pueden ser:
Metodología ágil: solo ser cortas y rápidas, trabajan juntos los clientes con los desarrolladores, los grupos son pequeños y trabajan en una
sola zona/área. Los ejemplos más comunes son: XP, Scrum, DevOps, etc.
Metodología tradicional: no trabajan con los clientes, son más resistentes a los cambios, son grandes grupos que trabajan en áreas
distribuidoras. Los ejemplos más comunes son: cascada, espiral, incremental.
Los Métodos de Ingeniería del Software se refieren a formas de diseñar sistemas de software utilizando componentes básicos. En el
pasado, se usaban muchos métodos que se centraban en funciones específicas de un sistema. En los años 80 y 90, surgieron nuevos
enfoques que se basaban en objetos, propuestos por personas como Booch y Rumbaugh.
Con el tiempo, estos diferentes enfoques se han combinado en un solo método que utiliza el Lenguaje de Modelado Unificado (UML) como
base. No hay un método perfecto, ya que diferentes métodos son mejores para diferentes tipos de sistemas. Por ejemplo, los métodos
basados en objetos son buenos para sistemas interactivos, pero no para sistemas que necesitan respuestas rápidas en tiempo real.
Todos estos métodos comparten la idea de usar modelos gráficos para diseñar un sistema y luego usar esos modelos para especificar cómo
debe ser el sistema. Cada método puede tener diferentes partes o componentes que se utilizan para diseñar el software.
El SDLC es un enfoque por fases que permite que los sistemas sean desarrollados de mejor manera mediante el uso específico de
actividades entre el analista y el usuario, es muy completo pero a la vez muy ineficaz, debido a que con cualquier error que se cometa en
alguna de las fases, perjudica a todas las anteriores, por eso además es muy importante definir perfectamente bien los requerimientos al
inicio del ciclo. Fases:
1. Identificación de problemas, oportunidades y objetivos: En esta fase, se identifican las necesidades y desafíos del negocio que el
sistema debe abordar. Se determinan los objetivos y se justifica la inversión en el desarrollo del sistema.
2. Determinación de los requerimientos de información: Aquí se recopilan y documentan los requerimientos específicos del sistema,
incluyendo las funciones, datos y restricciones que debe cumplir. Esto implica la interacción cercana con los usuarios y las partes
interesadas.
3. Análisis de las necesidades del sistema: En esta etapa, se realiza un análisis detallado de los requerimientos y se definen los procesos
y la lógica de negocio que el sistema deberá contener. Se crea una especificación funcional detallada.
4. Diseño del sistema recomendado: En esta fase, se crea un diseño detallado del sistema, incluyendo la arquitectura, la interfaz de
usuario y la base de datos. Se definen las especificaciones técnicas y se planifica la estructura del software.
5. Desarrollo y documentación del software: Aquí se codifica y desarrolla el software según el diseño previamente establecido. También se
crea la documentación técnica y el código fuente es revisado y probado.
6. Pruebas y mantenimiento del sistema: Se realizan pruebas exhaustivas para detectar y corregir errores y garantizar que el sistema
cumple con los requerimientos. Posteriormente, se inicia la fase de mantenimiento, que aborda actualizaciones, correcciones de errores y
mejoras continuas.
7. Implementación y evaluación del sistema: Finalmente, el sistema es implementado en el entorno de producción y se evalúa su
rendimiento y eficacia. Se realiza una revisión para garantizar que el sistema esté cumpliendo con los objetivos iniciales.
Un Modelo es una simplificación de la realidad.Un Modelo de Procesos del Software es una descripción simplificada de un proceso del
software que presenta una visión de ese proceso. Nos permite entender o comprender mejor el sistema que se desarrolla
Estos modelos pueden incluir actividades que son parte de los procesos y productos de software y el papel de las personas involucradas en
la ingeniería del software.
Principios del modelado:
1. Elección: Tiene una gran influencia sobre cómo se acomete o aborda un problema y como se da forma a una solución (Hay que
realizar una correcta elección).
2. Nivel de detalle: Los modelos se pueden expresar en diferentes niveles.
3. Ligadura a la realidad: Los mejores modelos están ligados a la realidad.
4. MultiModelado: Un único modelo es insuficiente. Un sistema no trivial se aborda mejor a través de un pequeño conjunto de
modelos casi independientes.
Explique el modelo de procesos de negocios. Explique modelo de desarrollo incremental o evolutivo con sus 2 tipos.
Modelo de procesos de negocios:
Descripción simplificada de un proceso del SW que presenta una visión de ese proceso. Estos modelos pueden incluir
actividades que son parte de los procesos y productos de software y el papel de las personas involucradas en la ingeniería del
software.
Modelo de Desarrollo Incremental:
El Modelo de Desarrollo Incremental implica resolver problemas en una serie de pasos progresivos hacia una solución,
retrocediendo cuando se detectan errores. En el desarrollo de software incremental, se entregan versiones parciales del
sistema, incorporando funciones importantes o urgentes en cada iteración. Esto permite al cliente evaluar el progreso y
garantiza una entrega temprana de funcionalidades útiles. Los beneficios incluyen la reducción de costos de adaptación a
cambios, una retroalimentación más fácil del cliente y una entrega más rápida de software útil.
Tipos:
Creacion por prototipos: Entrelaza las actividades de especificación, desarrollo y validación. Desarrolla A partir de
especificaciones abstractas. Se refina basándose en peticiones del cliente. El sistema se puede entregar o reimplementar
utilizando un enfoque más estructurado. En las iteraciones se realiza un borrador, se valida y se agrega calidad al software
Se utiliza una versión inicial del sistema para demostrar conceptos, explorar opciones de diseño y validar requisitos. Facilita la
anticipación de cambios y la validación de requisitos y diseño de interfaces.
Desarrollo Incremental: Proporciona al cliente versiones parciales del sistema en etapas. Los clientes identifican los servicios
más importantes, se establece un plan de entrega por fases, y se inicia con los servicios de alta prioridad. Cada fase se enfoca
en detallar los requerimientos para los servicios a ser entregados y se desarrollan gradualmente. Los clientes pueden usar
cada entrega parcial, lo que les ayuda a refinar sus necesidades para futuras fases. Con cada nuevo incremento, se integran
con los anteriores, mejorando progresivamente la funcionalidad del sistema.
Explique el Modelo en Cascada y nombre que ciclo de vida representa? Justifique
Modelo en Cascada: Sugiere un enfoque sistemático, secuencial del desarrollo del software que comienza en un nivel de sistemas y
progresa con el análisis, diseño, codificación, pruebas y mantenimiento donde cada fase debe completarse antes de pasar a la siguiente.
Debe usarse cuando los requerimientos se entiendan bien y sea improbable el Cambio radical durante el desarrollo del sistema. Fases:
Definición de requerimientos: Se recopilan y documentan los requisitos del software, definiendo qué debe hacer y cómo debe comportarse
para satisfacer las necesidades del cliente.
Diseño del sistema y del software: Se elabora un diseño detallado del sistema y el software basado en los requisitos definidos
anteriormente. Se crean diagramas de arquitectura, diseño de base de datos, interfaces de usuario, etc.
Implementación y prueba de unidades: Se lleva a cabo la codificación del software según el diseño elaborado. Cada unidad o módulo se
prueba para garantizar su funcionamiento según lo esperado.
Integración y prueba del sistema: Se ensamblan todas las unidades o módulos individuales en un sistema completo. Se realizan pruebas
de integración para verificar que todos los componentes funcionen correctamente juntos como un todo.
Funcionamiento y mantenimiento: El software desarrollado, probado y desplegado se somete a funcionamiento y mantenimiento. Se
proporciona soporte continuo, se realizan actualizaciones, correcciones de errores y se implementan nuevas características según sea
necesario.
Este modelo representa el Ciclo de Vida Clásico o Básico porque sigue una secuencia lineal y predecible de fases, donde cada una debe
completarse antes de avanzar a la siguiente. Se basa en la idea de que los requisitos se comprenden y documentan completamente al
principio del proyecto. Es considerado clásico o básico porque fue de los primeros métodos utilizados para el desarrollo de software, antes de
la llegada de enfoques más ágiles.
Explique porque el Modelo en espiral es considerado un Macromodelo. Justifique, Grafique esquematice su idea.
El Modelo en Espiral es considerado un "Macromodelo" (Modelo de Modelos) debido a su capacidad para incorporar y adaptarse a
diferentes enfoques de desarrollo de software, lo que lo hace más flexible y adaptable a una variedad de proyectos y situaciones.
El término "Macromodelo" sugiere que el Modelo en Espiral puede incorporar varios modelos de desarrollo de software dentro de su
estructura. Mientras que otros modelos, como el Modelo en Cascada, son más rígidos en su enfoque, el Modelo en Espiral permite una
mayor personalización y adaptación a las necesidades específicas del proyecto.
El Modelo en Espiral se representa comúnmente como una espiral con múltiples vueltas, donde cada vuelta representa una iteración a
través de las fases de desarrollo. A medida que la espiral se expande, el proyecto avanza a través de diferentes actividades:
Establecimiento de Objetivo: determinación de objetivos, alternativas y restricciones.
Valoración y Reducción del riesgo: análisis de alternativas e identificación/resolución de riesgos.
Desarrollo y Validación: se elige un modelo de desarrollo para el sistema.desarrollo del producto del "siguiente nivel".
Evaluación del cliente: El proyecto se revisa y se toma una decisión sobre si hay que continuar con otro ciclo de la espiral. Si se opta por
continuar, se trazan los planes para la siguiente fase del proyecto.
Esto permite a los equipos de desarrollo abordar los riesgos, identificar y resolver problemas temprano en el proceso, y ajustar el enfoque
según sea necesario a lo largo del tiempo. Además, da como resultados productos finales de mayor calidad y mejor adaptados a las
necesidades del cliente.
Interrelación del modelo en espiral:
• Con SDLC (Ciclo de Vida del Desarrollo de Software): El Modelo en Espiral se aplica dentro del SDLC como un enfoque que guía las
etapas de desarrollo de software, desde la definición de objetivos y el análisis de riesgos hasta la evaluación del cliente.
• Con el Modelos en Cascada: A diferencia del enfoque en cascada, el Modelo en Espiral permite iteraciones y revisión continua, lo que lo
distingue de un modelo lineal y secuencial.
• Con el Modelos Incrementales: Similar al enfoque incremental, el Modelo en Espiral también permite la construcción de sistemas en
etapas, pero aporta una mayor consideración del análisis de riesgo a lo largo de esas etapas.