Compartir vía


Recomendaciones para pruebas de rendimiento

Se aplica a esta recomendación de lista de comprobación de eficiencia del rendimiento de Azure Well-Architected Framework:

PE:06 Probar el rendimiento. Realice pruebas periódicas en un entorno que coincida con el entorno de producción. Compare los resultados con los objetivos de rendimiento y la prueba comparativa de rendimiento.

En esta guía se describen las recomendaciones para las pruebas. Las pruebas de rendimiento le ayudan a evaluar la funcionalidad de una carga de trabajo en varios escenarios. Implica probar el tiempo de respuesta, el rendimiento, el uso de recursos y la estabilidad de la carga de trabajo para ayudar a garantizar que la carga de trabajo cumpla sus requisitos de rendimiento.

Las pruebas ayudan a evitar problemas de rendimiento. También ayuda a garantizar que la carga de trabajo cumpla sus contratos de nivel de servicio. Sin pruebas de rendimiento, una carga de trabajo puede experimentar degradaciones del rendimiento que a menudo se pueden evitar. El rendimiento de la carga de trabajo puede desfase de los objetivos de rendimiento y las líneas base establecidas.

Definiciones

Término Definición
Pruebas de caos Una prueba de rendimiento que pretende probar la resistencia y la estabilidad de un sistema mediante la introducción deliberada de errores o interrupciones aleatorios e impredecibles.
Prueba de carga Una prueba de rendimiento que mide el rendimiento del sistema en una carga típica y pesada.
Línea de base de rendimiento Conjunto de métricas que representan el comportamiento de una carga de trabajo en condiciones normales según lo validan las pruebas.
Prueba de esfuerzo Una prueba de rendimiento que sobrecarga un sistema hasta que se interrumpe.
Prueba sintética Una prueba de rendimiento que simula las solicitudes de usuario en una aplicación.

Estrategias de diseño principales

Las pruebas de rendimiento le ayudan a recopilar datos medibles en una carga de trabajo. Al ejecutar pruebas lo suficientemente pronto, también le ayudan a crear cargas de trabajo en las especificaciones adecuadas. Debe realizar pruebas de rendimiento lo antes posible en el ciclo de vida de desarrollo de software. Las pruebas tempranas le permiten detectar y corregir problemas de rendimiento anteriores en el desarrollo. Puede usar una prueba de concepto (POC) si el código de producción no está listo.

Preparación de la prueba

La preparación de pruebas de rendimiento hace referencia a la configuración y organización de los recursos, las configuraciones y los escenarios de prueba que necesita para realizar pruebas de rendimiento de forma eficaz.

Definir criterios de aceptación

Los criterios de aceptación especifican los requisitos de rendimiento que una carga de trabajo debe cumplir para considerarse aceptable o correcta. Defina criterios que se alineen con los objetivos de rendimiento.

Revise los objetivos de rendimiento. Los objetivos de rendimiento definen el nivel de rendimiento deseado para la carga de trabajo. Revise los objetivos de rendimiento establecidos para la carga de trabajo. Los objetivos de rendimiento son métricas que pueden implicar el tiempo de respuesta, el rendimiento, el uso de recursos o cualquier otro indicador de rendimiento pertinente. Por ejemplo, es posible que tenga un destino para que el tiempo de respuesta esté por debajo de un umbral determinado, como menos de 2 segundos.

Definir criterios de aceptación. Convierta los objetivos de rendimiento en criterios de aceptación específicos que puede usar para evaluar el rendimiento de la carga de trabajo. Por ejemplo, suponga que el destino de rendimiento para el tiempo de respuesta es de 2 segundos o menos. El criterio de aceptación podría ser El tiempo medio de respuesta de la carga de trabajo debe ser inferior a 2 segundos. Use estos criterios de aceptación para determinar si la carga de trabajo cumple el nivel de rendimiento deseado.

