Teste de unidade, ciências e matemática


Prefácio


O teste de unidade é comumente usado. Parece que ninguém pode ficar sem ele, todos escrevem testes e sua ausência em qualquer projeto sério causa, pelo menos, mal-entendidos. No entanto, muitos percebem o teste como um ritual realizado para não irritar o “deus da programação”. Tipo, é necessário . Por quê? Porque .


Vou dizer coisas assustadoras.


Não importa o que levar como unidade de teste. Não importa como os testes são agrupados. Não importa se eles foram escritos antes ou depois do código. TDD ou não TDD? Não importa. Parte da cobertura? Não dê a mínima. Afinal, pode não haver nenhum teste. Tudo isso é completamente irrelevante. É importante que os requisitos de software sejam atendidos.


Os testes de unidade não são um ritual, mas uma boa ferramenta de trabalho, permitindo que você se aproxime de atender a esses requisitos. E essa ferramenta precisa ser capaz de usar corretamente.


Espere, de onde vem a ciência com a matemática?


Conteúdo



  1. Garantias e Probabilidades
  2. Programação como teoria
  3. Teste como prova de teoremas
  4. O que é importante e o que não é
  5. Preciso testar testes


Garantias e Probabilidades


Não discutirei pela centésima vez por que os testes são necessários, o quanto eles ajudam, documentam, simplificam o processo de desenvolvimento e refatoração, regressões fechadas etc.


Quero escrever sobre como distinguir nos testes algo mais do que uma série de obrigações, nuances técnicas e requisitos de gerenciamento. Para que os testes não sejam adereços que salvem estruturas instáveis ​​da destruição imediata, mas a base sobre a qual nossos programas permanecem firmes e confiantes.


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


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


, . , , . , , .


, , , .




— , . , , . , . , .


Assim, nossa "ciência" metafórica, isto é, código e "realidade objetiva", isto é, testes, se movem um para o outro, nunca alcançando o ideal, mas aumentando a probabilidade desejada.


All Articles