Noticias Weblogs Foros Wiki Código
 

ESTE ARTÍCULO ESTÁ INCOMPLETO

No Hay Balas de Plata: Esencia y Accidentes de la Ingeniería del Software

De todos los monstruos que pueblan las pesadillas de nuestro folclore, ninguno más terrible que los hombres-lobo porque se transforman inesperadamente de lo familiar a lo horroroso. Para ellos se necesitan balas de plata que, de una manera mágica, les den descanso.1)

El familiar proyecto de software, al menos tal como lo ve el directivo no técnico, tiene un carácter parecido: normalmente es inocente y sencillo, pero es capaz de convertirse en un monstruo de plazos incumplidos, presupuestos hinchados y productos fallidos. Es así que oímos peticiones desesperadas de balas de plata: algo que haga bajar los costes del software con la misma rapidez que los costes de hardware. 2)

Pero, mirando al horizonte de una década 3) no vemos ninguna bala de plata. No hay un sólo desarrollo, ni en tecnología ni en técnicas de gestión, que por si mismo prometa ni una mejora de un orden de magnitud en productividad, en fiabilidad, en sencillez. En este artículo, trataré de mostrar el porqué, examinando tanto la naturaleza del problema del software como las propiedades de las balas propuestas.

Por otro lado, el escepticismo no es pesimismo. Aunque no vemos ninguna adelanto alarmante (startling breakthroughs) –y de hecho, creo que sería incongruente con la naturaleza del software– muchas alentadoras innovaciones están en camino. Un esfuerzo disciplinado y consistente para desarrollar, propagar y explotar estas innovaciones puede efectivamente producir una mejora de un orden de magnitud. No hay ningún “camino real”, pero hay un camino.

El primer paso en la lucha contra las enfermedades, fue reemplazar la teoría sobre demonios y la teoría sobre “humores” con la teoría de los gérmenes. Este único paso, el principio de la esperanza, por si mismo rompió todas las esperanzas de soluciones mágicas. Dijo a los trabajadores que el progreso se haría por etapas, con gran esfuerzo, y que un cuidado persistente debía ser prestado a una limpieza disciplinada. Lo mismo ocurre con la ingeniería del software en la actualidad.

¿Tiene que ser difícil? --Dificultades esenciales

No sólo no hay balas de plata a la vista en la actualidad, la misma naturaleza del software hace improbable que llegue a haber alguna –ningún invento que vaya a hacer por la productividad, fiabilidad y simplicidad del software lo que la electrónica, los transistores y la integración de mayor escala hicieron por el hardware de los ordenadores. No podemos esperar llegar a ver ganancias del doble cada dos años.

En primer lugar, debe observarse que la anomalía no es que el progreso del software sea tan lento, sino que el progreso del hardware de los ordenadores sea tan rápido. Ninguna otra tecnología desde el comienzo de la civilización ha visto una ganancia en el rendimiento y en el precio de seis ordenes de magnitud en 30 años. En ninguna otra tecnología puede uno obtener ganancias tanto en rendimiento mejorado como en coste reducido. Estas ganancias nacen de la transformación de la manufactura de los ordenadores de una industria de ensamblado a una industria de procesos.

En segundo lugar, para ver que grado de progreso puede uno esperar en la tecnología del software, examinemos las dificultades de dicha tecnología. Siguiendo a Aristóteles, voy a dividirlas en esencia, las dificultades inherentes a la naturaleza del software, y accidentes, esas dificultades que hoy en día se dan en su producción pero no son inherentes.

La esencia de una entidad de software es una construcción de conceptos interdependientes: conjuntos de datos, relaciones entre datos, algoritmos e invocaciones de funciones. Esta esencia es abstracta en cuanto a que esta construcción conceptual es la misma bajo diferentes representaciones. Es no obstante altamente precisa y detallada.

Creo que la parte difícil de construir software es la especificación, diseño y prueba de esta construcción conceptual, no la labor de representarla y de comprobar la fidelidad de dicha representación. Tenemos errores de sintaxis, sin lugar a dudas, pero son poca cosa comparados con los errores conceptuales de muchos sistemas.

Si esto es cierto, construir software siempre será difícil. Inherentemente no hay ninguna bala de plata.

Consideremos las propiedades inherentes de esta esencia irreductible de los sistemas de software modernos: complejidad, conformidad, variabilidad e invisibilidad.

Complejidad. Las entidades software son más complejas por su tamaño que quizá cualquier otra construcción humana porque no hay dos partes iguales (al menos por encima del nivel de sentencia). Si lo son, convertimos las dos partes similares en una subrutina–abierta o cerrada. En este sentido, los sistemas de software difieren profundamente de los ordenadores, edificios o automóviles, donde los elementos repetidos abundan.

Los ordenadores digitales son en si mismo más complejos que muchas cosas que la gente construye: Tienen un número muy grande de estados. Esto hace que concebirlos, describirlos y probarlos sea difícil. Los sistemas de software tienen más estados que los ordenadores, en ordenes de magnitud.

Del mismo modo, un crecimiento de una entidad de software no es meramente una repetición de los mismos elementos

1) , 2) Traducción de este párrafo G. Sánchez para la revista Binary
3) este artículo se publicó en 1987
 
traducart/no_silver_bullet.txt · Última modificación: 2008/06/18 10:23 (editor externo)
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki