Por una Teoría para el Desarrollo de Software


¿Ingeniería de Software o Industria de la Moda?

¿Se ha tomado tiempo investigando un nuevo método o práctica para encontrarse que sólo es el re-empaquetado y la regurgitación de ideas que ya había visto tiempo atrás?

¿Le frustra que cada nueva idea acerca del desarrollo de software parece estar a expensas y en agresiva competencia con todo lo que lo precede?

¿Le parece que seguir la última tendencia en el desarrollo de software se esta volviendo más importante que producir buen software?

Estas son las interrogantes que Ivar Jacobson plantea en algunos artículos, el primero publicado en el pasado mes de mayo en su blog titulado In Need of a Theory for Software Engineering, en el cual hace una analogía entre la industria del desarrollo de software (pero que se puede generalizar a la industria de TI en general) con la industria de la moda. Hace énfasis en que a veces pareciera que es más importante para muchos profesionales el seguir la última moda en el desarrollo de software, ya sea implementando alguna nueva metodología o utilizando alguna nueva tecnología “cool”, que realmente producir un buen software.

El problema radica en que cada nueva tendencia implica tirar a la basura todo el conocimiento previo, todas las estrategias existentes, incluso aquellas que han producido resultados, en su afán de adoptar lo nuevo, lo que está más de moda, y sintiendo lástima de aquel desarrollador que utiliza una notación de modelado "unificado" porque obviamente no está al tanto de las últimas tendencias de la industria.

Jacobson señala que esta búsqueda constante de la última moda en la industria es frustrante, ya que muchas de las "nuevas" ideas y tecnologías son sólo ideas y tecnologías previamente existentes pero que se han modificado ligeramente (o son vistas desde otra perspectiva) y luego son re-envasadas con otro nuevo y deslumbrante nombre.

Necesitamos una Teoría para los Métodos.

Posteriormente Bertrand Meyer apoya la posición de Jacobson junto con él en el artículo Methods Need Theory, en el cual señala que existe una "mala política", principal aspecto del problema que enfrentamos, en la que el mayor énfasis no está en dar soluciones reales a problemas difíciles, sino en los lemas publicitarios, la propaganda y las emociones. Meyer señala que muchos conceptos y buzzwords nuevos se comercializan como marcas de fábrica, son extendidos por gurús que suelen menospreciar o simplemente ignorar los conceptos existentes, los que sin embargo a menudo son muy similares a los temas que defienden.

De acuerdo con Jacobson y Meyer lo que hace falta es una piedra angular: una teoría y su validación, y sugieren tres pasos o estrategias a seguir para que la industria de desarrollo de software pueda conseguirla:

  1. Modelar la Naturaleza de los Métodos. Necesitamos una teoría fuerte de desarrollo de software. Los métodos formales nos dan la herramientas correctas para llevar a cabo éste modelado; los lenguajes orientados a objetos con contratos también pueden servir a este propósito. Porque sin un preciso, nada ambiguo modelo de las tareas y las restricciones del desarrollo de software no podemos mejorar significativamente. El modelo deberá ser independiente (describiendo el problema, no la solución) y no solo incluir definiciones y axiomas sino también teoremas que fundamenten todos los sistemas y todos los métodos viables.
  2. Encontrar el Kernel – la Madre de todos los Métodos. Todos los métodos de software comparten un conjunto de propiedades. Utilizando una teoría como base, podremos describir las propiedades de cualquier método que sea efectivo para el desarrollo de software de calidad. Para ello necesitamos encontrar el núcleo esencial o “kernel” del desarrollo de software, el cual no puede ser hacerse de forma simple.
  3. Describir cada método utilizando el marco teórico. Teniendo el kernel, todos los métodos pueden ser descritos y comparados. Podremos así cosechar las prácticas implícitas de todos los métodos o procesos ampliamente utilizados y probados. Algunas prácticas se solaparán, algunas otras se complementarán. El kernel nos permitirá quitar las diferencias cosméticas entre los métodos y ver las verdaderas diferencias entre ellos. Dado que el kernel es agnóstico en relación a cualquier práctica específica, podremos simplemente encontrar que es lo diferente entre ellas, no solo en la superficie sino en el fondo. Todo esto le quitará el elemento religioso en el cual cada método está embebido.

De lograrse, la industria podrá dejar de centrarse en las "guerras del procesos/métodos" para entonces concentrarse en lo que debemos hacer: proporcionar grandes soluciones.

Juntos por una Teoría para la Ingeniería de Software.

Recientemente Jacobson, en compañía de Ian Spence, retoma su llamado original en el artículo: Why We Need a Theory for Software Engineering publicado en Dr.Dobb’s, en el que insiste en la necesidad de crear un marco de referencia medular, una teoría base, que sirva a nuestra comprensión de la ingeniería de software. Dado que carecemos de ella seguimos reinventando viejos enfoques ligeramente diferentes con palabras nuevas, ocultando las verdaderas innovaciones y haciendo más difícil el uso de lo realmente bueno de lo nuevo y descartar solo aquellas partes realmente malas de lo viejo. Un marco teórico nos ayudaría a mejorar sustancialmente nuestra educación en ingeniería de software. Nos ayudaría a estar menos a la deriva en la forma en que reaccionamos a las nuevas ideas. Por último, también nos ayudaría a adoptar nuevas ideas más rápidamente de lo que podemos hacerlo en la actualidad.

El beneficiario de esta teoría será toda la industria del software en sus diferentes sectores: el industrial, el académico, los metodólogos y los desarrolladores. De esta forma la industria podrá llegar a la reingeniería de sus productos de forma sistemática, y mejorar continuamente nuestra forma de trabajar.

The real beneficiary of this theory will be the software industry, as has already been proven in many companies. We will be able to easily educate our people, get them up to speed, improve the way we work with our products, reengineer (a stronger word than refactoring) our products systematically, and continually improve the way we work.

-Ivar Jacobson

Finalmente Jacobson hace un llamado a la participación conjunta para establecer un estándar aceptado bajo el consenso de un grupo de expertos y autoridades. Por lo que invita a todo aquel que desee a colaborar en el proyecto a dar su opinión en su post "In Need of a Theory for Software Engineering" o bien por e-mail a a_theory@ivarjacobson.com.

Mayor información:

Acerca de Willy Mejia

Developer, Techie, Human... http://about.me/willyxoft
Esta entrada fue publicada en .NET, Ingeniería de Software, Java. Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s