Beruflich Dokumente
Kultur Dokumente
Tabla de contenidos
1. Introducción................................................................................................................................3
2. Fundamentos filosóficos de la temprana ingeniería de software................................................4
3. Consecuencias prácticas de la influencia filosófica...................................................................6
4. Influencia de la incertidumbre ...................................................................................................8
5. Otra alternativa filosófica...........................................................................................................9
6. Respuestas................................................................................................................................11
6.1 El diseño.............................................................................................................................12
6.2 Reproducir la realidad en el diseño....................................................................................14
6.3 Objetos vs. estructurado.....................................................................................................15
6.4 Las metodologías................................................................................................................17
6.4.1 Problemas....................................................................................................................18
6.4.2 Estrategias....................................................................................................................19
6.4.3 Problemas, estrategias y modelos de solución............................................................23
6.4.4 Metodologías...............................................................................................................24
6.5 Recapitulación ...................................................................................................................33
7. Conclusiones.............................................................................................................................34
Bibliografía...................................................................................................................................35
2
En busca de respuestas para la ingeniería de software Nelson Medinilla Martínez
1. Introducción
La construcción de software ha avanzado mucho, pero todavía hay innumerables
preguntas importantes sin responder.
Los objetos software y el carnaval de serpentinas que los rodea parecen ser una moda.
¿Lo son? Últimamente, se oye una jerga de términos extraños (Java, C++, patrones, J2EE, …)
en los bares, trenes, metro, y hasta en las cenas románticas, donde él (siempre es él) usa esos
términos, como el pavo real su cola, para demostrar a una ella (siempre aburrida). La misma
treta puede dar resultados con los jefes, los entrevistadores de recursos humanos y los clientes
que oyen lo que quieren oír, pero profesionalmente hablando:
¿Cuándo, cómo, por qué usar objetos en vez de estructurado? Más aún, ¿qué es
estructurado y qué es objetos? ¿Cuánto de verdad hay en las ventajas que dicen los defensores
de los objetos? ¿Conviene que el software sea un modelo de la realidad? ¿Por qué se cree que la
modularidad del software facilita las modificaciones cuándo realmente no lo hace? ¿Qué hacer
para facilitar las modificaciones del software?
¿Por qué fue distorsionada la programación estructurada original, al punto de creer hoy
que es algo que no es? ¿Por qué ha sido maldecido y desvirtuado el principio de ocultación de
información? ¿Por qué se han dejado de lado las estructuras abstractas de datos?
¿Cómo interpretar una metodología de desarrollo de software? Por ejemplo, ¿el Proceso
Unificado es una sucesión de ciclos en Cascada o es otra cosa, radicalmente distinta? ¿Se podría
utilizar eXtreme Programming para construir software estructurado o mejor, qué metodología se
debe usar con qué modelo de software? ¿Qué relaciones existen entre modelos de software
(objetos, estructurado,…) y metodologías, considerando que hay metodologías estructuradas
para diseñar software de objetos?
En temas más generales ¿por qué hubo que esperar hasta mediados de los noventa para
incorporar los patrones al software, cuando los patrones son elementos cotidianos de cualquier
3
En busca de respuestas para la ingeniería de software Nelson Medinilla Martínez
profesión? ¿Por qué hay tan poca experimentación, en sentido estricto, en la ingeniería de
software, cuando es usual en el resto de las ingenierías? ¿Por qué se ha abandonado
prácticamente la línea de investigación sobre complejidad del software? ¿Por qué ha sido
insuficiente el diluvio de metodologías? ¿Por qué tantas cosas sin responder?
Cada gurú tiene su propia respuesta, más aún cada constructor de software tiene la suya
propia, que es la mejor, por supuesto. Prevalece el criterio de autoridad: “lo dijo fulano”. Pero
faltan las respuestas universales que tiene cualquier ingeniería y su ausencia ha producido
desconcierto, confusión, empirismo, frustración. Hay demasiadas alternativas y ninguna ofrece
argumentos sólidos; se diseña objetos como si fuese estructurado, y se aplica el Proceso
Unificado como si fuese un desarrollo en Cascada; casi nunca hay suficiente tiempo para los
requisitos y casi nada de lo aprendido en los libros se utiliza en la práctica; para qué tanto
estudio, si cualquiera construye software.
Todas las preguntas técnicas que se han enunciado en esta introducción pueden ser
respondidas desde la visión filosófica del universo software. Ahí se encuentran las respuestas y
los cimientos de las posibles teorías que permitan describir y predecir las propiedades de
modelos, diseños y metodologías software. Por razones de espacio y tiempo, cada uno de los
temas ha sido tratado de forma resumida. Cada uno de ellos requiere de un trabajo aparte.
Los fundadores de la ingeniería de software tomaron como modelo las ideas contenidas
en el “Discurso del método para dirigir bien la razón y buscar la verdad en las ciencias”, escrito
por Descartes y publicado en 1637. A fin de cuentas, Descartes también se había propuesto
4
En busca de respuestas para la ingeniería de software Nelson Medinilla Martínez
La premisa de Descartes era que todo se puede conocer o dicho de otro modo, que la
incertidumbre es erradicable. “no puede haber ninguna [cosa], por lejos que se halle situada o
por oculta que esté, que no se llegue a alcanzar y descubrir.” Y creía, además, que la clave para
alcanzar ese conocimiento es el método, porque el método equivale al compás para trazar una
circunferencia perfecta, independiente del pulso del dibujante. Suponía que la razón es igual
para todos los humanos y que no todos llegan a la verdad por falta de método. “lo importante no
es tener un buen entendimiento, sino aplicarlo bien […] Si la ciencia es una, si la naturaleza
humana es única, si el método matemático es, con orden y cuidado, exacto, bastará utilizar la
razón metódicamente para encontrar una verdad incuestionable de donde se puedan deducir
otras certezas.” Cualquier verdad es alcanzable con el mismo método.
Preocupado por los prejuicios Descartes rechaza como falsas todas las razones que
anteriormente había tenido por demostrativas. Es decir, rechaza todas las soluciones previas
porque “Nadie podrá ejercitar en forma atinada su razón si está lleno de prejuicios, que estorban
al libre discernimiento y la búsqueda correcta.”
5
En busca de respuestas para la ingeniería de software Nelson Medinilla Martínez
6
En busca de respuestas para la ingeniería de software Nelson Medinilla Martínez
tirar del carro. Es difícil imaginar una consecuencia más favorable de la filosofía, en particular
cartesiana, sobre el software. Por esta causa entristece ver la tumba de Descartes abandonada y
sombría en un rincón perdido de la iglesia de Saint Germain d´Pres, en París.
Y los cuatro siglos de arraigo filosófico han sido los causantes de la:
7
En busca de respuestas para la ingeniería de software Nelson Medinilla Martínez
• Confusión de las ideas nuevas con las viejas, porque interpreta lo nuevo con las
gafas de siempre. Se confunde el modelo de objetos con el modelo estructurado; se
confunden las metodologías tradicionales con las recientes, la Cascada con el
Proceso Unificado. Se continúa buscando El Método. Se continúa creyendo en la
eficacia de la división para resolverlo todo, que la modularidad resuelve el
problema del cambio de requisitos.
4. Influencia de la incertidumbre
Incertidumbre es una palabra de amplio contenido semántico: problemático,
cuestionable, vago, no definido o determinado, dudoso, no seguro, ambiguo, sujeto a
oportunidad o cambio, no estable, variable, no confiable. Todos estos significados se pueden
agrupar en dos categorías: vaguedad (imprecisión) y ambigüedad.
8
En busca de respuestas para la ingeniería de software Nelson Medinilla Martínez
9
En busca de respuestas para la ingeniería de software Nelson Medinilla Martínez
Dicho en tono metafórico. Hasta ahora la llave caída se ha estado buscando en la zona
iluminada de la calle porque era más fácil, pero si la llave se ha caído en la zona oscura, habrá
que buscarla ahí aunque sea más difícil.
El software no ha inventado nada nuevo. Desde hace mucho tiempo, los humanos
admiten o introducen incertidumbre en la solución cuando se enfrentan a un problema donde no
10
En busca de respuestas para la ingeniería de software Nelson Medinilla Martínez
pueden erradicar la incertidumbre. El oráculo de Delfos respondía con textos ambiguos a las
preguntas que se le formulaban. Los adivinos actuales repiten las mismas fórmulas de antaño.
En algunos transportes públicos se puede leer “la multa será de veinte veces el precio del
billete”, que simplifica el problema de renovar el cartel para que no se devalúe la multa. El
juego de ordenar ocho números colocados en nueve casillas no sería posible sin el margen de la
novena casilla vacía que permite el movimiento. El cálculo numérico de raíces irracionales se
realiza gracias a procesos cíclicos que toleran imprecisión en la soluciones. Pero en general,
estas soluciones, no son gratis; aumentan la complejidad de la solución. Retomando el ejemplo
del transporte público, hay que estar dispuesto a pagar ahora un cartel más caro y más difícil de
entender, para mañana ahorrarse la renovación del cartel.
La incertidumbre en la solución, como solución, siempre ha estado ahí, pero tapada por
el paradigma filosófico vigente. La tapaba o la agredía porque contradice sus propósitos:
alcanzar el conocimiento absoluto, el control detallado de todo. La incertidumbre se ha
considerado accidente y no esencia. Se podía arrinconar y eliminar, más tarde o temprano.
¡Cómo entonces, se puede renunciar a conocerlo todo y peor aún, cómo se puede
introducir voluntariamente incertidumbre en la solución! Nada, un disparate. Con esta idea
Brooks explicaba porqué había calificado de receta para el desastre al principio de ocultación de
información. “Los programadores deben conocer la semántica detallada de las interfaces, con
las que trabajan, mediante el conocimiento de qué hay en el otro lado. El ocultamiento de esa
semántica conduce a equivocaciones en el sistema” Quizás la misma idea pueda explicar porqué
IBM, en particular Harlan Mills, distorsionó y se robó el término de programación estructurada
desarrollado por Dijkstra (Brooks reconoció que las ideas de Harlan Mills estaban detrás de sus
argumentos en contra del principio de ocultación). Y, quizás también, esta obsesión por la
claridad absoluta explique porqué las estructuras abstractas de datos no llegaron a florecer.
6. Respuestas
Los problemas mencionados en la introducción se derivan de ese estar y no estar o no
saber dónde se está, que se ha producido como consecuencia del apego a un paradigma
inoperante. La base de la solución a todos esos conflictos es el cambio de la premisa filosófica,
11
En busca de respuestas para la ingeniería de software Nelson Medinilla Martínez
de modelo del mundo. Es una situación análoga al cambio de modelo del átomo cuando se creía
que era compacto y resultó que un haz de electrones atravesó un pan de oro, de lado a lado, sin
apenas desvío. Para explicar este fenómeno había que cambiar de modelo y aceptar que el
átomo debía estar prácticamente vacío, aunque al apoyarse en una tabla no se tenga la sensación
de vacío.
6.1 El diseño
La división del todo en partes es un antiguo recurso de los humanos para reducir las
dimensiones del problema que se debe enfrentar a la vez, con el objetivo de facilitar su
resolución. El “Arte de la guerra”, del siglo IV a.C., lo expresa del siguiente modo: “Gobernar
12
En busca de respuestas para la ingeniería de software Nelson Medinilla Martínez
sobre muchas personas como si fueran pocas es una cuestión de dividirlas en grupos o sectores;
es organización”. El método cartesiano, del siglo XVII, recomienda: “Dividir cada una de las
dificultades que examinare en cuantas partes fuere posible y en cuantas requiriese su mejor
solución.” Y un texto de software dice: “El sistema software debe ser dividido en un número de
módulos con interfaces bien definidas; cada módulo debe ser suficientemente pequeño y simple
para ser comprendido y programado.” Tantos años de persistencia han convertido la división en
un dogma de fe, pero no siempre funciona.
Dos o más elementos son independientes entre ellos sí y sólo sí carecen de relaciones
entre ellos. El principio de ocultación procura eliminar las relaciones entre los elementos de los
sistemas software o, si no puede, las debilita sustituyendo las relaciones unívocas (uno a uno)
por relaciones ambiguas (uno a muchos). Por ejemplo, la relación unívoca “dame el saldo” que
establece la parte del sistema encargada de la extracción, con la parte que tiene acceso al saldo,
se sustituye por la relación ambigua “autoriza la extracción de esta (cantidad)”. Así, la parte
encargada de la extracción se hace indiferente del mecanismo de autorización. Una distorsión
frecuente del principio de ocultación es “privatizar” las variables y después, acceder a ellas a
través de los llamados “get” y “set”; es una forma encubierta de diseñar estructurado con ropaje
de objetos.
Parnas tenía razón, los módulos tradicionales no facilitan las modificaciones del
software, ni la reducción del tiempo de desarrollo, pero tampoco lo puede hacer ninguna forma
de división. La definición de modularidad del estándar IEEE hace trampa cuando dice que se
trata de una propiedad del software que facilita los cambios. El estándar se equivoca y, propaga
la equivocación a todos los que le lean y le crean. La equivocación consiste en pensar que la
independencia (la cualidad que facilita las modificaciones y la reducción del tiempo de
desarrollo) es una consecuencia directa de la separación, pero muchas parejas de personas
separadas dirán que no es así.
13
En busca de respuestas para la ingeniería de software Nelson Medinilla Martínez
La división del todo en partes tiene dos problemas en el universo software. Primero, es
incapaz de producir independencia porque no destruye, ni debilita las relaciones entre los
elementos. Por tanto, es incapaz de facilitar la modificación, ni la construcción en paralelo de
los elementos del sistema software, para conseguir estos dos resultados es necesario introducir
incertidumbre en el diseño. Segundo, la división del todo en partes genera incertidumbre cuando
se divide un universo no aditivo, porque al reunir las partes, no se obtiene el todo inicial.
Muchas de las pruebas de integración fallan por esta causa.
Para facilitar los cambios en el software hay que introducir ambigüedad en el diseño y,
generalmente, esto distorsiona los elementos software y sus relaciones, respecto al dominio. Por
ejemplo, el elemento Cuenta, en el dominio del banco, sólo es una ficha, incapaz por sí sola de
hacer algo. Sin embargo, un elemento software “Cuenta”, diseñado para facilitar los cambios, es
capaz de autorizar el mismo la extracción de dinero, porque contiene el saldo y el algoritmo de
autorización. Es un reflejo anamórfico, que tiene el nombre “Cuenta”, únicamente, para no
perder la referencia con el dominio.
14
En busca de respuestas para la ingeniería de software Nelson Medinilla Martínez
a x
b
f(x)
y
c funciones y datos
n
a
m
s c p x
h i
b y
MODELOS
dividir
modelos
cosas
admitir ambigüedad interrelacionadas
COMPLEJIDAD
15
En busca de respuestas para la ingeniería de software Nelson Medinilla Martínez
para copiar o representar la realidad, deriva de la ambigüedad de esas definiciones. Los objetos
no se parecen más a la realidad que el estructurado, ni siquiera conviene que se parezcan a la
realidad porque se tornan engorrosos de modificar, pero los objetos ofrecen más libertad de
imaginación gracias a su ambigüedad. De esta libertad se aprovechan los que se aferran a la idea
estructurada para continuar diseñando software de forma estructurada, pero con ropaje de
objetos.
El modelo de objetos es mucho más complejo por su mayor riqueza de conceptos y por
su mayor capacidad de incertidumbre. Esta complejidad afecta a la máquina y a los
desarrolladores. Pero también, esta complejidad facilita la libertad de imaginación durante el
diseño y el enfrentamiento con la incertidumbre inevitable. De los recursos disponibles, los
objetos ofrecen las mejores condiciones para facilitar los cambios, pero no vale recubrir con
ropaje de objetos a los diseños estructurados. Figura 2.
16
En busca de respuestas para la ingeniería de software Nelson Medinilla Martínez
a x
b CONVERGENCIA DE MODELOS
y
c
a n
m
s c p x a n
h m
b i s c p x
y
h
b i
y
funciones y datos
n m
s
h p
modelos
i
cosas
interrelacionadas
17
En busca de respuestas para la ingeniería de software Nelson Medinilla Martínez
Con esos discursos y sin otros argumentos, la elección de una metodología sólo se
puede hacer por afinidad o simpatía; es fácil confundir las metodologías, mezclarlas o hacer
cualquier otra cosa. Para distinguir una metodología de otra hay que distinguir la esencia de
cada una, oculta detrás del empirismo y enredada en la madeja de sus respectivas peroratas
apologéticas. El bisturí teórico de la incertidumbre puede cortar esas madejas y mostrar la
esencia de cada metodología: su estrategia de resolución de problemas.
6.4.1 Problemas
Los problemas (dificultades) primarios del desarrollo de software están alrededor del
conocimiento y la estabilidad del problema del cliente y de la solución. Hace veinticinco años,
Lehman clasificó los sistemas software según estas dificultades. La Tabla 1 muestra la
clasificación de Lehman.
18
En busca de respuestas para la ingeniería de software Nelson Medinilla Martínez
SISTEMAS SOFTWARE
(CLASIFICACIÓN DE LEHMAN)
S P E
Se conoce el problema, Se conoce el problema, NO se conoce el problema,
se conoce la solución NO se conoce la solución NO se conoce la solución
INCERTIDUMBRE
6.4.2 Estrategias
19
En busca de respuestas para la ingeniería de software Nelson Medinilla Martínez
• Estrategia lineal
Cuatro siglos de costumbre han inducido a creer que ese método es El Método Ideal, el
método lógico, el único; cualquier desviación del Método refleja mediocridad.
1
Equivocación tiene el significado de algo mal hecho, mientras que error en ciencia o
tecnología, significa aproximación.
20
En busca de respuestas para la ingeniería de software Nelson Medinilla Martínez
• Estrategia cíclica
El cálculo de los irracionales renuncia a conocer con exactitud la respuesta, supone que
se conoce una solución aproximada (la incertidumbre esencial no es demasiado alta) y aplica
métodos cíclicos de aproximaciones sucesivas. En cada situación particular, la práctica será
quien decida los hitos, cada solución satisfactoria. Desde el punto de vista teórico no existe
solución exacta y por tanto, tampoco existe solución definitiva. Los métodos cíclicos también se
pueden alejar de la solución, aún en ausencia de equivocaciones. Cualquier refinamiento
expresa una estrategia cíclica.
Desde el punto de vista de riesgo, los métodos cíclicos representan una estrategia más
prudente que los métodos lineales, porque arriesgan mucho menos de cada vez. Los métodos
cíclicos abordan al comienzo, el mayor riesgo.
21
En busca de respuestas para la ingeniería de software Nelson Medinilla Martínez
• Estrategia exploratoria
22
En busca de respuestas para la ingeniería de software Nelson Medinilla Martínez
MÉTODOS DE DESARROLLO
Método lineal
Se conoce el fin
Pruebas
Implementación (Cascada)
Diseño
Análisis
Requisitos
dividir
métodos
Método iterativo Método exploratorio
NO se conoce el fin, pero NO se conoce el fin,
se conoce su proximidad NI se conoce su
admitir incertidumbre
proximidad
(Espiral)
(Caos)
COMPLEJIDAD
Los problemas, las estrategias y los modelos de solución se pueden relacionar en el eje
de incertidumbre. Los sistemas tipo S se deben enfrentar con una estrategia lineal porque es la
estrategia que se ajusta a la premisa de incertidumbre nula o despreciable. Los sistemas de tipo
P se deben enfrentar con una estrategia cíclica, que es adecuada para incertidumbre media.
Mientras que los sistemas de tipo E se deben enfrentar, de ser posible, con una estrategia cíclica
o con una estrategia exploratoria, en el peor caso. Una estrategia lineal para enfrentar un sistema
tipo P o E resulta poco prudente porque, en presencia de incertidumbre, arriesga todo a un solo
disparo con un arma deficiente.
23
En busca de respuestas para la ingeniería de software Nelson Medinilla Martínez
6.4.4 Metodologías
• Métrica Versión 3
Métrica 3:
24
En busca de respuestas para la ingeniería de software Nelson Medinilla Martínez
Resumiendo, Métrica 3 dice ser una estrategia universal enfocada hacia el proceso
(método) de desarrollo que contempla software estructurado y orientado a objetos. Enfatiza el
análisis de requisitos y pretende facilitar la adaptación, reutilización, comunicación,
entendimiento, además de facilitar la operación, mantenimiento y uso del producto software.
Métrica 3, según dice ella misma, es el resultado práctico de los últimos avances. Un análisis de
Métrica 3 ofrece el siguiente resultado.
Primero, Métrica pone toda su atención en el método y enfatiza los requisitos. Esto es
patognomónico de las metodologías que suscriben la premisa de incertidumbre erradicable.
Consideran que la verdad es alcanzable siempre y que el método es la vía para alcanzarla,
cualquiera que sea la verdad e independiente de la persona que aplique el método.
25
En busca de respuestas para la ingeniería de software Nelson Medinilla Martínez
Quinto, el nivel de detalle y precisión que ofrece Métrica, de cada tarea, de los
productos, procesos, participantes, etc., (y el orgullo de dar esos detalles y precisiones) es otro
índice claro de las pretensiones de exactitud y control propias de la premisa de incertidumbre
erradicable. El detalle y la precisión carecen de sentido en condiciones de incertidumbre
inevitable.
• Proceso Unificado
Con los objetos aparecieron muchas metodologías específicas para desarrollar software
utilizando objetos. En 1996 había alrededor de ochenta metodologías. Hoy se oye mucho el
Proceso Unificado, autoproclamado meta-metodología; algo así como una metodología de
metodologías, capaz de ajustarse a cualquier situación.
26
En busca de respuestas para la ingeniería de software Nelson Medinilla Martínez
Según el libro del Proceso Unificado, dirigido por casos de uso quiere decir que el
proceso de desarrollo sigue el hilo de los requisitos funcionales (expresados en los casos de
uso). Conjuntamente con los casos de uso se desarrolla la arquitectura del sistema, en un sentido
similar al papel que desempeña la arquitectura en la construcción de edificios.
La idea del huevo y la gallina, que utiliza el Proceso Unificado, expresa que sus autores
reconocen el carácter hermenéutico del proceso de diseño, la interdependencia entre el qué y el
cómo que impide disociarlos. Aunque después intenten disociarlos al proponer que todas las
iteraciones sigan la secuencia análisis, diseño, implementación, pruebas. Como no se aclara esta
contradicción es difícil saber si es involuntaria o intencional, siguiendo la idea de Parnas de
forzar (falsear) cualquier proceso a una cascada.
• es un desarrollo de software dirigido por los riesgos, mientras que la cascada está
dirigida por documento;
27
En busca de respuestas para la ingeniería de software Nelson Medinilla Martínez
Para el Proceso Unificado el desarrollo de software debe ser un proceso incremental que
tolera el refinamiento e, incluso, la marcha atrás, aunque le disgusta. El Proceso Unificado
aspira a ser anticipativo, (proactivo en el sentido de Pressman) a escala pequeña (iteraciones),
pero renuncia a la anticipación a escala del sistema software.
Esta última cualidad unida a las otras, ya descritas, indican que el Proceso Unificado es
una metodología que acepta la incertidumbre y se prepara para enfrentarla (aproximaciones
sucesivas guiadas por el riesgo), pero que desea y espera erradicar la incertidumbre trabajando
con esmero.
• Enfoque Ágil
Contrastando con el Proceso Unificado, el enfoque Ágil expresa: “No se puede dar una
descripción del software que se necesita y entonces que alguien lo desarrolle siguiendo un plan
28
En busca de respuestas para la ingeniería de software Nelson Medinilla Martínez
y un precio fijo. Una y otra vez, los intentos de conducir los proyectos software de esta manera
han fallado.” Tuvieron que pasar tres décadas desde la adopción (implícita) de las ideas
cartesianas para que comenzaran a cuajar las ideas Ágiles:
“En el 2001, motivados por la observación de que en muchas compañías los equipos de
software estaban atascados cada vez más en el lodo de los procesos, un grupo de expertos de la
industria se reunieron para establecer los valores y principios que permitan a los equipos de
software trabajar rápidamente y responder al cambio. Ellos se denominaron a sí mismos la
Alianza Ágil. Durante varios meses este grupo trabajó para crear una declaración de valores. El
resultado es El Manifiesto de la Alianza Ágil.
29
En busca de respuestas para la ingeniería de software Nelson Medinilla Martínez
El manifiesto Ágil expone dos conjuntos de alternativas y toma partido por el conjunto
que difiere de las ideas vigentes. Es una manera de expresar rebeldía contra esas ideas.
Los Ágiles dicen que tuvieron que descubrir los cuatro valores, mencionados en su
manifiesto, desarrollando software. Pero no hacía falta, esos cuatro valores que tanto trabajo les
costó encontrar son deducibles de la premisa que está debajo del manifiesto: la incertidumbre es
inevitable.
• La verdad no siempre es alcanzable y ningún método puede asegurar llegar a ella. En estas
condiciones, los humanos son los únicos capaces de tener éxito con su inteligencia,
experiencia, habilidad, intuición y demás cualidades que, históricamente, les han permitido
enfrentar la inmortal incertidumbre inevitable. Por tanto, son preferibles los individuos y las
interacciones sobre los procesos y las herramientas.
• La solución exacta, no ambigua, completa, etc. es inalcanzable. Sólo se podrá llegar a una
solución satisfactoria y la negociación de contratos poco puede precisar las condiciones de
la solución. Únicamente, la colaboración reiterada de los clientes validando software
operativo puede encontrar una solución satisfactoria. Las validaciones no se pueden hacer
sobre documentación por muy detalladas que sean. Por tanto, es preferible software
operativo sobre documentación detallada y la colaboración del cliente sobre negociación
de contratos. A las validaciones se puede llegar mediante aproximaciones sucesivas, si se
conoce algo de la solución y no se mueve demasiado o, en caso contrario, a través de
búsquedas, que pueden ser conducidas por heurísticas si se dispone de ellas. La estrategia
secuencial de primero averiguar con el cliente qué quiere y después desarrollar todo el
cómo, es muy arriesgada porque la incertidumbre inevitable sobre el qué puede hacer errar
el tiro y llegar a una solución no satisfactoria, cuando se han consumido todos los recursos.
• Habrá cambios y habrá que seguirlos para tratar de encontrar una solución satisfactoria; los
planes pueden conducir a soluciones no satisfactorias. Por tanto, es preferible responder a
los cambios sobre seguir un plan. Los contratos, planes y documentos serán más propensos
a consumir recursos inútilmente, mientras más detallados pretendan ser.
30
En busca de respuestas para la ingeniería de software Nelson Medinilla Martínez
manifiesto contrapone ambos extremos y esta oposición es una cualidad distintiva del enfoque
Ágil que marca una diferencia abisal con las metodologías lineales. Beck se expresa de forma
prudente. “A veces los consejos de Extreme Programming (XP) son absolutamente contrarios a
la sabiduría aceptada.”. En realidad, los consejos de XP son casi siempre contrarios a los
cánones tradicionales. Aunque, como dice Beck, ninguna de las ideas de XP es nueva. La
humanidad utiliza esas mismas ideas de una forma u otra, desde que se tiene que enfrentar con
incertidumbre inevitable.
Cada variante Ágil propone una forma de enfrentar esa premisa, y la matiza con
aspectos sociales del desarrollo de software. Esperar que alguna de esas variantes sea El Camino
del Éxito es aceptar otra vez la tentación de la sublimar la importancia del método. Pero es muy
difícil resistir a esa tentación. Dice un libro reciente de desarrollo Ágil: Extreme Programming
es un buen método de propósito general para el desarrollo de software.
Sería mejor tomar los métodos Ágiles como conjuntos de heurísticas que pueden o no
ser adecuadas, juntas o por separado, según cuándo, cómo, … Una descripción más detallada de
XP confirma la premisa de incertidumbre inevitable y la magnitud de esta incertidumbre que
pretende abordar: XP es una metodología ligera para equipos de trabajo de tamaño pequeño a
medio, desarrollando software en condiciones de requisitos vagos o de cambios frecuentes.
Se deja libertad de diseñar con esquemas a quien lo necesite, pero se recomienda que
recurran inmediatamente al código cuando surja alguna pregunta que puede ser respondida por
el software operativo. El diseño puede ser mejorado en la siguiente versión mediante la
31
En busca de respuestas para la ingeniería de software Nelson Medinilla Martínez
La arquitectura del sistema es importante para el enfoque Ágil, pero la imaginan como
un todo, más que dividida en partes. Se manifiesta la intención holística del enfoque Ágil. La
arquitectura es capturada por la metáfora del sistema. Si se dispone de una buena metáfora,
cualquier miembro del equipo podrá decir el funcionamiento del sistema como un todo.
32
En busca de respuestas para la ingeniería de software Nelson Medinilla Martínez
6.5 Recapitulación
El estudio de todos los problemas citados demuestra que su origen es la premisa acerca
de la incertidumbre. La suposición de incertidumbre erradicable conduce a una actitud que
aspira a alcanzar una solución exacta, no ambigua, completa, anticipada, a través de la
aplicación rigurosa de un método. El pensamiento, los modelos, las técnicas responden a esta
aspiración. Cuando no se consigue lo esperado, generalmente, se buscan las causas en
situaciones accidentales, falta de tiempo, de rigor, veleidad de los clientes, y se busca hasta otro
método, pero se mantiene la premisa, como sucede frecuentemente en la historia humana.
Los diseños trataban de ser un reflejo fidedigno del dominio del problema que debía
resolver el sistema software. La idea estaba en sintonía con los métodos científicos tradicionales
de describir la estructura de los flujos existentes, sin considerar mecanismos sobre la génesis de
esas estructuras, porque simplemente estaban dadas y eran inmutables.
33
En busca de respuestas para la ingeniería de software Nelson Medinilla Martínez
Con los objetos, más métodos, más confusión, desorden, preguntas. Surgieron los
patrones, el primer camino oficial de reutilización, ricos además, en técnicas de introducción de
ambigüedad en el diseño, aunque de forma implícita. La ambigüedad todavía no era, ni es, bien
recibida. No obstante, los objetos se diseñaban según las ideas tradicionales de funciones que
transforman datos, complicando los problemas, en vez de atenuarlos.
7. Conclusiones
La filosofía es parte de la cultura y está presente siempre aunque las tecnologías se
crean en otro mundo aparte. En particular, la ingeniería de software temprana se construyó sobre
cimientos puramente cartesianos que le dieron un impulso inicial, pero que después se
convirtieron en un severo obstáculo. La suposición de una verdad alcanzable, a través del
método, era una mirada arrogante, desde afuera, al universo software; era una expectativa muy
alta que al naufragar fomentó la frustración y el desorden. Cada uno se dedicó a buscar su
propia verdad.
34
En busca de respuestas para la ingeniería de software Nelson Medinilla Martínez
Bibliografía
Almendros, Manuel Psicología del caos Ediciones La llave. Madrid 2002.
Beck, Kent eXtreme Programming explained Addison – Wesley 2000
Berard, Edward V. Abstraction, Encapsulation and Information Hiding
http//www.toa.com/pub/abstraction.txt.
Blum, B. I. Beyond Programming: To a New Era of Design. Oxford University Press, 1996.
Boehm, Barry W. A Spiral Model of Software Development and Enhancement ACM SIGSOFT
Engineering Notes. Vol. 11 Nº 4 Aug. 1986 pp. 14-24.
Booch, Grady Object Oriented Analysis and Design Benjamin/Cummins Publishing. 1994.
Bourque, Pierre et al. Fundamental principles of software engineering- a journey Journal of
Systems and Software 62 (2002) pp. 59-70).
Brooks, F.P. Jr. The Mythical Man-Month: Essays on Software Engineering, Addison Wesley
Reading MA 1995. Second Edition.
Cockburn, Alistair Agile Software Development Addison-Wesley 2002.
DeMarco, Tom Slack Broadway Books NY. 2002.
DeMarco, Tom Controlling Software Projects Yourdon Press Computing Series. Prentice Hall
1982.
Descartes, René El discurso del método Editorial Alba. Madrid. España. 2001.
Dijkstra, Edsger W. EWD 1308: GAT Led to Notes on Structured Programming in Software
Pioneers. Springer 2002.
Eickelmann, Nancy ACM Fellow Profile: David Lorge Parnas Software Engineer Notes vol. 24
nº 3 May 1999 pp. 10-14.
Glass, Robert L. Reuse: What´s Wrong with This Picture? IEEE Software April 1998 pp. 57-59.
Glass, Robert L. Questioning the Software Engineering Unquestionable IEEE Software
May/June 2003 Vol. 20 Nº 3 pp.120-119.
Gómez, F.J. Espelosín Introducción a la Grecia antigua Alianza Editorial Madrid 1998.
Goodwin, Brian Las manchas del leopardo Tusquets 1998.
Guttag, John V. Abstract Data Types, Then and Now in Software Pioneers. Springer 2002.
Haythorn, Wayne What is object-oriented design? JOOP Vol. 7 Nº1 March/April 1994 pp-67-
78.
Henderson-Seller, Brian Convergence Is in the Air ROAD March/April 1996 pp. 47-49, 54.
Jacobson, Ivar et al. El proceso unificado de desarrollo de software Addison - Wesley 2000.
Johnson, Spencer. ¿Quién se ha llevado mi queso? 18º Edición Colección Empresa XXI.
Ediciones Urano. Barcelona. 2000
Klir, George J. and Tina A. Folger Fuzzy Sets, Uncertainty and Information Prentice Hall. N. J.
1988.
Larman, Craig Applying UML and Patterns First Edition. Prentice Hall 1998.
Lehman, M.M. Programs, Life Cycles and laws of software Evolution Proc. IEEE Special Issue
on Software Engineering, 68 (September 1980) 1060-1076.
35
En busca de respuestas para la ingeniería de software Nelson Medinilla Martínez
36