Skip to main content

10. Estrategia de Ambientes QA, DEV, PROD

La correcta separación de ambientes es esencial para un desarrollo profesional y seguro. Esta estrategia define cómo se configuran, usan y despliegan los entornos de Desarrollo (DEV), Calidad (QA) y Producción (PROD) para las aplicaciones móviles Android.


10.1 Objetivos

  • Separar datos, endpoints y configuraciones por ambiente
  • Permitir testing seguro sin afectar usuarios reales
  • Automatizar despliegues según el ambiente
  • Identificar errores y métricas por entorno

10.2 Configuración de Flavors en Android Studio

flavorDimensions += "environment"

productFlavors {
dev {
dimension = "environment"
applicationIdSuffix = ".dev"
versionNameSuffix = "-dev"
buildConfigField("String", "BASE_URL", ""https://dev.api.alpura.com/"")
}
qa {
dimension = "environment"
applicationIdSuffix = ".qa"
versionNameSuffix = "-qa"
buildConfigField("String", "BASE_URL", ""https://qa.api.alpura.com/"")
}
prod {
dimension = "environment"
buildConfigField("String", "BASE_URL", ""https://api.alpura.com/"")
}
}

10.3 Variables de entorno en BuildConfig

Estas variables estarán disponibles desde Kotlin:

val baseUrl = BuildConfig.BASE_URL

Se puede agregar también:

  • BuildConfig.ENVIRONMENT_NAME
  • BuildConfig.API_KEY
  • BuildConfig.FEATURE_FLAGS

10.4 Configuración de Firebase por ambiente

  • Crear un proyecto Firebase por entorno (alpura-dev, alpura-qa, alpura-prod)
  • Usar diferentes google-services.json en:
app/
├── src/
│ ├── dev/google-services.json
│ ├── qa/google-services.json
│ └── prod/google-services.json

10.5 Configuración de métricas y errores

  • Cada entorno reporta a su propio espacio en:
    • Firebase Analytics
    • Crashlytics
    • App Distribution
  • Se diferencian por nombre de paquete y sufijos

10.6 Infraestructura en backend

  • QA y DEV deben estar aislados de PROD
  • Backend debe tener ambientes paralelos y configuraciones equivalentes
  • Acceso restringido por API Key según entorno

10.7 Visibilidad y logging

  • Logs en DEV y QA deben ser verbosos
  • En PROD, se deben desactivar logs sensibles
  • Se puede usar un wrapper sobre Timber para filtrar:
object AppLogger {
fun d(msg: String) {
if (!BuildConfig.DEBUG && BuildConfig.BUILD_TYPE != "prod") {
Timber.d(msg)
}
}
}

10.8 Recomendaciones

✅ Definir claramente qué pruebas se hacen en cada entorno
✅ Usar CI para compilar por flavor (./gradlew assembleQa)
✅ No mezclar endpoints ni tokens entre ambientes
✅ Firmas diferentes para QA y PROD
✅ Visibilidad de métricas por entorno en dashboards


Tener una estrategia clara de ambientes permite mantener la integridad, trazabilidad y seguridad de los datos y funcionalidades durante todo el ciclo de vida del software.