Hablemos de entornos en el desarrollo de software

Siempre he dicho que los artículos que redacto nacen de alguna vivencia o situación particular que leo o escucho. El siguiente artículo no es la excepción, nace de una vivencia, puntualmente de una consultoría que estoy llevando adelante junto con algunos miembros de Quassure.

Con nuestra profesión, no hay duda de que trabajar en la calidad del software es fundamental para otorgar una experiencia satisfactoria a nuestros usuarios. Y si pretendemos crear un software de calidad, debemos tener presente un tema muy importante que todo equipo de QA debe considerar desde el inicio de los proyectos: un entorno o ambiente de pruebas.

En este artículo, les compartiré información que considero importante divulgar respecto a los entornos de desarrollo.

¿Qué es un entorno?

Un entorno, también conocido como ambiente o environment, es una serie de configuraciones necesarias que deben realizarse para poder ejecutar nuestras aplicaciones. Esta configuración requerirá de ciertas características específicas las cuales incluirá un firmware, software, hardware y la configuración de red necesaria. Este espacio virtual permitirá llevar a cabo el desarrollo del software, así como también todas las pruebas necesarias que nos permitirán identificar posibles errores antes de lanzar nuestra aplicación a Producción.

Definido qué es un entorno es hora de entender cuáles son los beneficios que tiene para el proceso de desarrollo de software contar con ellos.

Los principales beneficios son los siguientes:

Permitirá el aislamiento de errores y control de los riesgos: Durante el SDLC contar con más de un ambiente permitirá aislar y controlar los riesgos asociados a la “feature” que estamos desarrollando. Por ejemplo: los errores detectados en el ambiente de desarrollo durante las pruebas unitarias serán aislados e independientes de los que sean detectados por los testers en el ambiente de pruebas durante sus pruebas funcionales/no funcionales. De esta manera podremos ir filtrando los errores en varias etapas. (Te recomiendo leer también “9 filtros de calidad para el software”). El principal objetivo aquí es controlar los riesgos evitando así que los errores detectados en etapas de desarrollo y testing no se propaguen y lleguen a los usuarios finales.

Permitirá optimizar las instalaciones: Supongamos que tu empresa no cuenta con un ambiente de QA y que del ambiente de desarrollo se pasa directamente a Producción. Ahora, sabes muy bien que en la etapa de desarrollo además de líneas de código se crean registros, tablas, se modifican tipos de datos, valores de campos, se otorgan permisos y un largo etcétera. Cuando el equipo de desarrollo finaliza sus tareas debe armar el entregable que se instalará finalmente en producción.

Déjame decirte algo, somos humanos y es factible de que suceda que en ese entregable olvidemos especificar algo de todo lo que se hizo en desarrollo. ¿Adivina cuál es el resultado de este descuido? Instalación fallida, ejecución de rollbacks o potenciales bugs en Producción. Contar con un ambiente de QA nos permitirá ir optimizando estos pasajes y de esta manera podremos ir ejercitando la puesta en producción, tomando nota y trabajando en esos descuidos que se han cometido.

Control de ambiente: Disponer de un ambiente de pruebas independiente del ambiente de desarrollo permitirá tener un control absoluto del mismo que redundará en tranquilidad y confianza para el equipo de QA. Imagínate que no cuentas con un ambiente de pruebas y te encuentras ejecutando tus pruebas en un ambiente de desarrollo. De pronto, en medio de tus ejecuciones detectas un bug o una funcionalidad que no se encuentra operativa. Puede que efectivamente sea un error, pero puede también que esto sea producto de que en este ambiente tus colegas de desarrollo están introduciendo cambios o haciendo reinicios en medio de tus ejecuciones. Por lo tanto, tienes entre tus manos un falso positivo, un error que no es error y esto repercutirá en tu confianza respecto a la aplicación que estás testeando.

Nota: En equipos de trabajo agile no es atípico encontrarse con testers que realizan sus primeras pruebas en ambientes de desarrollo.

Ahorro de costos y tiempo: Al contar con un ambiente para pruebas donde el equipo pueda trabajar, se logrará que se simulen allí la mayor cantidad de escenarios posibles que serán realizados en Producción en el día de mañana. Esto tiene como consecuencia directa la detección y corrección de defectos de manera temprana. Y, se traducirá en ahorro de tiempos, recursos económicos, evitando así, generar una mala imagen de la empresa/producto de cara a los usuarios y demás stakeholders.

Como especifiqué más arriba, es importante entender la necesidad de contar con varios ambientes y no limitarse únicamente a contar con el ambiente de desarrollo. Es por dicha necesidad que existen distintos tipos de ambientes y estos están asociados a diferentes etapas dentro del SDLC (Software Development Life Cycle).

Los distintos tipos de ambientes que pueden existir son:

