You are on page 1of 33

Fundamentos de

Ingeniera del Software



Tema 1. Introduccin a la
Ingeniera del Software
Introduccin a la Ingeniera del Software 2
Motivacin

(Algoritmos y
estructuras de
datos)
(Interfaces +Integracin)
UN
SISTEMA
SOFTWARE
UN
PRODUCTO
SOFTWARE
UN
PROGRAMA
(Ingeniera del Software)
UN PROYECTO
SOFTWARE
Introduccin a la Ingeniera del Software 3
Motivacin (II)
Informacin = Ppal. activo de las empresas
desarrollo de SI fuertes presiones
Artesanal
Disciplina de
ingeniera
(calidad,
productividad)
Calidad
Herramientas
Gestin de proyectos
Introduccin a la Ingeniera del Software 4
Desarrollo del software.
Comunicacin compleja
1. Lo que el director desea. 2. Como lo define el director de
proyecto.
3. Como se disea el Sistema.
4. Como lo desarrolla el
programador.
5. Como se ha realizado la
instalacin.
6. Lo que el usuario quera.
Introduccin a la Ingeniera del Software 5
El Software
El Software:
Instrucciones que, cuando se ejecutan, proporcionan la
funcionalidad deseada.
Estructuras de datos que facilitan a las instrucciones
manipular adecuadamente la informacin.
Documentos que describen el desarrollo, uso, instalacin y
mantenimiento de los programas.
Software: "programas de computador, procedimientos,
y, posiblemente, la documentacin asociada y los
datos pertenecientes a las operaciones de un sistema
de computacin".
Incluye: entrenamiento, soporte al consumidor e
instalacin.
Introduccin a la Ingeniera del Software 6
Caractersticas del software
Elemento lgico, no fsico.
Desarrollado, no fabricado.
No se estropea, se deteriora!
(deterioro por cambios)
Mayoritariamente cerrado:
usar todo o nada
(poco ensamblaje de componentes:
reutilizacin--)
Introduccin a la Ingeniera del Software 7
Atributos de Calidad del
Software (Bell 2000)
Fiable
Capacidad de ofrecer los mismos
resultados bajo las mismas
condiciones.
Eficiente
Utilizacin ptima de los recursos
de la mquina.
Robusto
No poseer un comportamiento
catastrfico ante situaciones
excepcionales
(Tolerante a fallos).
Correcto
Se ajusta a las especificaciones
dadas por el usuario.
Portable
Capaz de integrarse en entornos
distintos con el mismo esfuerzo.
Adaptable
(extensibilidad)
Modificar alguna funcin sin que
afecte a sus actividades.
Inteligible
Diseo claro, bien estructurado y
documentado.
No Errneo
No exista diferencia entre los
valores reales y los calculados
Reutilizable (reusabilidad)
Introduccin a la Ingeniera del Software 8
Atributos de Calidad del
Software (Sommerville 2002)
Mantenibilidad
Confiabilidad
fiabilidad
seguridad
proteccin
Eficiencia
Usabilidad