Al definir criterios de aceptación, es importante centrarse en los usuarios y sus expectativas. Los criterios de aceptación ayudan a garantizar que el trabajo entregado satisfaga las necesidades y los requisitos del usuario. Tenga en cuenta las siguientes consideraciones para incorporar la perspectiva del usuario a los criterios de aceptación:

  • Requisitos de usuario: comprenda las necesidades y los objetivos del usuario para la carga de trabajo. Tenga en cuenta cómo debe realizarse la carga de trabajo para satisfacer estos requisitos.

  • Experiencia del usuario: defina los criterios de aceptación que capturen la experiencia de usuario deseada. Incluya factores como el tiempo de respuesta, la facilidad de uso, la accesibilidad y la satisfacción general.

  • Requisitos funcionales: aborde la funcionalidad específica que el usuario espera ver en la carga de trabajo. Defina criterios de aceptación en torno a estos requisitos funcionales para ayudar a garantizar que se cumplan.

  • Casos de uso: considere diferentes escenarios o casos de uso que pueda encontrar el usuario. Defina criterios de aceptación basados en estos casos de uso para validar el rendimiento de la carga de trabajo en situaciones reales.

Establecer umbrales de aceptación. Determine los umbrales dentro de los criterios de aceptación que indican si la carga de trabajo cumple los objetivos de rendimiento. Estos umbrales definen el intervalo aceptable de rendimiento para cada métrica. Por ejemplo, supongamos que el criterio de aceptación para el tiempo de respuesta es inferior a 2 segundos. Puede establecer el umbral en 2,5 segundos. Este nivel indica que cualquier tiempo de respuesta durante 2,5 segundos se considera un problema de rendimiento.

Definir criterios de paso. Establezca los criterios para determinar si la carga de trabajo ha superado o no la prueba de rendimiento. Puede definir pasar como cumplir todos los criterios de aceptación o lograr un determinado porcentaje de ellos.

Selección del tipo de prueba

Para seleccionar el tipo correcto de prueba de rendimiento, es importante alinear la prueba con los criterios de aceptación. Los criterios de aceptación definen las condiciones que deben cumplirse para que se considere que se realice una corrección de errores o requisitos. Las pruebas de rendimiento deben tener como objetivo comprobar si una carga de trabajo cumple estos criterios de aceptación y funciona según lo previsto en condiciones especificadas. Alinear el tipo de prueba de rendimiento con los criterios de aceptación ayuda a garantizar que la prueba se centra en cumplir las expectativas de rendimiento que definen los criterios.

  • Comprender los criterios de aceptación. Revise los criterios de aceptación para el requisito o la corrección de errores. Los criterios describen las condiciones y funcionalidades específicas que se deben cumplir.

  • Identifique las métricas de rendimiento pertinentes. En función de los criterios de aceptación, determine las métricas de rendimiento que son fundamentales para lograr los resultados deseados. Por ejemplo, si los criterios de aceptación se centran en el tiempo de respuesta, la priorización de las pruebas de carga podría ser adecuada.

  • Seleccione un tipo de prueba adecuado. Evalúe los tipos de prueba disponibles y elija el que mejor se alinee con las métricas de rendimiento identificadas y los criterios de aceptación.

En la tabla siguiente se proporciona un ejemplo de tipos de prueba y sus casos de uso.

Tipo de prueba Descripción Caso de uso
Pruebas de carga Simulación de cargas de usuario realistas para medir el rendimiento de la carga de trabajo en las cargas de trabajo máximas esperadas. Determina la tolerancia de carga.
pruebas de esfuerzo Inserte la carga de trabajo más allá de sus límites normales para identificar sus puntos de interrupción y medir su capacidad de recuperación. Determina la resistencia y la solidez.
Pruebas de remojo (pruebas de resistencia) Ejecute la carga de trabajo bajo cargas elevadas sostenidas durante un período prolongado para identificar la degradación del rendimiento, las pérdidas de memoria o los problemas de recursos. Evalúa la estabilidad y la confiabilidad a lo largo del tiempo.
Pruebas de pico Simulación de aumentos repentinos en la carga de usuario para evaluar cómo la carga de trabajo controla los cambios bruscos en la demanda. Mide la capacidad de escalar y mantener el rendimiento durante los períodos máximos.
Pruebas de compatibilidad Pruebe el rendimiento de la carga de trabajo en varias plataformas, exploradores o dispositivos. Ayuda a garantizar un rendimiento coherente en varios entornos.

Dé prioridad a los tipos de prueba seleccionados en función de las características y requisitos de la carga de trabajo. Tenga en cuenta factores como la importancia de las métricas de rendimiento, las expectativas del usuario, las prioridades empresariales y los problemas conocidos o las vulnerabilidades.

