Metodologías de desarrollo de software


Comparar y más aun clasificar a las metodologías de desarrollo de software es una tarea muy difícil, existen una gran diversidad de metodologías, cada una de ellas especifica que prácticas, técnicas y actividades seguir, definen las notaciones a usar, cuales son los artefactos que se obtienen en cada etapa del mismo, etc. Está comprobado que el uso de las metodologías se justifica mucho más para proyectos de gran tamaño, este hecho hace que a la hora elegir una, el analista cuente con una diversidad de opciones lo que le otorga la libertad de poder seleccionar aquella metodología que más se adapte la naturaleza propia del proyecto. Sin embargo esto no suele ser así siempre. No todos los seres humanos piensan de igual manera, es más, cada ser humano suele ver el mundo desde una perspectiva diferente, por ello existen muchas religiones en el mundo, muchos partidos políticos, y no todos simpatizan por el mismo equipo de futbol, entre otras cosas. Las metodologías no están exentas de este dilema filosófico. Existe mucha divergencia. En primer lugar podemos mencionar a aquellos que predican que las metodologías deben poner mucho énfasis en planificar y controlar el proyecto, capturar los requisitos, y tareas de modelado, promueven una intensa etapa de análisis y diseño antes de proceder a la construcción del sistema, además cada fase debe ser detalladamente documentada, como representantes de esta “escuela” podemos nombrar a y Winston Royce (Royce 1970) y Edward Yourdon (Yourdon 2009), entre otros. Estas metodologías suelen denominarse tradicionales, también llamadas Metodologías pesadas, dichas metodologías se inspiraron en disciplinas como la ingeniería civil o la ingeniería mecánica. En la ingeniería Civil se hace un estudio preliminar donde se obtienen las necesidades solicitadas por el comitente, luego se hace un diseño generalizado con planos muy genéricos y sin escala, seguidamente se procede a hacerse un diseño más detallado, donde ya se sabe que es lo que se construirá, como se armaran las piezas de las carpinterías y los artefactos sanitarios, que ambientes del edificio se construirán, cuantos y que tipos de obreros serán necesarios para a llevarlo a cabo, luego se comienza la construcción y los ingeniero o arquitectos se limitan a controlar la ejecución de su obra hasta que esta se entrega.

Por su parte si existen metodologías pesadas no sería raro encontrarse con las metodologías Agiles o livianas, las metodologías Agiles sostienen que el desarrollo de software debe verse como un modelo incremental, donde se hacen entregas pequeñas de software con ciclos más cortos y rápidos, eliminando la burocracia de la documentación como lo hacen las metodologías tradicionales, de una manera más cooperativa ya que se incluye al cliente y desarrolladores para trabajar juntos y por medio de una comunicación muy cercana y fluida. el cliente es un factor de primer orden, ya que a los procesos predecibles dentro de la construcción del software requieren de componentes que se comporten de manera predecible, los clientes no son predecibles ellos son altamente inconstantes y no lineales, por ello las metodologías ágiles están más orientados a la gente y no orientados al proceso; la metodología agiles son mucho más sencillas, ya que son más fáciles de aprender y modificar, además son mucho más adaptables, dado que permiten hacer cambios de último momento. En las metodologías ágiles, la documentación más importante es el código fuente. Son defensores de la escuela Agil (MANIFIESTO AGIL 2001), Kent Beck (Beck 2009), Martin Fowler (Fowler 2000), Ron Jeffries (Jeffries 2001), Ken Schwaber (Schwaber 1995), Jeff Sutherland (Sutherland 2009), entre otros.

Como se dijo anteriormente las metodologías de desarrollo de software están relacionadas con otro concepto muy importante que las engloba: el Ciclo de Vida de Desarrollo de Software.

Es un requisito primordial que las metodologías abarquen en todo su amplitud el CVDS. Para ilustrar el concepto de CVDS, en la figura 1.1 se muestra las diferentes etapas por la que atraviesa un sistema a lo largo de su vida según el proceso de desarrollo Cascada.



Figura 1.1 - Fases del ciclo de vida de desarrollo de sistemas en la metodología Cascada

Por consiguiente podemos clasificar a las metodologías en dos grandes grupos: Las metodologías “Tradicionales” y las metodologías “Ágiles”. Cabe destacar que para llegar a las metodologías ágiles hubo un proceso de cambio filosófico el cual partió y se origino por la las falencias y falta de respuestas a algunos problemas de las metodologías tradicionales. Existen también las metodologías de “tecnología Web” y otras a las que por sus características podemos formar un tercer grupo al que denominaremos “Otras metodologías”. La tabla 1.1 resume está clasificación, dicha tabla enumera las metodologías más conocidas a qué grupo clasificatorio pertenece. La justificación de esta clasificación, una explicación detallada de las metodologías más representativas de cada grupo será explicada en las siguientes secciones. Luego se introducirá el concepto de Implementación que es el tema central básico de esta tesis y se tratará como cada una de esas metodologías lleva a cabo la fase de implementación del software.

Tabla 1.1 Tabla comparativa de Metodologías de desarrollo de software

Clasificación

Metodologías

Tradicionales

Cascada, Modelo V,RAD, MERISSE, METRICA, SSADM

Iterativas/Evolutivas

Prototipos, Espiral, Espiral WIN&WIN, Entrega por etapas , RUP

Ágiles

XP, SCRUM, CRISTAL, Desarrollo Adaptable, Open Source, DSDM, Desarrollo manejado por Rasgos, Code and Fix

Tecnología Web

OOHDM,HDM, RNA, etc

Otras

Orientada a Aspectos, Sistemas de tiempo real, Basado en componentes