Saya mendengar seseorang mengatakan bahwa unit test (mis. NUnit, jUnit, xUnit) seharusnya
(Misalnya, tes unit harus berisi "kode basah" bukan "kode kering")
Apa yang mereka bicarakan?
Saya mendengar seseorang mengatakan bahwa unit test (mis. NUnit, jUnit, xUnit) seharusnya
(Misalnya, tes unit harus berisi "kode basah" bukan "kode kering")
Apa yang mereka bicarakan?
Jawaban:
DAMP dan KERING tidak bertentangan, melainkan menyeimbangkan dua aspek yang berbeda dari pemeliharaan kode . Kode dapat dipertahankan (kode yang mudah diubah) adalah tujuan akhir di sini.
Untuk mempertahankan kode, Anda harus terlebih dahulu memahami kode tersebut. Untuk memahaminya, Anda harus membacanya. Pertimbangkan sejenak berapa banyak waktu yang Anda habiskan untuk membaca kode. Itu banyak. DAMP meningkatkan pemeliharaan dengan mengurangi waktu yang diperlukan untuk membaca dan memahami kode.
Menghapus duplikasi memastikan bahwa setiap konsep dalam sistem memiliki representasi otoritatif tunggal dalam kode. Perubahan ke konsep bisnis tunggal menghasilkan perubahan tunggal pada kode. KERING meningkatkan pemeliharaan dengan mengisolasi perubahan (risiko) hanya pada bagian-bagian sistem yang harus diubah.
Tes sering mengandung duplikasi yang melekat karena mereka menguji hal yang sama berulang-ulang, hanya dengan nilai input yang sedikit berbeda atau kode pengaturan. Namun, tidak seperti kode produksi, duplikasi ini biasanya diisolasi hanya untuk skenario dalam satu fixture / file pengujian. Karena itu, duplikasi ini minimal dan jelas, yang berarti menimbulkan risiko lebih kecil untuk proyek daripada jenis duplikasi lainnya.
Lebih jauh lagi, menghapus duplikasi semacam ini mengurangi keterbacaan tes. Rincian yang sebelumnya digandakan dalam setiap tes sekarang disembunyikan di beberapa metode atau kelas baru. Untuk mendapatkan gambaran lengkap dari tes ini, Anda sekarang harus menyatukan semua bagian ini secara mental.
Oleh karena itu, karena duplikasi kode uji sering membawa risiko lebih kecil, dan meningkatkan keterbacaan, mudah untuk melihat bagaimana itu dianggap dapat diterima.
Sebagai prinsip, pilih DRY dalam kode produksi, pilih DAMP dalam kode uji. Meskipun keduanya sama pentingnya, dengan sedikit kebijaksanaan Anda bisa memberi keseimbangan dalam kebaikan Anda.
DAMP - Ungkapan deskriptif dan bermakna.
"DAMP not DRY" nilai keterbacaan atas penggunaan kembali kode. Gagasan DAMP tidak KERING dalam kasus uji adalah bahwa tes harus mudah dipahami, bahkan jika itu berarti kasus uji terkadang memiliki kode berulang.
Lihat juga Apakah kode duplikat lebih dapat ditoleransi dalam pengujian unit? untuk beberapa diskusi tentang manfaat sudut pandang ini.
Mungkin diciptakan oleh Jay Fields , terkait dengan Bahasa Khusus Domain.
"KERING" adalah "Jangan ulangi dirimu sendiri"
Ini adalah istilah yang digunakan untuk memberitahu orang-orang untuk menulis kode yang dapat digunakan kembali, sehingga Anda tidak berakhir menulis kode yang sama berulang-ulang.
"DAMP" adalah "Frasa Deskriptif dan Bermakna".
Istilah ini dimaksudkan untuk memberi tahu Anda untuk menulis kode yang dapat dengan mudah dipahami oleh seseorang yang melihatnya. Jika Anda mengikuti prinsip ini, Anda akan memiliki nama variabel dan fungsi yang panjang dan deskriptif, dll.
Damp = 'Frasa Deskriptif dan Bermakna' - tes unit Anda harus bisa 'dibaca':
Keterbacaan lebih penting daripada menghindari kode yang berlebihan.
Dari artikel:
DAMP adalah singkatan dari "frase deskriptif dan bermakna" dan merupakan kebalikan dari KERING, tidak dalam arti bahwa "semuanya harus terlihat seperti tumpukan sampah dan tidak mungkin untuk dibaca", karena keterbacaan lebih penting daripada menghindari kode yang berlebihan.
Apa artinya ini dan di mana menggunakannya?
DAMP sebagian besar berlaku saat menulis kode tes. Kode uji harus sangat mudah dipahami sampai-sampai beberapa redundansi dapat diterima.
DAMP adalah singkatan dari "frase deskriptif dan bermakna" dan merupakan kebalikan dari KERING, tidak dalam arti bahwa "semuanya harus terlihat seperti tumpukan sampah dan tidak mungkin untuk dibaca", karena keterbacaan lebih penting daripada menghindari kode yang berlebihan.
Ada beberapa jawaban di sini, tetapi saya ingin menambahkan yang lain karena saya pikir mereka tidak perlu menjelaskannya sebaik mungkin.
Gagasan KERING (Jangan ulangi diri Anda sendiri) adalah bahwa dalam kode aplikasi Anda, Anda ingin menghindari kode yang berlebihan atau berulang. Jika Anda memiliki sesuatu yang perlu dilakukan kode Anda beberapa kali, Anda harus memiliki fungsi atau kelas untuk itu, daripada mengulangi kode yang sama di beberapa tempat.
Ini adalah konsep pemrograman yang cukup terkenal.
DAMP (Frasa Deskriptif dan Berarti) adalah untuk unit test Anda. Idenya di sini adalah bahwa nama metode pengujian unit Anda harus panjang dan deskriptif - kalimat pendek yang menjelaskan apa yang Anda uji.
misalnya: testWhenIAddOneAndOneIShouldGetTwo() { .... }
Ketika Anda membaca nama metode DAMP seperti ini, Anda harus memahami dengan tepat apa yang ingin dicapai oleh penulis tes, tanpa harus membaca kode tes (meskipun kode tes juga dapat mengikuti konsep ini juga tentu saja dengan nama variabel bertele-tele, dll).
Ini dimungkinkan karena metode unit test memiliki input dan output yang sangat spesifik, sehingga prinsip DAMP bekerja dengan baik untuk mereka. Metode dalam kode aplikasi utama Anda kemungkinan tidak cukup spesifik untuk menjamin nama-nama seperti ini, terutama jika Anda telah menuliskannya dengan prinsip KERING.
DAMP dan KERING tidak bertentangan satu sama lain - mereka mencakup aspek yang berbeda tentang bagaimana kode Anda ditulis - tetapi meskipun demikian mereka biasanya tidak digunakan bersama karena metode yang ditulis dengan prinsip KERING dalam pikiran akan menjadi tujuan umum dan tidak mungkin cocok untuk nama metode yang sangat spesifik. Secara umum, seperti dijelaskan di atas, kode aplikasi Anda harus KERING dan kode uji unit Anda DAMP.
Saya harap itu membantu menjelaskannya sedikit lebih baik.
Saya setuju dengan Chris Edwards bahwa Anda perlu mencapai keseimbangan di antara keduanya. Hal lain yang perlu diperhatikan adalah bahwa jika, dalam upaya untuk menghapus duplikasi, Anda akhirnya menambahkan banyak struktur tambahan dalam kode uji unit Anda (yaitu ketika mengambil KERING ke ekstrem), Anda berisiko memperkenalkan bug di sana. Dalam situasi seperti itu, Anda harus menguji unit test unit Anda atau membiarkan bit struktur tidak teruji.
Saya tidak ingin menduplikasi upaya di sini, tetapi Anda dapat memiliki tes yang DAMP tetapi memiliki manfaat KERING. Di sisi lain, tes KERING tidak akan memenuhi tes DAMP dalam beberapa kasus.
Saya sudah membuat blog tentang KERING vs DAMP yang mencakup beberapa contoh.
Tidak ada pendekatan yang harus menjadi satu-satunya solusi Anda, kadang-kadang DAMP berlebihan, kadang-kadang tambahan yang sangat bagus.
Sebagai aturan umum, Anda harus menerapkan aturan tiga. Jika Anda menemukan duplikasi untuk ketiga kalinya, mungkin ada baiknya Anda memeriksa tes gaya DAMP, tetapi meskipun demikian tidak semua duplikasi itu buruk . Konteks penting.