Selección de herramientas de prueba

Elija las herramientas adecuadas en función del tipo de pruebas de rendimiento que quiera ejecutar. Evalúe la infraestructura, los recursos y las restricciones del entorno de prueba. Elija herramientas de prueba que admitan los tipos de prueba deseados y proporcione las características necesarias para la supervisión, medición, análisis e informes.

Una herramienta de supervisión del rendimiento de aplicaciones (APM) proporciona información detallada sobre las aplicaciones y es una herramienta de prueba esencial. Ayuda a realizar un seguimiento de las transacciones individuales y asignar sus rutas de acceso a través de varios servicios de carga de trabajo. Después de las pruebas, debe usar la herramienta APM para analizar y comparar los datos de prueba con la base de referencia de rendimiento.

Use herramientas de generación de perfiles para identificar cuellos de botella de rendimiento en el código. La generación de perfiles ayuda a identificar las áreas del código que consumen la mayoría de los recursos y necesitan optimización. Proporciona información sobre el tiempo de ejecución y el uso de memoria de diferentes partes del código.

Los pasos siguientes pueden ayudarle a seleccionar las herramientas de prueba adecuadas:

  • Identificar los requisitos de prueba. Comience por comprender los requisitos específicos de las pruebas de rendimiento. Tenga en cuenta varios factores:

    • Tipo de carga de trabajo
    • Métricas de rendimiento para medir, como el tiempo de respuesta y el rendimiento
    • La complejidad de la arquitectura de la carga de trabajo
    • Entorno de prueba, como basado en la nube, local o híbrido.
  • Herramientas de pruebas de investigación. Realice investigaciones para identificar las herramientas de pruebas de rendimiento que se alineen con sus requisitos. Considere las herramientas comerciales y de código abierto disponibles en el mercado. Busque herramientas que admitan los tipos deseados de pruebas de rendimiento, como pruebas de carga o pruebas de esfuerzo, y que proporcionan características para medir las métricas de rendimiento.

  • Evaluar las características de la herramienta. Evalúe las características que proporciona cada herramienta de prueba. Busque funcionalidades como la simulación del comportamiento realista del usuario y la escalabilidad para controlar cargas de usuario grandes. Considere la posibilidad de admitir varios protocolos y tecnologías, la integración con otras herramientas o marcos de pruebas, y funcionalidades de informes y análisis.

  • Considere la compatibilidad y la integración. Determine la compatibilidad de las herramientas de prueba con la infraestructura y las tecnologías existentes. Asegúrese de que las herramientas se puedan integrar fácilmente en el entorno de pruebas y puedan comunicarse con la carga de trabajo necesaria para la supervisión y el análisis.

  • Evalúe el costo y las licencias. Evalúe la estructura de costos y los términos de licencia asociados a las herramientas de prueba. Tenga en cuenta factores como la inversión inicial, los costos de mantenimiento y los costos de soporte técnico. Tenga en cuenta también otros requisitos de licencia que dependen del número de usuarios o usuarios virtuales.

  • Realizar una POC. Seleccione algunas herramientas que parecen ser las más adecuadas en función de la evaluación. Realice una POC a pequeña escala para validar la facilidad de uso, las características y la eficacia de las herramientas en su escenario de prueba específico.

  • Considere la posibilidad de admitir y entrenar. Evalúe el nivel de soporte técnico y aprendizaje que proporciona el proveedor o la comunidad de la herramienta. Determine la disponibilidad de los canales de documentación, tutoriales y soporte técnico para ayudar con los desafíos o problemas que puedan surgir durante el proceso de prueba.

Creación de escenarios de prueba

La creación de escenarios de prueba hace referencia al proceso de diseño de situaciones o condiciones específicas que son adecuadas para probar el rendimiento de una carga de trabajo. Los escenarios de prueba se crean para emular el comportamiento realista del usuario y los patrones de carga de trabajo. Estos escenarios proporcionan una manera de que los evaluadores de rendimiento evalúen cómo funciona la carga de trabajo en varias condiciones.