Introduccin a la Ingeniera del Software 9
Perspectiva histrica del
desarrollo de software
Dcada 50-60:
Software como un aadido.
Desarrollo artesanal, a medida.
Lenguajes de bajo nivel.
Dcada 60-70:
Software como producto.
Dcada lenguajes y compilacin.
Crisis del software.
Dcada 70-80:
Programacin estructurada.
Ingeniera del Software.
Primeros mtodos estructurados.
Dcada 80-90:
Tecnologa de SGBDs, SOs...
Nuevos paradigmas de
programacin y de produccin de
programas:
OO
C/S
90s - actualidad:
Anlisis/Diseo OO.
Tecnologa CASE
Componentes y reutilizacin
Interoperabilidad (CORBA, .NET...)
Internet
ISw. distribuida
repositorios de componentes
reutilizables
e-business; e-commerce
...
Introduccin a la Ingeniera del Software 10
La problemtica actual
del software
Incapacidad para estimar tiempo, costo y
esfuerzo para el desarrollo de un producto
software.
Falta de calidad del producto software.
Avance del hardware y necesidad de
aplicaciones ms complejas.
Cambio en la relacin entre el costo
hardware/software.
Introduccin a la Ingeniera del Software 11
Relacin coste hw./sw.
0
20
40
60
80
100
60 70 80
Hardware
Software
Porcentaje del coste
total del sistema
aos
Introduccin a la Ingeniera del Software 12
Problemas del software (II)
Porqu lleva tanto tiempo terminar los
programas?
Porqu es tan elevado su costo?
Porqu no podemos encontrar todos los
errores antes de entregar el software a
nuestros clientes?
Porqu nos resulta difcil constatar el
progreso conforme se desarrolla el sw.?
Introduccin a la Ingeniera del Software 13
INVERSION EN DESARROLLO DE
SISTEMAS SOFTWARE
Entregado
pero nunca
usado
47%
Pagado pero
nunca
entregado
29.7%
Usado pero con
trabajo extra o
abandonado
despues
19%
Usado despus
de cambios
~ 3%
Usado tal como
se entreg
~ 2%
Ao 1979
Total: $6.8 millones
Introduccin a la Ingeniera del Software 14
Costo del software
1/4
Desarrollo
inicial
3/4
Mantenimiento
1/6
codificacin
1/2
Validacin y
puesta a punto
(V/PP)
1/3
Anlisis
y diseo
(A/D)
3/4
Mantenimiento
1/8
V/PP
1/12
A/D

VALIDACIN + PP + MANT. = 7/8 (88%)
CODIFICACIN = 1/24 (4%)
ANLISIS + DISEO = 1/12 (8%)

Desarrollo
inicial
TOTAL
TOTAL
Codif.
1/24
Introduccin a la Ingeniera del Software 15
Algunas causas
Naturaleza no fsica de la programacin.
Problemas derivados de la intervencin de grupos.
Problemas de comunicacin con los clientes.
Poco esfuerzo en el anlisis y el diseo.
Herramientas comerciales poco adecuadas.
Problemas de gestin
Planificaciones optimistas, plantillas poco cualificadas...
Difusin limitada de las nuevas tcnicas, mtodos y
herramientas.
...industria pendiente de su revolucin industrial.
Introduccin a la Ingeniera del Software 16
Algunas soluciones...
No existe bala de plata!
(Brooks 87)
INGENIERA DEL SOFTWARE
reutilizacin
ingeniera de
requisitos
mtodos de anlisis,
diseo, prueba...
mtodos formales
herramientas CASE:
editores dirigidos por la sintaxis,
entornos integrados de
desarrollo,
herramientas para la gestin de
proyectos,
herramientas de prototipado, etc.
herramientas 4 gen.
lenguajes no
procedimentales para
consulta a BDs
generadores de pantallas,
generadores de cdigo,
generadores de informes
POO
Prototipado
Modelado del
negocio
Introduccin a la Ingeniera del Software 17
Objetivos de la Ingeniera del
Software
Trmino que aparece en 1968
La produccin de programas debe abordarse como una ingeniera
ms.
(Boehm) La Ingeniera del Software es la aplicacin prctica y
sistemtica del conocimiento cientfico a:
la produccin de programas correctos, que se desarrollan a tiempo y
dentro de las estimaciones de presupuesto,
y a la correspondiente documentacin para desarrollarlos, usarlos y
mantenerlos.
La Ingeniera del Software se fundamenta en tcnicas relacionadas
con:
ciencia de la computacin, programacin, ingeniera, administracin,
matemticas, economa,...
Forma parte de la Ingeniera de Sistemas
Introduccin a la Ingeniera del Software 18
Ms definiciones de ISw...
La ISw es el establecimiento y uso de principios slidos de
ingeniera, orientados a obtener software econmico que sea fiable
y trabaje de manera eficiente en mquinas reales (Fritz Bauer).

