Está en la página 1de 12

Tema-1.

pdf

carmenxu_fdz

Fundamentos de Ingeniería del Software

2º Grado en Ingeniería Informática

Escuela Técnica Superior de Ingenierías Informática y de


Telecomunicación
Universidad de Granada

Reservados todos los derechos.


No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Introducción a la Ingeniería del Software
1. EL PRODUCTO SOFTWARE, PROPIEDADES Y CICLO DE VIDA

1.1 DEFINICIÓN Y TIPOS DE SOTWARE

1.1.1 DEFINICIÓN DE SOFTWARE


El software es un programa o conjunto de programas de cómputo que incluye datos,
procedimientos y pautas que permiten realizar distintas tareas en un sistema informático.
Software = programa de computadora
El software es un transformador de información: adquiere, gestiona, modifica, produce o
transmite información. No hay que olvidar que:
Informática = información + automática

1.1.2 TIPOS DE SOFTWARE

POR SU CAMPO DE APLICACIÓN

• Software de sistemas. Conjunto de programas que dan soporte a otros


programas. Algunos softwares de sistemas procesan estructuras de información
complejas pero deterministas mientras que otros procesan datos indeterminados.
• Software de aplicaciones. Programa aislado que resuelve una necesidad
específica de un negocio. Este tipo de software procesa datos comerciales y
técnicas que permiten desarrollar las operaciones del negocio, la toma de
decisiones y el control del negocio en tiempo real.
• Software de programación. Destinado a desarrolladores de manera que se les
facilite el desarrollo de software.

POR EL TIPO DE LICENCIA

Según su destinatario
• Usuario final. Desarrollado para un usuario concreto con las características que
este solicitó en un principio (software hecho a medida).
• Para distribución. Desarrollado para un público masivo, el cual dispone de una
serie de características que la mayoría de los usuarios podría necesitar (software
genérico).
Según derechos de autor
• Software de código cerrado. Existe una forma libre de acceder al código fuente
el cual solo está disponible para el desarrollador, de forma que no está permitida
su modificación, adaptación e incluso lectura para terceros.
• Software de código abierto. Su código fuente y otros derechos han sido
publicados bajo una licencia de código abierto o forman parte del dominio
público, de forma que los usuarios pueden utilizar, modificar y/o redistribuir el
software, ya sea en su forma original o modificada.
• Software de dominio público. No tiene propietario, por lo que no tiene derechos
de autor, licencias ni restricciones de distribución. Se diferencia del software de
código abierto en que este último si conserva los derechos de autor.

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9908468

Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
1.2 CARACTERÍSTICAS DEL SOFTWARE

Dado que el software es un producto lógico, dispone de una serie de características que lo difieren del
hardware. El software desarrolla con intelecto, no se fabrica; se deteriora, no se desgasta. Si se quiere
reducir el deterioro del software, hay que mejorar su diseño. El software crea modelos de la realidad.
Aunque la industria se mueve hacia la construcción basada en componentes, la mayor parte del software
se desarrolla para un uso individualizado. El software está formado por múltiples piezas que deben
encajar perfectamente.

Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
1.3 PROCESO DE PRODUCCIÓN

Definición: ¿Qué vamos Construcción: ¿Cómo lo Evolución: ¿Qué va a


a desarrollar? vamos a desarrollar? cambiar en el software?

• Ingeniería de • Diseño del software • Corrección


sistemas • Generación del • Adaptación
• Ingeniería de código • Mejora
requisitos • Prueba del software • Prevención
• Planificación de
proyectos

La estructura del proceso establece el fundamento del proceso general de la Ingeniería de software
mediante la identificación de un número pequeño de actividades estructurales que se aplican en cualquier
proyecto de IS, independientemente de su tamaño o complejidad.
La estructura del proceso también contempla una serie de actividades sombrilla que se dan durante el
proceso. Un proceso general de IS contiene las siguientes actividades:
• Comunicación. Se busca entender los objetivos de los participantes respecto del proyecto, y
reunir los requerimientos que ayuden a definir las características y funciones del software.
• Planeación. Se define un plan de proyecto que describe los riesgos probables, las actividades y
tareas a realizar, los productos y recursos que se pueden utilizar y una programación de las
actividades
• Modelado. Representación de un sistema con el fin de entender mejor los requerimientos y
características del sistema.
• Construcción. Combina la generación de código con las pruebas a realizar para detectar errores
en el software.
• Despliegue. El software se entrega al cliente para que este proporcione retroalimentación.

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9908468

Todos los planes de suscripción incluyen descargas sin publicidad con coins
Fundamentos de Ingeniería de...
Banco de apuntes de la
2. CONCEPTO DE INGENIERÍA DEL SOFTWARE

2.1 HISTORIA Y NECESIDAD DE LA IS

