Me gustaría compartir con vosotros un pequeño adelanto de la guía que estoy preparando sobre "Aseguramiento de la Calidad del Software en el ámbito de las Administraciones Públicas para la Licitación de Proyectos de Desarrollo Software". En concreto, se trata de uno de los apartados introductorios, "Consideraciones y reflexiones sobre la Industria del Desarrollo de Software". Este tema me ha parecido lo suficientemente interesante para dedicarle una entrada en el blog. Espero que sea de vuestro interés y os sintáis libres hacer cualquier comentario o aportación basada en vuestra propia experiencia.
El mercado de las Tecnologías de la Información y las Comunicaciones se caracteriza por estar en continua evolución, los usuarios cada vez son más exigentes y, aunque la producción de software en la industria informática es elevada, sigue existiendo un amplio desconocimiento en metodologías formales y estrategias dirigidas a mejorar la calidad final de los productos y los procesos que intervienen en su creación. Hoy por hoy, la guerra de precios no asegura una ventaja competitiva en la industria del desarrollo de software. El cliente demanda y percibe otros atributos asociados a los productos y servicios que consume: calidad, seguridad, garantía, valor añadido y recomendaciones de terceros son sólo algunos ejemplos.
Técnicamente hablando, es bien conocido que el desarrollo de aplicaciones informáticas no es una tarea trivial. A pesar de disponer de numerosos IDEs, frameworks y otras soluciones potentes (ya sean libres o propietarias) para asistir a los diferentes roles del proyecto en su cometido, existen también otros factores determinantes que afectan a los proyectos y, por tanto, a la calidad de los productos finalmente obtenidos. A continuación, analizaremos cada uno de estos factores.
En la actualidad, las aplicaciones informáticas ven aumentada su complejidad debido, en gran medida, a la integración e interacción de diferentes tecnologías, sistemas operativos y plataformas hardware. Por otra parte, ya no es suficiente con que una aplicación sea funcionalmente completa acorde a su propósito, sino que además, ésta también debe satisfacer aspectos técnicos en términos de seguridad, rendimiento y accesibilidad, entre otros. Estos requisitos, denominados requisitos no-funcionales en el argot de la Ingeniería del Software, no siempre vienen definidos formalmente, sin embargo, constituyen propiedades inherentes del producto que, de una manera u otra, acaban siendo percibidos y altamente valorados por los clientes y usuarios finales que harán uso de los sistemas informáticos.
En relación a los requisitos y cómo éstos son gestionados durante el ciclo de vida del desarrollo de software, cabe destacar una tendencia hacia proyectos comúnmente denominados de “alto riesgo”, es decir, aquéllos caracterizados parcial o totalmente por una elevada dependencia tecnológica, alta volatilidad de requisitos, cambios en el negocio, etc. En este tipo de proyectos, la rápida evolución de las necesidades y los requisitos cambiantes impiden abordar etapas largas en el proceso de desarrollo. Las metodologías ágiles (tales como SCRUM, XP o DSDM) se convierten en el aliado perfecto en comparación con otras metodologías más pesadas de modelo en cascada. No obstante, independientemente de la metodología finalmente aplicada, siempre habrá que incluir actividades de aseguramiento de la calidad. En relación a esto último, es importante tener presente que la mayoría de defectos suelen detectarse cuando la aplicación ya se encuentra en producción.
Otra realidad extraída de la industria del desarrollo de software reside en que no todas las organizaciones están en condiciones de asumir los costes derivados de un equipo o departamento destinado exclusivamente a asegurar la calidad de las soluciones informáticas. Deben considerarse, entre otros, los costes de personal con formación específica adecuada, infraestructuras, equipos informáticos y licencias de software. Asimismo, la planificación temporal de los proyectos debe adecuarse para integrar estas actividades de verificación y validación. En términos generales, toda planificación ha de caracterizarse por ser eficiente, realista, contemplar planes de contingencia y ser asumida de manera responsable por todos los miembros de la organización en sus respectivos roles.
Como tendencia ampliamente generalizada en las empresas del sector, el testeo de las aplicaciones suele ser acometido de forma íntegra por el propio equipo de desarrollo. En este sentido, el hecho de haber participado en las etapas de diseño e implementación, implica el riesgo de tener una visión demasiado técnica y acotada a la hora de diseñar y ejecutar los planes de pruebas. Esta consideración no exime en absoluto de la necesidad del proceso de pruebas durante el ciclo de vida del desarrollo de software, sino todo lo contrario, evidencia su gran importancia y pone de manifiesto un riesgo importante que suele repetirse con frecuencia.
Como consecuencia final, muchas empresas desarrolladoras de software terminan sacrificando la calidad de sus productos a cambio de reducir tiempos de entrega, recursos y costes derivados, ya sea por motivos de escasez, estratégicos o cultura de la organización. Con independencia de las posibles causas que motiven este hecho, el resultado final es la obtención de un producto que, lamentablemente, no siempre satisface las necesidades y expectativas de los clientes y usuarios.
(continuará...)
El mercado de las Tecnologías de la Información y las Comunicaciones se caracteriza por estar en continua evolución, los usuarios cada vez son más exigentes y, aunque la producción de software en la industria informática es elevada, sigue existiendo un amplio desconocimiento en metodologías formales y estrategias dirigidas a mejorar la calidad final de los productos y los procesos que intervienen en su creación. Hoy por hoy, la guerra de precios no asegura una ventaja competitiva en la industria del desarrollo de software. El cliente demanda y percibe otros atributos asociados a los productos y servicios que consume: calidad, seguridad, garantía, valor añadido y recomendaciones de terceros son sólo algunos ejemplos.
Técnicamente hablando, es bien conocido que el desarrollo de aplicaciones informáticas no es una tarea trivial. A pesar de disponer de numerosos IDEs, frameworks y otras soluciones potentes (ya sean libres o propietarias) para asistir a los diferentes roles del proyecto en su cometido, existen también otros factores determinantes que afectan a los proyectos y, por tanto, a la calidad de los productos finalmente obtenidos. A continuación, analizaremos cada uno de estos factores.
En la actualidad, las aplicaciones informáticas ven aumentada su complejidad debido, en gran medida, a la integración e interacción de diferentes tecnologías, sistemas operativos y plataformas hardware. Por otra parte, ya no es suficiente con que una aplicación sea funcionalmente completa acorde a su propósito, sino que además, ésta también debe satisfacer aspectos técnicos en términos de seguridad, rendimiento y accesibilidad, entre otros. Estos requisitos, denominados requisitos no-funcionales en el argot de la Ingeniería del Software, no siempre vienen definidos formalmente, sin embargo, constituyen propiedades inherentes del producto que, de una manera u otra, acaban siendo percibidos y altamente valorados por los clientes y usuarios finales que harán uso de los sistemas informáticos.
En relación a los requisitos y cómo éstos son gestionados durante el ciclo de vida del desarrollo de software, cabe destacar una tendencia hacia proyectos comúnmente denominados de “alto riesgo”, es decir, aquéllos caracterizados parcial o totalmente por una elevada dependencia tecnológica, alta volatilidad de requisitos, cambios en el negocio, etc. En este tipo de proyectos, la rápida evolución de las necesidades y los requisitos cambiantes impiden abordar etapas largas en el proceso de desarrollo. Las metodologías ágiles (tales como SCRUM, XP o DSDM) se convierten en el aliado perfecto en comparación con otras metodologías más pesadas de modelo en cascada. No obstante, independientemente de la metodología finalmente aplicada, siempre habrá que incluir actividades de aseguramiento de la calidad. En relación a esto último, es importante tener presente que la mayoría de defectos suelen detectarse cuando la aplicación ya se encuentra en producción.
Otra realidad extraída de la industria del desarrollo de software reside en que no todas las organizaciones están en condiciones de asumir los costes derivados de un equipo o departamento destinado exclusivamente a asegurar la calidad de las soluciones informáticas. Deben considerarse, entre otros, los costes de personal con formación específica adecuada, infraestructuras, equipos informáticos y licencias de software. Asimismo, la planificación temporal de los proyectos debe adecuarse para integrar estas actividades de verificación y validación. En términos generales, toda planificación ha de caracterizarse por ser eficiente, realista, contemplar planes de contingencia y ser asumida de manera responsable por todos los miembros de la organización en sus respectivos roles.
Como tendencia ampliamente generalizada en las empresas del sector, el testeo de las aplicaciones suele ser acometido de forma íntegra por el propio equipo de desarrollo. En este sentido, el hecho de haber participado en las etapas de diseño e implementación, implica el riesgo de tener una visión demasiado técnica y acotada a la hora de diseñar y ejecutar los planes de pruebas. Esta consideración no exime en absoluto de la necesidad del proceso de pruebas durante el ciclo de vida del desarrollo de software, sino todo lo contrario, evidencia su gran importancia y pone de manifiesto un riesgo importante que suele repetirse con frecuencia.
Como consecuencia final, muchas empresas desarrolladoras de software terminan sacrificando la calidad de sus productos a cambio de reducir tiempos de entrega, recursos y costes derivados, ya sea por motivos de escasez, estratégicos o cultura de la organización. Con independencia de las posibles causas que motiven este hecho, el resultado final es la obtención de un producto que, lamentablemente, no siempre satisface las necesidades y expectativas de los clientes y usuarios.
(continuará...)


