Tests unitaires, sciences et mathématiques


Préface


Les tests unitaires sont couramment utilisés. Il semble que personne ne puisse se passer de lui, tout le monde écrit des tests, et leur absence dans tout projet sérieux provoque, au moins, des malentendus. Cependant, beaucoup perçoivent le test comme un rituel exécuté afin de ne pas irriter le «dieu de la programmation». Comme, il est nécessaire . Pourquoi? Parce que .


Je vais dire des choses effrayantes.


Peu importe quoi prendre comme unité de test. Peu importe la façon dont les tests sont regroupés. Peu importe qu'ils soient écrits avant ou après le code. TDD ou pas TDD? N'a pas d'importance. Part de couverture? Ne vous en souciez pas. Après tout, il se peut qu'il n'y ait aucun test du tout. Tout cela est complètement hors de propos. Il est important que les exigences logicielles soient respectées.


Les tests unitaires ne sont pas un rituel, mais un bon outil de travail, vous permettant de vous rapprocher de ces exigences. Et cet outil doit pouvoir être utilisé correctement.


Attendez, d'où vient la science avec les mathématiques?


Contenu



  1. Garanties et probabilités
  2. La programmation comme théorie
  3. Les tests comme preuve de théorèmes
  4. Ce qui est important et ce qui ne l'est pas
  5. Dois-je tester des tests


Garanties et probabilités


Je ne discuterai pas pour la centième fois pourquoi des tests sont nécessaires, dans quelle mesure ils aident, documentent, simplifient le processus de développement et de refactorisation, rapprochent les régressions, etc.


Je veux écrire sur la façon de distinguer dans les tests quelque chose de plus qu'une série d'obligations, de nuances techniques et d'exigences de gestion. Pour que les tests ne soient pas des accessoires qui sauvent les structures fragiles d'une destruction immédiate, mais le fondement sur lequel nos programmes reposent fermement et en toute confiance.


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


. . : , , 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, .


, . , , . , , .


, , , .




— , . , , . , . , .


Ainsi, notre «science» métaphorique, c'est-à-dire le code et la «réalité objective», c'est-à-dire les tests, se rapprochent, n'atteignant jamais l'idéal, mais augmentant la probabilité souhaitée.


All Articles