La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla MartínezUniversidad Politécnica de Madrid
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
Lo ideal, aunque en la práctica no siempre es realizable, es que los requisitos posean las
siguientes características: Correctos, •No ambiguos, incertidumbre nula•Completos, •….
Estándar IEEE 830
Consideraciones iniciales
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
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.”
…
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
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)
…
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).
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
“[…] 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]
El universo es uno, infinito e inmóvil [Bruno, siglo XIV]
Aquiles parte en busca de algo permanente e inmutable
[Homero, siglo -VIII]
Precedentes del modelo (concepto) temprano de la ingeniería de software
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
Consideraciones iniciales
Análisis
Diseño
Implementación
Pruebas
Requisitos
Desarrollo en cascada (exclusas)
Primero qué, después cómo
Incertidumbre nulaIncertidumbre >0
(corregir equivocaciones)
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
Incertidumbre nula
requisitos diseño métodos
ingeniería de software temprana
…
La premisa:
El modelo(sistema de ideas)
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
complejidad descriptivauniverso visible
problemas
soluciones
aspectos no visibles
Consecuencias
incertidumbre nula
incertidumbre > 0
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
complejidad descriptiva
universo visible
problemas
soluciones
divide y vencerás
sistemas conocidos y estables
cambios de requisitos
Introducir incertidumbreConsecuencias
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
Espacio de representación unidimensional
Figuras n-dimensionales
Analogía geométrica
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
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?
¿……?
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
¿Por qué no puedo pedir esa muñeca, a los Reyes Magos, si es gratis?
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
Espacio de representación bidimensional
Figura bidimensional
Ampliación del espacio geométrico
R2 = (X – X0)2 + (y – y0)2
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
complejidad descriptiva
complejidad por incertidumbre
universo software
(cantidad de información para describir el sistema)
(cantidad de información necesaria para resolver la incertidumbre asociada con el sistema)
Ampliación del espacio software
No ortogonalidad
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
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.
Términos
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
¿Dónde hay incertidumbre?
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
mesa
Hay incertidumbre en la solución, como recurso resolutivo
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
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
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
Se conoce el problema,
se conoce la solución
Se conoce el problema, NO se conoce la solución
NO se conoce el problema, NO se conoce la solución
S P E(CLASIFICACIÓN DE LEHMAN)
Incertidumbre en el problema y en la solución
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
tiempo
requisitos
T
R Incertidumbre
C
Incertidumbre en los requisitos (deseos)
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
consideraciones actuales
Los cambios son inherentes al software
La incertidumbre es inevitable en la ingeniería de software
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
La incertidumbre está presente en la ingeniería de software:
•Como recurso resolutivo•En los problemas•En las soluciones, en el proceso creativo
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
•Divide y vencerás no funciona
Condición: incertidumbre inevitable
•Se pierde la aditividad
Consecuencias:
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
Admitir incertidumbre en la solución es una técnica ancestral para enfrentar la complejidad descriptiva y la complejidad por
incertidumbre
Condición: incertidumbre inevitable
Solución: admitir incertidumbre en la solución
(ambigüedad o vaguedad)
expresión de alternativas imprecisión
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
modelos diseño métodos
máquinas abstractasprincipio de ocultacióntipos abstractos principio de sustituciónprincipio de abierto y cerradoprincipio de inversión de dependenciaspatrones de diseño
desarrollo evolutivodesarrollo espiraldesarrollo caosmétodos ágiles
variablesalternativasrutinasentidad-relación objetosagentes
soluciones software basadas en la admisión de incertidumbre
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
ambigüedad en el modelo
variables
tipos abstractos de datos
rutinas
alternativas
recursiónlistasvectoressimples
objetos (cosas)
clases
clases abstractas
interfaces
ambigüedad
(capacidad para expresar alternativas)
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
a n
b
s c
h i
p
y
mx
COMPLEJIDAD
modelos
cosas interrelacionadas
funciones y datos
ambigüedad en los modelos
a
b
c
x
yF (x)
Estructurado y objetos,
la diferencia: capacidad para expresar ambigüedad
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
a n
b
s ch i
p
y
mx
ps
m
i
n
h
modelos
cosas interrelacionadas
a n
b
s ch i
p
y
mx
ab
c
x
y
funciones y datos
CONVERGENCIA DE MODELOS
inutilidad de la diferencia
objetos funciones y objetos datos
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
F
F
F
F
Plasticidad del cuadrado
Rigidez del triángulo
F
FF
Incertidumbre en el diseño
propiedades de las formas alotrópicas
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
C
SCu
SCa
Si C < SCu
Si C < SCa
SCu <- Scu - C
12 3
Extracción*
Caja*
Cuenta*
C SCu
SCa
Si C < SCu
Si C < SCa
SCu <-Scu -C
1 2
3
ExtracciónCuenta
Caja4
65
1C
SCu
SCa
Si C < SCu
Si C < SCa
SCu <- Scu -C
2
3
estructura A
estructura B
estructura C
Formas alotrópicas del algoritmo
La misma cohesión y acoplamiento, modularidad, pero…
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
:Extracción
:Cuenta
- saldoimporte
dato
función de transformación
:Extracción :Cuenta
saldoautoriza(i)
i i
ni función, ni dato
ni función, ni dato
cosa cosa
Estructurado con ropaje de Objetos
Objetos
¡¿privado saldo?!
¿copiar la realidad?
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
Relación ambigua de A hacia B
Para una A hay más de una B posible
A B
B’
B’
A B
A’Relación unívoca
Para cada B hay una A
A B No hay relación entre A y B A no depende de B
A depende fuertemente de B
A depende débilmente de B
Relaciones dirigidas entre elementos software
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
Independencia UnicidadAmbigüedad
Nula Poca Mucha
dependencia
cantidad de información
0
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
Si cantidad < saldo
Extracción
Si no bloqueo
saldo
Cuenta
bloqueo
cantidad
próximo paso
leer saldo
leer bloqueo
leer otro dato
otro dato
Si otro dato
autoriza (cantidad)
Extracción*cantidad
próximo paso
autoriza (v)
Cuenta*
Relación ambiguaRelaciones unívocas
Ambigüedad en el diseño
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
Ambigüedad en soluciones de diseño software
Capas de máquinas abstractasPrincipio de ocultaciónPrincipio de sustituciónPolimorfismoPrincipio de abierto y cerradoPrincipio de inversión de dependenciasDelegar Patrón acción
Patrón adaptadorPatrón cadena de responsabilidadesPatrón composiciónPatrón estadoPatrón observador
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
Patrón Modelo Vista Controlador
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
El origen: leer e imprimir NO se comportan como abstracciones; se mezclan con el contenido de A
imprimir
leer
A
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
leer e imprimir se comportan como abstracciones,pero A depende de ambas
A
imprimir
leer
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
Cambio de dependencias
A
imprimir
leer
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
A necesita imprimir y avisa
A
imprimir
leer
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
A necesita imprimir y leer, y avisa
A
imprimir
leer
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
A necesita imprimir y leer, y avisa. Además, se advierte de algo en la lectura
A
imprimir
leer
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
El patrón
A
(imprimir)
(leer)
observador
controlador
vista
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
COMPLEJIDAD
dividir
admitir incertidumbre
Incertidumbre en los métodos de desarrollo
Análisis Diseño
ImplementaciónPruebas
Requisitos
Método linealSe conoce el fin
(Cascada)
Método iterativo
NO se conoce el fin, pero se conoce su proximidad
(Espiral)
Método exploratorioNO se conoce el fin, NI se conoce su proximidad
(Caos)
métodos
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
RUP
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
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.”
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
funciones y datos cosas interrelacionadas
incertidumbre
(Se conoce el problema y se conoce la solución)
S
(Se conoce el problema, pero NO se conoce la solución)
P
(NO se conoce el problema y NO se conoce la solución)
E
(Se conoce el fin)
lineal
(NO se conoce el fin, pero se conoce su proximidad)
cíclica
(NO se conoce el fin; NO se conoce su proximidad)arbórea
Modelos software
Métodos de desarrollo
Condiciones
(estructurado) (objetos, …)
…
La incertidumbre como herramienta en la ingeniería de software
Nelson Medinilla Martínez
S P E
Elementos constructivos
métodos
Sistemas
incertidumbre
lineal cíclico arbóreo
funciones y datos cosas interrelacionadas
…