Los escenarios de prueba permiten replicar varios patrones de carga de trabajo, como el acceso simultáneo al usuario, los períodos de carga máximo o secuencias de transacciones específicas. Al probar la carga de trabajo en diferentes patrones de carga de trabajo, puede identificar cuellos de botella de rendimiento y optimizar la asignación de recursos.

  • Defina el comportamiento del usuario. Emule el comportamiento realista del usuario y los patrones de carga de trabajo mediante la identificación de los pasos y las acciones que realizan los usuarios cuando interactúan con la carga de trabajo. Considere las actividades como iniciar sesión, realizar búsquedas, enviar formularios o acceder a características específicas. Divida cada escenario en pasos y acciones específicos que representen la interacción del usuario con la carga de trabajo. Puede incluir navegar por páginas, realizar transacciones o interactuar con varios elementos de la carga de trabajo.

  • Determinar la participación de los datos. Identifique los datos de prueba necesarios para ejecutar los escenarios de prueba. Puede incluir la creación o generación de conjuntos de datos realistas que representan varios escenarios, perfiles de usuario o volúmenes de datos. Asegúrese de que los datos de prueba son diversos y cubre diferentes casos de uso para proporcionar una evaluación completa del rendimiento.

  • Diseñar scripts de prueba. Cree scripts de prueba que automaticen la ejecución de los escenarios de prueba definidos. Normalmente, los scripts de prueba constan de una secuencia de acciones, solicitudes HTTP o interacciones con las API de carga de trabajo o las interfaces de usuario. Use herramientas de pruebas de rendimiento o lenguajes de programación para escribir los scripts, teniendo en cuenta factores como la parametrización, la correlación y el control dinámico de datos. Valide los scripts de prueba para comprobar la exactitud y la funcionalidad. Depure cualquier problema, como errores de script, acciones que faltan o son incorrectas o problemas relacionados con los datos. La validación del script de prueba es fundamental para ayudar a garantizar la ejecución de pruebas de rendimiento precisas y confiables.

  • Configure variables y parámetros de prueba. Configure variables y parámetros en scripts de prueba para introducir variabilidad y simular escenarios reales. Incluya parámetros como credenciales de usuario, datos de entrada o selección aleatoria para imitar diferentes comportamientos de usuario y respuestas de carga de trabajo.

  • Refinar los scripts de forma iterativa. Refinar y mejorar continuamente los scripts de prueba en función de los comentarios, los resultados de las pruebas o los requisitos cambiantes. Considere la posibilidad de optimizar la lógica de script, la parametrización y el control de errores, o agregar validación y puntos de control adicionales.

Configuración del entorno de prueba

La configuración de un entorno de prueba hace referencia al proceso de configuración de la infraestructura, el software y las configuraciones de red que necesita para crear un entorno similar al entorno de producción.

Para configurar el entorno de pruebas de forma que aumente la eficacia del rendimiento, incluya los pasos siguientes en el proceso de configuración:

  • Refleje el entorno de producción. Configure el entorno de prueba para que se parezca mucho a su entorno de producción. Tenga en cuenta factores como la configuración de la infraestructura, la configuración de red y las configuraciones de software. El objetivo es garantizar que los resultados de las pruebas de rendimiento sean representativos de las condiciones reales.

  • Aprovisione recursos suficientes. Asigne recursos adecuados, como CPU, memoria y espacio en disco al entorno de prueba. Asegúrese de que los recursos disponibles pueden controlar la carga de trabajo esperada y proporcionar medidas de rendimiento precisas.

  • Replicar condiciones de red. Configure las opciones de red en el entorno de prueba para replicar las condiciones de red esperadas durante la implementación real de la carga de trabajo. Debe incluir protocolos de ancho de banda, latencia y red.

  • Instale y configure las dependencias. Instale el software, las bibliotecas, las bases de datos y otras dependencias necesarias para que la carga de trabajo se ejecute correctamente. Configure estas dependencias para que coincidan con el entorno de producción esperado.

Compensación: hay costos asociados con el mantenimiento de entornos de prueba independientes, el almacenamiento de datos, el uso de herramientas y la ejecución de pruebas. Conozca el costo de las pruebas de rendimiento y busque una manera de optimizar el gasto.

Riesgo: los datos de producción pueden contener información confidencial. Sin una sólida estrategia de limpieza y enmascaramiento, corre el riesgo de perder datos confidenciales al usar datos de producción para las pruebas.

Realización de las pruebas

Ejecute las pruebas de rendimiento mediante la herramienta de pruebas elegida. Las pruebas implican medir y registrar métricas de rendimiento, supervisar el estado y capturar los problemas de rendimiento que surjan.

