Metodologías para el desarrollo de software

En éste articulo trataré de resumir las metodologías para el desarrollo de software en un ámbito web y móvil; las aplicaciones web hoy en día han desplazado en parte el desarrollo de software tradicional, con esto me refiero al desarrollo de software bajo una licencia por cada instalación que se realice en un equipo, ya que las aplicaciones web pueden ofrecer las mismas funcionalidades y ventajas de una aplicación de escritorio pero con la ventaja adicional que es multi-plataforma, son aplicaciones que no tienen que ser instaladas en un equipo, solo acceder a ellas por medio de un navegador, es por esto que las aplicaciones web han tomado tanta fuerza en los últimos tiempos, llevando a que aplicativos antiguos tengan que ser actualizados y por ende cambiar las tecnologías de desarrollo, por otro lado tenemos las aplicaciones móviles que si son instaladas en un dispositivo y tienden a ser muy practicas por el simple echo de poder acceder a ellas desde un celular, es por esto que es importante tener en cuenta siempre metodologías de desarrollo que nos permitan realizar proyectos web y aplicaciones móviles estables y escalables.

En un principio existía la llamada metodología tradicional en la cual los desarrollos implicaban contar con un gran equipo de profesionales en diferentes áreas y un tiempo de desarrollo extremadamente largo,  pero fue en el año 2001 tras una reunión celebrada en Utah-EEUU que nació el termino “ágil” aplicado al desarrollo de software y se creo la llamada “The Agile Allience”, una organización sin animo de lucro dedicada a promover los conceptos relacionados con el desarrollo ágil de software y quienes crearon el “Manifiesto Ágil”, una lista de doce principios los cuales recomiendo tener en cuenta para todo tipo de desarrollo, estos principios son:

  1. La prioridad es satisfacer al cliente mediante tempranas y continuas entregas de software que le aporte un valor.
  2. Dar la bienvenida a los cambios. Se capturan los cambios para que el cliente tenga una ventaja competitiva.
  3. Entregar frecuentemente software que funcione desde un par de semanas a un par de meses, con el menor intervalo de tiempo posible entre entregas.
  4. La gente del negocio y los desarrolladores deben trabajar juntos a lo largo del proyecto.
  5. Construir el proyecto en torno a individuos motivados. Darles el entorno y el apoyo que necesitan y confiar en ellos para conseguir finalizar el trabajo.
  6. El diálogo cara a cara es el método más eficiente y efectivo para comunicar información dentro de un equipo de desarrollo.
  7. El software que funciona es la medida principal de progreso
  8. Los procesos ágiles promueven un desarrollo sostenible. Los promotores, desarrolladores y usuarios deberían ser capaces de mantener una paz constante.
  9. La atención continua a la calidad técnica y al buen diseño mejora la agilidad
  10. La simplicidad es esencial.
  11. Las mejores arquitecturas, requisitos y diseños surgen de los equipos organizados por sí mismos.
  12. En intervalos regulares, el equipo reflexiona respecto a cómo llegar a ser más efectivo, y según esto ajusta su comportamiento.

A continuación mostraré un cuadro comparativo entre las metodologías tradicionales y metodologías ágiles de desarrollo.

 

Metodologías ágiles Metodologías tradicionales
Basadas en heurísticas provenientes de prácticas de producción de código Basadas en normas provenientes de estándares seguidos por el entorno de desarrollo
Especialmente preparados para cambios durante el proyecto proyecto Cierta resistencia a los cambios
Impuestas internamente (por el equipo) Impuestas externamente
Proceso menos controlado, con pocos principios Proceso mucho más controlado, con numerosas políticas/normas
No existe contrato tradicional o al menos es bastante flexible Existe un contrato prefijado
El cliente es parte del equipo de desarrollo El cliente interactúa con el equipo de desarrollo mediante reuniones
Grupos pequeños (<10 integrantes) Grupos grandes y posiblemente distribuidos
Menos énfasis en la arquitectura del software La arquitectura del software es esencial y se expresa mediante modelos
Pocos roles Más roles

 

 

Estos principios son la base de muchas de las metodologías que ya hemos podido escuchar o utilizar, todas encaminadas a dejar a tras los procesos largos y desarrollos eternos para un aplicativo, es verdad que las tecnologías de hoy en día han ayudado en cuanto al tiempo de desarrollo lo cual permite que los programadores y diseñadores de una aplicación se acomoden rapidamente a este tipo de metodologías.

Cada una de las metodologías coinciden en los principios básicos del desarrollo ágil, pero cada metodología tiene características propias y hace incapié en algunos aspectos más específicos, a continuación mencionaré las metodologías que tanto a nivel corporativo como freelance podemos aplicar.

Programación extrema (XP)

Es una metodología que promueve el trabajo en equipo, preocupándose por el aprendizaje de los desarrolladores y propiciando un buen clima de trabajo, esta basada en la comunicación continua con el cliente y el equipo de desarrollo, simplicidad en las soluciones desarrolladas y extremadamente prepara para los cambios ya que es una metodología muy utilizada para proyectos que no cuentan con una buena documentación de  requisitos, por consiguiente existe gran riesgo técnico.

Metodología SCRUM

Es una metodología utilizada principalmente para proyectos con un rápido cambio de requisitos, no me refiero a que no estén bien definidos y por esto tengan que cambiar, sino que cada día pueden estar creciendo, generando nuevas funcionalidades principalmente, El desarrollo se realiza mediante iteraciones, denominadas sprints, con una duración de 30 días. El resultado de cada sprint es un incremento ejecutable que se muestra al cliente. La segunda característica importante son las reuniones a lo largo proyecto, entre ellas destaca la reunión diaria de 15 minutos del equipo de desarrollo para coordinación e integración.

Metodología CRYSTAL

Es una metodología que se centra en el equipo de desarrollo y le da la importancia requerida, se preocupa por mejorar los conocimientos y habilidades de los programadores así como tener políticas de trabajo definidas, las cuales dependerán del equipo de trabajo por ejemplo Crystal Clear (3 a 8 miembros) y Crystal Orange (25 a 50 miembros), esta metodología puede ser utilizada por programadores Freelance aunque algunos no tengan en cuenta esta metodología, la suelen utilizar sin estar consientes de esto, ya que algunos freelance están constantemente en aprendizaje y trabajan remotamente con equipos pequeños.

Metodología de desarrollo de sistemas dinámicos (DSDM)

Sus principales características son: es un proceso iterativo e incremental y el equipo de desarrollo y el usuario trabajan juntos. Propone cinco fases: estudio viabilidad, estudio del negocio, modelado funcional, diseño y construcción, y finalmente implementación. Las tres últimas son iterativas, además de existir realimentación a todas las fases. Es una metodología que se basa en la utilización de tecnologías y frameworks  de vanguardia que permitan desarrollo de una aplicación en un tiempo corto y previniendo que la tecnología cambie, el desarrollador o equipo de desarrollo puede tomar su propias decisiones sin estar limitado por un tercero, de igual forma el equipo de desarrollo debe hacer entregas frecuentemente cortas y funcionales, es una metodología en la que el desarrollador o equipo deben tener en mente el cambio de funcionalidad ya que esta metodología no se cuenta con un documento de requisitos previo, así que una funcionalidad debería poder ser rápidamente revertida, la verificación de la calidad existe a lo largo de todo el proyecto junto con el cliente y no al final del desarrollo  es una metodología muy bien aceptada para freelance ya que permite ofrecer precios competitivos sin invertir en demasiados recursos y personal.

Como podemos ver,. no hay una “Gran Metodología” que podamos utilizar para todo tipo de proyecto en especial si estamos en un contexto web o móvil, toda metodología debe ser adaptada al contexto del proyecto, recursos técnicos, tiempos de desarrollo y tipos de sistema.

Comparte el conocimiento

Deja un comentario

avatar
wpDiscuz