Isw: (1) La aplicacin de un enfoque sistemtico, disciplinado y
cuantificable para el desarrollo, la operacin y el mantenimiento del
software; es decir, la aplicacin de la ingeniera al software; (2) El
estudio de enfoques como en (1) (Glosario Estndar de Trminos
de Ingeniera del Software de IEEE, 1998).

Una disciplina que comprende todos los aspectos de la produccin
de software desde las etapas iniciales de la especificacin del
sistema, hasta el mantenimiento de ste despus de que se utiliza
(Sommerville 2002).
Introduccin a la Ingeniera del Software 19
Situacin actual de la ISw
Fragmentacin e inmadurez de la disciplina.
Carencia de un conjunto de estndares (que se
usen ampliamente).
Terminologa inconsistente.
Escepticismo e inercia en el sector.
Insuficiencia de datos - gua (estadsticas).
Carencia y poca difusin de base formal.
Introduccin a la Ingeniera del Software 20
Situacin actual de la ISw (II)
Hay tambin aproximaciones prometedoras. Por ejemplo:
(Adems de nuevas tcnicas, mtodos y herramientas...)
SWEBOK (Guide to the Software Engineering Body of Knowledge) (2001)
Algunas universidades han comenzado a ofrecer un ttulo en ingeniera del
software
Comits CSAB (Computer Science Accreditation Board) y ABET (Accreditation
Board for Engineering and Technology).
El CMM (Capability Maturity Model) del SEI (Software Engineering Institute) y la
familia de estndares ISO 9000 son usados para valorar la capacidad de una
organizacin de ingeniera del software.
En EE UU, el Colegio de Ingenieros Profesionales de Texas (Texas Board of
Professionals Engineers) ha comenzado a licenciar ingenieros del software.
ACM e IEEE-CS han desarrollado y adoptado conjuntamente un Cdigo de tica
para Profesionales en Ingeniera del Software.
Introduccin a la Ingeniera del Software 21
Situacin actual de la ISw (III)
Tres problemas esenciales en los comienzos del siglo
XXI (Sommerville 2002):
El reto de lo heredado
El reto de la heterogeneidad
El reto de la entrega
Hoy da,
existe un consenso en la importancia de la ISw
muchos autores comienzan a renegar del trmino
crisis del software
Introduccin a la Ingeniera del Software 22
Principios de la Ingeniera del
Software
Abstraccin
Permite parcelar la complejidad.
Por ello se olvidan aspectos
irrelevantes del sistema y se
potencian los fundamentales.
Encapsulamiento u Ocultacin
de la informacin
Esconder todos los detalles que
no afecten a otros mdulos,
definiendo interfaces estrictos que
sirvan de interaccin entre los
distintos modelos.
Modularidad
Sirve para parcelar la solucin en
mdulos independientes con
fuerte cohesin interna.
Localizacin
Deben estar agrupados todos
aquellos elementos que estn
afectados por un mismo hecho.
Uniformidad
Todos los mdulos deben tener
una notacin similar.
Completitud
Deben estar desarrollados todos
los aspectos del sistema.
Validacin y Verificabilidad
El producto final debe ser
fcilmente validable y verificable:
Estamos desarrollando el
programa correcto?
Estamos desarrollando
correctamente el programa?
Introduccin a la Ingeniera del Software 23
Visin general del proceso
de ISw
Con independencia del rea de aplicacin,
tamao o complejidad del proyecto, cualquier
sistema se encontrar al menos en una de las
siguientes fases genricas:

Definicin ~ Anlisis (del sistema, del sw.)
desarrollo ~ Diseo, codificacin, prueba
mantenimiento.
Introduccin a la Ingeniera del Software 24
Fase de definicin
Qu debe hacer el sistema?
informacin que ha de manejar el sistema
necesidades de rendimiento
restricciones de diseo
interfaces del sistema con los usuarios y con otros sistemas
criterios de validacin
Se elaboran los documentos de requisitos del
sistema (SyRS) y del software (SRS)

