Atributos de Calidad: La clave para un desarrollo de software exitoso
El desarrollo de software es una disciplina que ha evolucionado significativamente a lo largo de los años. Desde sus inicios, donde el objetivo principal era simplemente hacer que un programa funcionara, hasta la actualidad, donde la calidad del software es un factor crítico para el éxito de cualquier proyecto. En este contexto, los Atributos de Calidad se han convertido en un término central para describir las características esenciales que debe tener un software para cumplir con las expectativas de los usuarios y las demandas del mercado.
En muchas ocasiones, se deben rehacer sistemas no porque no cumplan con los requerimientos funcionales sino por su deficiencia en satisfacer los atributos de calidad.
¿Qué son los Atributos de Calidad?
Los Atributos de Calidad son propiedades medibles o testeables del software que determinan el nivel de excelencia con el que satisfacen las necesidades de los stakeholders. Mientras que los atributos funcionales se enfocan en lo que hace el software, los atributos de calidad se centran en cómo lo hace.
Es importante tener en cuenta que, al esforzarse por cumplir con los atributos de calidad relevantes a cada requerimiento, en ocasiones se hace necesario establecer prioridades entre ellos.
Los principales Atributos de Calidad
- Rendimiento
- Disponibilidad
- Usabilidad
- Seguridad
- Modificabilidad
- Testeabilidad
- Desplegabilidad
- Integrabilidad
Rendimiento
Este atributo de calidad se enfoca en la capacidad de un sistema de cumplir con los requerimientos de tiempo. Es decir, cuando un evento ocurre, el sistema debe ejecutar sus funciones de manera eficiente y rápida, respondiendo a las demandas de procesamiento y carga de trabajo de manera satisfactoria. En resumen, se trata de cuán eficazmente un sistema puede realizar tareas dentro de límites de tiempo aceptables.
Un software de alto rendimiento responde rápidamente a las solicitudes del usuario y puede manejar grandes volúmenes de datos sin problemas. El rendimiento se puede evaluar en función de factores como la velocidad de procesamiento, la capacidad de respuesta, la utilización eficiente de recursos como la CPU y la memoria, y la capacidad para manejar cargas de trabajo crecientes sin degradación significativa en el rendimiento. Un rendimiento deficiente puede llevar a la insatisfacción del usuario y a problemas operativos.
A modo de ejemplo:
Supongamos una tabla 'products' con 500 mil registros y 20 columnas. Tenemos un requerimiento que implica retornar los nombres de todos nuestros productos.
A simple vista, ambas consultas parecen buscar el mismo resultado: la obtención de los nombres de productos. Sin embargo, radica una diferencia crítica en términos de tiempo de ejecución.
La consulta SQL de la primera función, SELECT name FROM products, selecciona únicamente la columna relevante a nuestro requerimiento (name). Por otro lado, la segunda consulta, SELECT * FROM products, selecciona todos los campos de la tabla 'products'. Aunque con esta consulta también conseguimos los nombres de los productos, la base de datos debe recuperar y procesar cada una de las 20 columnas para cada uno de los 500 mil registros, lo que resulta en una operación más lenta y demandante en recursos, proporcional al volumen de la tabla. Desde la perspectiva del usuario, el resultado final será el mismo conjunto de datos. No obstante, en términos de tiempo, la opción 2 lo hará esperar más.
Disponibilidad
Refiere a la capacidad de un sistema para estar siempre presente y listo para desempeñar sus funciones cuando se necesita. Es una característica esencial que engloba la confiabilidad y va más allá, incorporando la capacidad de recuperación. La disponibilidad abarca que un sistema debe ser capaz de repararse a sí mismo cuando se produce una falla, ya sea interna o externa.
La gestión del tiempo de inactividad es otro aspecto crucial de la disponibilidad. Esto implica minimizar los períodos en los que el sistema no está operativo cuando debería estarlo, ya sea debido a fallas no planificadas o mantenimientos programados. La disponibilidad también se relaciona estrechamente con la seguridad, ya que los ataques de denegación de servicio buscan deliberadamente hacer que un sistema sea inaccesible. Por lo tanto, para garantizar la disponibilidad, es esencial implementar medidas de seguridad adecuadas. Además, la disponibilidad guarda una relación cercana con el rendimiento. En ocasiones, puede resultar difícil distinguir entre una falla y una respuesta lenta del sistema, por lo que la capacidad de respuesta adecuada es un componente integral de la disponibilidad.
Este atributo es un pilar fundamental para brindar una experiencia de usuario confiable y consistente.
Usabilidad
Se trata de la facilidad con la que los usuarios pueden interactuar con el software y del tipo de ayuda que este provee. Un software con una buena usabilidad es intuitivo y proporciona una experiencia de usuario agradable. Esto incluye aspectos como la navegación, la claridad de las interfaces y la eficiencia en la realización de tareas.
La usabilidad abarca las siguientes áreas:
- Aprender las funcionalidades del sistema. ¿Qué puede hacer el sistema para facilitarle al usuario la tarea de aprendizaje? Esto podría incluir la provisión de funciones de ayuda.
- Utilizar un sistema de manera eficiente. ¿Qué puede hacer el sistema para que el usuario sea más eficiente en su funcionamiento?
- Minimizar el impacto de los errores. ¿Qué puede hacer el sistema para que un error del usuario tenga un impacto mínimo?
- Adaptar el sistema a las necesidades del usuario. ¿Cómo puede el usuario (o el propio sistema) adaptarse para facilitar la tarea del usuario?
- Aumentar la confianza y la satisfacción. ¿Qué hace el sistema para dar al usuario la confianza de que se está tomando la acción correcta?
Seguridad
Cuando evaluamos un sistema, uno de los aspectos cruciales es su capacidad para proteger datos e información de accesos no autorizados.
Aquí cobra relevancia la definición de "ataque", que es cualquier acción tomada en contra de un sistema en busca de causar daño al mismo (ejemplos: Ataque de Denegación de Servicio, Inyecciones SQL, etc.).
La seguridad se puede caracterizar por la confidencialidad (los datos o servicios están protegidos de accesos no autorizados), la integridad (los datos o servicios no pueden ser modificados por accesos no autorizados) y la disponibilidad (a pesar de ataques, el sistema debe estar disponible para su uso legítimo).
Los distintos enfoques para lograr la seguridad se pueden caracterizar como aquellos que detectan ataques, aquellos que resisten ataques, aquellos que reaccionan ante ataques y aquellos que se recuperan de ataques exitosos.
Modificabilidad
La modificabilidad se centra en la facilidad con la que un sistema de software puede ser modificado o adaptado a medida que cambian los requisitos, las necesidades del usuario o las condiciones del entorno. En resumen, se trata de la capacidad del software para ser flexible y permitir cambios sin generar problemas graves o costosos.
Para que un software sea altamente modificable, debe estar bien organizado y seguir principios de diseño que fomenten la separación de preocupaciones y la cohesión de los componentes. Además, una arquitectura modular puede facilitar en gran medida la modificabilidad. El objetivo es permitir que los cambios se realicen de manera rápida y efectiva, sin afectar negativamente otras partes del sistema.
La modificabilidad es esencial en el desarrollo de software, ya que los requisitos y las circunstancias pueden evolucionar con el tiempo. Un software que carece de esta puede volverse obsoleto rápidamente o requerir costosos esfuerzos de reconstrucción para realizar cambios significativos. En cambio, un software altamente modificable puede adaptarse de manera eficiente a las nuevas necesidades y mantener su valor a lo largo del tiempo.
Preguntas importantes a tener en cuenta:
- ¿Qué puede cambiar?
- ¿Qué tan probable es que cambie?
- ¿Cuál es el costo del cambio?
Testeabilidad
La testeabilidad del software se refiere a la facilidad con la que se pueden mostrar sus defectos a través de pruebas, generalmente basadas en ejecución. De manera más específica, la testeabilidad se puede interpretar como la probabilidad, asumiendo que el software tiene al menos un fallo, de que ese fallo se manifieste en la próxima ejecución de las pruebas. Se puede pensar en un sistema como testeable si reconoce de forma evidente y rápida cualquier problema que pueda tener. Si hay algún defecto en el sistema, queremos que se revele durante las pruebas tan pronto como sea posible.
Desplegabilidad
Este atributo hace referencia a la facilidad y eficiencia con la que un software puede ser desplegado en un entorno operativo real. Un alto grado de despliegue implica que el proceso de implementación es rápido, confiable y minimiza el tiempo de inactividad del sistema. Además, en caso de errores, debe tener la capacidad de ser revertido con un esfuerzo y cantidad de tiempo predecibles y aceptables.
Si el proceso de despliegue está automatizado hasta cierto punto de la puesta en producción pero se requiere intervención humana en ese último paso, se llama "entrega continua". Si está completamente automatizado se llama "despliegue continuo", donde el atributo de testeabilidad se convierte en un factor crucial para alcanzar este nivel de automatización con el menor riesgo posible.
Integrabilidad
La integrabilidad se enfoca en la capacidad de un sistema o software para integrarse de manera efectiva y sin problemas con otros sistemas, componentes o módulos. En otras palabras, se trata de la capacidad de un sistema para funcionar de manera armoniosa con otros sistemas existentes o nuevos, facilitando la interoperabilidad y la colaboración entre diferentes partes de un sistema informático.
La importancia de considerar los Atributos de Calidad
Ignorar los Atributos de Calidad puede llevar a un software disfuncional, inseguro o inutilizable, lo que puede tener consecuencias negativas tanto para los usuarios como para la reputación de la empresa que lo desarrolla. Los problemas de calidad suelen ser costosos de corregir una vez que el software está en producción, lo que subraya la importancia de abordar estos atributos desde el principio del ciclo de desarrollo.
Los atributos de calidad son fundamentales para garantizar que un sistema cumpla con las expectativas de los stakeholders. El desarrollo de software de calidad no es solo una meta, es una necesidad.
Espero que este artículo te haya sido de ayuda para tener presente los Atributos de Calidad en tus futuros proyectos.
¡Hasta la próxima!
Listopro Community da la bienvenida a todas las razas, etnias, nacionalidades, credos, géneros, orientaciones, puntos de vista e ideologías, siempre y cuando promuevan la diversidad, la equidad, la inclusión y el crecimiento profesional de los profesionales en tecnología.