La Ingeniería de software surge de una serie de necesidades que tenían los desarrolladores a lo largo
de los años 80, algunas de ellas eran:
• Calidad. Muchos de los productos software no funcionaban correctamente.
• Mantenimiento del software existente.

Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
• Aumento de la demanda de software nuevo.
• Adaptación a las nuevas tecnologías.
• Incremento de la complejidad.

2.2 DEFINICIÓN DE IS

En resumen, la Ingeniería de software es el estudio de principios, metodologías y herramientas que


forman parte de un proceso para facilitar el desarrollo y mantenimiento de sistemas software de calidad.
La ingeniería de software es una tecnología con varias capas. Cualquier enfoque de ingeniería debe
basarse en un compromiso organizacional con la calidad.

2.3 TERMINOLOGÍA USADA EN IS

Sistema. Conjunto de elementos relacionados entre sí y con el medio, que forman una unidad o un todo
organizativo.
Sistema basado en computadora. Conjunto o disposición de elementos organizados para cumplir una
meta predefinida al procesar información.
Sistema software. Conjunto de piezas o elementos software relacionados entre sí y organizados en
subsistemas.
Modelo. Representación de un sistema en un determinado lenguaje. De un mismo sistema se pueden
construir muchos modelos.
Principio. Elementos adquiridos mediante el conocimiento, que definen las características que debe
poseer un modelo para ser una representación adecuada de un sistema. Es decir, en base a la experiencia
anterior, se pueden definir principios acerca de qué característica son buenas y cuales no a la hora de
construir un sistema software, y como conseguir esas características.
Herramienta. Instrumentos que permiten la representación de modelos. Normalmente serán lenguajes
(gráficos o no) que permiten representar modelos, y también programas que nos ayudan a trabajar con
esos lenguajes.
Técnicas. Modo de utilización de las herramientas.
Método. Proporcionan la experiencia técnica para elaborar el producto software, se basan en principios
fundamentales e incluyen actividades de modelado. Son similares a las técnicas, pero está más
relacionados con los principios y establecen que actividades deben llevarse a cabo para cumplir los
objetivos.
Proceso. Estructura que debe establecerse para la obtención eficaz de un producto de ingeniería
software (la obtención del software va a ser consecuencia de un proceso de desarrollo).
Heurísticas. Conjunto de reglas empíricas, que al ser aplicadas producen modelos que se adecuan a los
principios. Los humanos normalmente utilizamos heurísticas. No están basados en los principios y no
siempre tienen que dar buenos resultados, pero la experiencia nos dice que muchas veces si lo hacen
(nos dan buenas pistas).

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9908468

Todos los planes de suscripción incluyen descargas sin publicidad con coins
3. EL PROCESO DE DESARROLLO DE SOFTWARE

3.1 CONCEPTO DE PROCESO DE DESARROLLO

Proceso de desarrollo software. Conjunto de actividades, acciones y tareas que se realizan cuando va
a crearse un producto o sistema software.
Actividad. Busca el logro de objetivos amplios e independientes del tipo de aplicación a desarrollar y de
su complejidad.

Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Acción. Tiene objetivos más concretos, y es un conjunto de tareas que producen un producto importante
como resultado.
Tarea. Objetivo pequeño y bien definido que produce un resultado tangible.

ACTIVIDADES ESTRUCTURALES

Se trata de las actividades dedicadas a obtener el producto, y son las siguientes:


• Comunicación: colaboración con el cliente para entender objetivos y requisitos del
proyecto.
• Planificación: definir el plan del proyecto en el que se describen los riesgos probables, los
recursos que se requieren, los productos que se obtienen y se programan las actividades,
acciones y tareas.
• Modelado: representación mediante modelos del sistema propuesto junto con la solución
o soluciones apropiadas.
• Construcción: generación de código y su prueba.
• Despliegue: entrega al consumidor y evaluación por parte de éste, la cual sirve de
retroalimentación para el equipo de desarrollo.

ACTIVIDADES SOMBRILLA

Son actividades aplicadas a lo largo de todo el proceso y se dedican a:


• Seguimiento y control del proyecto • Mediciones de parámetros del proceso
• Administración del riesgo • Administración de la configuración
• Aseguramiento de la calidad • Administración de la reutilización.
• Revisiones técnicas • Preparación y producción del producto
de trabajo.

3.2 MODELO GENERAL DE PROCESO

3.2.1 ESTRUCTURA DEL PROCESO

Cada una de las actividades, acciones y


tareas se encuadran dentro de una
estructura que define su relación con el
proceso y entre ellas.
A la derecha se muestra un esquema general
de la estructura de proceso. Cada actividad
estructural está formada por un conjunto de
acciones de ingeniería de software, y cada
una de éstas se encuentra definida por un
conjunto de tareas.
Además, a lo largo de todo el proceso se
aplica un conjunto de actividades sombrilla

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9908468

