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!