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:
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. |
No permite realizar ajustes o revisiones a etapas anteriores. |
Sashimi |
Su nombre proviene del parecido que tiene al platillo japonés sashimi. |
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. |
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 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. |
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. |
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. |
Se desconoce la fecha de fin del proyecto completo. |
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. |
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:
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:
Referencias