[image]. Software Architecture. A picture containing logo Description automatically generated.
Laid wine bottles, glass and grapes. The good software, like wine, takes time.
Quality Attributes. Definitions.
Requirements. Functional Non Functional. -aecuowementg incotih>lzzz uojementg irzckzblc tz±blc cornplztc cornprchartEiblc.
[Audio] Requisitos Funcionales Los requisitos funcionales son características o funciones del producto que los desarrolladores deben implementar para que los usuarios puedan realizar sus tareas. Por lo tanto, es importante aclararlos tanto al equipo de desarrollo como a las partes interesadas. Generalmente, los requisitos funcionales describen el comportamiento del sistema en condiciones específicas. Ejemplos: El sistema envía una solicitud de aprobación después de que el usuario ingresa su información personal. Una función de búsqueda permite al usuario buscar entre varias facturas si desea abonar una factura emitida. El sistema envía un correo electrónico de confirmación al crear una nueva cuenta de usuario..
[Audio] Requisitos No Funcionales Los requisitos no funcionales (NFR) definen los criterios utilizados para evaluar el sistema en su conjunto, pero no un comportamiento específico. También se denominan atributos de calidad y se describen en detalle en las especificaciones de arquitectura. Todos los NFR se pueden dividir en dos categorías principales: NFR que afectan el comportamiento, el diseño y la interfaz de usuario del sistema durante el funcionamiento. NFR que afectan el desarrollo y el soporte del sistema. Ejemplos: Las páginas del sitio web deben cargar en 3 segundos con un número total de usuarios simultáneos inferior a 5000. El sistema debe ser capaz de gestionar 20 millones de usuarios sin que se vea afectado su rendimiento..
[Audio] | Categoría | Requisitos funcionales | Requisitos no funcionales | |-----------------|-----------------------------------------------------------------------------------|-----------------------------------------------------------| | Objetivo | Describir qué hace el producto | Describir cómo funciona el producto | | Resultado final | Definir las características del producto | Definir las propiedades del producto | | Enfoque | Centrarse en los requisitos del usuario | Centrarse en las expectativas del usuario.
[Audio] Un atributo de calidad es una propiedad de un sistema de software que determina su utilidad y éxito desde la perspectiva del cliente y del negocio. Por ejemplo, si un sistema de contabilidad está diseñado con excelencia técnica, pero es difícil de usar, carece de soporte técnico y requiere un largo tiempo para la comercialización de nuevas funciones, es probable que fracase a largo plazo. Un atributo de calidad actúa como el motor de un sistema de software. Define las restricciones y los objetivos que deben cumplir la arquitectura del sistema, el proceso de desarrollo y todo el Ciclo de Vida del Desarrollo de Software (SDLC); de lo contrario, el equipo responsable de una aplicación podría verse desorientado. Pero ¿existen sistemas de software sin un control de calidad definido? La respuesta corta es no. La respuesta larga es que existen dos tipos de sistemas: el primero, con atributos de calidad bien definidos y conocidos que impulsan decisiones técnicas informadas, y el segundo, con todos los demás sistemas..
[Audio] El cliente nunca sabrá lo que quiere, pero siempre sabrá lo que no quiere..
Quality Attributes. Classifications.
Quality Attributes. Quality Characterisctics of ISO 25010.
[Audio] Adecuación Funcional Esta característica representa el grado en que un producto o sistema proporciona funciones que satisfacen las necesidades declaradas e implícitas cuando se utiliza en condiciones específicas. Esta característica se compone de las siguientes sub-características: Completitud funcional: Grado en que el conjunto de funciones cubre todas las tareas y objetivos del usuario especificados. Corrección funcional: Grado en que un producto o sistema proporciona los resultados correctos con la precisión necesaria. Idoneidad funcional: Grado en que las funciones facilitan el cumplimiento de las tareas y objetivos especificados. https://iso25000.com/index.php/en/iso-25000-standards/iso-25010.
[Audio] Eficiencia del rendimiento Esta característica representa el rendimiento en relación con la cantidad de recursos utilizados en las condiciones establecidas. Esta característica se compone de las siguientes subcaracterísticas: Comportamiento temporal: Grado en que los tiempos de respuesta y procesamiento, así como las tasas de rendimiento de un producto o sistema, al realizar sus funciones, cumplen con los requisitos. Utilización de recursos: Grado en que la cantidad y los tipos de recursos utilizados por un producto o sistema, al realizar sus funciones, cumplen con los requisitos. Capacidad: Grado en que los límites máximos de un parámetro del producto o sistema cumplen con los requisitos. https://iso25000.com/index.php/en/iso-25000-standards/iso-25010 Rendimiento muestra la respuesta del sistema al realizar ciertas acciones durante un período determinado. Hay dos maneras de medir el rendimiento: Latencia: Tiempo empleado en responder a un evento Capacidad del canal: El número de eventos que ocurren en un momento determinado. En la práctica, los posibles indicadores de rendimiento incluyen, por ejemplo: Número promedio/máximo de usuarios del sistema por unidad de tiempo. Tiempo promedio de carga de página. Tiempo promedio de ejecución de métodos. Los problemas de rendimiento a menudo se convierten en problemas que pueden afectar todo, desde la capacidad del servidor o el desarrollo del frontend hasta la eficiencia de las consultas a la base de datos o la capacidad de los canales de comunicación. El rendimiento casi siempre se incluye en la lista de atributos de calidad críticos que el arquitecto debe considerar, ya que afecta a todo el sistema y puede afectar a muchas partes de la solución arquitectónica. Por lo tanto, en internet puede encontrar una gran cantidad de ejemplos de cómo abordar los problemas de rendimiento. https://medium.com/@nvashanin/quality-attributes-in-software-architecture-3844ea482732.
[Audio] Compatibilidad Grado en el que un producto, sistema o componente puede intercambiar información con otros productos, sistemas o componentes, y/o realizar las funciones requeridas compartiendo el mismo entorno de hardware o software. Esta característica se compone de las siguientes subcaracterísticas: Coexistencia: Grado en el que un producto puede realizar las funciones requeridas eficientemente compartiendo un entorno y recursos comunes con otros productos, sin afectar negativamente a ningún otro producto. Interoperabilidad: Grado en el que dos o más sistemas, productos o componentes pueden intercambiar información y utilizarla. https://iso25000.com/index.php/en/iso-25000-standards/iso-25010?start=3 La interoperabilidad es un atributo del sistema o parte del sistema responsable de su funcionamiento, la transmisión de datos y su intercambio con otros sistemas externos. Un sistema bien diseñado facilita la integración con sistemas de terceros. Para mejorar la interoperabilidad, se pueden utilizar interfaces externas bien diseñadas, sistemas de estandarización, etc. Naturalmente, existen numerosos problemas para la interacción: Sistemas externos obsoletos. Diferentes formatos de datos en sistemas externos similares. Diferentes versiones de la API en sistemas externos. Retrocompatibilidad de la API para la integración. Baja calidad y falta de estándares en los sistemas externos. La interoperabilidad es fundamental. En el mejor de los casos, será necesario crear capas adicionales para la API de interacción. En el peor, será necesario reconstruir todo el sistema. https://medium.com/@nvashanin/quality-attributes-in-software-architecture-3844ea482732 La interoperabilidad es un atributo del sistema o de una parte del sistema que se encarga de su funcionamiento, la transmisión de datos y su intercambio con otros sistemas externos. Un sistema bien diseñado facilita la integración con sistemas de terceros. Para mejorar la interoperabilidad, se pueden utilizar interfaces externas bien diseñadas, sistemas de estandarización, etc. Naturalmente, existen numerosos problemas para la interacción: Sistemas externos obsoletos. Diferentes formatos de datos en sistemas externos similares. Diferentes versiones de la API en sistemas externos. Retrocompatibilidad de la API para la integración. Baja calidad y falta de estándares en los sistemas externos. La interoperabilidad es fundamental. En el mejor de los casos, será necesario crear capas adicionales para la API de interacción. En el peor, será necesario reconstruir todo el sistema..
[Audio] Usabilidad Grado en el que un producto o sistema puede ser utilizado por usuarios específicos para lograr objetivos específicos con eficacia, eficiencia y satisfacción en un contexto de uso específico. Esta característica se compone de las siguientes subcaracterísticas: Reconocimiento de la idoneidad: Grado en el que los usuarios pueden reconocer si un producto o sistema es apropiado para sus necesidades. Aprendizaje: Grado en el que un producto o sistema puede ser utilizado por usuarios específicos para lograr objetivos específicos de aprendizaje para usar el producto o sistema con eficacia, eficiencia, ausencia de riesgo y satisfacción en un contexto de uso específico. Operabilidad: Grado en el que un producto o sistema tiene atributos que lo hacen fácil de operar y controlar. Protección contra errores del usuario: Grado en el que un sistema protege a los usuarios contra errores. Estética de la interfaz de usuario: Grado en el que una interfaz de usuario permite una interacción agradable y satisfactoria para el usuario. Accesibilidad: Grado en el que un producto o sistema puede ser utilizado por personas con la más amplia gama de características y capacidades para lograr un objetivo específico en un contexto de uso específico. https://iso25000.com/index.php/es/iso-25000-standards/iso-25010?start=3 La usabilidad es uno de los atributos más esenciales, ya que, a diferencia de otros atributos, los usuarios pueden ver directamente el funcionamiento de este atributo del sistema. Uno de los problemas críticos de la usabilidad es el exceso de interacción o el exceso de acciones necesarias para realizar una tarea. Las secuencias incorrectas de pasos en interfaces multietapa también constituyen un problema de usabilidad. Los elementos de datos y los controles pueden estar diseñados de forma diferente a los patrones aceptados de la experiencia del usuario, lo que también complica la interacción. Por ejemplo, si se desarrolla una aplicación para iOS, es importante seguir las directrices de Apple o las de Microsoft para aplicaciones de escritorio de Windows. Algunos ejemplos de indicadores importantes para este atributo son: Lista de dispositivos compatibles, versiones del sistema operativo, resoluciones de pantalla y navegadores y sus versiones. Elementos que aceleran la interacción del usuario, como teclas de acceso rápido, listas de sugerencias, etc. Tiempo promedio que un usuario necesita para realizar acciones individuales. Apoyo a la accesibilidad para personas con discapacidad. https://medium.com/@nvashanin/quality-attributes-in-software-architecture-3844ea482732 #3) Usabilidad Este atributo se refiere a la calidad de la experiencia del usuario final al interactuar con la aplicación o servicio. La usabilidad se centra en la efectividad, la eficiencia y la satisfacción general del usuario. Este atributo ayuda a medir la facilidad de uso de cualquier aplicación o servicio de software (por ejemplo, registrar una nueva cuenta e iniciar sesión). Algunos de los siguientes problemas pueden surgir si la usabilidad no se gestiona correctamente: Proceso de registro complejo Inconsistencia en la interfaz de usuario Navegación poco clara y, en ocasiones, complicada Mensajes de error poco intuitivos A continuación, se enumeran los subatributos de usabilidad: Diseño simple e intuitivo: Describe la capacidad del usuario para comprender fácilmente el diseño de la aplicación y navegar sin necesidad de razonamiento consciente. Facilidad de aprendizaje: Se refiere a la facilidad y velocidad con la que un usuario que nunca ha visto la interfaz de usuario puede ejecutar las tareas más básicas. Eficiencia de uso: Se refiere a la rapidez con la que un usuario puede realizar tareas una vez que se familiariza con el sistema. Memorabilidad: Describe la eficacia con la que un usuario puede usar una aplicación (sitio web) después de un tiempo sin usarlo. Frecuencia y gravedad de los errores: Se refiere a la frecuencia con la que los usuarios cometen errores al usar el sistema, la gravedad de los errores y cómo se recuperan de ellos. Satisfacción subjetiva: Describe la aceptación.
[Audio] https://hackernoon.com/the-ultimate-guide-difference-between-usability-and-user-experience-e926c11eac7a/.
[Audio] Fiabilidad Grado en el que un sistema, producto o componente realiza funciones específicas en condiciones específicas durante un período de tiempo determinado. Esta característica se compone de las siguientes subcaracterísticas: Madurez: Grado en el que un sistema, producto o componente satisface las necesidades de fiabilidad en condiciones normales de funcionamiento. Disponibilidad: Grado en el que un sistema, producto o componente está operativo y accesible cuando se requiere su uso. Tolerancia a fallos: Grado en el que un sistema, producto o componente funciona según lo previsto a pesar de la presencia de fallos de hardware o software. Recuperabilidad: Grado en el que, en caso de interrupción o fallo, un producto o sistema puede recuperar los datos directamente afectados y restablecer el estado deseado del sistema. https://iso25000.com/index.php/en/iso-25000-standards/iso-25010?start=3 La fiabilidad es un atributo del sistema responsable de su capacidad para seguir funcionando en condiciones predefinidas. Con mayor frecuencia, el sistema falla debido a la inaccesibilidad de elementos externos, como bases de datos, sistemas y conexiones de red. https://medium.com/@nvashanin/quality-attributes-in-software-architecture-3844ea482732.
[Audio] https://betterstack.com/community/guides/incident-management/availability-table/ https://en.wikipedia.org/wiki/High_availability Agreed SLA level https://uptime.is/ Calculate Availability Percentage https://www.fiixsoftware.com/glossary/system-availability/.
[Audio] Seguridad Grado en el que un producto o sistema protege la información y los datos, de modo que las personas u otros productos o sistemas tengan el grado de acceso a los datos adecuado a sus tipos y niveles de autorización. Esta característica se compone de las siguientes subcaracterísticas: Confidencialidad: Grado en el que un producto o sistema garantiza que los datos sean accesibles únicamente a las personas autorizadas. Integridad: Grado en el que un sistema, producto o componente impide el acceso no autorizado a programas informáticos o datos, o su modificación. No repudio: Grado en el que se puede demostrar que las acciones o eventos tuvieron lugar, de modo que no se puedan repudiar posteriormente. Rendición de cuentas: Grado en el que las acciones de una entidad se pueden rastrear de forma única hasta la entidad. Autenticidad: Grado en el que se puede demostrar que la identidad de un sujeto o recurso es la declarada. https://iso25000.com/index.php/en/iso-25000-standards/iso-25010?start=6 Seguridad Es responsable de la capacidad del sistema para reducir la probabilidad de acciones maliciosas o accidentales, así como la posibilidad de robo o pérdida de información. Se utilizan diversas medidas para proteger los sistemas: autenticación, cifrado, auditoría y otras. Ejemplos de este atributo en el funcionamiento del sistema son: La capacidad del sistema para detectar ataques DDoS y responder a ellos. Restricciones de acceso de usuarios mediante autenticación/autorización. Prevención de inyección SQL. Cifrado de contraseñas y contenido. Conexión segura. https://medium.com/@nvashanin/quality-attributes-in-software-architecture-3844ea482732.
[Audio] Mantenibilidad Esta característica representa el grado de efectividad y eficiencia con el que un producto o sistema puede modificarse para mejorarlo, corregirlo o adaptarlo a cambios en el entorno y en los requisitos. Esta característica se compone de las siguientes subcaracterísticas: Modularidad: Grado en el que un sistema o programa informático está compuesto por componentes discretos, de modo que un cambio en un componente tiene un impacto mínimo en los demás. Reutilizabilidad: Grado en el que un activo puede utilizarse en más de un sistema o en la creación de otros activos. Analizabilidad: Grado de efectividad y eficiencia con el que es posible evaluar el impacto en un producto o sistema de un cambio previsto en una o más de sus partes, o diagnosticar un producto para detectar deficiencias o causas de fallos, o identificar las partes que deben modificarse. Modificabilidad: Grado en el que un producto o sistema puede modificarse de forma eficaz y eficiente sin introducir defectos ni degradar la calidad del producto existente. Testabilidad: Grado de efectividad y eficiencia con el que se pueden establecer criterios de prueba para un sistema, producto o componente, y realizar pruebas para determinar si se cumplen dichos criterios. https://iso25000.com/index.php/en/iso-25000-standards/iso-25010?start=6 La mantenibilidad es la capacidad del sistema para soportar cambios. Estos cambios pueden estar relacionados con nuevos requisitos de negocio o la corrección de errores antiguos, y afectar a componentes del sistema o a métodos independientes. Además, la mantenibilidad afecta el tiempo necesario para restaurar el sistema tras un fallo. Las dependencias excesivas entre componentes tienen un efecto muy negativo en la mantenibilidad. En programación, existe el concepto de código espagueti antipatrón, que significa una coherencia excesiva en el código. En arquitectura, no existe tal concepto, pero la arquitectura es muy similar a la programación en este sentido. Gracias a la mantenibilidad, han surgido conceptos como la separación de responsabilidades, las arquitecturas de microservicios y la modularidad. Al mismo tiempo, este atributo afecta no solo a los procesos de desarrollo, sino también a los de gestión (por ejemplo, la división de equipos en partes relacionadas con el producto). https://medium.com/@nvashanin/quality-attributes-in-software-architecture-3844ea482732 #2) Mantenibilidad Es la facilidad con la que un desarrollador de software puede corregir fallas en la funcionalidad existente sin afectar otros componentes del sistema de software. También considera la facilidad con la que un desarrollador puede agregar nuevas funciones, actualizar las existentes o actualizar el sistema con nueva tecnología. La mantenibilidad del software se logra mediante el cumplimiento de las reglas de arquitectura del software y la consistencia en toda la aplicación. El propósito de este atributo es facilitar y optimizar el mantenimiento de las aplicaciones de software. La industria del software suele utilizar algunos de los siguientes tipos de mantenimiento comunes: Correctivo: Este es el tipo más esencial, donde el desarrollador analiza el error detectado e implementa una solución. Adaptativo: En este caso, la aplicación podría migrarse para usar una base de datos o tecnología diferente (por ejemplo, de MS SQL a PostgreSQL; de C++ a C#). Preventivo: Prevenir errores o fallos puede ser una tarea muy difícil. Sin embargo, al implementar estándares de codificación adecuados, documentar el código, evitar código complejo y realizar suficientes pruebas, se pueden reducir los errores. Perfectivo: Esto podría implicar la refactorización del código. La idea es mejorar el código existente y, por lo tanto, la funcionalidad. Ejemplo: Debido a la complejidad del código, la implementación del nuevo RGPD en el producto heredado (que lleva más de 20 años en funcionamiento) fue un verdadero dolor de cabeza para los desarrolladores. Posible comprobación: Los desarrolladores de software deberían escribir el código lo más simple posible y añadir comentarios (en línea o en bloque) siempre que sea necesario. https://www.softwaretestinghelp.com/what-are-the-quality-attributes/.
[Audio] Portabilidad Grado de eficacia y eficiencia con el que un sistema, producto o componente puede transferirse de un hardware, software u otro entorno operativo o de uso a otro. Esta característica se compone de las siguientes subcaracterísticas: Adaptabilidad: Grado en el que un producto o sistema puede adaptarse de forma eficaz y eficiente a hardware, software u otros entornos operativos o de uso diferentes o en evolución. Instalabilidad: Grado de eficacia y eficiencia con el que un producto o sistema puede instalarse y/o desinstalarse correctamente en un entorno específico. Reemplazabilidad: Grado en el que un producto puede reemplazar a otro producto de software específico para el mismo propósito en el mismo entorno. https://iso25000.com/index.php/en/iso-25000-standards/iso-25010?start=6 #4) Portabilidad Se refiere al grado en el que un sistema o sus componentes pueden migrarse (transportarse) a otros entornos con hardware y/o software (sistema operativo) diferentes. No se debe subestimar la importancia de la portabilidad del software. Los subatributos de portabilidad se enumeran a continuación: Adaptabilidad: se refiere a la facilidad con la que un sistema de software se puede adaptar a un nuevo hardware, software u otro entorno. Reemplazabilidad: se refiere a la eficacia con la que un producto de software puede reemplazar otra solución de software diseñada para el mismo propósito. Es la capacidad de un componente de software de ser reemplazado por otro. Portabilidad Grado de eficacia y eficiencia con el que un sistema, producto o componente puede transferirse de un hardware, software u otro entorno operativo o de uso a otro. Esta característica se compone de las siguientes subcaracterísticas: Adaptabilidad: Grado en el que un producto o sistema puede adaptarse de forma eficaz y eficiente a hardware, software u otros entornos operativos o de uso diferentes o en evolución. Instalabilidad: Grado de eficacia y eficiencia con el que un producto o sistema puede instalarse y/o desinstalarse correctamente en un entorno específico. Reemplazabilidad: Grado en el que un producto puede reemplazar a otro producto de software específico para el mismo propósito en el mismo entorno. https://iso25000.com/index.php/es/iso-25000-standards/iso-25010?start=6 #4) Portabilidad Se refiere al grado en el que un sistema o sus componentes pueden migrarse (transportarse) a otros entornos con hardware y/o software (sistema operativo) diferentes. No se debe subestimar la importancia de la portabilidad del software. Los subatributos de la portabilidad se enumeran a continuación: Adaptabilidad: Se refiere a la facilidad con la que un sistema de software se puede adaptar a un nuevo hardware, software u otro entorno. Reemplazabilidad: Se refiere a la eficacia con la que un producto de software puede reemplazar otra solución de software diseñada para el mismo propósito. Es la capacidad de un componente de software de ser reemplazado por otro. Instalabilidad: Especifica la facilidad con la que una solución de software se puede instalar o desinstalar en un entorno determinado. Compatibilidad (Coexistencia): Es el grado en el que varios sistemas y/o componentes de software no relacionados coexisten en el mismo entorno. [fuente de la imagen] Ejemplo: La versión móvil del software de reserva de eventos funcionaba correctamente en Android, pero tenía problemas con los menús contextuales en iOS (tanto en iPhone como en iPad). Posible comprobación: Durante la fase de desarrollo, se debe considerar cuidadosamente la portabilidad del software. Debe existir una abstracción clara y generalizada entre la lógica de negocio y las interfaces del sistema. Las CSS y los estilos deben implementarse teniendo en cuenta las diversas plataformas de sistemas operativos; por ejemplo, se debe dar la debida importancia a las pruebas de portabilidad. Instalabilidad: Especifica la facilidad con la que una solución de software se puede instalar o desinstalar en un entorno determinado. Compatibilidad (Coexistencia): Es el grado en que varios sistemas o componentes de software no relacionados coexisten en el mismo entorno. [fuente de la imagen] Ejemplo: La versión móvil de un software de reservas.
Quality Attributes. It works on my computer But we are not going to give your computer to the client.
Quality Attributes. Quiz stock illustration. Illustration of message, game - 44060147.
The Functional requirements are product features or functions that developers must implement to enable users to perform their tasks. True Non-functional requirements (NFRs) define the criteria that are used to evaluate the system, for a specific behavior. False: Not for a specific behavior, is for whole system specification The Non-Functional requirements described in detail the architectural specifications. True The Non-Functional requirements Describe how the product works True The Functional requirements Define product Properties False: Define product features.
A Quality Attribute is a feature of a software system that defines a business standpoint. False : determines its usefulness and success from the client not only de business or commercial standpoint The mainly quality attribute categories are: Functional Suitability, Performance, Compatibility, Usability, Reliability, Security, Maintainability, Portability True The quality attributes define the architecture drivers for a whole system True.
Knowledge. Practice.
Quality Attributes. Write Overview Project Extract the Functional Requirements Extract the Non-Functional Requirements Identify the Quality Attributes Classify and score them.