Вы находитесь на странице: 1из 45

Ingeniería de Software

Ingeniería en Telecomunicaciones - FCyT 2019

@erneledesma
Ingeniería en Telecomunicaciones – FCyT
Ingeniería de Software - 2019

Contenidos mínimos

Ingeniería de Software. Ciclos de vida. Etapas en el desarrollo de Software.


Análisis de Herramientas de trabajo. Ingeniería de requerimientos. Diseño y
calidad del software. Metodologías de Desarrollo de Software. Análisis de
riesgos y estimaciones.
Uso de herramientas informáticas en el contexto de los contenidos de la
materia.
Ingeniería en Telecomunicaciones – FCyT
Ingeniería de Software - 2019

Evaluaciones

# Parciales -

# Tps -

# Condición Libre

Bibliografía : SOMMERVILLE - Papers - Publicaciones

@erneledesma
Ingeniería en Telecomunicaciones – FCyT
Ingeniería de Software - 2019

Cursada

Lunes y Viernes - 8:00hs a 9:30hs

# Sujeto a cambios

@erneledesma
Ingeniería en Telecomunicaciones – FCyT
Ingeniería de Software - 2019

Unidad

Software e Ingeniería de Software


Concepto de software. Naturaleza y cualidades del
software. Objetivo de la producción de software.
Productos de software. Ingeniería de Software (IS).
Concepto y panorama de la Ingeniería de Software.
Evolución del software desde los orígenes. Sociedades
profesionales y publicaciones académicas y profesionales.
Cuerpo de Conocimiento de la Ingeniería Software (SWEBOK).
Áreas de conocimiento del SWEBOK. Área Gestión de la Ingeniería
de Software, sub-áreas. Niveles de conocimiento del área de
gestión de software. Especificidad de la gestión de IS. Gestión y
mediciones.

@erneledesma
Ingeniería en Telecomunicaciones – FCyT
Ingeniería de Software - 2019

Unidad

Objetivo 1
Introducir los conceptos sustanciales del software y su relación
con los procesos de desarrollo.

Objetivo 2
Introducir los elementos distintivos de la ingeniería de software

@erneledesma
Ingeniería en Telecomunicaciones – FCyT
Ingeniería de Software - 2019

Conceptos a presentar

Software
Representaciones del software
Conocimiento de Ingeniería Software
Conocimiento del dominio específico
Carácter único del software
Cualidades del software
Proceso software
Técnica/Método/Herramientas
Ingeniería de software
@erneledesma
Ingeniería en Telecomunicaciones – FCyT
Ingeniería de Software - 2019

Conceptos del Software

El software es más que programas.


Hay una característica de él que debe
atenderse: el hecho que es
un sistema

@erneledesma
Ingeniería en Telecomunicaciones – FCyT
Ingeniería de Software - 2019

Que es el software

Lo importante no es qué es el software, sino:


– ¿cómo se piensa sobre él?, ¿qué imagen se tiene?
– ¿qué papel juega en un contexto mayor?
Punto de vista de una computadora:
– El software es sólo programas

• Pensar así genera problemas.


• Ej: medir la productividad por las líneas de código producidas por
unidad de tiempo (la visión errónea más difundida). Identifica
productividad en la construcción del sistema con la capacidad de
generar código.

@erneledesma
Ingeniería en Telecomunicaciones – FCyT
Ingeniería de Software - 2019

El software es...

Alma y cerebro de una computadora


Corporización de las funciones de un sistema
El conocimiento capturado acerca de un área de aplicación
Colección de los programas y datos necesarios para convertir a
una computadora (de propósito general) en una máquina de
propósito especial diseñada para una aplicación particular.
Información (documentación) producida durante el desarrollo de
un sistema software-intensivo.

@erneledesma
Ingeniería en Telecomunicaciones – FCyT
Ingeniería de Software - 2019

El software es...

El software es muchas cosas, pero todos son aspectos de la información


En definitiva es una cuestión de semántica:
– si software = programas ejecutables, excluimos una cantidad de
información que debemos llamar de alguna manera

– si incluimos toda la información relevante a una pieza de software


ejecutable, entonces nos debemos relacionar con esa información en la
misma forma rigurosa y sistemática que lo hacemos con el software ejecutable.

