|
1 | 1 | # Fundamentos de testing |
2 | 2 |
|
3 | | -**Estado:** planned |
| 3 | +**Estado:** draft |
4 | 4 |
|
5 | | -Este capítulo explicará qué prueba un test, qué no puede probar y cómo una |
6 | | -suite expresa decisiones de diseño. |
| 5 | +Este capítulo abre el curso con una pregunta que parece simple y no lo es: |
| 6 | +¿qué prueba realmente una prueba? |
| 7 | + |
| 8 | +Testing no es una lista de macros ni un trámite para subir cobertura. Testing |
| 9 | +es una forma de escribir evidencia sobre el comportamiento esperado de un |
| 10 | +sistema. Esa evidencia no reemplaza el criterio humano, pero reduce el espacio |
| 11 | +donde los cambios pueden romper algo sin ser vistos. |
| 12 | + |
| 13 | +## Concepto |
| 14 | + |
| 15 | +Una prueba es una observación controlada sobre un comportamiento. Toma una |
| 16 | +entrada, prepara un contexto, ejecuta una acción y compara el resultado con una |
| 17 | +expectativa. Lo importante no es solo que la comparación pase, sino que la |
| 18 | +expectativa represente una regla valiosa del sistema. |
| 19 | + |
| 20 | +Por eso una buena prueba comunica tres cosas: |
| 21 | + |
| 22 | +- qué comportamiento importa; |
| 23 | +- bajo qué condiciones debe sostenerse; |
| 24 | +- qué señal aparece cuando se rompe. |
| 25 | + |
| 26 | +Una suite de pruebas es el conjunto de esas observaciones. No demuestra que el |
| 27 | +sistema sea perfecto; demuestra que ciertas propiedades siguen siendo ciertas |
| 28 | +en los casos que decidimos volver ejecutables. |
| 29 | + |
| 30 | +## Problema |
| 31 | + |
| 32 | +El software cambia. Cada cambio puede romper una regla anterior, introducir una |
| 33 | +regla nueva o revelar que nunca entendimos bien una frontera. Sin pruebas, la |
| 34 | +confianza depende de memoria, intuición y revisión manual completa cada vez. |
| 35 | + |
| 36 | +Ese modelo no escala. Un sistema real acumula casos límite, invariantes, |
| 37 | +contratos entre módulos y decisiones históricas. Si esas decisiones solo viven |
| 38 | +en la cabeza de alguien, se pierden o se reinterpretan. Las pruebas convierten |
| 39 | +parte de esa memoria en evidencia ejecutable. |
| 40 | + |
| 41 | +## Qué puede probar una prueba |
| 42 | + |
| 43 | +Una prueba puede verificar que una expectativa concreta se cumple en un |
| 44 | +escenario definido. Puede hacer visibles regresiones, contratos rotos, errores |
| 45 | +de borde y decisiones de diseño que alguien intentó cambiar sin querer. |
| 46 | + |
| 47 | +También puede documentar comportamiento. Un lector que ve una prueba bien |
| 48 | +nombrada entiende qué caso le importó al autor y por qué esa regla merece |
| 49 | +protección. |
| 50 | + |
| 51 | +## Qué no puede probar una prueba |
| 52 | + |
| 53 | +Una prueba no demuestra ausencia total de errores. Tampoco demuestra que el |
| 54 | +diseño sea correcto, que el producto resuelva el problema correcto o que la |
| 55 | +suite cubra todos los escenarios relevantes. |
| 56 | + |
| 57 | +La cobertura de líneas tampoco equivale a confianza. Puede indicar que el |
| 58 | +código se ejecutó, pero no que las expectativas sean fuertes. Una suite puede |
| 59 | +tener cobertura alta y aun así no detectar mutaciones triviales, contratos |
| 60 | +ambiguos o decisiones de negocio mal entendidas. |
| 61 | + |
| 62 | +## Alternativas |
| 63 | + |
| 64 | +La primera alternativa es confiar en pruebas manuales. Sirven para exploración, |
| 65 | +criterio de producto y revisión humana, pero son costosas de repetir y fáciles |
| 66 | +de olvidar. |
| 67 | + |
| 68 | +La segunda alternativa es probar solo al final. Esto detecta errores tarde, |
| 69 | +cuando el costo de entender la causa ya subió y el diseño quizá quedó rígido. |
| 70 | + |
| 71 | +La tercera alternativa es perseguir cobertura como objetivo. Da una métrica |
| 72 | +visible, pero puede convertir la suite en teatro: mucho código ejecutado y poca |
| 73 | +confianza real. |
| 74 | + |
| 75 | +La alternativa que toma este curso es tratar las pruebas como diseño |
| 76 | +ejecutable. Primero se entiende la regla, luego se decide qué evidencia la |
| 77 | +protege y finalmente se implementa una prueba que pueda fallar por una razón |
| 78 | +clara. |
| 79 | + |
| 80 | +## Invariantes del curso |
| 81 | + |
| 82 | +- Una prueba debe proteger una regla observable. |
| 83 | +- Una prueba debe fallar por una razón comprensible. |
| 84 | +- Una prueba debe tener un nombre que explique el comportamiento, no el detalle |
| 85 | + interno. |
| 86 | +- Una prueba debe minimizar causas accidentales de falla. |
| 87 | +- Una suite debe combinar escalas: unidad, integración, contrato, propiedades y |
| 88 | + rendimiento cuando aplique. |
| 89 | +- Una métrica de testing es señal, no objetivo. |
| 90 | +- La revisión humana sigue decidiendo si la evidencia es suficiente. |
| 91 | + |
| 92 | +## Preparación para el modelo Rust |
| 93 | + |
| 94 | +El modelo mínimo del capítulo representará afirmaciones de prueba, tipos de |
| 95 | +evidencia y señales de confianza. No usará frameworks externos: el objetivo es |
| 96 | +hacer visible el razonamiento antes de conectar herramientas. |
| 97 | + |
| 98 | +Ese modelo debe permitir expresar preguntas como: |
| 99 | + |
| 100 | +- ¿qué comportamiento se afirma? |
| 101 | +- ¿qué tipo de evidencia lo protege? |
| 102 | +- ¿qué riesgo queda fuera? |
| 103 | +- ¿la señal es fuerte o solo cosmética? |
| 104 | + |
| 105 | +## Fuera de alcance |
| 106 | + |
| 107 | +Este capítulo no enseña todavía `#[test]`, mocks, property testing, contratos ni |
| 108 | +benchmarks. Esos temas tienen capítulos propios. Aquí se establece el lenguaje |
| 109 | +común que hará que esos capítulos no parezcan técnicas aisladas. |
7 | 110 |
|
8 | 111 | No está marcado como `reviewed` ni `published`. |
0 commit comments