jueves, 15 de noviembre de 2012

Modelos desarrollo de software

Autor:
PhD. Guillermo Choque Aspiazu
http://www.eldiario.net/
Publicado en:
Diciembre 27 de 2010

Un modelo es una estructura conceptual que sugiere un marco de ideas para un conjunto de descripciones que de otra manera no podrían ser sistematizadas. De esta manera, su estructura es diferente de la que se supone existe en el conjunto de fenómenos de la naturaleza. El modelo concebido en esta forma, impulsa la inteligibilidad y ayuda a la comprensión de los fenómenos, ya que proporciona los canales de interconexión entre hechos que sin la existencia de los lazos de inferencia, podrían permanecer aislados e independientes unos de otros. Otra versión del concepto de modelo es aquella que lo define como una serie de realizaciones que sirven durante una época de ciencia normal para definir problemas y métodos legítimos en un campo específico de investigación.


Se denomina software, programática, equipamiento lógico o soporte lógico a todos los componentes intangibles de una computadora, es decir, al conjunto de programas y procedimientos necesarios para hacer posible la realización de una tarea específica, en contraposición a los componentes físicos del sistema. Esto incluye aplicaciones informáticas tales como un procesador de textos, que permite al usuario realizar una tarea, y software de sistema como un sistema operativo, que permite al resto de programas funcionar adecuadamente, facilitando la interacción con los componentes físicos y el resto de aplicaciones. La evolución de la ingeniería del software ha traído consigo propuestas diferentes para mejorar los resultados del proceso de construcción. Las metodologías tradicionales haciendo énfasis en la planeación, y las metodologías ágiles haciendo énfasis en la adaptabilidad del proceso, delinean las principales propuestas presentes en la literatura. De manera paralela, el tema de modelos para el mejoramiento de los procesos de desarrollo ocupa un lugar importante en la búsqueda de la metodología adecuada para producir software de calidad en cualquier contexto de desarrollo.

La ingeniería del software cuenta con varios modelos, paradigmas o filosofías de desarrollo en los cuales se puede apoyar para la realización de un producto denominado software, de los cuales se puede destacar a los siguientes por ser los más utilizados y los más completos:

(1) Modelo en cascada o clásico. En la ingeniería del software el desarrollo en cascada, también llamado modelo en cascada, es el enfoque metodológico que ordena rigurosamente las etapas del ciclo de vida del software, de tal forma que el inicio de cada etapa debe esperar a la finalización de la inmediatamente anterior. Cualquier error de diseño detectado en la etapa de prueba conduce necesariamente al rediseño y nueva programación del código afectado, aumentando los costos del desarrollo. La palabra cascada sugiere, mediante la metáfora de la fuerza de la gravedad, el esfuerzo necesario para introducir un cambio en las fases más avanzadas de un proyecto.

(2) Modelo de desarrollo en espiral. El desarrollo en espiral es un modelo de ciclo de vida del software definido por primera vez por Barry Boehm en el año 1988, utilizado generalmente en la ingeniería del software. Las actividades de este modelo se conforman en una espiral, en la que cada bucle o iteración representa un conjunto de actividades. Las actividades no están fijadas a priori, sino que las siguientes se eligen en función del análisis de riesgo, comenzando por el bucle interior.

(3) Modelo de prototipos. En la ingeniería del software el desarrollo con prototipación, también llamado modelo de prototipos que pertenece a los modelos de desarrollo evolutivo, se inicia con la definición de los objetivos globales para el software, luego se identifican los requisitos conocidos y las áreas del esquema en donde es necesaria más definición. Entonces se plantea con rapidez una iteración de construcción de prototipos y se presenta el modelado en forma de un diseño rápido.

(4) Diseño rápido. El diseño rápido se centra en una representación de aquellos aspectos del software que serán visibles para el cliente o el usuario. El diseño rápido conduce a la construcción de un prototipo, el cual es evaluado por el cliente o el usuario para una retroalimentación; gracias a ésta se refinan los requisitos del software que se desarrollará. La iteración ocurre cuando el prototipo se ajusta para satisfacer las necesidades del cliente. Esto permite que al mismo tiempo el desarrollador entienda mejor lo que se debe hacer y el cliente vea resultados a corto plazo.

(5) Modelo por etapas. El modelo de desarrollo de software por etapas es similar al modelo de prototipos ya que se muestra al cliente el software en diferentes estados sucesivos de desarrollo, se diferencia en que las especificaciones no son conocidas en detalle al inicio del proyecto y por tanto se van desarrollando simultáneamente con las diferentes versiones del código. Estas diferentes fases se van repitiendo en cada etapa del diseño.