Esto es crucial para un desarrollo exitoso, pues si no se hace, la


información se pierde o altera introduciendo errores.

@erneledesma
Ingeniería en Telecomunicaciones – FCyT
Ingeniería de Software - 2019

Información en el ambiente de desarrollo

@erneledesma
Ingeniería en Telecomunicaciones – FCyT
Ingeniería de Software - 2019

Representación del software

Cualquier información que en forma directa representa un


eventual conjunto de programas y los datos asociados
Incluye
– programas
– diseños detallados
– diseños de arquitectura (representados como diagramas de estructura)
– especificaciones escritas en un lenguaje formal
– requerimientos del sistema expresados en una combinación de notaciones
– o centenares de posibilidades

@erneledesma
Ingeniería en Telecomunicaciones – FCyT
Ingeniería de Software - 2019

Conocimiento de Ingeniería Software

Toda la información relativa al desarrollo en general (ej: cómo


usar un método específico de diseño) o relativa a un desarrollo en
particular (ej: programa de testeo en un proyecto)
Incluye:
– información relativa al proyecto
– información sobre la tecnología de software (métodos, conceptos,
técnicas)
– conocimiento acerca de sistemas similares
– información detallada relativa a la identificación y solución de problemas
técnicos del sistema en desarrollo

@erneledesma
Ingeniería en Telecomunicaciones – FCyT
Ingeniería de Software - 2019

Conocimiento del dominio específico

Es esencial para la creación del software


Descubrir y ponerlo en forma útil es la esfera de un especialista en el área de aplicación

Por ejemplo incluye:


– conocimiento del proceso específico a ser controlado
– reglas del negocio
– procedimientos para actualizar y cambiar los registros de los empleados
– etc.

@erneledesma
Ingeniería en Telecomunicaciones – FCyT
Ingeniería de Software - 2019

Ejemplos de formas que toma el software

Colecciones de programas: a Análisis de requerimientos


testear, Documentación del usuario
terminados, en lenguaje de Documentación de mantenimiento
máquina, Pedidos de cambio
en lenguajes de alto nivel Especificaciones de modificaciones
Necesidades Informes de errores
Requerimientos Mediciones de performance
Especificaciones
Diseños de arquitectura

@erneledesma
Ingeniería en Telecomunicaciones – FCyT
Ingeniería de Software - 2019

Software: ¿Producto o conocimiento?

Software como producto


A medida que los computadores Software como conocimiento
extendieron su ámbito de aplicación se los vio Razonamiento
como procesadores simbólicos, de allí que no se 1. Los programas contienen conocimiento,
viera al software como producto 2. El ejecutable es el final de una cadena
de representaciones (que llamamos
Desde los 60 (separación Sw y Hw) software),
comenzó a constituirse como 3. Entonces las versiones finales también
Software como conocimiento contienen conocimiento
El software es tanto un producto 4. Perdemos ese conocimiento si nos
como un objeto técnico, esto es: limitamos a los conceptos del software
conocimiento empaquetado ejecutable.

@erneledesma
Ingeniería en Telecomunicaciones – FCyT
Ingeniería de Software - 2019

Software: ¿Producto o conocimiento?

No perder este conocimiento es una


de las principales motivaciones de la
reusabilidad del software.

El software se puede comparar a un


informe de investigación.

@erneledesma
Ingeniería en Telecomunicaciones – FCyT
Ingeniería de Software - 2019

Productos de software

PROGRAMAS DE COMPUTADORA IEEE


+ part of a system that can be encoded
PROCEDIMIENTOS to execute on a computer as a set of
+ instructions; it includes all the
DOCUMENTACION ASOCIADA associated documentation necessary
+ to understand, transform and use that
DATOS DE LA OPERACION DEL solution
SISTEMA the collection of computer programs,
procedures, rules, and associated
CONOCIMIENTO ACUMULADO documentation and data

@erneledesma
Ingeniería en Telecomunicaciones – FCyT
Ingeniería de Software - 2019

CARACTERÍSTICAS DEL
SOFTWARE

¿Por qué el software es único?


Es intangible
Posee un alto contenido intelectual
No se lo reconoce como un activo contable
Su proceso de desarrollo es mano de obra intensivo, basado en equipos y por
proyectos
No hay separación entre R&D y producción
Potencialmente es modificable hasta el infinito.

