Versi yang sangat singkat: tes yang lebih kecil, karena mereka menjalankan bagian yang lebih kecil dari sistem, secara alami membatasi apa yang dapat ditulis oleh programmer, dan karenanya ini menciptakan peluang untuk umpan balik yang lebih tajam (lebih mudah untuk diperhatikan / sulit diabaikan). Izinkan saya menambahkan bahwa ini tidak selalu mengarah ke desain yang lebih baik, tetapi malah menciptakan peluang untuk melihat risiko desain lebih cepat.
Pertama, untuk memperjelas, ketika saya mengatakan "microtest", maksud saya "tes kecil" dan tidak lebih. Saya menggunakan istilah ini karena saya tidak bermaksud "unit test": Saya tidak ingin terlibat dalam perdebatan tentang apa yang merupakan "unit". Saya tidak peduli (setidaknya tidak di sini / sekarang). Dua orang mungkin akan setuju dengan lebih mudah pada "kecil" daripada pada "unit", jadi saya secara bertahap memutuskan untuk mengadopsi "microtest" sebagai istilah standar yang muncul untuk ide ini.
Tes yang lebih besar, tes berarti yang menjalankan bagian sistem yang lebih besar dalam bagian "aksi" mereka, cenderung tidak mengkritik desain sejelas atau selengkap tes yang lebih kecil. Bayangkan himpunan semua basis kode yang dapat lulus kelompok tes tertentu, yang berarti bahwa saya dapat mengatur ulang kode dan masih akan melewati tes tersebut. Untuk tes yang lebih besar, set ini lebih besar; untuk tes yang lebih kecil, set ini lebih kecil. Dengan kata lain, tes yang lebih kecil membatasi desain lebih banyak, sehingga lebih sedikit desain yang dapat membuatnya lulus. Dengan cara ini, microtests dapat lebih banyak mengkritik desain.
Saya mengatakan "lebih keras" untuk menyulap citra seorang teman yang memberi tahu Anda secara langsung apa yang tidak ingin Anda dengar, tetapi perlu didengar, dan siapa yang berteriak pada Anda untuk menyampaikan urgensi sedemikian rupa sehingga orang lain mungkin tidak merasa nyaman perbuatan. Tes terintegrasi, di sisi lain, tetap diam dan hanya mengisyaratkan masalah sebagian besar ketika Anda tidak lagi punya waktu atau energi untuk mengatasinya. Tes terintegrasi membuatnya terlalu mudah untuk menyapu masalah desain di bawah karpet.
Dengan tes yang lebih besar (seperti tes terintegrasi), kebanyakan programmer cenderung mendapat masalah melalui kecerobohan: mereka memiliki cukup kebebasan untuk menulis kode kusut yang entah bagaimana melewati tes, tetapi pemahaman mereka tentang kode itu memudar dengan cepat saat mereka pindah ke tugas berikutnya , dan lainnya mengalami kesulitan yang tidak semestinya membaca desain yang kusut. Di sinilah letak risiko mengandalkan tes terintegrasi. Dengan tes yang lebih kecil (seperti microtests), kebanyakan programmer cenderung mendapat masalah melalui over-spesifikasi: mereka terlalu membatasi tes dengan menambahkan rincian yang tidak relevan, biasanya dengan menyalin / menempel dari tes sebelumnya, dan dengan demikian mereka relatif cepat melukis diri mereka sendiri ke sudut. Kabar baik: Saya merasa jauh lebih mudah dan aman untuk menghapus perincian yang tidak perlu dari tes beberapa jam atau hari setelah saya menulisnya daripada saya menemukannya untuk memisahkan kode produksi yang kusut berbulan-bulan hingga bertahun-tahun setelah saya menulisnya. Semakin banyak kesalahan, menspesifikasikan secara berlebihan menghasilkan kerusakan yang lebih jelas dan lebih cepat, dan programmer lansiran melihat sebelumnya bahwa mereka perlu memperbaiki beberapa hal. Saya menganggap ini sebagai kekuatan: Saya memperhatikan masalah sebelumnya dan memperbaikinya sebelum masalah tersebut mencekik kemampuan kita untuk menambahkan fitur.