Respuestas modelo
Consulta aquí las respuestas correctas y explicaciones de las autoevaluaciones y los tests del manual. Ideal para repasar antes de un test o aclarar dudas.
2.08 · Testing: Pruebas de Escritorio y assert
16 preguntas con respuesta en este tema.
🎯 Autoevaluación (3)
¿Qué es una prueba de escritorio?
- A. Ejecutar el código en la PC
- B. Simular la ejecución paso a paso con valores concretos en papel ✓ CORRECTA
- C. Compilar
- D. Compilar y ejecutar
Prueba de escritorio: trazar manualmente la ejecución con valores específicos para verificar la lógica antes de codificar.
¿Qué hace la macro `assert` en C++?
- A. Confirma que el programa compila
- B. Verifica que una condición sea verdadera; si no, aborta ✓ CORRECTA
- C. Es un comentario
- D. Es un bucle
assert(x > 0) verifica que x > 0. Si es false, el programa aborta con mensaje de error. Útil para depuración.
¿Por qué son importantes los tests?
- A. Para llenar el código
- B. Para verificar que el código funciona correctamente y prevenir regresiones ✓ CORRECTA
- C. Para hacerlo más lento
- D. No son importantes
Tests automatizados detectan bugs temprano, permiten refactorizar con confianza, documentan el comportamiento esperado.
📝 Test · Sección A · Opción múltiple (10)
¿Qué es una prueba de escritorio?
- A. Ejecutar en PC
- B. Simular manualmente la ejecución con valores concretos ✓ CORRECTA
- C. Compilar
- D. Debug
Prueba de escritorio: trazar paso a paso en papel antes de ejecutar.
¿Para qué sirve una prueba de escritorio?
- A. Compilar
- B. Verificar la lógica antes de codificar ✓ CORRECTA
- C. Ejecutar
- D. Hacer bonito
Detecta errores lógicos ANTES de ejecutar el código.
¿Qué hace assert en C++?
- A. Confirma compilación
- B. Verifica condición: si es false, aborta con error ✓ CORRECTA
- C. Lee input
- D. Es un bucle
assert(x > 0) verifica. Si es false, aborta con mensaje.
¿En qué header está assert?
- A. <iostream>
- B. <cassert> o <assert.h> ✓ CORRECTA
- C. <vector>
- D. <string>
#include <cassert> o <assert.h>. En C++ moderno: <cassert>.
assert(false) hace:
- A. Nada
- B. Aborta el programa con mensaje de error ✓ CORRECTA
- C. Compila
- D. Reinicia
assert(false) dispara el assert y aborta mostrando el archivo:línea.
¿Por qué son importantes los tests automatizados?
- A. Para llenar código
- B. Detectan regresiones y validan el comportamiento ✓ CORRECTA
- C. Para hacerlo más lento
- D. No son importantes
Tests automatizados: detectan bugs temprano, permiten refactorizar con confianza.
En NDEBUG activo, ¿qué pasa con assert?
- A. Se ejecuta
- B. Se desactiva (no hace nada) ✓ CORRECTA
- C. Compila
- D. Falla
#define NDEBUG desactiva assert. Útil en producción.
¿Qué es regresión en software?
- A. Mejora
- B. Un bug que reaparece o nueva funcionalidad que rompe algo existente ✓ CORRECTA
- C. Compilar
- D. Test
Regresión: código nuevo que rompe funcionalidad que antes funcionaba.
Test unitario verifica:
- A. Todo el sistema
- B. Una unidad (función, método) en aislamiento ✓ CORRECTA
- C. La red
- D. La base de datos
Test unitario: una unidad pequeña de código. Base de la pirámide de tests.
Test de integración verifica:
- A. Una función
- B. La interacción entre múltiples componentes ✓ CORRECTA
- C. El hardware
- D. La red
Test de integración: cómo interactúan los módulos entre sí.
✍️ Test · Sección B · Preguntas abiertas (3)
Diseña un test unitario para una función "esPar(int n)" en pseudocódigo.
Test 1: input=2, expected=true, assert esPar(2)==true. Test 2: input=3, expected=false, assert esPar(3)==false. Test 3: input=0, expected=true, assert esPar(0)==true. Test 4: input=-4, expected=true, assert esPar(-4)==true. Casos: positivo par, positivo impar, cero, negativo.
¿Qué es la cobertura de código? ¿Por qué 100% no garantiza ausencia de bugs?
Cobertura: porcentaje de líneas/ramas ejecutadas por los tests. 100% cobertura no garantiza: tests que solo verifican happy path, sin assertions significativas, mocks que no reflejan comportamiento real, errores lógicos. Cobertura es necesaria pero no suficiente.
Explica la diferencia entre tests unitarios, de integración y end-to-end. Da un ejemplo de cada uno.
Unitario: una función/clase aislada (esPar, sumar). Integración: interacción entre módulos (login + BD). E2E: flujo completo desde UI (registro, login, comprar).
📝 ¿Listo para evaluarte?
Regístrate o inicia sesión para tomar la autoevaluación o el test de este tema y registrar tu puntaje.