Pengujian unit, sains dan matematika


Kata pengantar


Unit testing biasa digunakan. Tampaknya tidak ada yang bisa melakukannya tanpanya, semua orang menulis tes, dan ketidakhadiran mereka dalam proyek serius menyebabkan, setidaknya, kesalahpahaman. Namun, banyak yang menganggap pengujian sebagai ritual dilakukan agar tidak membuat marah "dewa pemrograman". Seperti, itu perlu . Mengapa? Karena .


Saya akan mengatakan hal-hal yang menakutkan.


Tidak masalah apa yang harus diambil sebagai unit pengujian. Tidak masalah bagaimana tes dikelompokkan. Tidak masalah apakah itu ditulis sebelum atau setelah kode. TDD atau tidak TDD? Tidak apa-apa. Bagikan liputan? Jangan peduli. Bagaimanapun, mungkin tidak ada tes sama sekali. Semua ini sama sekali tidak relevan. Penting agar persyaratan perangkat lunak dipenuhi.


Tes unit bukan ritual, tetapi alat yang bagus dan berfungsi, memungkinkan Anda untuk lebih dekat dalam memenuhi persyaratan ini. Dan alat ini harus dapat digunakan dengan benar.


Tunggu, di mana ilmu pengetahuan dengan matematika masuk?


Kandungan



  1. Jaminan dan Kemungkinan
  2. Pemrograman sebagai teori
  3. Pengujian sebagai bukti teorema
  4. Apa yang penting dan apa yang tidak
  5. Apakah saya perlu menguji tes


Jaminan dan Kemungkinan


Saya tidak akan membahas untuk kesekian kalinya mengapa tes diperlukan, seberapa banyak mereka membantu, mendokumentasikan, menyederhanakan pengembangan dan proses refactoring, menutup regresi, dll.


Saya ingin menulis tentang bagaimana melakukan pengujian lebih dari serangkaian kewajiban, nuansa teknis, dan persyaratan manajemen. Sehingga tes tersebut bukan alat peraga yang menyelamatkan struktur yang goyah dari kehancuran langsung, tetapi fondasi di mana program kami berdiri dengan kuat dan percaya diri.


, โ€” . โ€” . โ€” . , , , , .


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


, . , , . , , .


, , , .




โ€” , . , , . , . , .


Dengan demikian, "ilmu" metaforis kita, yaitu, kode, dan "realitas objektif", yaitu, menguji, bergerak menuju satu sama lain, tidak pernah mencapai yang ideal, tetapi meningkatkan probabilitas yang diinginkan.


All Articles