1. Comprende opciones de despliegue para aplicaciones InterSystems IRIS
Puntos Clave
- Despliegue basado en contenedor: Imágenes Docker con aprovisionamiento automatizado y merge de configuración
- Despliegue de código compilado: Desplegar código pre-compilado usando %Studio.Project.DeployToFile() e InstallFromFile()
- Integración de control de código fuente: Flujos de trabajo basados en Git con hooks del lado del cliente o del servidor
- Despliegue REST API: Source Code File REST API para gestión de código programática
- Orquestación Kubernetes: InterSystems Kubernetes Operator (IKO) para despliegues en cluster
Notas Detalladas
Resumen
InterSystems IRIS soporta múltiples estrategias de despliegue para acomodar pipelines CI/CD modernos.
Despliegue Basado en Contenedor
- Enfoque: Aprovechar imágenes Docker con la característica Configuration Merge
- Variación: Aplicar archivos de merge declarativos para actualizar el CPF durante despliegue
- Beneficio: Imágenes idénticas configuradas diferentemente para entornos de desarrollo, pruebas, y producción
Despliegue de Código Compilado
- Método: Empaquetar y desplegar aplicaciones pre-compiladas usando métodos de clase %Studio.Project
- Métodos Clave: DeployToFile() e InstallFromFile()
- Requisito: Versiones IRIS coincidentes y configuraciones de identificador delimitado SQL entre origen y destino
- Beneficio: Elimina recompilación en sistemas destino
Source Code File REST API
- Propósito: Acceso programático para herramientas CI/CD
- Capacidades: Crear, actualizar, compilar, y consultar código programáticamente
Despliegue Kubernetes
- InterSystems Kubernetes Operator (IKO): Extiende la API Kubernetes con el recurso personalizado IrisCluster
- Capacidades: Despliegue automatizado de clusters sharded, clusters de caché distribuida, o instancias standalone con mirroring
Elegir una Estrategia
Las organizaciones típicamente combinan múltiples enfoques:
- Contenedores: Para infraestructura
- REST APIs: Para automatización
- Control de Código Fuente: Para gestión de versión
La elección depende de complejidad de despliegue, requisitos de consistencia de entorno, y madurez DevOps organizacional.
Referencias de Documentación
2. Gestiona archivos CPF para despliegue continuo
Puntos Clave
- Estructura CPF: iris.cpf contiene la mayoría de configuraciones, leído en cada inicio
- Merge de configuración: Aplicar archivos de merge declarativos para actualizar CPF durante despliegue
- Variación de entorno: Misma imagen, diferentes configuraciones vía archivos de merge
- Formato de archivo de merge: Formato JSON o XML especificando cambios de configuración
- Aplicación automatizada: Aplicado durante inicio de contenedor o aprovisionamiento de instancia
Notas Detalladas
Resumen
El Configuration Parameter File (iris.cpf) es el artefacto de configuración central para InterSystems IRIS, conteniendo mapeos de base de datos, definiciones de namespace, configuraciones de seguridad, parámetros de sistema, y configuraciones de aplicación.
Característica Configuration Merge
- Propósito: Gestión de configuración declarativa aplicando archivos de merge durante despliegue o inicio
- Contenido: Archivos de merge especifican solo las diferencias de configuración necesarias para un entorno específico
- Control de Versión: Archivos de merge se vuelven artefactos versionables en su pipeline CI/CD
Métodos de Aplicación
- Despliegues de Contenedor: Aplicar vía flag --merge al programa iris-main o a través de variables de entorno
- Instalaciones Tradicionales: Aplicar usando la API de merge CPF o durante instalación vía clases manifest
Patrón de Infraestructura Inmutable
- Misma imagen de contenedor despliega a múltiples entornos
- Configuraciones específicas de entorno aplicadas en runtime
Mejores Prácticas
- Almacenar archivos de merge en control de código fuente junto con código de aplicación
- Validar archivos de merge en entornos inferiores antes de producción
- Mantener archivos de merge separados para cada entorno (dev.cpf.merge, test.cpf.merge, prod.cpf.merge)
- Documentar todos los cambios de configuración a través de archivos de merge con control de versión en lugar de ediciones manuales de portal
Beneficios
- Consistencia de configuración a través de entornos
- Capacidades de rollback
- Trazas de auditoría para requisitos de cumplimiento
Referencias de Documentación
3. Implementa pruebas unitarias usando framework %UnitTest
Puntos Clave
- Creación de caso de prueba: Extender clase %UnitTest.TestCase y agregar métodos Test*
- Macros de aserción: $$$AssertEquals, $$$AssertNotEquals, $$$AssertStatusOK, $$$AssertTrue
- Setup y teardown: OnBeforeAllTests(), OnBeforeOneTest(), OnAfterOneTest(), OnAfterAllTests()
- Ejecución de prueba: ##class(%UnitTest.Manager).RunTest() con calificadores
- Gestión de resultados: Acceso programático vía tabla %UnitTest.Result.TestAssert
Notas Detalladas
Resumen
El framework %UnitTest proporciona capacidades de testing estilo xUnit esenciales para pipelines CI/CD.
Creación de Casos de Prueba
- Extensión de Clase: Extender %UnitTest.TestCase
- Nomenclatura de Método: Métodos cuyos nombres comienzan con "Test" son ejecutados
- Orden de Ejecución: Métodos de prueba ejecutan en orden alfabético
Macros de Aserción
- $$$AssertEquals(actual, expected, description): Verifica igualdad
- $$$AssertStatusOK(status, description): Valida códigos de estado
- $$$AssertTrue(expression, description): Verifica condiciones booleanas
- $$$AssertFilesSame(file1, file2, description): Compara contenido de archivo
Métodos Setup y Teardown
- OnBeforeAllTests(): Ejecuta una vez antes de todas las pruebas
- OnBeforeOneTest(): Ejecuta antes de cada método de prueba
- OnAfterOneTest(): Ejecuta después de cada prueba
- OnAfterAllTests(): Ejecuta una vez después de que todas las pruebas completen
Ejecución de Prueba
- Sintaxis: ##class(%UnitTest.Manager).RunTest("testspec", "qualifiers")
- Calificadores Clave:
- /nodelete: Mantiene clases de prueba cargadas
- /debug: Habilita debugging
- /autoload: Carga pruebas desde ^UnitTestRoot
Acceso a Resultados
- Programático: Tabla %UnitTest.Result.TestAssert
- Visual: Portal UnitTest del Management Portal
Integración CI/CD
- Establecer ^UnitTestRoot a su directorio de prueba
- Ejecutar RunTest() con calificadores apropiados
- Capturar código de estado de retorno
- Analizar resultados desde tabla TestAssert para fallar builds cuando pruebas fallan
Cobertura de Prueba
Incluir casos positivos, casos negativos, condiciones límite, y escenarios de manejo de error. Ejecutar pruebas después de compilación, antes de promoción de despliegue, y en ejecuciones de prueba de regresión programadas.
Referencias de Documentación
4. Diseña y ejecuta estrategias de prueba de integración
Puntos Clave
- Pruebas multi-componente: Probar interacciones entre clases, bases de datos, y sistemas externos
- Gestión de datos de prueba: Usar OnBeforeAllTests() para poblar bases de datos de prueba, OnAfterAllTests() para limpiar
- Mocking de sistema externo: Aislar dependencias usando dobles de prueba y servicios mock
- Validación end-to-end: Probar flujos de trabajo completos incluyendo REST APIs, procesos de negocio, y transformaciones de datos
- Consistencia de entorno de prueba: Usar contenedores y merge CPF para asegurar entornos de prueba reproducibles
Notas Detalladas
Resumen
Pruebas de integración validan que múltiples componentes trabajan juntos correctamente, lo cual es crítico antes de promover cambios a producción.
Diferencia de Pruebas Unitarias
- Pruebas Unitarias: Aislan métodos individuales
- Pruebas de Integración: Validan interacciones de componente, operaciones de base de datos, llamadas REST API, enrutamiento de mensaje, e integraciones de sistema externo
Puntos de Integración a Probar
- Interacciones de clase
- Ciclo de vida de objeto persistente
- Resultados de consulta SQL
- Endpoints de servicio REST
- Flujos de trabajo de proceso de negocio
- Integraciones de API externa
Gestión de Estado de Prueba
- OnBeforeAllTests(): Crea bases de datos, puebla datos de prueba, establece conexiones, configura entorno de prueba
- OnAfterAllTests(): Remueve datos de prueba, cierra conexiones, restaura estado
Mocking de Sistema Externo
- Servicios REST mock que retornan respuestas predecibles
- Llamadas de base de datos stub con datos de prueba
- Usar colas de mensaje de prueba en lugar de sistemas de producción
Prueba de Integración Basada en Contenedor
- Cada ejecución de prueba levanta un contenedor IRIS fresco con datos de prueba
- Ejecuta pruebas de integración, captura resultados
- Destruye el contenedor después de que pruebas completen
- Asegura estado limpio y reproducibilidad
Integración CI/CD
- Ejecutar después de que pruebas unitarias pasen, antes de despliegue a staging
- Usar entornos de prueba dedicados que reflejen topología de producción con datos de prueba
Patrones Comunes de Prueba de Integración
- Probar contratos REST API con pares de solicitud/respuesta conocidos
- Validar flujos de mensaje de proceso de negocio con mensajes de entrada de prueba
- Verificar restricciones de integridad de base de datos con datos de caso límite
- Confirmar comportamiento de adaptador de interoperabilidad con sistemas externos mock
Medición de Efectividad
Rastrear cobertura de código, cobertura de escenario, y tasas de detección de defecto.
Referencias de Documentación
5. Prueba requisitos no funcionales (rendimiento, seguridad, etc.)
Puntos Clave
- Pruebas de rendimiento: Usar $$$LogMessage para capturar timing, planes de ejecución de consulta, y utilización de recursos
- Pruebas de carga: Simular usuarios concurrentes, medir tiempos de respuesta y throughput
- Pruebas de seguridad: Validar autenticación, autorización, encriptación, y logging de auditoría
- Pruebas de escalabilidad: Probar comportamiento bajo volúmenes de datos y cargas de usuario crecientes
- Pruebas de confiabilidad: Validar manejo de error, failover, y procedimientos de recuperación
Notas Detalladas
Resumen
Pruebas de requisitos no funcionales validan que aplicaciones cumplan estándares de rendimiento, seguridad, escalabilidad, y confiabilidad más allá de corrección funcional básica.
Pruebas de Rendimiento
- Propósito: Medir tiempos de respuesta, throughput, y consumo de recursos
- Implementación: Usar $HOROLOG o ##class(%Library.PerfMon) para capturar métricas de timing
- Logging: Registrar resultados con $$$LogMessage
- Aserciones: Afirmar umbrales de rendimiento con lógica personalizada
- Pruebas Comunes:
- Tiempo de ejecución de consulta SQL contra líneas base
- Duración de ejecución de método bajo varios volúmenes de datos
- Consumo de memoria durante operaciones batch
Pruebas de Carga
- Generar múltiples jobs que ejecutan escenarios de prueba simultáneamente
- Medir comportamiento de sistema bajo cargas realistas y pico
- Simular usuarios concurrentes
Pruebas de Seguridad
- Autenticación: Probar login con credenciales válidas e inválidas
- Autorización: Intentar acceso no autorizado a recursos
- Encriptación: Verificar datos en reposo y en tránsito
- Logging de Auditoría: Confirmar que eventos de seguridad son capturados
- Aserciones: Usar $$$AssertStatusNotOK para acceso denegado, $$$AssertTrue para autenticación exitosa
Pruebas de Escalabilidad
- Evaluar degradación de rendimiento cuando volúmenes de datos o conteos de usuario incrementan
- Identificar cuellos de botella y límites de capacidad
- Probar con conjuntos de datos y cargas de usuario progresivamente más grandes
Pruebas de Confiabilidad
- Validar manejo de error y rollback de transacción
- Probar escenarios de failover y procedimientos de recuperación de desastre
- Simular fallos (interrupciones de red, locks de base de datos, agotamiento de recursos)
- Verificar degradación elegante y recuperación
Integración CI/CD
- Ejecutar en entornos de prueba de rendimiento dedicados en horarios (noche, semanal) en lugar de en cada commit
- Tendencia de resultados a través del tiempo para identificar regresiones de rendimiento antes de producción
Referencias de Documentación
6. Comprende implicaciones de promoción de cambios a través de entornos
Puntos Clave
- Paridad de entorno: Mantener configuraciones consistentes a través de dev, test, staging, y producción
- Compatibilidad de versión: Asegurar que versiones IRIS coincidan al desplegar código compilado
- Gestión de configuración: Usar archivos de merge CPF para configuraciones específicas de entorno
- Rastreo de dependencia: Rastrear y desplegar clases, globals, y recursos dependientes juntos
- Procedimientos de rollback: Mantener habilidad de revertir cambios si ocurren problemas en producción
Notas Detalladas
Resumen
Promoción de cambios a través de entornos requiere planificación cuidadosa para asegurar consistencia, confiabilidad, y reversibilidad.
Paridad de Entorno
- Mantener configuraciones similares, volúmenes de datos, y topologías a través de dev, test, staging, y producción
- Usar contenedores e infraestructura como código para configuraciones base consistentes
- Gestionar diferencias específicas de entorno a través de archivos de merge CPF
Compatibilidad de Versión
- Requisito de Código Compilado: DeployToFile() e InstallFromFile() requieren versiones IRIS idénticas y configuraciones de identificador delimitado SQL
- Discrepancias: Causan errores de runtime o bugs sutiles
- Mejor Práctica: Versionar artefactos de despliegue y rastrear requisitos de versión IRIS en manifiestos de despliegue
Gestión de Configuración
- Archivos de merge CPF separan código de aplicación de configuración específica de entorno
- Almacenar archivos de merge en control de código fuente, versionar junto con código
- Aplicar automáticamente durante despliegue
- Previene deriva de configuración y habilita recreación de entorno
Rastreo de Dependencia
- Inclusión Automática: %Studio.Project.DeployToFile() incluye clases padre y clases hijo referenciadas por relación
- No Incluido: Subclases, proyecciones (archivos Java), o dependencias acopladas libremente
- Mejor Práctica: Agregar explícitamente todos los componentes requeridos a proyectos de despliegue y probar en entornos inferiores
Procedimientos de Rollback
- Mantener versiones previas de paquetes de código compilado, configuraciones CPF, y backups de base de datos
- Probar procedimientos de rollback regularmente en entornos no producción
- Documentar pasos de rollback en runbooks
- Comportamiento de Código: Procesos en ejecución continúan usando código viejo hasta reiniciar; objetos instanciados usan la versión de clase del tiempo de instanciación
Flujo de Trabajo de Promoción Típico
1. Desarrollador hace commit a rama de característica 2. CI construye y ejecuta pruebas unitarias 3. Merge a main dispara pruebas de integración 4. Promoción a staging requiere aprobación manual 5. Despliegue automatizado a staging con pruebas smoke 6. Despliegue a producción durante ventanas de mantenimiento con plan de rollback listo
Referencias de Documentación
Resumen de Preparación para el Examen
Conceptos Críticos a Dominar:
- Opciones de Despliegue: Conocer despliegue de contenedor, despliegue de código compilado, despliegue REST API, y orquestación Kubernetes
- Gestión CPF: Comprender archivos de merge de configuración, configuraciones específicas de entorno, e integración de control de versión
- Framework %UnitTest: Dominar extensión TestCase, macros de aserción, métodos setup/teardown, y ejecución de prueba
- Prueba de Integración: Diseñar pruebas multi-componente, gestionar datos de prueba, mockear sistemas externos, validar flujos de trabajo
- Prueba No Funcional: Medir rendimiento, validar seguridad, probar escalabilidad y confiabilidad
- Promoción de Cambios: Mantener paridad de entorno, gestionar dependencias, asegurar compatibilidad de versión, planear rollbacks
Escenarios Comunes de Examen:
- Seleccionar estrategia de despliegue apropiada para un requisito de pipeline CI/CD dado
- Escribir pruebas unitarias con %UnitTest.TestCase y macros de aserción
- Aplicar archivos de merge CPF para configuraciones específicas de entorno
- Diseñar estrategias de prueba de integración para sistemas multi-componente
- Comprender requisitos de despliegue de código compilado (coincidencia de versión, configuraciones SQL)
- Planear promoción de cambios con rastreo de dependencia y procedimientos de rollback
Recomendaciones de Práctica Práctica:
- Crear una clase %UnitTest.TestCase con múltiples métodos de prueba usando diferentes macros de aserción
- Practicar despliegue de código compilado usando DeployToFile() e InstallFromFile()
- Construir archivos de merge CPF para diferentes entornos y aplicarlos durante despliegue
- Escribir pruebas de integración que abarquen múltiples clases y validen operaciones de base de datos
- Implementar pruebas de rendimiento que midan y afirmen umbrales de timing
- Configurar un pipeline CI/CD simple que ejecuta pruebas unitarias, construye despliegues, y promueve a través de entornos
- Practicar usando la Source Code File REST API para gestión de código programática
- Desplegar instancias IRIS en contenedor con archivos de merge de configuración