Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Ingeniería del Software. La Ingenieria del Software es una disciplina o área de la informática que ofrece métodos
y técnicas para desarrollar y mantener software de calidad que resuelven problemas de todo tipo.
La Ingeniería del Software trata con áreas muy diversas de la Informática y de las ciencias de la computación tales
como construcción de compiladores, sistemas operativos o desarrollos de Intranet/Internet, abordando todas las
fases del ciclo de vida del desarrollo de cualquier tipo de sistemas de información y aplicables a una infinidad de
áreas tales como: negocios, investigación científica, medicina, producción, logística, banca, control de tráfico,
meteorología, el mundo del derecho, la red de redes Internet, redes Intranet y Extranet, etc.
El término Ingeniería se define en el Diccionario de la Real Academia Española de la Lengua (DRAE) como:
Conjunto dé conocimientos y técnicas que permiten aplicar el saber científico a la utilización de la materia y de las
fuerzas de energía
Definición 1: Ingeniería de Software es el estudio de los principios y metodologías para desarrollo y mantenimiento
de sistemas de software
Definición 2: Ingenieria de Software es la aplicación práctica del conocimiento científico en el diseño y construcción
de programas de computadora y la documentación asociada requerida para (funcionar) y mantenerlos. Se conoce
también como desarrollo de software o producción de software.
Definición 3: Ingeniería de Software trata del establecimiento de los principios y métodos de la Ingenieria a fin de
obtener software de modo rentable que sea fiable y trabaje en máquinas reales.
EL PRODUCTO
Desde el punto de vista de un ingeniero de software, el producto obtenido son los datos que configuran el software
de computadora. Pero desde el punto de vista de los usuarios el producto obtenido es la información resultante
que de algún modo mejora el mundo de los usuarios.
EL PROCESO
El proceso es un diálogo en el que se reúne el conocimiento y se incluye en el software. Proporciona una interacción
entre los usuarios y los diseñadores, entre los usuarios y las herramientas de desarrollo, y entre los diseñadores y
las herramientas de desarrollo (tecnología). Es un proceso interactivo donde la herramienta de desarrollo se usa
como medio de comunicación, con cada iteración del diálogo se obtiene mayor conocimiento de las personas
involucradas.
Modelo en Cascada, también llamado Lineal secuencial, es el enfoque metodológico que ordena rigurosamente
las etapas del proceso para el desarrollo de software,
Análisis de requisitos
En esta fase se analizan las necesidades de los usuarios finales del software para determinar qué objetivos debe
cubrir.
Se descompone y organiza el sistema en elementos que puedan elaborarse por separado, aprovechando ventajas
del desarrollo en equipo. Como resultado surge el SDD (Documento de Diseño del Software) que contiene la
descripción de la estructura relacional global del sistema y la especificación de lo que debe hacer cada una de sus
partes, así como la manera en que se combinan unas con otras. Es conveniente distinguir entre diseño de alto nivel
o arquitectónico y diseño detallado. El primero de ellos tiene como objetivo definir la estructura de la solución (una
vez que la fase de análisis ha descrito el problema) identificando grandes módulos (conjuntos de funciones que
van a estar asociadas) y sus relaciones. Con ello se define la arquitectura de la solución elegida. El segundo define
los algoritmos empleados y la organización del código para comenzar la implementación
Es la fase donde se realizan los algoritmos necesarios para el cumplimiento de los requerimientos del usuario, así
como también los análisis necesarios para saber que herramientas usar en la etapa de codificación.
Codificación
Es la fase en donde se implementa el código fuente, haciendo uso de prototipos, así como de pruebas y ensayos
para corregir errores. Dependiendo del lenguaje de programación
Pruebas
Pruebas de unidad
Pruebas de integración
Pruebas de sistema
Pruebas de aceptación
Verificación
Es la fase en donde el usuario final ejecuta el sistema, para ello el o los programadores ya realizaron exhaustivas
pruebas para comprobar que el sistema no falle.
Mantenimiento
Es el mantenimiento del Software ya que al utilizarlo como usuario final puede ser que no cumpla con todas
nuestras expectativas.
Tipos de Mantenimiento
En la vida real, un proyecto rara vez sigue una secuencia lineal, esto crea una mala implementación del
modelo, lo cual hace que lo lleve al fracaso.
El proceso de creación del software tarda mucho tiempo ya que debe pasar por el proceso de prueba y
hasta que el software no esté completo no se opera. Esto es la base para que funcione bien.
MODELO ESPIRAL
Modelo Espiral, propuesto originalmente por Boehm, es un modelo de proceso de software evolutivo que conjuga
la naturaleza iterativa de construcción de prototipos con los aspectos controlados y sistemáticos del modelo lineal
secuencial.
En el modelo espiral, el software se desarrolla en una serie de versiones incrementales. Durante las primeras
iteraciones, la versión incremental podría ser un modelo en papel o un prototipo.
Comunicación el cliente
Planificación
Las tareas requeridas para definir recursos, el tiempo y otra información relacionadas con el proyecto
Análisis de riesgos
Ingenieria
Construcción y acción
Las tareas requeridas para construir, probar, instalar y proporcionar soporte al usuario
Las tareas requeridas para obtener la reacción del cliente según la evaluación de las representaciones del software
creadas durante la etapa de ingeniería e implementada durante la etapa de instalación.
Puede resultar difícil convencer a grandes clientes (particularmente en situaciones bajo contrato) de que
el enfoque evolutivo es controlable.
Requiere una considerable habilidad para la evaluación del riesgo.
Modelo DRA (Desarrollo Rápido de Aplicaciones), Modelo de proceso del desarrollo de software lineal secuencial
que enfatiza un ciclo de desarrollo extremadamente corto.
Modelo de gestión
E flujo de información entre las funciones de gestión se modela de forma que responda a las siguientes preguntas:
¿Qué información conduce el proceso de gestión? ¿Qué información genera? ¿A dónde va la información? ¿Quién
la procesó?
Modelado de datos
El flujo de información definido como parte de la fase de modelado de gestión se refina como un conjunto de
objetos de datos necesarios para apoyar la empresa.
Modelado de proceso
Los objetivos de datos definidos en la tase de modelado de datos quedan transformados para lograr el flujo de
información necesario para implementar una función de gestión.
Generación de aplicaciones
Pruebas y entrega
Como el proceso DRA enfatiza la reutilización, ya se han comprobado muchos de los componentes de los
programas. Esto reduce tiempo de pruebas.
Es muy rápido
Permite trabajar en el a varias personas a la vez.
Desventajas del Modelo DRA
Requiere clientes y desarrolladores comprometidos en las rápidas actividades necesarias para completar
un sistema en un marco de tiempo abreviado. Si no hay compromiso, por ninguna de las partes
constituyentes, los proyectos DRA fracasaran.
Proceso Unificado de Desarrollo (RUP): Es un proceso que puede especializarse para una gran variedad de
sistemas de software, en diferentes áreas de aplicación, diferentes tipos de organizaciones, diferentes niveles de
aptitud y diferentes tamaños de proyecto.
Un poco de historia
Los orígenes de RUP se remontan al modelo espiral original de Barry Boehm. Ken Hartman, uno de los
contribuidores claves de RUP colaboró con Boehm en la investigación. En 1995 Rational Software compro una
compañía sueca llamada Objectory AB, fundada por Ivar Jacobson, famoso por haber incorporado los casos de uso
a los métodos de desarrollo orientados a objetos.
Principales Elementos
Actividades ("cómo): Tarea que tiene un propósito claro, es realizada por un trabajador y manipula elementos.
Artefactos ("qué"): Productos tangibles del proyecto que son producidos, modificados y usados por las actividades
Flujo de actividades ("cuándo"): Secuencia de actividades realizadas por trabajadores y que produce un resultado
de valor observable
Dirigido por casos de uso: Los casos de uso reflejan lo que los usuarios futuros necesitan y desean.
Centrado en la arquitectura: La arquitectura muestra la visión común del sistema completo por lo que describe
los elementos del modelo que son más importantes para su construcción.
Iterativo e Incremental: Una iteración involucra actividades de todos los flujos de trabajo, aunque desarrolla
fundamentalmente algunos más que otros.
En RUP se han agrupado las actividades en grupos lógicos definiéndose 9 flujos de trabajo principales, los 6
primeros son conocidos como flujos de ingeniería y los tres últimos como flujos de apoyo.
Modelo del Negocio: Describe los procesos de negocio, identificando quiénes participan y las
actividades que requieren automatización
Requerimiento: Define qué es lo que el sistema debe hacer, para lo cual se identifican las funcionalidades
requeridas y las restricciones que se imponen.
Análisis y Diseño: Describe cómo el sistema será realizado a partir de la funcionalidad prevista y las
restricciones impuestas (requerimientos), por lo que indica con precisión lo que se debe programar
Implementación: Define cómo se organizan las clases y objetos en componentes, cuáles nodos se
utilizarán y la ubicación en ellos de los componentes y la estructura de capas de la aplicación.
Prueba (Testeo): Busca los defectos a lo largo del ciclo de vida.
Instalación o despliegue: Produce release del producto y realiza actividades (empaque, instalación,
asistencia a usuarios, etc.) para entregar el software a los usuarios finales.
Administración del proyecto: Involucra actividades con las que se busca producir un producto que
satisfaga las necesidades de los clientes
Administración de configuración y cambios: Describe cómo controlar los elementos producidos por
todos los integrantes del equipo de proyecto en cuanto a: utilización/actualización concurrente de
elementos, control de versiones, etc.
Ambiente: Contiene actividades que describen los procesos y herramientas de trabajo del proyecto; así
como el procedimiento para implementar el proceso en una organización.
Fases
La fase de concepción o inicio tiene por finalidad definir la visión, los objetivos y el alcance del proyecto tanto
desde el punto de vista funcional como del técnico. Es la única fase que no necesariamente culmina con una versión
ejecutable.
La fase de elaboración tiene como principal finalidad completar el análisis de los casos de uso y definir la
arquitectura del sistema.
La fase de construcción está compuesta por un ciclo de varias iteraciones en las cuales se van incorporando
sucesivamente los casos de uso, de acuerdo a los factores de riesgo del proyecto
La fase de transición se inicia con una versión "beta" del sistema y culmina con el sistema en fase de producción.
Algunos aspectos que diferencian a RUP de las demás metodologías y lo que lo hace único son que en RUP los
casos de uso no son sólo una herramienta para especificar los requisitos del sistema, sino que también guían su
diseño, implementación y prueba. También este propone que cada fase se desarrolle en iteraciones.
SCRUM
Scrum es una metodología ágil fantástica para desarrolladores. Consiste en un modelo de asignación de tareas
diarias basado en reuniones rápidas y control de la evolución de los procesos. Es muy bueno para llevar un
seguimiento de las tareas que se están llevando a cabo y saber en qué puntos se ha atascado el equipo.
XP o Xtream Programming
Programación Extrema es un método ágil que se suele utilizar en equipos con muy pocos programadores que
tienen muy pocos procesos abiertos al mismo tiempo. Consiste principalmente en diseñar, implementar, programar
e implantar lo más rápido posible en equipos de programadores muy pequeños, principalmente parejas, saltándose
la documentación y los procedimientos tradicionales. Se fundamente en la capacidad del equipo para comunicarse
entre sí y las ganas de aprender de los errores propios inherentes en un programador. Las grandes ventajas que
tiene este sistema es la increíble capacidad de respuesta del equipo ante imprevistos, aunque es una metodología
para la que es difícil documentar
XP es un método estupendo para equipos extremadamente pequeños que se centran en un solo cliente.
Desarrollo Lean
Lean Software Development, también conocido como Lean Programming es un conjunto de técnicas que
engloban una metodología de desarrollo ágil de software orientado a con exactamente lo que necesita el cliente.
Es una evolución del Método Toyota de Producción aplicado al desarrollo y que está muy de moda entre los
equipos de desarrollo en startups.
Principalmente consiste en ciclos de evolución de software incrementales en los que se posponen las decisiones lo
más posible hasta haber obtenido un feedback del cliente y así reaccionar lo más rápido y eficazmente posible a
sus necesidades. Se fundamenta en tener un equipo potente y comprometido y el principio de aprendizaje
continuo sobre el producto.
El Desarrollo Lean una metodología fantástica para startups que están desarrollando un software orientado a
tener éxito en el mercado, como desarrolladores de videojuegos o apps para móviles