Todos los planes de suscripción incluyen descargas sin publicidad con coins
3.2.2 FLUJO DEL PROCESO
Describe la manera en la que se organizan las actividades estructurales, acciones y tareas dentro
de cada proceso con respecto a la secuencia y el tiempo.

ACCIONES Y TAREAS DE LAS ACTIVIDADES ESTRUCTURALES

1. Obtención de requisitos: Indagación para obtener información respecto a qué es lo que se


desea que realice el software.
2. Estimación y planificación del Proyecto: Estimar el tiempo y los costes de desarrollo del
software.
3. Análisis de requisitos: Análisis del problema a resolver. Documento en el que se dice qué
debe hacer el sistema software.
4. Diseño: Búsqueda de la solución. Descripción de los componentes, sus relaciones y
funciones que dan solución al problema.
5. Implementación: Traducción del diseño a un lenguaje de programación entendible por una
máquina.
6. Prueba del software: Revisión y validación de todo el código que se va desarrollando.
7. Evaluación y aceptación: Evaluación del producto y aceptación en su caso por parte de
los interesados en el sistema software.
8. Entrega y asistencia: Sistema operando y asistencia para su funcionamiento correcto.

3.3 TIPOS DE MODELO DE PROCESO

3.3.1 MODELO EN CASCADA


Tiene estructura secuencial y flujo de proceso lineal. Es aplicable cuando los requerimientos para
cierto problema se comprenden bien: cuando el trabajo desde la comunicación hasta el despliegue
fluye en forma razonablemente lineal. Los problemas que presenta son:
• Los proyectos reales difícilmente se adecuan a este modelo de proceso.
• Dificultad para expresar por parte del cliente todos los requisitos al principio del
proyecto.
• Poca comunicación con cliente/usuario: hasta las etapas finales no hay un ejecutable que
se pueda evaluar.

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9908468

Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
3.3.2 MODELO INCREMENTAL
Tiene estructura secuencial y combina elementos de los flujos de proceso lineal y paralelo. Aplica
secuencias lineales de forma escalonada a medida que avanza el calendario de actividades.
Cada secuencia lineal produce un “incremento” de software que es susceptible de entregarse de
forma similar a los incrementos producidos en un flujo de proceso evolutivo.
Cuando se usa un modelo incremental, es frecuente que el primer incremento sea el producto
fundamental, es decir, se abordan los requerimientos básicos, pero no se proporcionan muchas

Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
características suplementarias.

3.3.3 MODELOS EVOLUTIVOS


Los modelos evolutivos son iterativos: en cada iteración se genera una versión final cada vez más
completa del software. Estos nacen ante la exigencia de tiempo de entrega muy limitado, la
necesidad de facilitar la incorporación de cambios y de satisfacer al usuario.
Las características generales son:
• Afrontan los riesgos altos (técnicos, de requisitos, de usabilidad...) tan pronto como sea
posible.
• Retroalimentación temprana por parte del usuario.
• Manejo de la complejidad (pasos cortos y sencillos).
• El conocimiento adquirido durante una iteración de la evolución puede ser usado en el
resto de iteraciones.
• Involucra continuamente al usuario (evaluación, retroalimentación y obtención y
refinamiento de requisitos).

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9908468

Todos los planes de suscripción incluyen descargas sin publicidad con coins
MODELO DE PROTOTIPOS

Prototipo: Representación limitada de un


producto, que se utiliza para probar las
opciones de diseño y para comprender
mejor el problema y sus posibles
soluciones. Producto de funcionamiento
limitado en cuanto a su capacidad,
confiabilidad o eficiencia. (¿Calidad del

Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
producto?). Tipos de prototipos:
• Prototipo evolutivo: se acabará
usando como producto final.
• Prototipo desechable: usados
dentro de otros modelos de
proceso.

Se usa para:
• Facilitar la obtención y validación de requisitos (desechable).
• Estudios de viabilidad (desechable).
• Propuestas de soluciones (diseños) alternativas (desechable).
• En casos muy concretos como producto final (evolutivo).
Presentan todas las características (ventajas) de los modelos evolutivos, pero con los
siguientes inconvenientes: crea falsas expectativas por parte del cliente/usuario
(desechable) y conlleva decisiones de diseño del prototipo que pasen a formar parte del
producto final (evolutivo). Su uso vendrá determinado por: tipo y complejidad de la
aplicación, características del cliente y la disponibilidad de herramientas para su
construcción.

MODELO EN ESPIRAL DE BOEHM

