deep-dives

19 posts

Circuit breaker tanpa goroutine, tanpa timer, dan tanpa background overhead

Kebanyakan library circuit breaker memunculkan thread latar belakang untuk memeriksa pemulihan. Anda tidak membutuhkannya. Berikut adalah desain berbasis request yang menghilangkan semua background overhead tanpa mengorbankan correctness.

Setiap circuit breaker produksi yang saya tinjau pada akhirnya memunculkan thread latar belakang. Bisa jadi goroutine Go, Java, atau task tokio Rust. Tugasnya…

Layanan Web Anda Punya Jalur Penutupan yang Anggun. Itulah Bug-nya.

Perangkat lunak crash-only memperlakukan setiap kegagalan sebagai crash dan setiap startup sebagai recovery. Untuk layanan web, ini berarti menghapus logika shutdown Anda dan merancang state yang bertahan meski di-kill -9.

Layanan web Anda punya shutdown handler. Ia melakukan flush buffer, menutup koneksi, menulis checkpoint. Anda mengujinya sekali, mungkin. Di produksi, ia…

Cara Membunuh Mutan yang Bertahan Hidup Ketika Anda Tidak Mengerti Apa yang Diubahnya

Mutation testing menemukan survivor dan Anda sama sekali tidak tahu apa yang dilakukan mutasi tersebut. Berikut adalah metode langkah demi langkah untuk menulis tes yang tepat tanpa harus memahami mutan terlebih dahulu.

Laporan mutation testing Anda penuh dengan survivor, dan setidaknya salah satu dari mereka sama sekali tidak masuk akal bagi Anda. Alat tersebut mengatakan…

Tes Anda Lolos. Skor Mutasi Anda 40%. Inilah yang Sebenarnya Dikatakan oleh Mutan yang Bertahan.

Code coverage mengatakan Anda aman. Mutation testing mengatakan tes Anda sebagian besar hanya dekorasi. Begini cara mutan yang bertahan memperlihatkan celahnya, dan cara menutupnya.

Tes Anda lolos. Laporan coverage Anda menyatakan 87%. Tapi skor mutasi Anda 40%, dan separuh mutan Anda masih hidup. Angka 40% itu bukan berarti kode Anda…

Contract Runtime di Rust Bisa Tanpa Biaya di Release Build, tapi Compiler Tidak Akan Melakukannya untuk Anda

Rust secara otomatis menghapus debug assertion, tetapi design-by-contract yang sesungguhnya membutuhkan lebih dari debug_assert!. Berikut cara membangun runtime contract tanpa biaya yang lenyap dari binary release Anda.

Rust dapat menegakkan runtime contract saat development dan menghapusnya sepenuhnya dari release build. Catatannya, bahasa ini tidak memperlakukan contract…

Nol, Satu, atau Dua Belas: Berapa Banyak Assertion yang Sebenarnya Dibutuhkan oleh Fungsi Produksi

Developer tersebar menyebar assertion seperti confetti atau menghindarinya sepenuhnya. Berikut framework keputusan yang memisahkan invariants yang berguna dari pemicu crash di production.

Sebagian besar codebase produksi termasuk dalam salah satu dari dua kubu. Kubu A memperlakukan sebagai bumbu dekoratif, menaburkannya di setiap baris lain…