Introduccin a la Ingeniera del Software 25
Fase de desarrollo
Cmo construir el sistema?
Se disean las estructuras de los datos y los
programas
cmo se caracterizan las interfaces,
cmo realizar el paso del diseo al lenguaje de
programacin,
cmo ha de realizarse la prueba,
se escriben y documentan los programas,
y se prueba el software construido.
Introduccin a la Ingeniera del Software 26
Fase de mantenimiento
Comienza una vez construido el sistema, cuando
se empieza a utilizar.
Se centra en el cambio.
El software es sometido a reparaciones y
modificaciones cada vez que se detecta un fallo
o se necesita cubrir una nueva necesidad de los
usuarios.
En esta fase recae el mayor porcentaje del costo
de un sistema.
Introduccin a la Ingeniera del Software 27
Fase de mantenimiento
Un buen sistema no es slo un conjunto
de programas que funcionan.
Debe ser fcil de mantener
Documentacin esencial
(CASE, Computer Assisted Software
Engineering)
Introduccin a la Ingeniera del Software 28
Tipos de mantenimiento
Correctivo: un programa no realiza
correctamente la aplicacin para la que ha sido
diseado, y, por tanto, debe ser modificado.
Perfectivo: modificaciones a los programas
para conseguir mayor adecuacin a los
requisitos, mayor eficiencia, o simplemente
recoger nuevas funcionalidades no expresadas
en la fase de definicin del sistema.

Introduccin a la Ingeniera del Software 29
Tipos de mantenimiento (II)
Adaptativo: Adaptar los programas para
acomodarlos a los cambios de su entorno
externo (modificaciones en la legislacin, CPU,
SO, las reglas de negocio, etc.)
Preventivo: El software se deteriora con los
cambios, y este tipo de mantenimiento hace
cambios en los programas para que se puedan
corregir, adaptar y mejorar ms fcilmente
(Reingeniera del software).

Introduccin a la Ingeniera del Software 30
DEFINICIN
DESARROLLO
MANTENIMIENTO
Fallos de definicin
Errores
Modificaciones y adaptaciones
Visin general del proceso
de ISw (II)
(no es totalmente secuencial) Actualmente: iterativo e
incremental
Introduccin a la Ingeniera del Software 31
Impacto del cambio
Definicin Desarrollo Mantenimiento
1x

1,5-6x

60-100x
C
o
s
t
e

d
e
l

c
a
m
b
i
o

Introduccin a la Ingeniera del Software 32
Clasificacin por
funcionalidad
Herramientas de gestin de proyectos ayudan a la planificacin y
seguimiento del proyecto
Planificacin: agenda de desarrollo.
Estimacin: costes, duracin, esfuerzo.
Control: productividad, calidad.
Herramientas de anlisis y diseo.
Herramientas de prototipado y simulacin.
Herramientas de programacin.
Editores dirigidos por la sintaxis (cabeceras de subrutinas, palabras clave, identacin,
nomenclatura de variables, ...)
Generadores de estructuras de programas.
Entornos integrados de desarrollo para soporte de un lenguaje (editor, compilador,
depurador).
Herramientas de integracin y pruebas.
Analizadores estticos.
Depuradores.
Generadores de datos.
Comparadores (e.g. de ficheros).
Herramientas de soporte.
Herramientas de mantenimiento.
Ingeniera inversa.
Reingeniera.
Introduccin a la Ingeniera del Software 33
Clasificacin por posicin
Upper CASE: Herramientas de apoyo a las primeras fases
Mtricas del software.
Estimacin de costes.
Planificacin temporal.
Medium CASE: Herramientas de apoyo a las fases centrales.
Anlisis.
Diseo.
Lower CASE: Herramientas de apoyo a las ltimas fases.
Implementacin (generacin de cdigo).
Pruebas (caja blanca y caja negra).
Mantenimiento.
Documentacin de la implementacin y documentacin para el usuario
final.