Con el empleo del modelo espiral, el software se desarrolla en una serie de entregas
evolutivas. Durante las primeras iteraciones, lo que se entrega puede ser un modelo o
prototipo. En las iteraciones posteriores se producen versiones cada vez más completas
del sistema.
Características (además de la de los procesos evolutivos):
• Centrado en el análisis de riesgo,
haciendo uso de construcción de
prototipos para su estudio.
• La espiral puede continuar una
vez finalizado todo el proceso y
entregado el producto para
llevar a cabo la etapa de
mantenimiento.
• Es un enfoque adecuado para el
desarrollo de sistemas a gran
escala.
Inconvenientes:
• Modelo de proceso predictivo no adaptable a la complejidad ni al tipo de sistema.
• Requiere un equipo de desarrollo con gran experiencia en análisis de riesgo.

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9908468

Todos los planes de suscripción incluyen descargas sin publicidad con coins
3.4 PROCESO UNIFICADO

Es un modelo evolutivo compuesto por cuatro fases o etapas. Además, es un intento por obtener los
mejores rasgos y características de los modelos tradicionales del proceso software, pero de forma que
implemente muchos de los mejores principios del desarrollo ágil de software.
El proceso unificado reconoce la importancia de la comunicación con el cliente y los métodos directos
para describir su punto de vista respecto de un sistema. Por otro lado, hace énfasis en la importancia de
la arquitectura del software. Sugiere un flujo del proceso iterativo e incremental, lo que da la sensación

Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
evolutiva que resulta esencial en el desarrollo moderno del software.

3.4.1 CARACTERÍSTICAS
Además de todas las de los modelos de los procesos evolutivos, tiene las siguientes características
particulares:
• En un modelo de proceso adaptable a la complejidad y al tipo de sistema.
• Centrado en la arquitectura, mostrando y decidiendo los distintos aspectos
arquitectónicos que presenta un sistema software en etapas tempranas, para que sirvan
de base a las demás.
• Dirigido por casos de uso, desarrollándose en cada iteración determinados casos de uso
(ya veremos que son los casos de uso). Eligiendo para iteraciones tempranas los casos de
uso que determinan la arquitectura.

3.4.2 ACCIONES Y TAREAS EN CADA FASE


Inicio: Estudio de viabilidad, alcance, objetivos y planificación del proyecto, análisis de riesgos,
determinación de los requisitos fundamentales del sistema y propuesta de una arquitectura
determinada.
Elaboración: Ajustes de la planificación del proyecto y desarrollo completo de la arquitectura
básica sobre la que se asentará la fase de construcción.
Construcción: Se completa los modelos de requisitos y diseño de la elaboración, se implementan
los elementos necesarios para completar el sistema y se realizan las pruebas de los distintos
elementos que se van terminando, se integran y se hacen pruebas de aceptación por parte de
usuario.
Transición: Asegurarse que el sistema cumple con los requisitos especificados (pruebas por los
usuarios) y tareas relacionadas con el despliegue de la estructura general de proceso, para
preparar lo necesario para su lanzamiento al mercado.

3.5 DESARROLLO ÁGIL

El desarrollo ágil de software envuelve un enfoque para la toma de decisiones en los proyectos de
software, que se refiere a métodos de ingeniería del software basados en el desarrollo iterativo e
incremental, donde los requisitos y soluciones evolucionan con el tiempo según la necesidad del proyecto.
Así, el trabajo es realizado mediante la colaboración de equipos autoorganizados y multidisciplinarios,
inmersos en un proceso de toma de decisiones a corto plazo.

Características Beneficios
• Proceso iterativo e incremental: evolutivo • Desarrollo guiado por valor
• Entregas frecuentes • Mejor manejo de riesgos e
incertidumbres
• Trabajo en equipo
• Mejora la productividad
• Autonomía del equipo de desarrollo
• Revisiones y reuniones retrospectivas
frecuentes

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9908468

Todos los planes de suscripción incluyen descargas sin publicidad con coins
3.5.1 MÉTODOS Y TÉCNICAS
Scrum. Es un marco de trabajo que promueve la colaboración en los equipos para lograr
desarrollar productos complejos.
Programación externa. Es una metodología que tiene como principal objetivo aumentar la
productividad a la hora de desarrollar un producto software. Da prioridad a los trabajos que
producen un resultado directo y en los cuales se reduce la burocracia que pueda existir en el
entorno de trabajo.
Programación en pareja. Requiere que dos programadores participen en un esfuerzo combinado
de desarrollo en un sitio de trabajo. Cada miembro realiza una acción que el otro no está
haciendo en un momento determinado.
TDD (Test Drive Development). Es un enfoque evolutivo del desarrollo que combina el desarrollo
de prueba donde primero escribe una prueba antes de escribir el código de producción
suficiente para cumplir con esa prueba y refactorización.

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9908468

Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.

También podría gustarte