Los Fundamentos de la Calidad del Software son esenciales para cualquier profesional de la informática que aspire a desarrollar sistemas robustos y confiables. La ingeniería del software, como disciplina, se enfoca en todos los aspectos de la producción de software, buscando constantemente la calidad a través de métodos y técnicas prácticas. No basta con que un programa funcione; un software de calidad es el reflejo de un desarrollo meticuloso y profesional.
¿Qué es el Software y sus Tipos?
El software se define como el conjunto de programas de ordenador y la documentación asociada. Los productos de software pueden desarrollarse para un cliente específico o para un mercado general, dando lugar a dos categorías principales:
- Productos Genéricos: Son sistemas aislados producidos por una organización para ser vendidos en el mercado abierto a cualquier cliente. Ejemplos incluyen software para móviles como bases de datos, procesadores de texto, hojas de cálculo o agendas.
- Productos Personalizados: Son sistemas requeridos por un cliente en particular, desarrollados a medida por un contratista de software. Ejemplos incluyen sistemas de control de componentes electrónicos, procesos de negocios específicos o sistemas de control de tráfico aéreo.
La principal diferencia histórica radica en que en los productos genéricos la especificación es controlada por la organización desarrolladora, mientras que en los personalizados la especificación es del cliente. Sin embargo, esta línea se ha vuelto difusa, ya que muchas empresas de software parten de un producto genérico y lo adaptan. Los sistemas de planificación de recursos empresariales como SAP son un claro ejemplo de esta tendencia.
La Evolución del Concepto de Calidad
La búsqueda de la perfección y el trabajo bien hecho han sido constantes a lo largo de la historia humana, dando origen al concepto de calidad. Su evolución ha pasado por varias etapas significativas:
Antecedentes Históricos de la Calidad
- Artesanado: Hacer las cosas bien, sin importar coste ni esfuerzo, buscando la satisfacción del artesano y la creación de un producto único.
- Revolución Industrial: Producción en serie con énfasis en la cantidad, a menudo a expensas de la calidad, para satisfacer una gran demanda de bienes y obtener beneficios.
- II Guerra Mundial: Se priorizó la eficacia en la producción de armamentos, garantizando su disponibilidad en cantidad y plazo, sin importar el coste.
- Posguerra: Diferencia entre Japón (énfasis en "hacer las cosas bien a la primera" para minimizar costes y satisfacer al cliente) y el resto del mundo (producir cuanto más mejor para satisfacer la demanda y ser competitivo).
- Control de Calidad (Años 30 del S. XX): Inspección en producción para evitar bienes defectuosos. El Dr. W. A. Shewhart fue pionero con sus gráficos de control. Más tarde, la visita de Juran a Japón en 1950 marcó el reconocimiento del Control de Calidad como instrumento de gerencia.
- Aseguramiento de la Calidad: Sistemas y procedimientos organizacionales para prevenir errores y la producción de bienes defectuosos, buscando satisfacer al cliente, reducir costes y ser competitivo.
- Calidad Total: Administración empresarial centrada en la satisfacción permanente de las expectativas de todos los colectivos relacionados con la empresa (clientes, empleados, directivos, proveedores, comunidad).
Definiciones Clave de Calidad
Expertos y entidades de prestigio han definido la calidad con parámetros comunes:
- "Conjunto de esfuerzos efectivos de los diferentes grupos de una organización para la integración del desarrollo, del mantenimiento y de la superación de la calidad de un producto, con el fin de hacer posible la fabricación y servicio a satisfacción completa del consumidor y al nivel más económico" (Feigenbaum, Deming y Juran).
- "La mejor calidad que una empresa puede producir con su tecnología de producción y capacidades de proceso actuales, y que satisfará las necesidades de los clientes, en función de factores tales como el coste y el uso previsto" (Dr. Kaoru Ishikawa).
- "La gestión de calidad en la empresa es el proceso de identificar, aceptar, satisfacer y superar constantemente las expectativas y necesidades de todos los colectivos humanos relacionados con ella, clientes, empleados, directivos, propietarios, proveedores y la comunidad con respecto a los productos y servicios que esta proporciona" (Consultora Arthur Andersen).
Estos parámetros sugieren que la calidad implica planificar (calidad de diseño), producir (calidad de fabricación) y vender (calidad que desea el cliente) productos y servicios de alta calidad que satisfagan al consumidor.
Particularidades de la Calidad del Software
La calidad del software, tanto del producto como del proceso de desarrollo, es interdependiente. Un buen proceso es casi indispensable para un buen producto. Sin embargo, el software presenta características únicas que lo diferencian de otros productos industriales:
- Es un producto mental; se desarrolla, no se fabrica.
- Los costes se concentran en las tareas de ingeniería.
- Es una disciplina joven, con técnicas aún en perfeccionamiento.
- El software con errores no se rechaza de la misma forma que un producto físico.
- No se deteriora con el tiempo, aunque es artesanal en gran medida.
- Su mantenimiento es mucho más complejo que el del hardware.
- Es engañosamente fácil realizar cambios sobre un producto software.
Es crucial considerar la calidad del software en todas sus etapas (especificaciones, diseño, código), no solo al final, cuando corregir problemas es más costoso o imposible.
Desafíos en la Calidad del Software
La problemática de la calidad del software abarca múltiples factores que impactan directamente en su desarrollo y entrega:
- Aumento constante del tamaño y la complejidad de los programas.
- Carácter dinámico e iterativo a lo largo de su ciclo de vida, con constantes cambios y evoluciones.
- Dificultad para conseguir productos totalmente depurados, ya que la perfección es inalcanzable.
- Elevados recursos monetarios dedicados a su mantenimiento debido a la complejidad y falta de normalización.
- Retrasos frecuentes en los plazos previstos, excediendo los costes y sin cumplir los requisitos deseados por el usuario.
- Incrementos constantes de los costes de desarrollo debido, entre otros factores, a bajos niveles de productividad.
- Alta dependencia de los clientes respecto a sus proveedores en aplicaciones "a medida".
- Procesos artesanales de producción con escasez de herramientas.
- Insuficientes procedimientos normalizados para estipular y evaluar productividad, costes y calidad.
Estos problemas se concretan en:
- Ausencia de especificaciones completas, coherentes y precisas (tanto del cliente como del proveedor).
- Falta de aplicación sistemática de métodos, procedimientos y normas de ingeniería del software.
- Escasez o ausencia de entornos integrados de programación y herramientas de gestión de proyectos.
- Falta de personal con formación y experiencia en nuevos métodos y herramientas.
Normalización para la Mejora de la Calidad del Software
La normalización en la ingeniería del software es un proceso clave que busca definir, simplificar y especificar las actividades relacionadas con el desarrollo. Su objetivo es maximizar la comunicación entre profesionales, reducir costes al aumentar la productividad y mejorar la calidad de los desarrollos.
El Proceso de Normalización del IEEE
El Instituto de Ingenieros Eléctricos y Electrónicos (IEEE) es un referente en la creación de normas para el software. Su proceso incluye:
- Sugerencia de Idea: Cualquier miembro puede proponer una nueva idea al Comité de Normas de IS.
- Petición de Autorización de Proyecto (PAP): Se define el objetivo, ámbito y descripción del proyecto, y se transmite a los grupos de normas y al ANSI para coordinación.
- Desarrollo de la Norma: Un grupo de trabajo elabora la norma, permitiendo la participación de cualquier interesado y buscando la colaboración de diversos profesionales.
- Revisión y Votación: El documento (borrador) pasa por varias revisiones y un proceso de votación donde al menos el 75% de los miembros del grupo de votación (unos 100 expertos) deben votar positivamente. Este proceso dura unos tres años.
- Difusión: Una vez aprobada, la norma se distribuye, a menudo a través de seminarios.
- Uso y Retroalimentación: Las empresas y organismos utilizan la norma, proporcionando comentarios. Las modificaciones sugeridas se evalúan por el grupo de trabajo y, en un ciclo de cinco años, la norma puede ser dejada igual, modificada o eliminada.
Modelos de Calidad del Software de Gestión
Los modelos de calidad definen la calidad de forma jerárquica, evaluando un conjunto de indicadores o métricas. Estos modelos se estructuran en:
- Factores de Calidad (Atributos Externos): Visión del usuario del software, situados en el nivel más alto de la jerarquía.
- Criterios de Calidad (Atributos Internos): Atributos técnicos del producto software que contribuyen a obtener la calidad. Se derivan de los factores.
- Métricas: Medidas cuantitativas de características específicas del producto que indican el grado en que posee un atributo de calidad.
Un modelo de calidad permite definir, medir y planificar la calidad, y comprender las relaciones entre las diferentes características de un producto software. Aunque su validez absoluta no ha sido completamente demostrada, son herramientas fundamentales.
Ética en la Ingeniería del Software
Dado el papel central y creciente de las computadoras en la sociedad, los ingenieros de software tienen una gran responsabilidad. El código de ética de la ingeniería del software, redactado por la ACM y la IEEE, establece ocho principios básicos para asegurar un desempeño correcto y beneficioso para la sociedad:
- Público: Actuar en consonancia con el interés público.
- Cliente y Empleador: Responder a sus intereses siendo consecuentes con el interés público.
- Producto: Asegurar que los productos y sus modificaciones cumplan con los más altos estándares profesionales.
- Juicio: Mantener la integridad e independencia de los juicios profesionales.
- Gestión: Promover un enfoque ético en la gestión del desarrollo y mantenimiento del software.
- Profesión: Mantener la integridad y reputación de la profesión.
- Colegas: Ser imparcial y apoyar a los colegas.
- Personal: Aprender continuamente sobre la profesión y promover un enfoque ético.
Estos fundamentos no solo guían la práctica, sino que también aseguran que la ingeniería del software sea una disciplina de beneficio y respeto para todos.
Preguntas Frecuentes sobre la Calidad del Software
¿Por qué la Ingeniería del Software busca la calidad?
La ingeniería del software busca la calidad porque no es suficiente que un programa funcione. La calidad implica desarrollar software que sea confiable, eficiente, mantenible, seguro y que satisfaga plenamente las necesidades del cliente y el interés público. Es una disciplina que abarca técnicas para mejorar todos los aspectos del producto y su proceso de producción.
¿Cuáles son las diferencias entre productos de software genéricos y personalizados?
Los productos genéricos son desarrollados para un mercado amplio y controlados por la organización que los crea (ej. apps móviles). Los productos personalizados son hechos a medida para un cliente específico, quien generalmente controla sus especificaciones (ej. sistemas de control de tráfico aéreo). Sin embargo, la distinción se ha vuelto borrosa, con muchas empresas adaptando productos genéricos para clientes específicos, como los sistemas SAP.
¿Qué hace que el mantenimiento del software sea más complejo que el del hardware?
El software es un producto mental que no se deteriora físicamente, pero es engañosamente fácil de modificar, lo que puede introducir nuevos errores y complejidades. A diferencia del hardware, el software es en gran medida "artesanal" y sus costes se concentran en tareas de ingeniería, lo que hace que los cambios y actualizaciones sean intrincados y caros si no se siguen métodos y normas de calidad desde el inicio de su ciclo de vida.
¿Cómo contribuye la normalización a la calidad del software?
La normalización, a través de la elaboración de guías, normas y convenciones, mejora la calidad del software al definir y simplificar las actividades de desarrollo. Fomenta una comunicación más precisa entre profesionales, lo que reduce costes, aumenta la productividad y asegura que los productos cumplan con estándares de calidad reconocidos, como los establecidos por el IEEE. Esto es crucial para unificar esfuerzos en la industria del software.