Etiquetas

, ,

El despliegue de software de manera segura implica que las características funcionales y no funcionales del software que se estas desplegando cumpla con los requisitos, he aquí la importancia de varios factores:

Los ambientes involucrados en el siclo de vida de desarrollo de software:

Antes de llegar a producción una aplicación debe pasar primero por distintos ambientes que certifiquen la calidad de software, los ambientes mas típicos por los que pasa una aplicación son el ambiente de desarrollo, el ambiente de test, el ambiente de aceptación por parte de los usuarios, el ambiente de pre producción y el ambiente de producción. Según las necesidades de cada organización se dara el caso en el que algunos de estos ambientes no sea necesario.

Para determinar si necesitamos todos estos ambientes hagamos un repaso rápido de cada uno.

El ambiente de desarrollo: es donde se crean el software y generalmente esta conformado por los ordenadores de los desarrolladores mas los servidores de desarrollo como por ejemplo los de base de datos o cualquier otro servicio.

El ambiente de test: es donde se prueban las aplicaciones por parte del equipo de QA, es donde se deben detectar todos los bugs  o incidencias funcionales y no funcionales, de manera que el software pueda llegar a producción libre de bugs y cumpliendo con todos los requerimientos funcionales.

El ambiente de aceptación: en este ambiente un grupo de usuarios prueba el software y se asegura de que funcionalmente cumple con los requisitos y con la lógica de negocio de la empresa además se comprueba que software sea usable y robusto.

El ambiente de pre producción: es el ambiente final antes de poner el software en producción, aquí las aplicaciones son probadas en condiciones de hardware muy parecidas a las de producción.

El ambiente de producción: es donde finalmente se despliegan las aplicaciones.

Es evidente que mantener todos estos ambientes puede ser costoso y algunos caso no se justifican todos de hecho es muy común ver organizaciones con solo ambientes de desarrollo , preproducción o test y producción, por esto es importante que se evalue que ambientes son necesarios para hacer un despliegue seguro en producción, hoy en dia es cada vez mas común multiples ambientes producto de las facilidades que nos ofrece la virtualización de software permitiendo ahorrar costos de hardware, pero en cualquier caso antes de buscar evadir costos en la creación de distintos ambientes es necesario contrastar en costo de mantenimiento de estos ambientes con el costo que implica desplegar software que no cumple con la características de calidad suficiente además es evidente que todo software que sale del ambiente de desarrollo tiene altas probabilidades de contener algunos bugs que de no ser detectados en los ambientes previos a producción podrían causar muchos contratiempos, como caídas del sistema, inconsistencia de datos o problemas de integración.

En la figura de abajo podemos ver como los costos de resolver una incidencia se incrementan según el ambiente.

En esta otra imagen podemos ver además de los costos de resolver bugs en los distintos ambientes también podemos ver como la mayoría de las incidencias se detectan en las etapas de testing.

De aquí la popularidad del desarrollo guiado por pruebas y las metodologías agiles como scrum y extreme programing.

Control de código fuente.

Otra factor muy importante a considerar para el despliegue de software seguro es el control de código fuente, muchas veces se suele liberar versiones de software solo para reparar incidencias que se necesitan reparar rápidamente en producción o sencillamente se suele liberar versiones que agregan características sin tomar en cuenta que el código liberado esta en etapa de desarrollo o contiene secciones de código aun no probadas que se piensan liberar en un futuro, en este sentido es muy útil contar con herramientas de control de código fuente como el team foundation server que nos permite crear ramas (branch) sobre nuestro código y separar el código evolutivo del código que desarrolla en forma de parches.