martes, 10 de septiembre de 2024

Pesadillas de los proyectos de software (naturaleza de los grandes problemas)

Los Proyectos de software

MONSTRUOS DE PESADILLA

Reflexiones de Federik P. Brooks


"De todos los monstruos que llenan las pesadillas de nuestro folklore, ninguno aterroriza más que los hombres lobo; porque se transforman inesperadamente de lo familiar a lo horroroso. Para éstos,se buscan balas de plata que puedan mágicamente conseguir  que descansen."



PARRAFOS DE "NO SILVER BULLET"  (una lectura para crecer)

NO SILVER BULLET

Esenciales y accidentales de la Ingeniería de Software

Federick P. Brooks Jr.  , septiembre 1986

Toda construcción de software implica tareas esenciales( la configuración del complejo concepto estructural que componen la entidad de software abstracta)  y tareas accidentales( la representación de estas entidades abstractas en lenguajes de programación y el mapeo de estas en lenguajes de máquina dentro de limitaciones de espacio y velocidad.) 

La mayoría de las grandes ganancias pasadas en la productividad del software provienen de la eliminación de barreras artificiales que han hecho que tareas accidentales excesivamente difíciles, como por ej:  restricciones de servers, programación incómoda Idiomas, falta de tiempo de máquina .

¿Cuánto de lo que hacen ahora los ingenieros de software es Todavía dedicado a lo accidental, en contraposición a lo esencial?.

...

De todos los monstruos que llenan las pesadillas de nuestro folklore, ninguno aterroriza más que los hombres lobo; porque se transforman inesperadamente de lo familiar a lo horroroso. Para éstos,se buscan balas de plata que puedan mágicamente conseguir  que descansen.

El conocido proyecto de software tiene algo de este carácter (al menos tal como lo ve el gerente no técnico), generalmente inocente y directo, pero capaz de convertirse en un monstruo de cronogramas incumplidos, presupuestos arruinados y productos defectuosos. 

Entonces escuchamos desesperadas suplicas  por una solución milagrosa, algo que haga que los costos del software caigan tan rápidamente como los costos de las computadoras. los costos de hardware sí lo hacen.

Pero, si miramos hacia el horizonte próximo, dentro de una década, no vemos ninguna solución milagrosa. no hay un solo desarrollo, ya sea en tecnología o en técnicas de gestión, que por sí solo prometa incluso una mejora de un orden de magnitud en productividad, confiabilidad y simplicidad. En esto 

En este artículo intentaremos ver por qué, examinando tanto la naturaleza del problema del software como las propiedades de las balas propuestas.

Sin embargo, el escepticismo no es pesimismo.

Dificultades esenciales:

Complejidad

La complejidad del software es una propiedad esencial no una accidental

Muchos de los problemas clásicos del desarrollo de productos de soft derivan de su esencia compleja y su crecimiento no lineal

...

Conformidad

Mucha de la complejidad que debemos manejar es "complejidad arbitraria" forzada por instituciones y sistemas creados por humanos , a cuyas interfaces el soft debe conformar

...

Cambiabilidad (posibilidad de cambio)

La entidad de software está constantemente sujeta a presiones de cambio. Por supuesto, también lo son los edificios, coches, ordenadores. Pero las cosas manufacturadas rara vez se modifican después de su fabricación; Son reemplazados por modelos posteriores, o se incorporan cambios esenciales en modelos que son el mismo diseño básico pero con numero de serie nuevos

 Las evoluciones de  automóviles son realmente bastante infrecuente; los cambios  de las computadoras lo son un poco menos. Ambos son mucho menos frecuentes que modificaciones al software . 

En parte, esto se debe a que el software de un sistema resuelve su función, y la función es la parte que más siente las presiones del cambio. En parte se debe a que el software puede ser cambiado  más fácilmente ( es pura materia de pensamiento, infinitamente maleable. )

De hecho, los edificios pueden cambiar , pero los altos costos del cambio, entendidos por todos, sirven para amortiguar los caprichos de los cambiadores.

Todo el software exitoso se cambia. Hay dos procesos en juego:

Como producto de software resulta útil, la gente lo prueba en casos nuevos que se encuentran en el límite o más allá del  dominio original. 

Las presiones para ampliar la función provienen principalmente de usuarios a quienes les gustan las funciones básicas e inventan nuevos usos para el soft.

En segundo lugar, el software exitoso también sobrevive más allá de la vida normal de la máquina durante que se escribe por primera vez. Si no son computadoras nuevas, al menos discos nuevos, pantallas nuevas. Cambian  las impresoras; y el software debe adaptarse a sus nuevos vehículos de oportunidad. 

En resumen, el producto de software está integrado en una matriz cultural de aplicaciones, usuarios, leyes y vehículos mecánicos. Todos ellos cambian continuamente, y sus cambios inexorablemente fuerzan el cambio en el producto de software

invisibilidad

El soft es invisible e imperceptible. No puede ser explicitado en un espacio , como la geometría (no en uno sino en muchos gráficos superpuestos)

...

Los términos mas adecuados serian: "esenciales y accesorios"


Obviamente en esos años Brooks creía en aspectos y herramientas que permitirían contener al LOBIZON

-LENGUAJES DE ALTO NIVEL

-TIEMPO COMPARTIDO

-AMBIENTES DE PROGRAMACION UNIFICADOS

-INTELIGENCIA ARTIFICIAL

    "No creo que de aquí provengan saltos revolucionarios en calidad y productividad

    Lo realmente duro en Construir software es: decidir que quiere uno y no: decirlo " 

 -SISTEMAS EXPERTOS

    "Como se pueden aplicar en las tareas del software? ... de muchas maneras

        .Sugiriendo reglas de interfaces

        .Consejos para estrategias de prueba

        .Recordando tipos de bugs y sus frecuencias

         .Optimización

        .etc

        Pero , la mas poderosa contribución seguramente sera: poner al servicio del programador                     inexperto la experiencia acumulada en la asbiduria de los mejores programadores

        La grieta entre los progrmadores promedio y los mejores es enorme (muchio  mayor que en otras         ingenierias)"

-PROGRAMACION AUTOMATICA

    "Todavía es difícil ver como esas técnicas se generalizarían hacia el salvaje mundo de los sistemas ordinarios "

-PROGRAMACION GRAFICA

-VERIFICACION DE PROGRAMAS

    "verificación de programas no significa programas a prueba de errores, pero la matemáticas hasta ahora solo reduce la carga de pruebas. La verificación de programas solo establece que un programa cumple con sus especificación . pero la parte mas dura de las tarea de software es arribar a especificaciones completas y consistentes, y mucha de la esencia de construir programas es de hecho : depurar las especificaciones  "

-HERRAMIENTAS Y AMBIENTES

-REFINAMIENTO DE REQUERIMIENTOS Y PROTOTIPACION RAPIDA

-DESARROLLO INCREMENTAL (CRECER NO CONSTRUIR)

-GRANDES DISEÑADORES

    "Grandes diseños provienen de grandes diseñadores , La construcción de software es un proceso creativo, la metodología puede potenciar y liberar mentes creativas nunca inspirar o inflamar a un esclavo"

...

Creo que los componentes conceptuales de la actividad están consumiendo la mayor parte del tiempo , pero ... no hay  una medida de los conceptos que pueden dar ganancias en la productividad

Entonces deberíamos considerar  los avances que apuntan a la esencia del problema del software , la formulación de esa compleja estructura conceptual .Afortunadamente son prometedores

Nota: ya sabemos que si se formula un problema ... su solución esta próxima! 


No hay comentarios: