Contexto


Las tres dimensiones críticas. Diagrama tomado del libro: Chrissis, M., Konrad, M. y; Shrum, S. (2011). CMMI for Development: Guidelines for Process Integration and Product Improvement. 3ra Ed. EEUU: Pearson Education.

Los retos que enfrentan las empresas dedicadas al desarrollo de software son cada vez más difíciles: clientes con muy altas expectativas con relación al bajo costo y alto rendimiento, tiempos de entrega cada vez más cortos, incorporación de nuevos requerimientos para hacer frente a los cambios del mercado y una feroz competencia a nivel internacional. Todo ello hace que estas compañías busquen formas de hacer estimaciones más reales y encontrar maneras innovadoras de aumentar su productividad.

Este proceso de mejora continua las obliga a buscar balancear tres elementos que son críticos en cualquier proyecto: las personas (sus habilidades, entrenamiento, y motivación), las herramientas y los procesos o métodos que utilizan para llegar a generar resultados. Desafortunadamente, gran parte de los proyectos de software de apoyo a las operaciones de las empresas no alcanzan a generar los resultados esperados, debido principalmente a que se enfocan en uno de estos tres elementos. Deciden contratar personal muy capaz sin tener las herramientas adecuadas, o el control del proceso, o bien, se enfocan en utilizar el método de moda creyendo que el equipo de trabajo tiene las habilidades necesarias para cualquier proyecto.

¿Qué es lo que hace que los proyectos de software sean exitosos?, ¿qué procesos o modelos de desarrollo pueden ser utilizados?, ¿existe algún modelo que pueda ayudar a las empresas a saber qué tan maduros se encuentran sus procesos de desarrollo?

Explicación


El desarrollo de software, (ya sea para sistemas simples o complejos, pequeños, medianos o grandes), sigue un proceso específico que permite mantener un control sobre las actividades que se realicen. Tal y como se establece una estricta secuencia de actividades para construir un edificio, de la misma forma lo hace el proceso de desarrollo de software. Mantener el control sobre las diferentes actividades de implementación de un software se vuelve una imperiosa necesidad para las compañías desarrolladoras, sobre todo cuando se trata de proyectos en los que intervienen cientos de personas que forman parte del equipo de trabajo. El éxito radica en la planeación, coordinación y organización de las variables de cualquier proyecto: costo, tiempo, recursos, alcance y calidad.

Según El-Haik y Shaout (2010), tener un proceso para llevar a cabo el desarrollo de software tiene las siguientes ventajas:

  • Mejora la comunicación entre las personas involucradas en el proyecto.
  • Permite uniformizar los procedimientos en la industria.
  • Asegura una mejor calidad en el producto
  • Mejora la productividad ya reduce el tiempo de entrenamiento.
  • Hace que cálculos del tiempo del ciclo de vida de los nuevos proyectos sean más precisos y,
  • Existen menos dependencias de las personas y de las compañías.

1.1 Modelos de desarrollo

En la industria del software existen algunos modelos del proceso de software que seguramente las conoces. Para que puedas hacer un breve repaso de cada una de ellas, utiliza la siguiente tabla:

Modelo

Descripción

Ventajas

Desventajas

Cascada

También conocido como el ciclo de vida del desarrollo de un sistema, es un modelo clásico que divide el desarrollo en etapas lineales y secuenciales.

Es un modelo que permite mantener el control administrativo y funcional.
Es efectivo para proyectos pequeños donde los requerimientos son estáticos.

No permite realizar ajustes o revisiones a etapas anteriores.
Una vez en la etapa de pruebas, es muy difícil regresar y hacer cambios sin afectar a la fecha de entrega.
No es posible incorporar cambios una vez avanzado el desarrollo.

Sashimi

Su nombre proviene del parecido que tiene al platillo japonés sashimi.
Es similar al modelo cascada, con la diferencia que las etapas se sobreponen dando la oportunidad de revisar la información de cada etapa antes de continuar con la siguiente.

Es posible encontrar a tiempo problemas en las etapas antecesoras.

Es un modelo que no es eficiente en el desarrollo de aplicaciones complejas donde se requieran constantes cambios.

V-Model

Se presume sea una extensión del modelo cascada, sólo que en lugar de ser una secuencia lineal de actividades, este modelo hace la forma V, después de la fase de codificación.

El enfoque hacia la verificación y validación permite que aumentar la calidad del producto.

Requiere de altos costos y muchos recursos para implementarlo.
No se sabe hasta dónde terminan las revisiones o inspecciones.

Espiral

Combina el modelo cascada con el modelo de prototipo, ya que pasa por etapas del ciclo de vida del desarrollo de un sistema apoyándose de la creación de prototipos que deben ser validados por el cliente en un proceso iterativo.

Es simple y permite involucrar al cliente en etapas tempranas del desarrollo.
Es posible ir incrementando su complejidad conforme avanza el desarrollo.

Es costoso y requiere de mucho tiempo.

Prototipo

Se basa en el diseño del sistema utilizando bocetos que representan la funcionalidad y la interacción con el usuario.

Es una forma rápida de comunicar ideas con el usuario.

El usuario puede involucrarse desde el inicio del desarrollo aportando ideas.

Cuando se crean prototipos funcionales, el usuario cree que ya se está avanzando en el desarrollo del sistema.
Pueden llegarse a tomar decisiones a la ligera que dificulten su implementación.

Caso

Es un modelo que combina el de cascada y espiral. Se basa en el principio de definir, implementar e integrar las líneas de código, funciones, módulos, el sistema y el proyecto completo desde un inicio.

Se genera un sistema a través de bloques de construcción.

Definir todo el proyecto a priori es impráctico.

RAD

Rapid Application Development es un modelo en el que se construye el software por medio de grupos de enfoque en los que se definen los requerimientos, se utilizan prototipos y componentes de reuso.

Agiliza la construcción por el ahorro en tiempo al reutilizar componentes.
Tiene un enfoque de calidad al involucrar al usuario.
Es flexible para incorporar cambios.

Existe la posibilidad de crear sistemas que cubren necesidades específicas de forma aislada y se vuelve un problema al tratar de integrarlos.

Desarrollo ágil

Establece un proceso iterativo de colaboración abierta, que permite desarrollar pequeños incrementos del sistema totalmente funcionales en periodos de tiempo muy cortos.

Es posible verificar el avance del sistema.
Puede incorporar cambios en cada iteración.
Permite ir conociendo la aceptación del producto e incorporar funcionalidades innovadoras de una forma más rápida.

Se desconoce la fecha de fin del proyecto completo.
Es difícil hacer una estimación del tamaño software y la cantidad de recursos necesarios para terminar el proyecto.

Proceso unificado

Es un proceso iterativo e incremental que establece como fases: incepción, elaboración, construcción y transición, divididas en series de tiempo iterativas.

Es posible estimar la carga de trabajo a lo largo del proyecto por áreas o responsabilidades.

Requiere de una alta especialización del trabajo.
El equipo necesita conocer el modelo para aplicarlo.

Cada uno de estos modelos de desarrollo de software, puede ayudar a mantener el control de las actividades del desarrollo de software, sin embargo, por sí solos no aseguran el éxito de los proyectos de software.

1.2 Importancia de la administración del software

El software es una industria que ha venido creciendo año con año, pese a las difíciles condiciones macroeconómicas. De acuerdo con IDC- International Data Consulting (2015), el valor del mercado del software para Latinoamérica es de 13,305 mdd en el 2014, registrando un crecimiento anual del 12.8%. Ante este panorama y la cantidad de proyectos de desarrollo de software, existe una verdadera preocupación por los índices de productividad, pues al fin y al cabo, todas las compañías desean hacer más con menos y acaparar el mercado antes que su competencia. Las decisiones que tome la organización sobre la productividad estarán enfocadas en optimizar los recursos, agilizar procesos y mantener la calidad. Jensen (2014), asegura que muchos de los problemas que se enfrentaban las organizaciones dedicadas al desarrollo de software en los años 70’s, persisten el día de hoy: Falta de fiabilidad, entregas tardías, imposibilidad de mantener, desempeño inadecuado y excesos en los presupuestos.

La siguiente gráfica, muestra los datos comparativos de un estudio llevado a cabo por Standish Group International en 2013, en la que divide el resultado obtenido de los proyectos de desarrollo de software en tres categorías: exitosos, desafiantes, fracaso. Observa que la tasa de éxito en el 2004 no difiere mucho de la registrada en el 2012, menos de la mitad de los proyectos llevados a cabo son exitosos. Aproximadamente la mitad de los proyectos incurrieron en mayores costos y tiempo (Challenged). En comparación con el mismo estudio 8 años después los números siguen siendo desalentadores. Los diferentes métodos para llevar proyectos de software no han podido aumentar la tasa de éxito significativamente, por lo que se puede deducir que existen factores que no se están considerando o no se están cuidando.

Una parte del problema radica en las herramientas que se utilizan para estimar el costo y tiempo de los proyectos de software. Muchas de ellas nacieron en la década de los setenta y son tan efectivas como lo eran en aquel entonces. Por ejemplo, el número de líneas de código que fueron necesarias para generar un producto terminado, ha sido una medida para determinar el tamaño del software, independiente del lenguaje de programación utilizado, lo cual no ha dado como resultado una estimación real, dado los avances en los lenguajes de última generación, además que no toma en cuenta el retrabajo. Afortunadamente el modelo ágil de desarrollo de software ha venido a cambiar la forma en cómo se estima un proyecto de software, utilizando un proceso iterativo, incremental y participativo. Nuevas herramientas o lenguajes como la programación orientada a objetos, han facilitado bastante el desarrollo modular al reutilizar código que fue fabricado en otros proyectos, acortando el tiempo y mejorando la productividad.

La otra parte del problema, y se podría decir, la que más afecta a la tasa de éxito en los proyectos de software, lo constituye la gestión de las personas. Es decir la habilidad para llevar a cabo el proyecto. En otras palabras, el lenguaje de programación utilizado, la capacidad técnica de los analistas, diseñadores, programadores, testers, e implementadores, y la metodología de desarrollo, afectan al proyecto de manera marginal, sin embargo, las habilidades de la administración de proyectos es determinante en el resultado final del desarrollo.

“Una administración deficiente puede incrementar los costos más rápidamente que cualquier otro factor” (Barry Boehm).

1.3 Integración de modelos de madurez de capacidades (CMMI)

Lo que puedes encontrar detrás de cada proyecto exitoso de software es una serie de actividades centradas en la productividad. Un modelo que incorpora las mejores prácticas para gestionar, controlar, medir y monitorear los procesos de software es el modelo de madurez de capacidades. Este modelo no es exclusivo del desarrollo de software, ya que es posible aplicarlo en otras industrias, sin embargo, cuando se trata de proyectos de software, ha demostrado ser una herramienta muy eficaz en alcanzar el éxito. Algunas industrias que han utilizado este modelo son aeroespacial, banca, defensa nacional, automotriz, manufactura y telecomunicaciones. CMMI (Capacity Maturity Model Integration), permite reconocer las características que deben tener los procesos y provee de algunas líneas de acción que pueden seguir las empresas para crear y perfeccionar sus propios procesos de desarrollo de productos, lo conlleva a minimizar realizar estimaciones realistas de sus proyectos, minimizar sus costos, operativos y mejorar la calidad. El modelo CMMI para desarrollo de software (conocido también como CMMI-DEV) contiene las mejores prácticas que cubren los proyectos de desarrollo de nuevos productos, ingeniería de sistemas, ingeniería de hardware y procesos de soporte para el mantenimiento del software. Este modelo fue desarrollado por el Instituto de Ingeniería de Software (SEI por sus siglas en inglés) en la Universidad de Carnegie Mellon que se encuentra en la ciudad de Pittsburgh. Está basado en los conceptos introducidos por Watts Humphrey en 1987, considerado por muchos como el padre de la Calidad del Software. Actualmente CMMI es soportado por el Instituto CMMI.

Las organizaciones pueden evaluar el nivel de madurez de sus procesos mediante la siguiente tabla, con el propósito de establecer dónde se encuentran y cuál sería su plan para avanzar al siguiente nivel de manera que tengan una forma de mejorar sus propios procesos.

 

Nivel

Característica

 

Problema

Comentario

5

Optimizado

Enfocado a la mejora de los procesos

 

Automatización

¿Qué podemos automatizar?

4

Cuantitativamente gestionado

Los procesos se encuentran medidos y controlados

 

Tecnología

¿Cuál es la mejor tecnología para cerrar el ciclo de retroalimentación?

3

Definido

Procesos definidos por la organización y la proactividad

 

