Pruebas unitarias, ciencias y matemáticas.


Prefacio


Las pruebas unitarias se usan comúnmente. Parece que nadie puede prescindir de él, todos escriben pruebas y su ausencia en cualquier proyecto serio causa, al menos, malentendidos. Sin embargo, muchos perciben las pruebas como un ritual realizado para no enojar al "dios de la programación". Me gusta, es necesario . ¿Por qué? Debido .


Diré cosas aterradoras.


No importa qué tomar como unidad de prueba. No importa cómo se agrupen las pruebas. No importa si están escritos antes o después del código. TDD o no TDD? No importa. Cuota de cobertura? No me importa un comino. Después de todo, puede que no haya ninguna prueba en absoluto. Todo esto es completamente irrelevante. Es importante que se cumplan los requisitos de software.


Las pruebas unitarias no son un ritual, sino una buena herramienta de trabajo que le permite acercarse al cumplimiento de estos requisitos. Y esta herramienta necesita poder usarse correctamente.


Espera, ¿dónde entra la ciencia con las matemáticas?


Contenido



  1. Garantías y Probabilidades
  2. La programación como teoría.
  3. Pruebas como prueba de teoremas
  4. Lo que es importante y lo que no.
  5. ¿Necesito probar pruebas?


Garantías y Probabilidades


No discutiré por centésima vez por qué se necesitan pruebas, cuánto ayudan, documentan, simplifican el proceso de desarrollo y refactorización, regresiones cercanas, etc.


Quiero escribir sobre cómo distinguir en las pruebas algo más que una serie de obligaciones, matices técnicos y requisitos de gestión. De modo que las pruebas no son accesorios que salvan a las estructuras inestables de la destrucción inmediata, sino la base sobre la cual nuestros programas se mantienen firmes y confiables.


, — . — . — . , , , , .


. . : , , 100%, .


.




"". , , , , . , , . "" "". , . , , "" , , . , "", , , .


, , , . , — , .


, , .




. "", "". "" "" "".


"" , , . "" — , , ( , ).


"" , , , , — . "" "" , , "".


"" , "" "", "" "", .


. , std::vector, clear. , "", .

? , (capacity). , "":
  1. clear() , size() ;
  2. clear() , empty() true;
  3. clear() , capacity() , clear().
  4. clear() , , , .


"" "":
test_case("   `clear()`    ")
{
    std::vector<int> v{1, 2, 3, 4};

    v.clear();

    check(v.size() == 0);
}


, "", ? .

, , . — , "". , "" "" , size(). "".

, "", std::vector<int> v{1, 2, 3, 4}. . , "", ? , , . ? , , ( , ).

"" , , : "", , , . , "".

"", size() , . : , . "", .

"" "".

, "", ( , ) .



,


, , , (, , - — — ). , "" "". — .


, , : , ( TDD ). — "". , , "", TDD, .


, . , , . , , .


, , , .




— , . , , . , . , .


Por lo tanto, nuestra "ciencia" metafórica, es decir, el código y la "realidad objetiva", es decir, las pruebas, avanzan uno hacia el otro, nunca alcanzan el ideal, pero aumentan la probabilidad deseada.


All Articles