Perdiendo la fe en las pruebas

Papel de las pruebas frente al diseño

  • Muchos sostienen que las pruebas no pueden salvar una arquitectura fundamentalmente mala; la simplificación y la comprensibilidad importan más.
  • Otros informan éxito usando pruebas de integración para primero “envolver” un desastre heredado, y luego refactorizarlo con seguridad, viendo las pruebas como un facilitador de la simplificación en lugar de un sustituto.
  • Las pruebas se describen como una herramienta para la confianza y el cambio, no como una garantía de corrección.

Dónde las pruebas aportan un alto valor

  • Los componentes centrales, estables y que soportan carga (VMs, bases de datos, lógica de negocio central) se benefician enormemente de pruebas extensas y fuzzing.
  • Las pruebas de integración y de extremo a extremo son elogiadas por detectar errores reales entre sistemas y permitir refactors sin miedo, especialmente en sistemas con múltiples servicios y gran carga de infraestructura.
  • Las pruebas son valiosas para actualizar bibliotecas/frameworks, prevenir regresiones y preservar el comportamiento cuando los autores originales se marchan.
  • Las pruebas basadas en propiedades y las suites sólidas se presentan como un “endurecimiento para la batalla” para sistemas maduros.

Dónde las pruebas se ven con bajo retorno de inversión

  • Las funciones de producto que cambian rápido y el pulido de la interfaz en startups en fase inicial pueden sobreprobarse, matando la velocidad y llevando a suites frágiles que fallan constantemente.
  • Las herramientas interactivas (editores de texto, terminales) pueden salirse con menos pruebas automatizadas si las rutas principales se ejercitan continuamente con el uso.
  • Algunos equipos informan haber lanzado productos aceptables con poca automatización, apoyándose en pruebas manuales, métricas, despliegues canary y rollbacks.

Problemas culturales y de proceso

  • A menudo las pruebas se tratan como una religión: objetivos de cobertura, dogma de TDD y pruebas obligatorias para cada línea producen suites pesadas en mocks y de poco valor.
  • La ley de Goodhart: la cobertura como KPI lleva a pruebas triviales o redundantes que no mejoran la calidad pero sí ralentizan el cambio.
  • Los incentivos (rendimiento por tickets, falta de tiempo) empujan a los desarrolladores hacia “una porquería improvisada”; se critica culpar a individuos en lugar de a los sistemas.

Alternativas, complementos y estrategias

  • Los sistemas de tipos fuertes eliminan muchas clases de errores y reducen las pruebas necesarias, pero no las reemplazan; los tipos y las pruebas se ven como complementarios.
  • Las pruebas manuales exploratorias siguen considerándose cruciales para problemas de UX, sorpresas de rendimiento e interacciones imprevistas.
  • Varios comentaristas abogan por tratar las pruebas como inversiones: centrarse en escenarios de alto valor, invariantes centrales y protección contra regresiones; mantener suites rápidas, con pocas fluctuaciones, y estar dispuestos a eliminar o evitar pruebas de bajo ROI.