Skip to content

Commit cc316ae

Browse files
docs: specify testing fundamentals (#44)
Closes #1 Resumen de revision diferida: - PR fusionado en modo autonomo autorizado. - Validaciones locales y check remoto rust en verde. - El capítulo 01 queda en draft sin marcar contenido como reviewed ni published. Co-authored-by: Joel Alvarez D. <124008575+joelalvarezduenas@users.noreply.github.com>
1 parent 089e6c5 commit cc316ae

4 files changed

Lines changed: 109 additions & 6 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ antes de usar `reviewed` o `published`.
4141

4242
| # | Capítulo | Módulo sugerido | Estado |
4343
|---|----------|-----------------|--------|
44-
| 01 | Fundamentos de testing | `src/fundamentals.rs` | planned |
44+
| 01 | Fundamentos de testing | `src/fundamentals.rs` | draft |
4545
| 02 | Unit tests en Rust | `src/unit_tests.rs` | planned |
4646
| 03 | Tests de integración | `src/integration_tests.rs` | planned |
4747
| 04 | Test doubles | `src/test_doubles.rs` | planned |

ROADMAP.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ el estándar de Jeresoft Academy.
1313

1414
| # | Capítulo | Milestone | Estado |
1515
|---|----------|-----------|--------|
16-
| 01 | Fundamentos de testing | 01. Fundamentos de testing | planned |
16+
| 01 | Fundamentos de testing | 01. Fundamentos de testing | draft |
1717
| 02 | Unit tests en Rust | 02. Unit tests en Rust | planned |
1818
| 03 | Tests de integración | 03. Tests de integración | planned |
1919
| 04 | Test doubles | 04. Test doubles | planned |

course.manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
"id": "fundamentals",
1515
"title": "Fundamentos de testing",
1616
"slug": "fundamentos-de-testing",
17-
"status": "planned",
17+
"status": "draft",
1818
"document": "docs/01-fundamentos-de-testing.md",
1919
"module": "src/fundamentals.rs",
2020
"milestone": "01. Fundamentos de testing"

docs/01-fundamentos-de-testing.md

Lines changed: 106 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,111 @@
11
# Fundamentos de testing
22

3-
**Estado:** planned
3+
**Estado:** draft
44

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.
7110

8111
No está marcado como `reviewed` ni `published`.

0 commit comments

Comments
 (0)