En el despliegue de software , un entorno o nivel es un sistema informático o conjunto de sistemas en el que se despliega y ejecuta un programa o componente de software . En casos sencillos, como desarrollar y ejecutar inmediatamente un programa en la misma máquina, puede haber un único entorno; sin embargo, en el ámbito industrial, el entorno de desarrollo (donde se realizan los cambios inicialmente) y el entorno de producción (el que utilizan los usuarios finales) están separados, a menudo con varias etapas intermedias. Este proceso estructurado de gestión de versiones permite el despliegue por fases, las pruebas y la reversión en caso de problemas.
Los entornos pueden variar significativamente en tamaño: el entorno de desarrollo suele ser la estación de trabajo de un desarrollador individual, mientras que el entorno de producción puede ser una red de muchas máquinas distribuidas geográficamente en centros de datos o máquinas virtuales en la nube . El código, los datos y la configuración pueden implementarse en paralelo y no necesitan conectarse al nivel correspondiente; por ejemplo, el código de preproducción podría conectarse a una base de datos de producción.
Arquitecturas
Las arquitecturas de despliegue varían significativamente, pero, en términos generales, los niveles comienzan en desarrollo (DEV) y terminan en producción (PROD). Una arquitectura común de 4 niveles es desarrollo, pruebas, modelo, producción (DEV, TEST, MODL, PROD), donde el software se despliega en cada nivel en orden. Otros entornos comunes incluyen Control de Calidad (QC), para pruebas de aceptación ; entorno de pruebas o experimental (EXP), para experimentos que no se pretenden llevar a producción; y Recuperación ante Desastres, para proporcionar una solución inmediata en caso de problemas con la producción. Otra arquitectura común es desarrollo, pruebas, aceptación y producción (DTAP).
Este lenguaje es especialmente adecuado para programas de servidor, donde los servidores se ejecutan en un centro de datos remoto; para el código que se ejecuta en el dispositivo de un usuario final , como aplicaciones o clientes, se puede hacer referencia al entorno de usuario (USER) o al entorno local (LOCAL).
Las definiciones y límites exactos entre entornos varían: la prueba puede considerarse parte del desarrollo, la aceptación puede considerarse parte de la prueba, parte de la etapa, o ser separada, etc. Los niveles principales se avanzan en orden, con nuevas versiones que se implementan ( se lanzan o se envían ) a cada uno a su vez. [ 1 ] [ 2 ] Los niveles experimentales y de recuperación, si existen, están fuera de este flujo: las versiones experimentales son terminales, mientras que la recuperación suele ser una versión antigua o duplicada de producción, implementada después de la producción. En caso de problemas, se puede revertir a la versión anterior, más simplemente enviando la versión anterior como si fuera una nueva versión. El último paso, la implementación en producción ("enviar a prod") es el más sensible, ya que cualquier problema produce un impacto inmediato en el usuario. Por eso, esto a menudo se maneja de manera diferente, al menos se monitorea más cuidadosamente, y en algunos casos tiene una implementación por fases o solo requiere activar un interruptor, lo que permite una reversión rápida. Es mejor evitar un nombre como Control de Calidad (QA); QA no significa prueba de software . Las pruebas son importantes, pero son diferentes del control de calidad.
En ocasiones, el despliegue se realiza fuera de este proceso habitual, principalmente para proporcionar cambios urgentes o relativamente menores, sin necesidad de una versión completa. Esto puede consistir en un único parche , un paquete de servicio extenso o una pequeña corrección urgente .
Los entornos pueden tener tamaños muy diferentes: el desarrollo suele ser la estación de trabajo de un solo desarrollador (aunque puede haber miles de desarrolladores), mientras que la producción puede constar de muchas máquinas distribuidas geográficamente; las pruebas y el control de calidad pueden ser pequeños o grandes, dependiendo de los recursos dedicados a ellos, y el entorno de preproducción puede variar desde una sola máquina (similar a un entorno de prueba) hasta una réplica exacta del entorno de producción.
Entornos
La tabla que aparece a continuación describe una lista detallada de niveles .
Desarrollo
El entorno de desarrollo (dev) es el entorno en el que se desarrollan los cambios en el software, generalmente la estación de trabajo de un desarrollador individual. Este difiere del entorno de destino final en varios aspectos: el destino puede no ser una computadora de escritorio (puede ser un teléfono inteligente, un sistema embebido , una máquina sin interfaz gráfica en un centro de datos, etc.), e incluso si son similares en otros aspectos, el entorno del desarrollador incluirá herramientas de desarrollo como un compilador , un entorno de desarrollo integrado, versiones diferentes o adicionales de bibliotecas y software de soporte, etc., que no están presentes en el entorno del usuario.
En el contexto del control de versiones , especialmente con varios desarrolladores, se establecen distinciones más sutiles: un desarrollador tiene una copia de trabajo del código fuente en su máquina, y los cambios se envían al repositorio, confirmándose en la rama principal o en una rama secundaria, según la metodología de desarrollo. El entorno en una estación de trabajo individual, en el que se trabajan y prueban los cambios, puede denominarse entorno local o entorno de pruebas . La creación de la copia del código fuente del repositorio en un entorno limpio es un paso independiente, parte de la integración (integración de cambios dispares), y este entorno puede denominarse entorno de integración o entorno de desarrollo ; en la integración continua , esto se realiza con frecuencia, incluso para cada revisión. El concepto a nivel de código fuente de "confirmar un cambio en el repositorio", seguido de la creación de la rama principal o secundaria, corresponde a enviar la versión desde el entorno local (entorno del desarrollador individual) a la integración (compilación limpia); una versión defectuosa en este paso significa que un cambio rompió la compilación, y revertir la versión corresponde a revertir todos los cambios a partir de ese punto, o deshacer solo el cambio que rompió la compilación, si es posible.
Pruebas
El propósito del entorno de pruebas es permitir que los evaluadores humanos prueben el código nuevo y modificado mediante comprobaciones automatizadas o técnicas no automatizadas. Una vez que el desarrollador aprueba el código y las configuraciones nuevas mediante pruebas unitarias en el entorno de desarrollo, los elementos se trasladan a uno o más entornos de pruebas. [ 3 ] En caso de que una prueba falle, el entorno de pruebas puede eliminar el código defectuoso de las plataformas de prueba, contactar al desarrollador responsable y proporcionar registros detallados de las pruebas y los resultados. Si todas las pruebas se superan, el entorno de pruebas o un marco de integración continua que controle las pruebas puede promover automáticamente el código al siguiente entorno de despliegue.
Los distintos tipos de pruebas sugieren diferentes entornos de prueba, algunos o todos los cuales pueden virtualizarse [ 4 ] para permitir pruebas rápidas y paralelas. Por ejemplo, las pruebas automatizadas de interfaz de usuario [ 5 ] pueden realizarse en varios sistemas operativos y pantallas virtuales (reales o virtuales). Las pruebas de rendimiento pueden requerir una configuración de hardware física de referencia normalizada, de modo que los resultados de las pruebas de rendimiento puedan compararse a lo largo del tiempo. Las pruebas de disponibilidad o durabilidad pueden depender de simuladores de fallos en hardware y redes virtuales.
Las pruebas pueden ser secuenciales (una tras otra) o paralelas (algunas o todas a la vez), dependiendo de la complejidad del entorno de prueba. Un objetivo importante para las prácticas de desarrollo de software ágiles y de alta productividad es reducir el tiempo desde el diseño o la especificación del software hasta su entrega en producción. [ 6 ] Los entornos de prueba altamente automatizados y paralelizados contribuyen significativamente al desarrollo rápido de software.
Puesta en escena
Un entorno de preproducción o de pruebas es un entorno que reproduce fielmente un entorno de producción. [ 7 ] Su objetivo es replicar un entorno de producción real con la mayor precisión posible y puede conectarse a otros servicios y datos de producción, como bases de datos. Por ejemplo, los servidores se ejecutan en máquinas remotas, en lugar de localmente (como en la estación de trabajo de un desarrollador durante el desarrollo o en una única máquina de prueba durante las pruebas), lo que permite evaluar los efectos de la red en el sistema.
El uso principal de un entorno de pruebas es testear todos los scripts y procedimientos de instalación, configuración y migración antes de aplicarlos a un entorno de producción. Esto garantiza que todas las actualizaciones, tanto mayores como menores, del entorno de producción se completen de forma fiable, sin errores y en el menor tiempo posible.
Otro uso importante de la puesta en escena es la prueba de rendimiento , en particular la prueba de carga , ya que esta suele ser sensible al entorno.
Algunas organizaciones también utilizan entornos de prueba para mostrar nuevas funciones a clientes seleccionados o para validar integraciones con versiones en producción de dependencias externas.
Producción
El entorno de producción también se conoce como entorno en vivo , especialmente en el caso de los servidores, ya que es el entorno con el que los usuarios interactúan directamente.
El despliegue en producción es el paso más delicado; puede realizarse desplegando directamente el código nuevo (sobrescribiendo el código antiguo, de modo que solo exista una copia a la vez) o desplegando un cambio de configuración. Esto puede adoptar diversas formas: desplegar una instalación paralela de una nueva versión del código y alternar entre ellas mediante un cambio de configuración; desplegar una nueva versión del código con el comportamiento anterior y una bandera de características , y cambiar al nuevo comportamiento mediante un cambio de configuración que invierta dicha bandera; o desplegar servidores separados (uno ejecutando el código antiguo y otro el nuevo) y redirigiendo el tráfico del antiguo al nuevo mediante un cambio de configuración a nivel de enrutamiento de tráfico. Estos procesos, a su vez, pueden realizarse simultáneamente o gradualmente, por fases.
Por lo general, el despliegue de una nueva versión requiere un reinicio, a menos que sea posible el intercambio en caliente , lo que implica una interrupción del servicio (algo habitual en el software de usuario, donde las aplicaciones se reinician) o redundancia: ya sea reiniciando las instancias lentamente detrás de un equilibrador de carga o iniciando nuevos servidores con antelación y luego simplemente redirigiendo el tráfico a los nuevos servidores.
Al implementar una nueva versión en producción, en lugar de implementarla inmediatamente en todas las instancias o usuarios, puede implementarse primero en una sola instancia o en un grupo reducido de usuarios, y luego implementarse en todos o gradualmente por fases, para detectar cualquier problema de última hora. Esto es similar a la fase de pruebas, pero se realiza en producción y se conoce como lanzamiento canario , por analogía con la minería del carbón. Esto añade complejidad debido a que se ejecutan varias versiones simultáneamente, por lo que suele ser rápido para evitar problemas de compatibilidad.
Integración de marcos
Desarrollo, Entorno de pruebas y Entorno de producción son variables de entorno conocidas y documentadas en ASP.NET Core . Dependiendo de la variable definida, se ejecuta código diferente, se renderiza contenido distinto y se aplican diferentes configuraciones de seguridad y depuración. [ 8 ]
Véase también
Referencias
- ↑ "Prácticas tradicionales de desarrollo/integración/puesta en escena/producción para el desarrollo de software" . Disruptive Library Technology Jester . 4 de diciembre de 2006.
- ↑ "Entornos de desarrollo: una 'mejor práctica' ágil"" . www.agiledata.org . 20 de marzo de 2023.
- ↑ Ellison, Richard (2016-06-20). "Software Testing Environments Best Practices" . Software Testing Magazine . Martinig & Associates . Recuperado el 2016-12-02 .
Una vez que el desarrollador realiza los casos de prueba unitaria, el código se traslada a QA para comenzar las pruebas. A menudo se tienen varios entornos para las pruebas. Por ejemplo, se tendrá uno configurado para pruebas de sistema, otro para pruebas de rendimiento y otro para pruebas de aceptación del usuario (UAT). Esto se debe a las necesidades únicas de cada tipo de prueba.
- ↑ Dubie, Denise (17 de enero de 2008). "Cómo mantener bajo control los entornos de prueba virtuales" . Network World, Inc. IDG . Consultado el 2 de diciembre de 2016. La
tecnología de servidores virtuales facilita a las empresas la configuración y eliminación de entornos de prueba en los que pueden garantizar que las aplicaciones funcionen correctamente en los servidores de producción y las máquinas cliente.
- ↑ "Use UI Automation To Test Your Code" . Microsoft.com . Microsoft. 15 de noviembre de 2016 . Consultado el 2 de diciembre de 2016 .
Las pruebas automatizadas que recorren la aplicación a través de su interfaz de usuario (UI) se conocen como pruebas de UI codificadas (CUIT). Estas pruebas incluyen pruebas funcionales de los controles de la UI. Permiten verificar que toda la aplicación, incluida su interfaz de usuario, funcione correctamente. Las pruebas de UI codificadas son particularmente útiles cuando hay validación u otra lógica en la interfaz de usuario, por ejemplo, en una página web.
- ↑ Heusser, Matthew (07/07/2015). "¿Estás probando demasiado tu software?" . CIO.com . IDG. Archivado del original el 03/06/2017 . Recuperado el 03/12/2016 .
Las pruebas de candidatos a lanzamiento llevan demasiado tiempo. Para muchos equipos ágiles, este es el mayor desafío. Las aplicaciones heredadas comienzan con una ventana de prueba más larga que el sprint.
- ↑ Sharma, Anurag (2018). Gestión del entorno de pruebas . ITSM Press. pág. 11. ISBN 9781912651269.
- ↑ "Usar varios entornos en ASP.NET Core" . docs.microsoft.com . Consultado el 5 de abril de 2019 .
- proceso de desarrollo de software
- Lanzamiento de software
