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_NAMEBuildConfig.API_KEYBuildConfig.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.jsonen:
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
Timberpara 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.