[Las cosas que no interesan]

« El Arte | Main | La Brecha »
pageicon sábado sep 15, 2007

El Software

La Ingeniería de Software siendo una de las áreas que se desprende de las ciencias de la computación, cuenta con un alto nivel de incertidumbre en cuanto a sus metodologías, procesos, disciplinas, etc. Uno de los problemas con los que siempre hemos tenido que lidiar quienes estamos involucrados en el desarrollo de software es tratar de hacerlo un negocio rentable y predecible, por que sabemos que aproximadamente el 70% de este tipo de proyectos fracasan en cuanto a sus costos y tiempos. Esta aterradora cifra nos plantea inmediatamente la pregunta: ¿por qué si es un negocio que genera tantas pérdidas, tiene tantas empresas que siguen empecinadas en invertir en él?

Seguramente la respuesta a esta pregunta no es fácil, seguramente es un negocio que genera tanto pérdidas como ganancias y eso lo hace atractivo. Pero para mí la respuesta es diferente. El software es mucho más que un negocio, es una necesidad real. Jonathan Schwartz's (http://blogs.sun.com/jonathan/) decía hace algunos meses en su Weblog que el software era una industria que estaba jugando un papel similar al que juega el petróleo hoy día: la civilización se está construyendo sobre él. Y esto es cierto, el mundo como lo entendemos hoy no sería posible sin el software, desde hipótesis matemáticas que solo se pudieron demostrar con la aparición del computador, hasta la invención de Internet que ha cambiado nuestra forma de interactuar, trabajar, leer, opinar y hasta jugar y entretenernos.

Estos hechos le dan al software la categoría de IMPRESCINDIBLE, es decir, por más problemas y pérdidas que nos implique su desarrollo tenemos que "lidiar" con él. Para mí esta es la razón por la cual después más proyectos fallidos que exitosos, la industria del software sigue avanzando y las empresas siguen invirtiendo en ella. Seguramente al principio la Ingeniería Civil, mucho antes de llamarse "Ingeniería Civil", tuvo que soportar grandes edificaciones derrumbadas, pequeños sismos que acabaron con ciudades a causa de las malas construcciones y muchos proyectos que tomaban 2 ó 3 veces el tiempo estimado; eso solo se pudo soportar por que es una ciencia imprescindible, por que los seres humanos necesitamos casas para vivir y carreteras para comunicarnos, no importan lo malas que estas sean.

Claro, como esta es una nueva disciplina, nos hemos enfrentado a muchos inconvenientes para llevar a cabo proyectos exitosos. Durante los 90, el modelo de desarrollo de software en cascada fue el paradigma a seguir; había un número de etapas que se ejecutaban una a continuación de la otra, la aplicación se definía en su totalidad y luego se implementaba, igualmente, en su totalidad. Este modelo aunque parece ser que funcionó bien al principio, hizo que nos restregáramos en la cara el dinamismo y la incertidumbre de los negocios que teníamos que implementar, fue descubrir que era poco menos que imposible definir completamente un negocio antes de implementarlo. Esto ocurre bien sea por que los encargados del negocio no lo tienen claro, por que el mercado cambie las reglas del juego, por que esté regido por normas del estado que pueden cambiar en cualquier momento o simplemente por que los clientes no saben exactamente lo que quieren.

Pero los únicos inconvenientes del desarrollo no son por la incertidumbre en el negocio, la tecnología también trae muchos problemas implícitos: enfrentarnos a nuevos lenguajes de programación, frameworks o bases de datos con los que no tenemos experiencia o peor aún, no han sido probados en el dominio del negocio; también siempre hay problemas de integración entre módulos o integración con sistemas heredados (legacy); el rendimiento de las aplicaciones, la infraestructura de la red, la diversidad de sistemas operativos, etc. son factores que silenciosamente pueden llevar al fracaso. La innovación tiene un precio, y es muy alto.

Para mí esta situación es poco menos que aterradora: nunca tenemos claro lo que vamos a implementar y tampoco estamos seguros si va a funcionar.

Ante esta situación angustiante, salieron al rescate las metodologías iterativas. Donde se siguen pasos similares a los del modelo en cascada, pero se hacen una y otra vez sobre los diferentes módulos de la aplicación. Estas iteraciones mitigan inteligentemente el riesgo de lo desconocido, seleccionando en una etapa temprana del proyecto un caso de negocio a implementar y con el cual se hace una prueba de todo el proceso a seguir, la tecnología a implementar y se entrega rápidamente al usuario una "muestra" de lo que va a ser el sistema, aterrizando de esta forma las expectativas y trabajando sobre la base de un producto real. Si la primera iteración complace al cliente y al equipo de desarrollo, se continúa con otra iteración seguramente más grande, pero con la confianza de ambos bandos: hay una idea general y clara de lo que se está haciendo.

Además hay otro factor clave para el éxito de esta metodología: el cambio es algo natural dentro del proceso. Esto quiere decir que un cambio en los requerimientos no va a tener el impacto que tiene cuando se usa una metodología en cascada y es que para eso están diseñadas las iteraciones, para construir nuevos módulos y para refinar los que ya están construidos, por que otro mito que se derrumbó es el de tener módulo perfectos en un solo tirón.

Después de haber estudiado sobre el modelo iterativo, sobre todo RUP, me queda claro que una aplicación nunca está completamente terminada, con el desarrollo de software ocurre lo que le ocurre a cualquier artista con su obra: nunca la termina, siempre habrá algo que no nos gusta y que puede ser mejorado. Esto hace parte de la naturaleza humana.

Hay una gran pregunta que me queda dando vueltas:

¿Qué tan seguro es definir e implementar una arquitectura y tomar decisiones basados en una pequeña parte del problema?
¿Aplica acá la ley de Pareto? ¿El 20% de la funcionalidad me mostrará el 80% de lo que va a ser el proyecto?

Pero a pesar de todas las dudas, estoy encantado con los modelos iterativos. El mundo del software nos ofrece demasiados enigmas que pueden ser descubiertos en su mayoría con una pequeña implementación temprana y hay que olvidarnos de las implementaciones perfectas para empezar a pensar en productos imperfectos que siempre deben ser mejorados.

Comentarios:

Buenas,

como sabes, la Ingeniería del Software se compone de varias etapas, la primera de las cuales es la comunicación con el cliente, en la cual se hace un análisis de los requerimientos de la aplicación que se va a construir. En esta etapa se comienza con una visión global de lo que la aplicación debe cubrir, y se recopilan todos los requerimientos que la aplicación necesitará, aunque no se entre en detalle en cada uno de ellos.

En esta etapa inicial ya dispones tanto de la visión global de la aplicación, como de los requerimientos de la misma, con lo cual, a la hora de hacer la implementación de las primeras iteraciones tú ya tienes una idea global de toda la aplicación y cómo cada una de las iteraciones se integrarán con las siguientes. No se debe intentar solucionar un problema sin saber qué se quiere solucionar.

Saludos,

José Luís Monteagudo

Enviado por José Luís Monteagudo en septiembre 17, 2007 a las 07:58 AM COT #

Buen dia, te escribo para hacerte una consulta , sabes en las etapas del modelo de proceso en cascada que principio de la ingeneria de software se aplica??

Desde ya muchas gracias

Enviado por juan en noviembre 24, 2007 a las 08:13 AM COT #

Enviar un comentario:
  • Sintaxis HTML: Deshabilitado