Tema 42
Construcción de Sistemas de Información. Pruebas: Tipologías. Formación. Conceptos, Participantes, Métodos y Técnicas. Reutilización de Componentes Software
Oposición Técnico/a de Función Administrativa – Opción Sistemas y Tecnología de la Información (TFA-STI) del Servicio Andaluz de Salud
Introducción
La construcción de sistemas de información es un proceso fundamental en la ingeniería del software que abarca diseño, desarrollo, pruebas, implementación y mantenimiento. Su éxito depende de la correcta aplicación de metodologías de desarrollo, técnicas de prueba exhaustivas y reutilización estratégica de componentes software. Este tema aborda los principales enfoques en la construcción de sistemas de información, las pruebas de software y su tipología, la formación de equipos multidisciplinarios, los métodos y técnicas empleadas, así como la importancia de la reutilización de componentes para mejorar la eficiencia y reducir costes de desarrollo.
1. Fundamentos de la Construcción de Sistemas de Información
1.1 Concepto y Objetivos
La construcción de sistemas de información es el proceso mediante el cual se materializa el diseño del software mediante la codificación, integración y prueba de componentes. Este proceso forma parte del ciclo de vida del desarrollo de software (SDLC) y tiene como objetivos principales:
- Materializar las especificaciones de diseño en código fuente funcional.
- Garantizar la calidad del software mediante pruebas sistemáticas.
- Asegurar la integración correcta de todos los componentes del sistema.
- Reducir costes y tiempos de desarrollo mediante reutilización de componentes.
- Cumplir con los requisitos funcionales y no funcionales especificados.
- Facilitar el mantenimiento futuro del sistema mediante código limpio y documentado.
1.2 Fases del Proceso de Construcción
Según MÉTRICA versión 3, el proceso de Construcción del Sistema de Información (CSI) incluye:
| Fase | Actividades Principales | Entregables |
|---|---|---|
| Preparación del Entorno | Configurar infraestructura, herramientas y lenguajes de programación | Entorno de desarrollo configurado |
| Generación de Código | Codificación de componentes según especificaciones de diseño | Código fuente de componentes |
| Pruebas Unitarias | Verificar componentes individuales | Componentes validados |
| Integración de Componentes | Combinación e integración de módulos | Sistema integrado |
| Pruebas de Integración | Validar funcionamiento conjunto de componentes | Sistema integrado validado |
| Pruebas del Sistema | Verificar comportamiento completo del sistema | Sistema validado y listo para implantación |
2. Pruebas de Software: Tipologías y Enfoques
2.1 Definición y Objetivos de las Pruebas
Las pruebas de software son un conjunto de actividades sistemáticas que garantizan que un sistema cumple con los requisitos funcionales y no funcionales establecidos. El objetivo principal es detectar y reportar defectos antes de que el sistema llegue a los usuarios finales, garantizando la calidad, fiabilidad y seguridad del software.
- Las pruebas deben realizarse desde fases tempranas del desarrollo
- La detección temprana de defectos reduce costes de corrección
- No es posible probar exhaustivamente todo el software (imposibilidad de cobertura al 100%)
- Las pruebas deben ser planificadas y ejecutadas de forma sistemática
- Las pruebas requieren de casos de prueba bien diseñados
2.2 Clasificación de Pruebas según el Momento de Ejecución
Pruebas Estáticas
Se realizan sin ejecutar el código, mediante técnicas de análisis y revisión:
- Revisión de código: Análisis manual del código fuente por pares
- Análisis estático: Herramientas automatizadas que detectan errores sin ejecutar
- Inspecciones: Revisión formal de documentación y diseño
- Walkthrough: Presentación de código a un grupo de revisores
Pruebas Dinámicas
Se ejecuta el software para evaluar su comportamiento:
- Pruebas de caja blanca (cristal): Conocimiento del código interno
- Pruebas de caja negra: Sin conocimiento del código interno
- Pruebas de caja gris: Combinación de ambas aproximaciones
2.3 Clasificación según la Caja de Prueba
| Tipo de Prueba | Características | Enfoque |
|---|---|---|
| Caja Blanca | Examina estructura interna, flujo de datos y lógica | Basada en código (Orientada a estructura) |
| Caja Negra | Evalúa entradas y salidas sin conocer código | Basada en comportamiento (Orientada a especificación) |
| Caja Gris | Acceso parcial a código y conocimiento de arquitectura | Híbrida (Combinación de ambas) |
2.4 Clasificación según el Nivel de Prueba
Pruebas Unitarias
Verifican componentes individuales del sistema. Son las pruebas de más bajo nivel, realizadas por desarrolladores:
- Prueban funciones, métodos, procedimientos o módulos aislados
- Utilizan datos de prueba específicos (stubs y mocks)
- Son automatizables y ejecutables rápidamente
- Ejemplos: Pruebas JUnit en Java, Pytest en Python
Pruebas de Integración
Comprueban la interacción entre módulos del sistema:
- Verifican que componentes integrados funcionan correctamente
- Detectan problemas de interfaces entre módulos
- Pueden ser de abajo a arriba (bottom-up), de arriba a abajo (top-down) o en sándwich
- Requieren configuración de ambiente más complejo que pruebas unitarias
Pruebas de Sistema
Evalúan el comportamiento del sistema completo integrado:
- Verifican todas las funciones contra especificaciones
- Prueban comunicaciones e interfaces del sistema
- Evalúan rendimiento, volumen y seguridad
- Se realizan en ambiente similar a producción
Pruebas de Aceptación
Realizadas por el usuario final para validar requisitos funcionales:
- Verifican que el sistema cumple con las necesidades del negocio
- Basadas en escenarios reales de uso
- Realizadas antes de la implementación final
- También llamadas UAT (User Acceptance Testing)
2.5 Clasificación según el Objetivo de Prueba
Pruebas Funcionales
Validan que el sistema cumple con los requisitos funcionales establecidos:
- Verifican que cada función del sistema opera correctamente
- Incluyen pruebas de interfaces de usuario
- Prueban el flujo de datos a través del sistema
Pruebas No Funcionales
Evalúan atributos del sistema distintos a la funcionalidad:
- Rendimiento (Performance): Velocidad, escalabilidad, estabilidad
- Carga: Comportamiento bajo alto volumen de solicitudes simultáneas
- Estrés: Sistema bajo condiciones extremas y fuera de límites normales
- Seguridad: Vulnerabilidades, controles de acceso, encriptación
- Confiabilidad: Recuperación ante fallos, disponibilidad
- Usabilidad: Facilidad de uso e interfaz de usuario
- Compatibilidad: Funcionamiento en diferentes plataformas y navegadores
- Mantenibilidad: Facilidad de realizar cambios y correcciones
2.6 Pruebas Específicas Importantes
Pruebas de Regresión
Aseguran que nuevas modificaciones no afecten funcionalidades previas:
- Se ejecutan cuando se realizan cambios en el código
- Repetidas en cada nuevo release o actualización
- Altamente automatizables y eficientes
- Críticas en ambientes de integración continua (CI/CD)
Pruebas de Interfaz
Validan la interfaz gráfica de usuario según requisitos:
- Verifican tamaño y posición de elementos
- Prueban navegación y flujo de pantallas
- Validan mensajes de error y confirmación
- Pueden ser manuales o automatizadas con herramientas
Pruebas Exploratorias
Basadas en la experiencia del tester sin plan predefinido:
- El tester identifica errores mediante exploración activa
- Complementan las pruebas planificadas
- Efectivas para encontrar defectos inesperados
- Requieren testers con experiencia y conocimiento del dominio
3. Formación en Construcción de Sistemas de Información
3.1 Importancia de la Formación
La formación del equipo de desarrollo es aspecto crítico para el éxito de proyectos de sistemas de información. Un equipo bien formado garantiza:
- Código de mayor calidad y menor número de defectos
- Mejora en tiempos de desarrollo y productividad
- Cumplimiento de estándares y mejores prácticas
- Innovación y adaptabilidad a nuevas tecnologías
- Satisfacción y retención del personal
3.2 Áreas de Formación Esencial
Formación Técnica
- Lenguajes de programación
- Frameworks y librerías
- Bases de datos
- Desarrollo web/móvil
- Herramientas de desarrollo (IDEs)
- Control de versiones (Git)
- Pruebas automatizadas
Formación en Metodologías
- Metodologías Ágil (Scrum, Kanban)
- MÉTRICA versión 3
- SDLC y ciclo de vida del software
- DevOps y CI/CD
- Mejores prácticas de desarrollo
- Arquitectura de software
- Patrones de diseño
Formación en Gestión
- Gestión de proyectos
- Gestión de requisitos
- Seguimiento y control
- Comunicación de equipos
- Liderazgo técnico
- Toma de decisiones
Formación en Calidad y Seguridad
- Aseguramiento de calidad (QA)
- Pruebas de software
- Seguridad informática
- Ciberseguridad
- Cumplimiento normativo (RGPD)
- Auditoría de sistemas
3.3 Participantes en la Formación
La formación debe diseñarse considerando los diferentes roles en el equipo de desarrollo:
| Rol | Responsabilidades | Formación Prioritaria |
|---|---|---|
| Desarrollador | Codificación e implementación de funcionalidades | Lenguajes, frameworks, pruebas unitarias, patrones de diseño |
| QA/Tester | Diseño e implementación de pruebas | Metodologías pruebas, automatización, herramientas, caja blanca/negra |
| Analista de Sistemas | Validar requisitos y especificaciones funcionales | Análisis de requisitos, BPMN, modelado de datos, especificaciones |
| Product Owner | Priorizar funcionalidades y gestionar requisitos | Gestión de requisitos, Agile, comunicación con stakeholders |
| Scrum Master/Gestor Proyecto | Coordinación y seguimiento del equipo | Gestión de proyectos, Agile, liderazgo, comunicación |
| Arquitecto Software | Diseño de arquitectura técnica del sistema | Arquitectura, patrones, escalabilidad, tecnologías emergentes |
| DevOps | Infraestructura, automatización, despliegue | CI/CD, contenedores, orquestación, automatización, monitoreo |
4. Métodos y Técnicas de Construcción de Software
4.1 Métodos de Desarrollo
Desarrollo Ágil
Enfoque iterativo basado en ciclos cortos (sprints) de 1-4 semanas:
- Scrum: Framework ágil más popular. Define roles (Product Owner, Scrum Master), artefactos (Product Backlog, Sprint Backlog) y ceremonias (Sprint Planning, Daily Standup, Sprint Review)
- Kanban: Sistema de flujo continuo con tableros de trabajo. Limita trabajo en progreso (WIP) y optimiza el flujo
- Extreme Programming (XP): Énfasis en calidad mediante pair programming, TDD, refactorización continua
- Ventajas: Flexibilidad, feedback temprano, adaptación a cambios, entregas frecuentes
Desarrollo Tradicional/Cascada
Modelo secuencial lineal con fases claramente definidas:
- Requisitos → Diseño → Implementación → Pruebas → Despliegue → Mantenimiento
- Cada fase debe completarse antes de la siguiente
- Documentación exhaustiva al final de cada fase
- Menos flexible frente a cambios
- Usado en proyectos de requisitos claros y estables
Desarrollo en V
Modelo que enfatiza la verificación y validación:
- Lado izquierdo: descomposición de requisitos en subcomponentes
- Lado derecho: integración y pruebas progresivas
- Cada nivel de desarrollo tiene su correspondiente nivel de prueba
- Efectivo para sistemas de seguridad crítica
Desarrollo Iterativo/Espiral
Combina iteraciones con gestión proactiva de riesgos:
- Ciclos repetitivos de planificación, análisis de riesgos, implementación, evaluación
- Prototipado temprano reduce riesgos
- Flexible y adaptable para proyectos grandes
- Mayor costo inicial de gestión
Desarrollo Basado en Componentes (CBD)
Metodología que enfatiza reutilización de componentes:
- Construcción mediante componentes existentes o nuevos módulos independientes
- Interfaces bien definidas entre componentes
- Facilita mantenimiento y evolución del sistema
- Requiere repositorio de componentes reutilizables
4.2 Técnicas de Desarrollo
Test-Driven Development (TDD)
Paradigma donde las pruebas se escriben antes del código:
- Ciclo Red-Green-Refactor: Escribir prueba fallida (red) → Código mínimo para pasar (green) → Mejorar código (refactor)
- Asegura que código está probado desde inicio
- Mejora diseño del código y reduce defectos
- Requiere disciplina y experiencia del desarrollador
Behavior-Driven Development (BDD)
Extensión de TDD enfocada en comportamiento esperado del sistema:
- Pruebas escritas en lenguaje natural cercano a negocios (Gherkin)
- Facilita comunicación entre técnicos, testers y stakeholders
- Ejemplo: «Dado que soy usuario, cuando realizo acción X, entonces debería ver resultado Y»
- Herramientas: Cucumber, Behat, SpecFlow
Integración Continua (CI)
Práctica de integrar código frecuentemente en repositorio compartido:
- Cambios integrados varias veces al día
- Compilación automática y pruebas ejecutadas inmediatamente
- Detección temprana de conflictos y errores
- Reduce tiempos de integración y mejora calidad
- Herramientas: Jenkins, GitLab CI, GitHub Actions
Despliegue Continuo (CD)
Extensión de CI que automatiza despliegue a producción:
- Código integrado se despliega automáticamente tras pasar pruebas
- Despliegues frecuentes minimizan cambios y reducen riesgos
- Permite feedback rápido de usuarios reales
- Requiere alta confianza en automatización de pruebas
DevOps
Cultura y conjunto de prácticas que integra desarrollo y operaciones:
- Automatización de infraestructura y despliegues
- Monitoreo continuo y feedback en tiempo real
- Mejora de colaboración entre desarrolladores y operaciones
- Reduce ciclo de entrega y mejora confiabilidad
- Incluye CI/CD, Infrastructure as Code, containerización
Refactorización
Mejora del código sin cambiar funcionalidad:
- Aumenta legibilidad y mantenibilidad del código
- Reduce complejidad y elimina código duplicado
- Facilita futuras modificaciones
- Debe realizarse de forma incremental y con pruebas que lo amparen
5. Reutilización de Componentes Software
5.1 Concepto y Beneficios
La reutilización de software es la práctica de usar componentes o artefactos de software existentes en nuevos proyectos, en lugar de desarrollarlos desde cero. Esta práctica ofrece múltiples beneficios:
- Reducción de costes: Menos código a desarrollar y mantener
- Aceleración del desarrollo: Componentes ya probados y listos para usar
- Mejora de calidad: Componentes reutilizados han sido probados en múltiples contextos
- Mayor fiabilidad: Menos probabilidad de errores en código probado
- Consistencia: Mismo comportamiento en múltiples aplicaciones
- Facilita mantenimiento: Correcciones benefician a todas las aplicaciones que usan el componente
- Mejora interoperabilidad: Componentes estandarizados facilitan integración
5.2 Niveles de Reutilización
Reutilización de Código Fuente
Uso de librerías y funciones ya implementadas:
- Bibliotecas estándar del lenguaje (stdlib)
- Librerías de terceros disponibles públicamente (npm, PyPI, Maven)
- Funciones y utilidades internas reutilizables
- Frameworks que proporcionan estructura base
Reutilización de Componentes
Uso de módulos o servicios previamente desarrollados:
- Componentes de negocio reutilizables (autenticación, logging, auditoría)
- Componentes UI (botones, diálogos, controles reutilizables)
- Módulos de integración con sistemas externos
- Componentes empaquetados en librerías específicas del dominio
Reutilización de Servicios (SOA y Microservicios)
Uso de servicios accesibles mediante APIs:
- Microservicios independientes y desplegables
- APIs REST o GraphQL para comunicación
- Servicios en la nube (cloud services)
- Integración mediante orquestación de servicios
Reutilización de Patrones y Arquitecturas
Aplicación de soluciones probadas en nuevos proyectos:
- Patrones de diseño (Strategy, Observer, Factory, etc.)
- Patrones arquitectónicos (MVC, MVVM, hexagonal)
- Arquitecturas de referencia para dominios específicos
- Best practices y convenciones de codificación
5.3 Tipos de Componentes Reutilizables
| Tipo de Componente | Características | Ejemplos |
|---|---|---|
| Componentes Propios | Desarrollados internamente en la organización, con control total | Utilidades internas, componentes negocio, servicios internos |
| Open Source | Libres, generalmente gratuitos, comunidad activa | Linux, Apache, MySQL, Node.js, React |
| COTS (Commercial Off-The-Shelf) | Productos comerciales listos para usar | Microsoft Office, Oracle Database, Salesforce |
| Middleware | Software que conecta aplicaciones y componentes | Message brokers, API gateways, integration platforms |
| Frameworks | Estructura base para desarrollo de aplicaciones | Spring, Django, Angular, NestJS |
5.4 Estrategias de Reutilización
Reutilización Fortuita
Cuando un componente desarrollado para un proyecto es aprovechado en otros de forma no planificada:
- Menos formal y estructurada
- Requiere documentación y comunicación dentro de la organización
- Bajo costo inicial pero requiere gestión
Reutilización Planificada
Cuando se diseñan componentes específicamente para reutilización:
- Se documentan interfaces claramente
- Se crean repositorios centralizados de componentes
- Se establecen estándares de calidad y empaquetado
- Mayor inversión inicial pero beneficios a largo plazo
5.5 Gestión de Componentes Reutilizables
- Catalogación: Inventario de componentes disponibles con descripción clara
- Versionado: Control de versiones de componentes, compatibilidad hacia atrás
- Documentación: API clara, ejemplos de uso, casos de prueba
- Empaquetado: Distribución estándar (contenedores, paquetes, dependencias)
- Mantenimiento: Actualizaciones, correcciones de seguridad, soporte
- Licencias: Cumplimiento legal de licencias de software
- Calidad: Pruebas obligatorias, métricas de cobertura y defectos
6. Integración en MÉTRICA Versión 3
MÉTRICA versión 3 es la metodología estándar para el ciclo de vida de sistemas de información en administraciones públicas españolas, incluyendo el Servicio Andaluz de Salud. El proceso de Construcción del Sistema de Información (CSI) en MÉTRICA 3 incluye:
6.1 Actividades del Proceso CSI
- CSI 1: Preparación del Entorno de Generación y Construcción – Configurar infraestructura necesaria
- CSI 2: Generación del Código de los Componentes y Procedimientos – Codificación según especificaciones
- CSI 3: Construcción del Sistema – Integración de componentes
- CSI 4: Pruebas Unitarias – Verificación de componentes individuales
- CSI 5: Pruebas de Integración – Validación de integración de módulos
- CSI 6: Elaboración de Manuales – Documentación de usuario y explotación
- CSI 7: Definición de la Formación de Usuario – Planificación de capacitación
7. Mapa Conceptual
╔════════════════════════════════════════════════════════════════════════╗
║ CONSTRUCCIÓN DE SISTEMAS DE INFORMACIÓN ║
╚════════════════════════════════════════════════════════════════════════╝
┌─────────────────────────────────────────────────────────────────────┐
│ PROCESOS PRINCIPALES │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │
│ │ DISEÑO Y │ │ PRUEBAS DE │ │ FORMACIÓN DE │ │
│ │ CODIFICACIÓN │ │ SOFTWARE │ │ EQUIPOS │ │
│ │ │ │ │ │ │ │
│ │ • Componentes │ │ • Unitarias │ │ • Técnica │ │
│ │ • Módulos │ │ • Integración │ │ • Metodologías │ │
│ │ • Servicios │ │ • Sistema │ │ • Gestión │ │
│ │ • APIs │ │ • Aceptación │ │ • Calidad │ │
│ └──────────────────┘ └──────────────────┘ └──────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────┐
│ MÉTODOS Y TÉCNICAS │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │
│ │ Desarrollo │ │ Técnicas de │ │ Reutilización │ │
│ │ Ágil │ │ Desarrollo │ │ de Componentes │ │
│ │ │ │ │ │ │ │
│ │ • Scrum │ │ • TDD │ │ • Código fuente │ │
│ │ • Kanban │ │ • BDD │ │ • Componentes │ │
│ │ • Extreme Prog. │ │ • CI/CD │ │ • Servicios │ │
│ │ • Iterativo │ │ • DevOps │ │ • Patrones │ │
│ │ • Cascada │ │ • Refactoring │ │ • Arquitecturas │ │
│ └──────────────────┘ └──────────────────┘ └──────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────┐
│ PRUEBAS DE SOFTWARE │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ SEGÚN MOMENTO SEGÚN CAJA SEGÚN NIVEL │
│ ├─ Estáticas ├─ Blanca ├─ Unitarias │
│ └─ Dinámicas ├─ Negra ├─ Integración │
│ └─ Gris ├─ Sistema │
│ └─ Aceptación │
│ │
│ SEGÚN OBJETIVO │
│ ├─ Funcionales │
│ └─ No Funcionales: Rendimiento, Carga, Estrés, Seguridad, │
│ Confiabilidad, Usabilidad, Compatibilidad │
│ │
└─────────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────┐
│ CALIDAD Y ENTREGA │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────────────────────────────┐ │
│ │ PRODUCTO DE CALIDAD ENTREGABLE │ │
│ │ - Funcionalidades probadas │ │
│ │ - Documentación completa │ │
│ │ - Equipo capacitado │ │
│ │ - Componentes reutilizables │ │
│ │ - Mantenibilidad garantizada │ │
│ └──────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────┘
8. Cuestionario de Evaluación (25 Preguntas)
Pregunta 1: ¿Cuál es el objetivo principal de las pruebas de software?
Las pruebas de software tienen como objetivo principal garantizar que el sistema cumple con los requisitos establecidos tanto funcionales como no funcionales, detectando y reportando defectos antes de que llegue a usuarios finales.
Pregunta 2: ¿Cuál de las siguientes pruebas se enfoca en validar la funcionalidad del software sin conocer su estructura interna?
Las pruebas de caja negra evalúan el software analizando sus entradas y salidas sin considerar su código interno, garantizando que cumple con los requisitos funcionales especificados.
Pregunta 3: ¿En qué nivel del proceso de pruebas se validan los componentes individuales?
Las pruebas unitarias son las pruebas de más bajo nivel y evalúan componentes individuales del software (funciones, métodos, módulos), verificando su correcto funcionamiento antes de la integración.
Pregunta 4: ¿Cuál es el propósito de las pruebas de regresión?
Las pruebas de regresión verifican que las actualizaciones o modificaciones realizadas en el sistema no afecten negativamente las funcionalidades existentes previamente probadas.
Pregunta 5: ¿Qué metodología de desarrollo prioriza específicamente la reutilización de componentes software?
El Desarrollo Basado en Componentes (CBD) es una metodología que enfatiza específicamente la construcción de sistemas mediante componentes reutilizables, optimizando tiempo y costos de desarrollo.
Pregunta 6: ¿Qué técnica de pruebas se basa en escribir casos de prueba ANTES de desarrollar el código?
Test-Driven Development (TDD) implica escribir las pruebas antes de implementar el código, siguiendo el ciclo Red-Green-Refactor, asegurando que el código cumple requisitos desde su implementación.
Pregunta 7: ¿Cuál de las siguientes afirmaciones es una ventaja de la reutilización de software?
La reutilización de software mejora significativamente la eficiencia al reducir el tiempo de desarrollo y los costos, permitiendo aprovechar módulos ya probados de otros proyectos.
Pregunta 8: En el desarrollo ágil, ¿qué tipo de pruebas se integran en cada iteración o sprint?
En metodologías ágiles, se realizan pruebas automatizadas y manuales de forma continua durante cada iteración para garantizar la calidad del software en todas las fases del desarrollo.
Pregunta 9: ¿Qué se evalúa principalmente en una prueba de carga?
Las pruebas de carga miden la capacidad del sistema para gestionar un alto volumen de solicitudes simultáneas, evaluando su rendimiento, estabilidad y escalabilidad bajo demanda.
Pregunta 10: ¿Qué tipo de prueba de software permite detectar vulnerabilidades de seguridad en el código?
Las pruebas de seguridad identifican vulnerabilidades en el sistema, asegurando que no haya brechas que comprometan la información y el acceso a los datos, incluyendo pruebas de inyección SQL, XSS, etc.
Pregunta 11: ¿Qué técnica permite evaluar la usabilidad de una aplicación con usuarios reales?
Las pruebas de usabilidad evalúan la facilidad de uso del software mediante pruebas con usuarios reales, verificando que la experiencia de usuario es intuitiva y satisfactoria.
Pregunta 12: ¿En qué fase del ciclo de vida del software se realizan típicamente las pruebas de aceptación?
Las pruebas de aceptación se realizan generalmente antes de la implementación final en producción, realizadas por usuarios o cliente para validar que el software cumple con los requisitos del negocio.
Pregunta 13: ¿Cuál de los siguientes NO es un nivel válido de reutilización de software?
La reutilización debe basarse en componentes y arquitecturas vigentes y mantenidas. Reutilizar arquitecturas desactualizadas puede introducir problemas de compatibilidad y seguridad.
Pregunta 14: ¿Cuál es la filosofía central del método Scrum en desarrollo ágil?
Scrum es un framework ágil que se basa en ciclos cortos de 1-4 semanas (sprints), con entregas frecuentes de funcionalidades, permitiendo adaptación a cambios y feedback continuo.
Pregunta 15: ¿Qué es CI/CD en el contexto de desarrollo de software?
CI/CD (Continuous Integration / Continuous Deployment) es un enfoque que automatiza la integración frecuente de código y el despliegue automático en producción tras pasar pruebas.
Pregunta 16: ¿Cuál es el rol principal de un Product Owner en Scrum?
El Product Owner es responsable de definir y priorizar el Product Backlog, gestionar los requisitos y asegurar que el equipo de desarrollo entiende correctamente las necesidades del negocio.
Pregunta 17: ¿Qué beneficio principal proporciona la integración continua (CI)?
La Integración Continua (CI) automatiza la compilación y pruebas cada vez que se integra código al repositorio compartido, permitiendo detectar errores tempranamente y reducir conflictos.
Pregunta 18: ¿Cuál es el ciclo fundamental de TDD (Test-Driven Development)?
El ciclo TDD es Red-Green-Refactor: Escribir prueba fallida (Red), implementar código mínimo para pasar (Green), mejorar y refactorizar código (Refactor), manteniendo calidad.
Pregunta 19: ¿Qué implica el concepto de DevOps?
DevOps es una cultura y conjunto de prácticas que integran desarrollo y operaciones, enfatizando automatización, colaboración, CI/CD, infraestructura como código y monitoreo continuo.
Pregunta 20: ¿Cuál es la diferencia principal entre pruebas estáticas y dinámicas?
Las pruebas estáticas se realizan sin ejecutar el código (revisiones, análisis estático), mientras que las pruebas dinámicas requieren ejecutar el software para evaluar su comportamiento.
Pregunta 21: ¿Qué es Behavior-Driven Development (BDD)?
BDD es una extensión de TDD que enfatiza escribir pruebas en lenguaje natural cercano al negocio (Gherkin), facilitando comunicación entre técnicos, testers y stakeholders sobre comportamiento esperado.
Pregunta 22: ¿Cuál es un ejemplo de COTS (Commercial Off-The-Shelf)?
COTS (Commercial Off-The-Shelf) se refiere a productos software comerciales listos para usar como Microsoft Office, Oracle, Salesforce, que se adquieren sin necesidad de desarrollo personalizado.
Pregunta 23: ¿Qué principio fundamental se busca aplicar en la refactorización de código?
La refactorización mejora la estructura interna del código sin cambiar su funcionalidad observable, aumentando legibilidad, reduciendo complejidad y facilitando futuras modificaciones.
Pregunta 24: ¿Cuál es el principal desafío en la gestión de componentes reutilizables?
Gestionar componentes reutilizables requiere establecer sistemas de versionado, mantener compatibilidad hacia atrás, documentación clara, control de calidad y plan de mantenimiento actualizado.
Pregunta 25: ¿Qué enfatiza específicamente el modelo de desarrollo en V?
El modelo en V enfatiza que cada nivel de desarrollo tiene su correspondiente nivel de prueba/validación. Lado izquierdo descompone requisitos, lado derecho integra y prueba progresivamente.
9. Referencias Bibliográficas
Referencias Normativas y Metodológicas
- Ministerio de Administraciones Públicas. (2008). MÉTRICA Versión 3: Metodología de Planificación, Desarrollo y Mantenimiento de Sistemas de Información. Disponible en administracionelectronica.gob.es
- ISO/IEC 25010:2023. Calidad del software y sistemas. Modelos de calidad.
- IEEE 829:2021. Standard for Software Test Documentation
- SWEBOK (Software Engineering Body of Knowledge) – IEEE 2014
Referencias sobre Testing y Pruebas de Software
- Pressman, R. S. (2021). Software Engineering: A Practitioner’s Approach. 9ª edición. McGraw-Hill.
- Sommerville, I. (2020). Software Engineering. 10ª edición. Addison-Wesley.
- Myers, G. J., Badgett, T., & Sandler, C. (2011). The Art of Software Testing. 3ª edición. Wiley.
- Cohn, M. (2009). Succeeding with Agile: Software Development Using Scrum. Addison-Wesley. (Pirámide de Cohn)
- Copeland, L. (2004). A Practitioner’s Guide to Software Test Design. Artech House Publishers.
Referencias sobre Metodologías Ágiles
- Beck, K. (2000). Extreme Programming Explained: Embrace Change. 1ª edición. Addison-Wesley.
- Schwaber, K., & Sutherland, J. (2020). The Scrum Guide. Scrum.org
- Anderson, D. J. (2010). Kanban: Successful Evolutionary Change for Your Technology Business. Blue Hole Press.
- Poppendieck, M., & Poppendieck, T. (2006). Implementing Lean Software Development. Addison-Wesley.
Referencias sobre Reutilización y Arquitectura de Software
- Meyer, B. (2002). Object-Oriented Software Construction. 2ª edición. Prentice Hall. (Componentes y reutilización)
- Bass, L., Clements, P., & Kazman, R. (2021). Software Architecture in Practice. 4ª edición. Addison-Wesley.
- Gamma, E., Helm, R., Johnson, R., & Vlissides, J. (1994). Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley.
- Evans, E. (2003). Domain-Driven Design: Tackling Complexity in the Heart of Software. Addison-Wesley.
Referencias sobre DevOps y Integración Continua
- Humble, J., & Farley, D. (2010). Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation. Addison-Wesley.
- Kim, G., Debois, P., Willis, J., & Humble, J. (2016). The DevOps Handbook: How to Create World-Class Agility, Reliability, and Security in Technology Organizations. IT Revolution Press.
- Fowler, M. (2014). Microservices. Martin Fowler Blog.
Referencias Específicas del Sector Público (SAS)
- Junta de Andalucía. Servicio Andaluz de Salud. Políticas de Tecnología de la Información.
- Agencia para la Defensa de la Seguridad Informática (CCN-CERT). Guías de seguridad informática en sistemas sanitarios.
- Regulación General de Protección de Datos (RGPD) UE 2016/679 – Aplicación a sistemas sanitarios.