@erneledesma
Ingeniería en Telecomunicaciones – FCyT
Ingeniería de Software - 2019

El software es único? - Ejercicio

@erneledesma
Ingeniería en Telecomunicaciones – FCyT
Ingeniería de Software - 2019

Características conceptuales

Objetivo de la ingeniería: construcción de producto.


Objetivo de la Ingeniería Software: sistemas de software
Principal diferencia: el software es maleable.
Existe la idea [errónea] que los cambios en el software son
fáciles.

@erneledesma
Ingeniería en Telecomunicaciones – FCyT
Ingeniería de Software - 2019

Características conceptuales

En este punto debe pensarse a los productos de software de otra


forma:
– Un cambio debe ser visto como un cambio en el diseño más que en el código

Su producción es humano-intensiva: requiere más ingeniería que


manufactura. El proceso de producción de software se vincula
más con el diseño e implementación que con la manufactura.
En la ingeniería clásica el ingeniero dispone de herramientas para
describir el producto que son distintas del producto, no es así en
la Ingeniería Software.
@erneledesma
Ingeniería en Telecomunicaciones – FCyT
Ingeniería de Software - 2019

Cualidades del software

@erneledesma
Ingeniería en Telecomunicaciones – FCyT
Ingeniería de Software - 2019

Cualidades externas vs internas

Externas: visibles para los usuarios


Internas: conciernen a los desarrolladores, sólo son “visibles”
para ellos
Hay fuerte relación entre unas y otras.
Las cualidades externas no son consecuencia de las internas
Por ejemplo: la cualidad interna de la verificabilidad se requiere
para alcanzar la cualidad externa de la confiabilidad. Vale decir:
confiabilidad ⇒ verificabilidad

@erneledesma
Ingeniería en Telecomunicaciones – FCyT
Ingeniería de Software - 2019

Cualidades requeridas según la visión

@erneledesma
PROCESO SOFTWARE

@erneledesma
Ingeniería en Telecomunicaciones – FCyT
Ingeniería de Software - 2019

Concepto de proceso
IEEE: “Una secuencia de pasos ejecutados para un propósito
dado”
– se ajusta a las prácticas específicas de las distintas ingenierías;
– dos componentes: acciones y propósito;
– la meta le da al proceso una serie de cualidades
Pfleeger: “Podemos pensar al conjunto ordenado de tareas como
un proceso: una serie de pasos que involucran actividades,
restricciones y recursos que producen una determinada salida
esperada”
Basili: Los procesos de la ingeniería software son específicos

@erneledesma
Ingeniería en Telecomunicaciones – FCyT
Ingeniería de Software - 2019

Ejemplo de niveles de proceso


(entrevista a un usuario)

@erneledesma
Ingeniería en Telecomunicaciones – FCyT
Ingeniería de Software - 2019

El proceso en detalle (Pfleeger)

El proceso:
Establece todas las principales actividades que involucra.
Utiliza recursos, está sujeto a una serie de restricciones (tal como un cronograma) y genera productos
intermedios y finales.

Puede estar compuesto por subprocesos que se encadenan de alguna manera.


Cada actividad del proceso tiene criterios de entrada y salida.

Las actividades se organizan en una secuencia


Tiene una serie de principios-guía que explican los objetivos de
cada actividad.
Las restricciones o controles pueden ser de aplicación a una
actividad, recurso o producto.

@erneledesma
Ingeniería en Telecomunicaciones – FCyT
Ingeniería de Software - 2019

Mapa conceptual del concepto de proceso


(Pfleeger)

@erneledesma
Ingeniería en Telecomunicaciones – FCyT
Ingeniería de Software - 2019

Mapa conceptual y e instancias de entrevistas a


usuarios

@erneledesma
Ingeniería en Telecomunicaciones – FCyT
Ingeniería de Software - 2019

Dos caminos en el
desarrollo de software
(Glass, Software Creativity, p 5)

@erneledesma
INGENIERÍA DE SOFTWARE

@erneledesma
Ingeniería en Telecomunicaciones – FCyT
Ingeniería de Software - 2019

Dos caminos en el
desarrollo de software
(Glass, Software Creativity, p 5)