Medición

Necesita datos para evaluar la tecnología

2

Gestionado

Procesos definidos por los proyectos y con frecuencia son reactivos

 

Entrenamiento

Necesidad de adquirir expertos

1

Inicial

Procesos impredecibles, pobremente controlados y reactivos

 

Planeación

Falta de conocimiento de la gestión

-1

Negligente

Indiferente

 

Apatía, indiferencia, desorganización

No necesita el CMMI

-2

Obstructivo

Contraproducente

 

Excesivamente rígido y formal

 

-3

Desdeñoso

Arrogancia

 

Ajeno al desempeño real

 

-4

Socavado

Sabotaje

 

Descreditar el éxito, promueve la apariencia

 

Niveles del Proceso de Madurez del Software de Watts Humphrey. Tabla tomada de: Jensen, R. (2014). Improving Software Development Productivity: Effective Leadership and Quantitative Methods in Software Management. EEUU: Prentice Hall. Sólo para fines educativos.

Logo CMMI Institute. Tomado de http://cmmiinstitute.com/ Sólo para fines educativos.

Utilizar CMMI como parte de la gestión de procesos no es ciertamente la panacea a todos los problemas de productividad, incluso los resultados no son de la noche a la mañana, requieren meses, e incluso en algunos casos, años. Lo importante de este modelo es que ofrece algunas guías para conocer dónde se encuentra la organización y de allí poder mejorar los procesos. Sus recomendaciones no son una camisa de fuerza. Cada organización puede tomar lo que considere mejor para avanzar en su proceso de madurez.

El Instituto de Ingeniería de Software afirma que el modelo ofrece las siguientes ventajas:

  • Es una guía a los esfuerzos de mejora de procesos y ayuda a las organizaciones a establecer y alcanzar sus objetivos.
  • Proporciona un lenguaje común para la comunicación entre la organización y la evaluación comparativa.
  • Proporciona un marco de referencia para la integración de los procesos de la organización.
  • Ayuda a la organización a reconocer acciones que puedan perfeccionar su capacidad de mejora y reconocer las áreas del proceso debe enfocarse.

Cierre


Llevar a cabo un proyecto de desarrollo de software es una tarea que requiere habilidades no sólo técnicas sino también de administración. Finalmente, en estos proyectos se involucra a personas con diferentes intereses y habilidades, que requieren de la guía del administrador para resolver conflictos, negociar con el cliente y buscar las mejores alternativas que permitan generar el mejor producto de software. Los fracasos en los proyectos de desarrollo de sistemas se deben principalmente a la falta de estas habilidades que gestionen a tiempo las actividades del equipo de trabajo involucrado en las diferentes etapas del desarrollo del software. Sin duda, seguir el proceso de desarrollo de software propuesto por diferentes metodologías de desarrollo, ayuda a llevar el control de la secuencia de actividades necesarias para generar un producto de calidad, sin embargo, si existe una estimación deficiente del tamaño del software y los recursos necesarios (tiempo, presupuesto y personal), invariablemente afectará el resultado del proyecto.

El modelo de madurez de procesos (CMM) puede ser una herramienta muy útil para conocer el estado actual de los procesos de desarrollo de software que sigue una empresa, y de allí realizar un plan para escalar en los niveles de madurez que ayudarán a la productividad de cada desarrollo, lo que lleva a la eficiencia y a altos estándares de calidad.

Checkpoint


Asegúrate de poder:

  • Identificar las ventajas y desventajas de los modelos del proceso de software para poder utilizarlos en las situaciones adecuadas.
  • Reconocer el papel que tiene la gestión en los proyectos de software para asegurar el éxito.
  • Conocer el modelo CMMI-DEV como base para hacer una autoevaluación de nivel de madurez del proceso de desarrollo de software.

Referencias


  • El-Haik, B. y Shaout, A. (2010). Software Design for Six Sigma: A Roadmap for Excellence. EE. UU: John Wiley & Sons.
  • IDC. (2015). El mercado de software creció en 2014 pese a las condiciones macroeconómicas: IDC. Recuperado de http://ar.idclatin.com/releases/news.aspx?id=1914
  • Jensen, R. (2014). Improving Software Development Productivity: Effective Leadership and Quantitative Methods in Software Management. EE. UU: Prentice Hall.