Por José Othoniel Chamú Arias y Alberto González Guízar
En el desarrollo de los productos de
software intervienen diversas etapas, una de ellas es la codificación de los
requerimientos funcionales y no funcionales, conocida como desarrollo;
posteriormente es la revisión del cumplimiento de dichos requerimientos en el
software y la usabilidad que muestra para los usuarios, que se conoce como
aseguramiento de la calidad o pruebas. Por último, es puesto en operación para
brindar un servicio a los usuarios que lo utilizarán.
Para la ejecución de las actividades
que comprenden las etapas antes mencionadas, se ocupan espacios de trabajo
donde los equipos de desarrollo y pruebas puedan llevarlas a cabo, así como uno
donde pueda operar el sistema o aplicación, conocidos como ambientes de
trabajo, dentro de un servidor o ambiente virtual.
El ambiente de desarrollo se usa para integrar el código de los
diferentes componentes del equipo de programación, así como los elementos que
forman el sistema de información o aplicación, como son: lenguajes, librerías,
frameworks, base de datos, entre otros. De igual manera, se puede hacer uso de
herramientas que apoyen al entorno de desarrollo, como, por ejemplo, el
Subversion o el GitLab, que ayudan a gestionar el código fuente, para el
control de versiones y su reutilización.
Por otro lado, el ambiente de pruebas tendrá las mismas
características de configuración y recursos que el ambiente de trabajo
anterior, pero aquí se despliegan las versiones estables del sistema o
aplicación para que el equipo de pruebas realice las verificaciones de calidad
pertinentes, por ejemplo: pruebas de funcionalidad, usabilidad, entre otras, para
su mejora o corrección, sin interferir con las actividades de trabajo del
equipo de desarrollo. Otra actividad que se realiza en este ambiente son las
pruebas de seguridad, para verificar que no existan vulnerabilidades que
comprometan su integridad y disponibilidad, así como verificar el impacto de su
mitigación en el sistema o aplicación.
En algunos casos, se puede considerar
un ambiente de preproducción, sobre
todo si se hará una actualización de un sistema o aplicación que ya esté en
producción. Este es una versión parecida del ambiente final que se tendrá en
operación, en cuanto a plataforma, aplicación y recursos de hardware. Su
finalidad es la de probar actualizaciones del sistema, realizar pruebas de
carga y desempeño, así como la validación de la seguridad, realizándose la
afinación del ambiente en cuanto a parámetros a nivel del sistema operativo y
de las herramientas utilizadas, como: Apache, Tomcat, Framework: CakePHP,
Laravel, Spring, entre otros, y los ajustes necesarios de seguridad al sistema
o aplicación. En este ambiente se verifican los
criterios definidos para su puesta a producción,
también se puede utilizar para validar los cambios solicitados al sistema o
aplicación, así como a configuraciones en los ambientes de producción y poder
observar comportamientos anómalos que pudieran presentarse, realizándose los
ajustes que se requieran.
Por último, el ambiente de producción es el espacio donde operará el sistema o
aplicación, es decir, es donde se hace uso del servicio por parte de los usuarios
finales. Aquí se realizan los ajustes a los elementos necesarios para mantener
la disponibilidad del servicio y se programan los respaldos del ambiente.
De acuerdo con lo anterior, se
recomienda gestionar diferentes ambientes o entornos de trabajo en los
servidores o equipos virtuales, para el desarrollo, pruebas y puesta en
producción de los sistemas de información, debido a que cada equipo de trabajo
requiere ciertas características específicas en cuanto a la configuración y
recursos de cada uno.
Cabe señalar, que al utilizar un
mismo ambiente de trabajo para desarrollo y pruebas puede afectarse el trabajo
llevado a cabo por cada equipo, por ejemplo, al moverse el código que están
desarrollando o modificando los programadores, pueden resultar afectadas las
actividades de pruebas que se estén realizando al mismo tiempo, presentándose
errores en la funcionalidad.
Así mismo, si el sistema ya está en
producción y se están llevando a cabo cambios en la funcionalidad o
configuración y/o efectuando pruebas de carga – desempeño, puede verse afectada
la operación del servicio, lo cual da una mala imagen y crea desconfianza en
cuanto a su utilidad.
Por ello, es importante mantener
separados los ambientes de trabajo: desarrollo, pruebas y producción como una
buena práctica.
Sin embargo, no necesariamente se
tiene que tener un servidor físico por cada ambiente, como una alternativa a
ello, se pueden virtualizar los servidores físicos con el uso de herramientas,
algunas de las cuales son de licenciamiento comercial y otras de licencia
pública. Para poder utilizarla se requiere que el equipo soporte la tecnología
de virtualización, en Intel recibe la denominación VT-x y en AMD conocida como
AMD-V, además se aconseja disponer al menos de un servidor de mediana capacidad
(8 núcleos, 64 GB RAM) para implementar al menos 2 o 3 máquinas virtuales.
El hacer uso de la virtualización
permite a los administradores aprovechar mejor la capacidad de los servidores,
reduce el tiempo de inactividad, ahorra energía, reduce tiempos de recuperación
o de instalación, al hacer respaldos de las máquinas virtuales o clonar
ambientes.
Una de estas herramientas es el dúo
KVM-Qemu, donde KVM es el software para implementar la virtualización en Linux,
y Qemu es el hipervisor, el cual tiene una Licencia Pública General de GNU, por
lo que se puede usar sin un costo, y se encuentra en diversas distribuciones de
Linux: CentOS, Fedora, Debian, Ubuntu, por citar algunas.
Otra de las ventajas de esta
herramienta, es que tiene la capacidad de ejecutar múltiples sistemas
operativos simultáneamente: Windows y Linux, además al ser parte del kernel de
Linux, KVM obtiene correcciones de errores y actualizaciones de seguridad a
medida que la distribución de Linux utilizada publica nuevas versiones.
Como conclusión, se puede observar la importancia de mantener separados los ambientes de desarrollo, pruebas y producción para no afectar el trabajo entre los equipos, y en el caso de los usuarios finales no se afecte su acceso y utilización del sistema o aplicación, con la consecuente molestia y/o pérdida de confianza en el servicio.