(6) Desarrollo iterativo y creciente. También denominado desarrollo incremental, es un proceso para el desarrollo del software, creado en respuesta a las debilidades del modelo tradicional de cascada. Para apoyar el desarrollo de proyectos por medio de este modelo se han creado entornos de trabajo, de los cuales los dos más famosos son el “Proceso Unificado de Rational” y el “Método para el desarrollo de Sistemas Dinámicos”. El desarrollo incremental e iterativo es también una parte esencial de un tipo de programación conocido como Programación Extrema y las demás estructuras para el desarrollo rápido de software.

(7) Desarrollo rápido de aplicaciones. El desarrollo rápido de aplicaciones es un proceso de desarrollo del software, desarrollado inicialmente por James Martin en el año 1980. El método comprende el desarrollo iterativo, la construcción de prototipos y el uso de utilidades CASE. Tradicionalmente, el desarrollo rápido de aplicaciones tiende a englobar también la usabilidad, utilidad y la rapidez de ejecución. Se suele utilizar para hace referencia al desarrollo rápido de interfaces gráficas de usuario tales como Glade, o entornos de desarrollo integrado completos. Algunas de las plataformas más conocidas son Visual Studio, Delphi, Foxpro o Anjuta.

Con lo mencionado se puede decir que los modelos tradicionales, para el desarrollo del software, se caracterizan por exponer procesos basados en planeación exhaustiva. Esta planeación se realiza esperando que el resultado de cada proceso sea determinante y predecible. La experiencia ha mostrado que, como consecuencia de las características del software, los resultados de los procesos no son siempre predecibles y sobre todo, es difícil predecir desde el comienzo del proyecto cada resultado. Sin embargo, es posible por medio de la recolección y estudio de métricas de desarrollo lograr realizar estimaciones acertadas en contextos de desarrollo repetibles. Rememorando la historia, el modelo de cascada fue uno de los primeros modelos de ciclo de vida que formalizó un conjunto de procesos de desarrollo de software. Este modelo de ciclo de vida describe un orden secuencial en la ejecución de los procesos asociados. El modelo espiral fue postulado como una alternativa al modelo de cascada. La ventaja de este modelo radica en el perfeccionamiento de las soluciones encontradas con cada ciclo de desarrollo, en términos de dar respuesta a los requerimientos inicialmente analizados. El modelo de cascada y el modelo espiral suponen, de manera general, que los requerimientos del cliente no cambian radicalmente en el transcurso de construcción del sistema.

Por otro lado, la realización de prototipos es una herramienta en la que se apoyan diferentes modelos de ciclo de vida. Un prototipo debe tener el objetivo de mostrar al cliente o a la gerencia del proyecto el resultado que se obtendrá de la implementación de cada uno de los requerimientos del cliente una vez terminado el desarrollo. Con los prototipos se tiene la posibilidad de obtener retroalimentación de manera temprana. La solución a algunos de los problemas presentados por las metodologías tradicionales se logra con una gran evolución del modelo espiral. El proceso unificado propone la elaboración de varios ciclos de desarrollo, donde cada uno finaliza con la entrega al cliente de un producto terminado. Este se enmarca entre los conocidos modelos iterativo-incrementales.

Más allá de los modelos tradicionales, muchos grupos de desarrollo han experimentado soluciones que basan su fundamento en la adaptabilidad de los procesos de desarrollo, en lugar de seguir esperando lograr resultados predecibles de un proceso que no evoluciona. Esta comunidad de desarrolladores e investigadores han nombrado su trabajo bajo lo que se conoce como modelos ágiles. Los modelos ágiles como puede entenderse mal, no están en contra de administrar procesos de desarrollo. Por el contrario promueven la formalización de procesos adaptables. La programación extrema es una metodología para el desarrollo de software ágil que define pocas reglas y pocas prácticas. La programación extrema promueve la adaptabilidad de los procesos de desarrollo basándose en los principios y prácticas que presenta. Quienes trabajan usando programación extrema deben seguir procesos disciplinados, pero más que eso, deben combinar la disciplina con la adaptabilidad necesaria del proceso. Los modelos Cristal se basan en el principio de que tipos diferentes de proyectos requieren tipos diferentes de metodologías. El modelo elegido debe depender de dos factores: el número de personas en el proyecto, y las consecuencias de los errores. Conforme al principio de las metodologías ágiles, Scrum recalca la imposibilidad de encontrar procesos definidos y repetibles cuando no existen problemas, personas, ni ambientes definidos y repetibles.

Para conocer más acerca del Doctor Choque y sus publicaciones, haz clic en el siguiente vínculo: