Sextas Jornadas Iberoamericanas de Ingeniería de Software e Ingeniería del Conocimiento
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
Universidad Politécnica de Madrid
La incertidumbre como herramienta en la ingeniería de software
Consideraciones iniciales
Estándar IEEE 830
Lo ideal, aunque en la práctica no siempre es
realizable, es que los requisitos posean las
siguientes características:
Correctos,
•No ambiguos,
•Completos,
•….
incertidumbre nula
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
Analogía militar. Estándar (deseado) IMMM 1
“Lo ideal, aunque en la práctica no siempre es realizable,
es que el enemigo se coloque en fila india para eliminarlo
de un solo disparo.”
…
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
Pero,
generalmente el enemigo es reacio a cumplir ese estándar;
los requisitos también.
Tampoco es posible conocer el qué antes del cómo.
Ni siquiera conviene eliminar la incertidumbre porque es parte
de los procesos creativos, de lo nuevo; porque es una
herramienta humana (y también divina).
Ni la modularidad, la cohesión, el acoplamiento, la privacidad de
los atributos, la copia de la realidad, divide y vencerás, son guías
útiles de diseño para conseguir facilidad de modificación y
evolución de los sistemas software.
…
(En fin, los Reyes Magos son los padres)
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
Aquiles parte en busca de
algo permanente e inmutable
[Homero, siglo -VIII]
Precedentes del modelo
(concepto) temprano de la
ingeniería de software
El universo es uno,
infinito e inmóvil [Bruno,
siglo XIV]
“[…] no puede haber ninguna verdad, por lejos
que se halle situada o por oculta que esté, que no
se llegue a alcanzar o descubrir.” (a través del
MÉTODO) [Descartes, siglo XVII]
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
Consideraciones iniciales
Desarrollo en cascada (exclusas)
Pruebas
Primero qué, después cómo
Implementación
(corregir
equivocaciones)
Diseño
Análisis
Requisitos
Incertidumbre >0
Incertidumbre nula
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
El modelo
(sistema de ideas)
ingeniería de software temprana
requisitos
La premisa:
diseño
métodos
…
Incertidumbre nula
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
Consecuencias
aspectos no visibles
incertidumbre > 0
soluciones
problemas
incertidumbre nula
universo visible
complejidad
descriptiva
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
Consecuencias
Introducir incertidumbre
cambios de requisitos
soluciones
problemas
divide y vencerás
sistemas conocidos y estables
complejidad
descriptiva
universo visible
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
Analogía geométrica
Figuras n-dimensionales
Espacio de
representación
unidimensional
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
Preguntas con respuestas en otra dimensión
¿Qué es objetos y qué es estructurado?
¿Cuándo, cómo, por qué usar objetos en vez de estructurado?
¿En qué se diferencian las metodologías de desarrollo?
¿Cuándo, cómo, por qué, usar una metodología y no otra? ¿xP para
estructurado?
¿Cómo interpretar una metodología? ¿P.U. es un ciclo de cascadas?
¿Por qué la modularidad,
la cohesión, el acoplamiento,
la privacidad de los atributos,
copiar la realidad,
son pobres guías de diseño?
¿Qué guías de diseño utilizar?
¿Qué cualidades debe tener un diseño software para facilitar la evolución?
¿Qué relaciones existen entre problemas y soluciones,
objetos y estructurado,
métodos de desarrollo
técnicas de diseño?
¿……?
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
¿Por qué no puedo pedir esa muñeca, a los Reyes
Magos, si es gratis?
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
Ampliación del espacio geométrico
Figura bidimensional
R2 = (X – X0)2 + (y – y0)2
Espacio de
representación
bidimensional
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
Ampliación del espacio software
complejidad por
incertidumbre
(cantidad de información necesaria
para resolver la incertidumbre
asociada con el sistema)
universo
software
complejidad
descriptiva
No ortogonalidad
(cantidad de información para
describir el sistema)
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
Términos
Incertidumbre
se asocia con problemático, cuestionable, vago, no
definido o determinado, dudoso, no seguro, ambiguo,
sujeto a oportunidad o cambio, no estable, variable, no
confiable.
Vaguedad
se asocia con la dificultad de hacer distinciones
agudas o precisas en el mundo; algún dominio de
interés es vago si no puede ser delimitado por
fronteras precisas.
Ambigüedad
se asocia con relaciones de uno a muchos; esto es,
con situaciones donde la elección entre dos o más
alternativas se deja sin especificar.
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
¿Dónde hay incertidumbre?
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
Hay incertidumbre en la solución,
como recurso resolutivo
mesa
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
Una abstracción representa alternativas,
expresa ambigüedad
Una abstracción simplifica:
1)la complejidad descriptiva, porque permite omitir los
detalles
2)la complejidad por incertidumbre porque la incertidumbre
en los detalles, los cambios en los detalles, no se consideran
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
Incertidumbre en el problema y en la solución
Se conoce el
problema,
se conoce la
solución
S
Se conoce el
problema,
NO se conoce la
solución
P
NO se conoce el
problema,
NO se conoce la
solución
E
(CLASIFICACIÓN DE LEHMAN)
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
Incertidumbre en los requisitos (deseos)
requisitos
R
Incertidumbre
C
T
tiempo
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
consideraciones actuales
Los cambios son inherentes al software
La incertidumbre es inevitable en la
ingeniería de software
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
La incertidumbre está presente en la ingeniería
de software:
•Como recurso resolutivo
•En los problemas
•En las soluciones, en el proceso creativo
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
Condición: incertidumbre inevitable
Consecuencias:
•Se pierde la aditividad
•Divide y vencerás no funciona
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
Condición: incertidumbre inevitable
Solución: admitir incertidumbre en la solución
(ambigüedad o vaguedad)
expresión de alternativas
imprecisión
Admitir incertidumbre en la solución es una técnica ancestral para
enfrentar la complejidad descriptiva y la complejidad por
incertidumbre
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
soluciones software basadas en la admisión de incertidumbre
modelos
variables
alternativas
rutinas
entidad-relación
objetos
agentes
diseño
métodos
desarrollo evolutivo
máquinas abstractas
desarrollo espiral
principio de ocultación
desarrollo caos
tipos abstractos
métodos ágiles
principio de sustitución
principio de abierto y cerrado
principio de inversión de dependencias
patrones de diseño
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
ambigüedad
ambigüedad en
el modelo
(capacidad para
expresar alternativas)
interfaces
clases abstractas
clases
objetos (cosas)
tipos abstractos de datos
rutinas
listas
variables vectores
simples
recursión
alternativas
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
a
b
x
F (x)
c
y
funciones y datos
ambigüedad
en los modelos
n
a
m
s
h
b
c
p
x
i
y
Estructurado y objetos,
la diferencia: capacidad
para expresar ambigüedad
modelos
cosas
interrelacionadas
COMPLEJIDAD
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
a
x
b
y
c
funciones y
datos
b
CONVERGENCIA DE MODELOS
n
a
s
h
c
i
p
m
x
n
a
y
b
s
h
c
i
m
p
x
y
n
m
inutilidad de la diferencia
h
s
p
modelos
i
objetos
funciones y
objetos datos
cosas
interrelacionadas
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
Incertidumbre en el diseño
F
propiedades de las formas alotrópicas
F
F
F
F
F
F
Rigidez del
triángulo
Plasticidad del cuadrado
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
Extracción*
C
2
1
Si C < SCu
2
3
1
Si C < SCu
estructura B
Cuenta*
SCu
SCu <- Scu - C
SCu
Si C < SCa
3
C
Si C < SCa
Caja*
SCa
SCa
Formas alotrópicas del algoritmo
SCu <- Scu -C
Extracción
estructura A
La misma cohesión
y acoplamiento,
modularidad,
pero…
estructura C
C
1
Si C < SCu
3
Si C < SCa
Cuenta
SCu
2
4 Caja
SCa
5
SCu <-Scu -C
6
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
dato
Estructurado con
ropaje de Objetos
:Cuenta
- saldo
¡¿privado saldo?!
importe
:Extracción
función de
transformación
cosa
cosa
:Extracción
¿copiar la realidad?
i
ni función,
ni dato
i
Objetos
:Cuenta
saldo
autoriza(i)
ni función,
ni dato
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
Relaciones dirigidas entre elementos software
A
B
No hay relación entre A y B
Relación unívoca
A no depende de B
A
B
A’
B’
A depende fuertemente de B
Para cada B hay una A
A
B
B’
Relación ambigua de A hacia B
A depende débilmente de B
Para una A hay más de una B posible
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
Independencia
Ambigüedad
Unicidad
0
dependencia
cantidad de
información
Nula
Poca
Mucha
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
Extracción
Cuenta
Ambigüedad en el diseño
cantidad
Extracción*
leer
saldo
saldo
cantidad
autoriza (cantidad)
Si cantidad < saldo
leer
bloqueo
Si no bloqueo
bloqueo
leer otro
dato
Si otro dato
otro dato
próximo
paso
Relaciones unívocas
Cuenta*
autoriza (v)
próximo
paso
Relación ambigua
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
Ambigüedad en soluciones de diseño software
Capas de máquinas abstractas
Principio de ocultación
Principio de sustitución
Polimorfismo
Principio de abierto y cerrado
Principio de inversión de dependencias
Patrón acción
Delegar
Patrón adaptador
Patrón cadena de responsabilidades
Patrón composición
Patrón estado
Patrón observador
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
Patrón Modelo Vista Controlador
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
A
leer
imprimir
El origen: leer e imprimir NO se comportan como abstracciones;
se mezclan con el contenido de A
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
imprimir
A
leer
leer e imprimir se comportan como abstracciones,
pero A depende de ambas
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
imprimir
A
leer
Cambio de dependencias
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
imprimir
A
leer
A necesita imprimir y avisa
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
imprimir
A
leer
A necesita imprimir y leer, y avisa
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
imprimir
A
leer
A necesita imprimir y leer, y avisa.
Además, se advierte de algo en la lectura
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
vista
(imprimir)
A
observador
controlador
(leer)
El patrón
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
Incertidumbre en los métodos de desarrollo
Pruebas
Implementación
Análisis
Método lineal
Se conoce el fin
(Cascada)
Diseño
Requisitos
dividir
métodos
Método iterativo
admitir incertidumbre
NO se conoce el fin,
pero se conoce su
proximidad
(Espiral)
Método exploratorio
NO se conoce el
fin, NI se conoce
su proximidad
(Caos)
COMPLEJIDAD
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
RUP
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
Manifiesto para el Desarrollo de Software Ágil
“Estamos descubriendo mejores maneras de desarrollar
Software haciéndolo y ayudando a otros a hacerlo. A través de
este trabajo hemos llegado a valorar:
•Los individuos y las interacciones sobre los procesos y las
herramientas.
•Software operativo sobre documentos detallados.
•Colaboración del cliente sobre la negociación de contratos.
•Responder a los cambios sobre seguir un plan.”
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
Modelos
software
(estructurado)
funciones y datos
(Se conoce el fin)
Métodos de
desarrollo
lineal
Condiciones
(Se conoce el
problema y se
conoce la
solución)
S
(objetos, …)
cosas interrelacionadas
(NO se conoce
el fin, pero se
conoce su
proximidad)
cíclica
(Se conoce el
problema, pero
NO se conoce la
solución)
P
…
(NO se
conoce el fin;
NO se
conoce su
proximidad)
arbórea
(NO se conoce el
problema y NO se
conoce la
solución)
E
incertidumbre
Nelson Medinilla Martínez
La incertidumbre como herramienta en la ingeniería de software
…
Elementos
constructivos
funciones y datos
cosas interrelacionadas
métodos
lineal
cíclico
arbóreo
Sistemas
S
P
E
incertidumbre
Nelson Medinilla Martínez
Descargar

Diapositiva 1 - Universidad Politécnica de Madrid