Archivo de la etiqueta: atributos de calidad

¿Por qué usar un modelo de calidad?

Un modelo de calidad provee un framework para la especificación de requisitos de calidad y su evaluación en términos de un conjunto de características o atributos de calidad y sus relaciones. Estas características emergen desde el razonamiento acerca de la “esencia de la calidad” para un producto y contexto específicos. Por ejemplo, el modelo de calidad ISO 25010:2023 [1] se enfoca en sistemas y software.

La definición de un modelo de calidad sigue típicamente la vía de la estandarización. La estandarización no es una condición necesaria para la creación de un modelo de calidad; sin embargo, la estandarización sí es una característica importante que considerar cuando se evalúa adoptar un modelo de calidad: las organizaciones generalmente prefieren modelos publicados y estandarizados porque se tiene la razonable esperanza de que al usarlos también se alinearán con el estándar y otros relacionados.

Quiero compartir tres beneficios de usar un modelo de calidad en la producción de software:

  • Evitar la sobre representación de atributos de calidad: el modelo de calidad nos ayuda a no olvidar “otras” características de calidad. Por ejemplo, el modelo de calidad ISO 25010:2023 nos ayuda a recordar que la ejecución de chequeo de “issues” de calidad en el código (típicamente en pipelines de integración continua) se tiende a relacionar con propiedades como la mantenibilidad y que por tanto también debemos atender otras propiedades como la confianza en el sistema y la flexibilidad del uso con técnicas y herramientas apropiadas.
  • Evaluaciones de calidad más objetivas: el uso de un conjunto predefinido y eventualmente estandarizado de características de calidad promueve el foco en operacionalizaciones que permiten evaluar concreta y objetivamente la calidad de un sistema de software.
  • Razonamiento respecto de decisiones de diseño (especialmente del pasado): la operacionalización de los atributos de calidad obliga al equipo a razonar acerca de muchas decisiones de diseño, especialmente del pasado. Los equipos se ven agradados al compartir información respecto de estas decisiones ya que les permite comprender la razón de ser de muchas de estas decisiones que típicamente se ven como «dudosas.»

Finalmente, me gustaría destacar cuatro asuntos en relación con el uso de modelos de calidad:

  • Queda fuera del ámbito de un modelo de calidad definir la importancia relativa de los atributos de calidad: esto lo define el negocio en conjunto con sus objetivos, misión y visión. No obstante, sí es importante que esta priorización sea justificada y documentada, especialmente cuando algunas de estas características de calidad quedan con una prioridad muy baja (e.g., usabilidad vs. confidencialidad).
  • En la práctica he observado muchas veces que se genera discusión respecto de si una operacionalización (e.g., un escenario) pertenece a una u otra característica de calidad. Si bien esta discusión fomenta el razonamiento en el equipo, mi sugerencia es mantener esta conversación acotada y acordar rápidamente en cuál de las características será considerada la operacionalización.
  • Siempre recordar que si un modelo de calidad es un estándar, este no se obliga a ser un instrumento para la certificación: en otras palabras, que adoptemos un modelo de calidad no quiere decir que estemos obligados a certificarnos ni que exista una certificación asociada.
  • Los modelos de calidad, especialmente aquellos que se encuentran estandarizados, son típicamente complementables con otros modelos de calidad.

[1] «ISO 25010:2023: Systems and software engineering — Systems and software Quality Requirements and Evaluation (SQuaRE) — Product quality model,» ISO/IEC 25010:2023.

De compromisos (tradeoffs) y sus resoluciones en la arquitectura de software

Tradeoffs o compromisos (traducción comúnmente aceptada) son aquellas situaciones en las que balanceamos, considerando beneficio y pérdida, atributos de calidad de un sistema software-intensivo. Wikipedia agrega la idea de «sacrificio» [1]. Sacrificio es el resultado de haber tratado el tradeoff entre dos o más propiedades cualitativas. Primero reconocemos la existencia de una situación en la que existe un compromiso entre una u otra alternativa y luego decidimos en beneficio de una de las alternativas sacrificando el beneficio de la otra (u otras).

Los tradeoffs o compromisos están siempre presentes en todo diseño de sistema software-intensivo. En mi opinión, difícilmente podríamos hablar de ingeniería de software si no existieran pues es aquí donde ponemos en marcha gran parte de las herramientas, técnicas y métodos de la ingeniería para decidir finalmente cuál será la estructura (arquitectura) del sistema de software en cuestión y que implica el haber tomado una determinación acerca de los compromisos existentes entre los varios atributos de calidad asociados.

Sin embargo, rara vez estas características cualitativas, y con mayor razón los compromisos entre estas, son evidentes en el desarrollo. En la práctica, la experiencia termina tomando un rol protagónico haciendo del diseño un asunto de satisfacción de problemas [2]. ¡De ahí la importancia de contar con miradas frescas y no solo experimentadas en el diseño de un sistema!

Un caso que he observado en varias ocasiones se da en el compromiso entre las propiedades «confidencialidad» y «disponibilidad». En concreto, para asegurar la confiabilidad parece del todo claro que la superficie de ataque debe ser reducida. Por otro lado, y para su aseguramiento, la disponibilidad va a requerir de una serie de registros, en su mayoría «logs» automáticos, que ineludiblemente van a terminar agrandando la potencial superficie de ataque. Un ejemplo concreto muy básico: los ingenieros de seguridad no quieren que un potencial atacante pueda determinar si el rechazo al ingreso en un sistema se debe a que el nombre de usuario o la contraseña estaban incorrectos; los ingenieros encargados de la disponibilidad quieren mantener un archivo de registro en el que se especifique si fue el nombre de usuario o la contraseña (o ambos) los que estaban incorrectos para determinar con precisión, y en el menor tiempo posible, el problema que eventualmente pueda ser reportado por un usuario. La siguiente figura muestra una simplificación de un análisis de tradeoffs haciendo uso de signo + y signo – para indicar si la operacionalización (logs exhaustivos) tiene incidencia positiva o negativa, respectivamente, sobre los atributos de calidad.

Simplificación de un árbol de «softgoals» para representar tradeoffs.

No todos los casos son sencillos de resolver como el mencionado. En el ejemplo, muy probablemente los ingenieros determinarán que el «costo» o sacrificio que implica perder datos para asegurar la disponibilidad puede ser pagado a cambio de mayor confidencialidad (¡aunque esto siempre depende de los objetivos del negocio!). Me ha tocado ver también casos en los que el debate es fervoroso, situaciones en las que la «confidencialidad» se enfrenta a asuntos mandados por normas institucionales o legales y que exigen de parte de la «disponibilidad» un acabado registro de los eventos y operaciones del sistema.

Las evaluaciones de arquitectura son instancias formales en las que se hacen evidentes estas propiedades cualitativas, sus compromisos y se discute la resolución de estos últimos. En las evaluaciones también se discuten objetivos e impulsores del negocio y escenarios de uso actuales y futuros, lo que permite aportar en la toma de decisiones de diseño para atender y manejar el compromiso.

[1] «Trade-off», https://es.wikipedia.org/wiki/Trade-off. Última revisión: enero de 2021.

[2] «Software Designers Satisfice», Antony Tang y Hans van Vliet, ECSA 2015.