Entorno de desarrollo: Este entorno se caracteriza por tener herramientas integradas para la escritura de código, como IDE´s (VS Code, IntelliJ IDEA, etc), editores de texto avanzados o plataformas específicas que permiten la creación y edición eficiente del código fuente. Incluye también, sistemas de control de versiones como Git, SVN o Bitbucket que facilitan la gestión colaborativa del código y el seguimiento de cambios. Asimismo, estos entornos suelen contar con servidores para alojar aplicaciones, bases de datos, archivos, logs, etc. Además del desarrollo de la aplicación en este ambiente será posible ejecutar pruebas de tipo unitario.

Entorno de pruebas: Este entorno se caracteriza principalmente por ser el espacio donde se llevarán a cabo todas las pruebas relacionadas con el software que se está desarrollando. Aquí se evaluarán aspectos como su funcionalidad, usabilidad, accesibilidad, seguridad, etc. Este entorno proporcionará una réplica controlada de lo que es un entorno productivo y aquí se ejecutarán pruebas sobre módulos, además de pruebas de integración y de sistema con el fin de identificar y corregir errores antes del lanzamiento final del producto. Este ambiente contará con prácticamente lo mismo que el ambiente de desarrollo, pero el foco aquí estará en tener herramientas, base de datos y conexiones específicas para la gestión y ejecución de pruebas.

Entorno de staging: Antes de comenzar a definirlo considero importante aclarar que este entorno muchas veces se presta a la confusión ya que se lo suele confundir con el entorno de UAT y ya leerán el por qué. De hecho, en muchas empresas ni siquiera existe un entorno de staging y de existir, muchas lo utilizan también para hacer los UAT, de aquí la confusión. Aclarado esto, definiré el entorno de staging como una copia casi exacta del entorno productivo. Aquí la principal diferencia con el entorno de UAT son los datos. Mientras que en el ambiente de UAT pueden existir datos que fueron creados a partir de simulaciones, aquí todos los datos que se encuentren serán copias exactas (con salvedades como ofuscamiento/enmascaramiento) de los datos productivos.

Los beneficios de contar con este ambiente es que permite al equipo poder llevar a cabo todas las instalaciones de manera limpia y que serán necesarias para la puesta en producción. Esto es, actualizaciones de hardware, conexiones, aplicaciones, servidores, bases de datos, etc. El otro principal beneficio de contar con este ambiente es que permite llevar a cabo de manera idílica las pruebas no funcionales como son las de performance.

Entorno de aceptación de usuario (UAT): Este entorno es conocido por ser el lugar donde los usuarios finales y/o stakeholders llevarán a cabo sus pruebas. La característica principal radica en que este entorno, al igual que el de staging, buscará ser lo más similar posible al entorno de Producción. Contará con data set simulados o copias parciales de datos productivos de manera que los usuarios podrán utilizar datos que ellos habitualmente trabajan y conocen, como ser números de documentos, nombres de clientes, números de cuentas, etc. El objetivo perseguido en este ambiente es poder ejecutar pruebas E2E (end-to-end) y obtener por parte de los usuarios la conformidad del objeto de prueba.

Dicho de otra manera, buscaremos que los usuarios se sientan seguros y satisfechos con la experiencia e idoneidad del software que se ha desarrollado.

Entorno de producción: También conocido como entorno productivo, es el entorno final donde nuestro software se alojará y quedará disponible para ser utilizado por los usuarios finales. Las principales características de este ambiente pasan por ser un espacio estable, seguro y con un rendimiento óptimo que permitirá a los usuarios poder ejercitar nuestros sistemas de la mejor manera.

Algo importante a destacar del ambiente productivo es que en él se encontrarán instaladas también aplicaciones que se encargarán de monitorear y grabar logs de todas las actividades que sucedan mientras se ejecuta nuestro software. El objetivo de estas aplicaciones es la detección de manera rápida de problemas que puedan estar afectando a nuestros usuarios.

Además de estas actividades de monitoreo y logging debemos incorporar como buenas prácticas, ejecutar pruebas en producción. Sí, debemos ejecutar pruebas en producción para tener la confianza de que las aplicaciones desplegadas funcionan de la manera que nosotros esperamos: canary, a/b y chaos testing son sólo algunos de los tipos de pruebas que podemos ejecutar en producción.

Sinceramente aún resta mucho en mi cabeza por escribir sobre este tema de ambientes y no quiero hacer un post tan extenso. En mi backlog tengo pendiente escribir sobre ventajas, limitaciones y buenas prácticas para la gestión de entornos.

Es por ese motivo que he decidido llegar hasta aquí. Si te gustó el post házmelo saber en comentarios, ya que próximamente tendremos una PARTE DOS…


Leonardo Corrales

Profesional del Testing de Software por elección vocacional y por amor a la disciplina.

0 comentarios

Deja una respuesta

Marcador de posición del avatar

Tu dirección de correo electrónico no será publicada.