17.5.05

Las dificultades del desarrollo de software

Para comentar las dificultades que plantea el desarrollo de software voy a partir del planteamiento de Frederick P. Brooks en su artículo, No Silver Bullet. En este artículo Brooks distingue entre dificultades esenciales (inherentes a la propia naturaleza del software) y accidentales (relativas a su producción, o por decirlo de otra forma, la materialización empleando una determinada tecnología y herramientas, de las ideas que se quieren plasmar con el software).

Las dificultades esenciales afectan a la especificación, el diseño y las pruebas del software. Y no a lo que se entiende por programación. Según esto, hacer software siempre será difícil, no se encontrará una bala de plata que pueda resolver esta situación. Estas dificultades tienen su origen en ciertas propiedades que presenta el software: complejidad, conformidad, variabilidad e invisibilidad.

En cuanto a las dificultades accidentales, queda la mejora de las tecnologías y herramientas que se emplean para programar. Brooks cita los lenguajes de alto nivel, el tiempo compartido, y los entornos de programación unificados. También habla de promesas como el lenguaje Ada, la OO, la inteligencia artificial, los sistemas expertos o la programación automática. Cada uno de ellos ofrece una forma de representar la solución a un problema.

Cualquier solución será de este tipo, pero en cada uno de los ejemplos citados, la forma de abordarlo es diferente. Cada uno aporta algo, pero también adolece de algo, que le impide convertirse en una solución que aventaje con claridad a lo que ya hay.

Se habla de los metadatos y los metamodelos. Hay planteamientos como MDA y AOM (que ya he citado en alguna ocasión: MDA, AOM) que se apoyan en ellos, y creo que la flexibilidad y alcance tienen estas técnicas es mucho mayor que el que ofrecen las soluciones actuales. Por dos razones:
  • Permiten trabajar a niveles de abstracción más altos, de hecho, se pueden añadir los niveles de abstracción que sean necesarios.
  • La abstracción podría aplicarse a casi cualquier aspecto de la solución (por no decir todos). No solo en cuanto a la descripción de los datos, que suele ser lo más habitual, sino al procesamiento de los datos, los aspectos de control de ejecución, concurrencia, persistencia, distribución, etc. En todas estas áreas se ha avanzado mucho, y hay donde elegir, pero no hay soluciones que las integren todas y al mismo tiempo lo hagan desde un nivel de abstracción mayor, que sólo requiera aportar la información precisa, sin tener que ocuparse de la sintaxis o de mantener manualmente la coherencia entre diferentes partes de la aplicación.

Technorati tags: mda, aom, desarrollo software, metadatos, metamodelos