Fairley
La Ingeniería Software es la disciplina tecnológica y de administración que se ocupa de la producción y
evolución sistemática de productos de software que son desarrollados y modificados dentro de los tiempos y
costos estimados.
Ghezzi
Ingeniería Software es el campo de la ciencia de la computación que trata con la construcción de sistemas de
software que son tan grandes o complejos que son construidos por un equipo o equipos de ingenieros.
IEEE
1. El uso de un enfoque sistemático, disciplinado y cuantificable para el desarrollo, operación y mantenimiento
de software, es decir, la aplicación de la ingeniería al software.
2. el estudio de enfoques relacionados con (1)
Seguiremos la de IEEE

@erneledesma
Ingeniería en Telecomunicaciones – FCyT
Ingeniería de Software - 2019

Panorama de la SE

Conocimientos requeridos
Principios teóricos de representación y computación.

@erneledesma
Ingeniería en Telecomunicaciones – FCyT
Ingeniería de Software - 2019

Panorama de la SE

Conocimientos requeridos
Principios teóricos de representación y computación.

1. Aplicación de métodos formales.

2. Uso de notaciones de modelización,


especificación, diseño, programación.
Combinación de conocimientos de => # Técnicas de administración de
proyectos.

# Metodologías.

# Tecnologías a definir @erneledesma


Ingeniería en Telecomunicaciones – FCyT
Ingeniería de Software - 2019

Panorama de la SE

Evolución histórica

Expansión de la esfera de competencia


Formalización de procesos y productos
Automatización de operaciones
Mayor nivel profesional y de conocimiento

@erneledesma
Ingeniería en Telecomunicaciones – FCyT
Ingeniería de Software - 2019

Panorama de la SE

Demandas actuales
Reducción en el ciclo de vida de productos
Personalización de productos
Reducción de Costos
Calidad y certificación de procesos
Desarrollos sobre la Web
Agilidad
Distribución del desarrollo
Nuevos dispositivos, movilidad.

@erneledesma
Ingeniería en Telecomunicaciones – FCyT
Ingeniería de Software - 2019

Desafíos de la Ingeniería Software

6. Interoperabilidad de estándares
7. Software heredado
1. Calidad del software
8. Criterio de detención del testeo
2. Retorno sobre la inversión
9. Interoperabilidad y capacidad de
3. Mejora de proceso
componer (Composability)
4. Métricas y mediciones
10.Perfiles operacionales
5. Confusión de estándares
11.Design in [de acuerdo al #1]
12.Certificación de productos
13.Servicio

@erneledesma
Ingeniería en Telecomunicaciones – FCyT
Ingeniería de Software - 2019

Puntos claves

El software es conocimiento empaquetado.

Una serie de características lo hacen único


(intangibilidad, contenido intelectual, producción y
desarrollo, modificabilidad, etc)

@erneledesma
Ingeniería en Telecomunicaciones – FCyT
Ingeniería de Software - 2019

Puntos claves

Se necesita un concepto amplio del software.


El objetivo de la ingeniería software es producir
sistemas software.

Las cualidades del software como producto y


proceso son similares

@erneledesma
Ingeniería en Telecomunicaciones – FCyT
Ingeniería de Software - 2019

Puntos claves

La ingeniería software abarca el ciclo completo del


software:
desarrollo, mantenimiento, operación.

La disciplina enfrenta desafíos y nuevas demandas

@erneledesma
Ingeniería en Telecomunicaciones – FCyT
Ingeniería de Software - 2019

Referencias
Arango, G., “¿Qué es la Ingeniería de Software?”, Noticiero SADIO, año 25, 1
(marzo-abril) 1993, 7-11.
Basili, V., “The Software Business” (Chap 1), Class Notes.
Feiler, P H and Humphrey, W S ‘Software process development and enactment:
concepts and definitions’ in Proc. 2nd Int. Conf: Software Process, Berlin,
Germany (25-26 February 1993), pp 28-39
Glass, R., Software Creativity, Prentice Hall, 1995
McConnell, S., “Who Needs Software Engineering?”, IEEE Software, jan-feb
2001
Pfleeger, S.L., Ingeniería de software. Teoría y práctica, 2002

@erneledesma
Fin Presentación
mas consultas...?

@erneledesma