Supervise y recopile métricas de rendimiento, como el tiempo de respuesta, el rendimiento, el uso de cpu y memoria, y otros indicadores pertinentes.

Use los escenarios de prueba definidos para colocar la carga de trabajo en cargas esperadas. Realice pruebas en estas distintas condiciones de carga. Por ejemplo, use niveles, como los niveles normales, máximos y de esfuerzo, para analizar el comportamiento de la carga de trabajo en varios escenarios.

Análisis de los resultados

El análisis de los resultados de la prueba implica examinar los datos recopilados y las métricas de las pruebas de rendimiento para obtener información sobre el rendimiento de la carga de trabajo. El objetivo es identificar problemas de rendimiento y usar los comentarios para ajustar las prioridades en el desarrollo de aplicaciones. Las siguientes acciones son pasos clave para analizar los resultados de las pruebas.

Revise las métricas de rendimiento. Examine las métricas de rendimiento que recopila durante las pruebas de rendimiento, como los tiempos de respuesta, el rendimiento, las tasas de error, el uso de cpu y memoria, y la latencia de red. Analice estas métricas para comprender el rendimiento general de la carga de trabajo.

  • Identifique los cuellos de botella. Evalúe las métricas de rendimiento para identificar los cuellos de botella o las áreas de rendimiento ineficaz. La evaluación puede incluir tiempos de respuesta elevados, restricciones de recursos, problemas de base de datos, latencia de red y limitaciones de escalabilidad. Identificar las causas principales de estos cuellos de botella le ayuda a priorizar las mejoras de rendimiento.

  • Correlacionar las métricas. Evalúe las relaciones y correlaciones entre varias métricas de rendimiento. Por ejemplo, analice cómo afecta el aumento de la carga o el uso de recursos a los tiempos de respuesta. Comprender estas correlaciones puede proporcionar información valiosa sobre el comportamiento de la carga de trabajo en condiciones diferentes. Busque patrones y tendencias en los datos de rendimiento a lo largo del tiempo. Analice el rendimiento en distintos niveles de carga o durante períodos específicos. La detección de tendencias puede ayudar a identificar variaciones estacionales, tiempos de uso máximo o problemas periódicos de rendimiento.

Evaluar criterios de aceptación. Compare los resultados de la prueba con los criterios de aceptación predefinidos y los objetivos de rendimiento. Evalúe si la carga de trabajo cumple los estándares de rendimiento deseados. Si la carga de trabajo no cumple los criterios de aceptación, investigue y restrinte las optimizaciones.

Iteración y refinación del análisis. Realice otros ajustes y mejoras según sea necesario. Use los datos y métricas recopilados para diagnosticar problemas de rendimiento específicos. El diagnóstico puede implicar el seguimiento a través de los componentes de carga de trabajo, examinar los archivos de registro, supervisar el uso de recursos o analizar mensajes de error. Profundice en los datos para comprender las causas subyacentes de los problemas de rendimiento.

En función del análisis de los resultados de la prueba, priorice los problemas de rendimiento identificados e implemente las mejoras necesarias. Las mejoras pueden implicar la optimización del código, la optimización de las consultas de base de datos, la mejora de los mecanismos de almacenamiento en caché y la optimización de las configuraciones de red.

Establecimiento de líneas de base

Las líneas base proporcionan un punto de referencia para comparar los resultados de rendimiento a lo largo del tiempo. Las líneas base deben ser instantáneas significativas del rendimiento de la carga de trabajo; no es necesario usar todas las pruebas como base de referencia.

Tenga en cuenta los objetivos de carga de trabajo y las instantáneas de rendimiento de documentos que le permiten aprender con el tiempo y optimizar. Use estas medidas de línea base como punto de referencia para futuras pruebas de rendimiento y úselas para identificar cualquier degradación o mejora.

Para establecer líneas base para las pruebas de rendimiento y usarlas como punto de referencia para futuras pruebas de rendimiento, siga estos pasos:

  • Identifique las métricas de rendimiento. Determine las métricas de rendimiento específicas que desea medir y realizar un seguimiento. Algunos ejemplos son:

    • Tiempo de respuesta o la rapidez con la que la carga de trabajo responde a las solicitudes.
    • Rendimiento o el número de solicitudes que se procesan por unidad de tiempo.
    • Uso de recursos, como CPU, memoria y uso de disco.
  • Registre medidas significativas. Registre las métricas de rendimiento que se obtienen durante la prueba como medidas de línea base. Estas medidas representan el punto de partida con el que se comparan las pruebas de rendimiento futuras.

  • Compare las pruebas futuras. En las pruebas de rendimiento posteriores, compare las métricas de rendimiento con respecto a las líneas base y los umbrales establecidos. La comparación permite identificar cualquier mejora o degradación en el rendimiento.

Prueba continua

Las pruebas continuas implican la supervisión y el refinamiento continuos de las pruebas. Las pruebas continuas le ayudan a mantener niveles de rendimiento coherentes y aceptables. Una carga de trabajo debe proporcionar un nivel de rendimiento coherente y aceptable en relación con la línea base. Debe ajustar la carga de trabajo con el tiempo para generar un rendimiento coherente dentro de los límites aceptables de rendimiento. Estos son algunos procedimientos clave:

  • Establecer límites de degradación. Defina umbrales numéricos que especifican el nivel de degradación del rendimiento aceptable con el tiempo. Al establecer estos límites, puede supervisar las fluctuaciones de rendimiento y recibir alertas cuando el rendimiento cae por debajo del umbral definido.

  • Incluya control de calidad. Incorpore los requisitos de rendimiento, como el uso de CPU y las solicitudes máximas por segundo, en el proceso de control de calidad. Trate los requisitos de rendimiento con el mismo nivel de importancia que los requisitos funcionales. Este proceso ayuda a garantizar que la carga de trabajo cumpla los requisitos de rendimiento definidos antes de implementarla en producción.

  • Automatización de alertas. En entornos activos, la detección rápida y la respuesta son cruciales. Configure sistemas de alertas automatizados que usen la línea de base de rendimiento como referencia. Si hay una desviación significativa en el rendimiento, los equipos necesarios se alertan inmediatamente para actuar.

  • Prueba de los cambios. Algunos problemas de rendimiento solo pueden manifestarse en una configuración activa. Aplique prácticas de prueba exhaustivas para los cambios propuestos en el código y la infraestructura. Use la instrumentación de código para obtener información sobre las características de rendimiento de la aplicación, como rutas de acceso activas, asignaciones de memoria y recolección de elementos no utilizados. Esta prueba garantiza que cualquier cambio introducido no degrada el rendimiento más allá de los límites aceptables.

Facilitación de Azure

Realice las pruebas: Azure Pipelines permite integrar pruebas de rendimiento en la canalización de CI/CD. Puede incorporar pruebas de carga como paso en la canalización para validar el rendimiento y la escalabilidad de las aplicaciones.

Azure Chaos Studio proporciona una manera de insertar errores reales en la aplicación para poder ejecutar experimentos de inyección de errores controlados. Los experimentos le ayudan a medir, comprender y mejorar la resistencia de la aplicación y el servicio en la nube.

Azure Load Testing es un servicio de pruebas de carga que genera una carga a gran escala en cualquier aplicación. Load Testing proporciona funcionalidades para automatizar las pruebas de carga e integrarlas en el flujo de trabajo de integración continua y entrega continua (CI/CD). Puede definir criterios de prueba, como el tiempo medio de respuesta o los umbrales de error, y detener automáticamente las pruebas de carga en función de condiciones de error específicas. Load Testing ofrece un panel que proporciona actualizaciones dinámicas y métricas detalladas de recursos de los componentes de la aplicación de Azure durante una prueba de carga. Puede analizar los resultados de la prueba, identificar cuellos de botella de rendimiento y comparar varias ejecuciones de pruebas para comprender las regresiones de rendimiento a lo largo del tiempo.

Análisis de los resultados: Azure Monitor es una solución de supervisión completa para recopilar, analizar y responder a la telemetría de los entornos locales y en la nube. Application Insights es una extensión de Monitor que proporciona características de APM. Puede usar Application Insights para supervisar las aplicaciones durante el desarrollo y las pruebas y también en producción.

Equilibrio: las pruebas tardan tiempo y habilidad en realizarse y pueden afectar a la eficiencia operativa.

Lista de comprobación de eficiencia del rendimiento

Consulte el conjunto completo de recomendaciones.