Mengenal Design by Contract (DbC)
Pada salah satu segment di Bab IV 'Pragmatic Paranoia' terdapat sub bab Design by Contract (DbC). Konsep ini menarik bagi saya yang seringkali ingin melakukan tindakan strict/tegas terhadap suatu aturan jalannya program. Pada tulisan ini saya mencoba menjelaskan apa itu design by contract dan memberikan contohnya menggunakan bahasa pemrograman Java dan Python3. Perlu diingat bahwa design by contract sendiri lebih jelas tereksplisit menggunakan bahasa pemrograman Eifel, tetapi saya tidak menggunakannya karena masa trial Eifel IDE saya habis.
Design by Contract (DbC) merupakan metode yang simpel tapi sangat powerfull. DbC berfokus pada dokumentasi hak dan kewajiban modul-modul dalam program dalam hal memastikan program berjalan dengan sesuai dan benar. Contract menjelaskan apa saja kebutuhan secara eksplisit dibandingkan implisit, semisalnya kebutuhan nilai tidak boleh kurang dari 0 dsbnya.
Komponen Design by Contract (DbC)
Konsep DbC menekankan bahwa setiap fungsi atau method pada sebuah program sebelum melakukan prosess utama dari fungsi atau metode tersebut, hendaknya melakukan suatu hal (something) terlebih dahulu. Betrand Meyer pada bahasa pemrograman Eiffel menjabarkan komponen dalam penyusun DBC sebagai berikut:
Preconditions
Postconditions
Class invariants
Kelebihan dan Kekurangan Menggunakan
Tidak ada sistem yang sempurna begitu pula dengan konsep DbC ini. Jika kita menyadari ada beberapa yang menurut kita sangat aneh dan mungkin kedepannya bisa menjadi terlalu boiler-plate. Menurut beberapa sumber berikut kelebihan dan kekurangan dari konsep DbC ini:
Kelebihan
1. Deteksi issue secara dini
Adanya komponen-komponen pada DbC utamanya komponen pre-conditions mampu mendeteksi issue-issue yang akan muncul karena adanya kesalahan parameter saat dikirim ke dalam sistem.
2. Meningkatkan dokumentasi dari kode
Adanya komponen pada DbC secara tidak langsung memperjalas apa saja yang menjadi batasan, kontrak, informasi hasil, dan kebutuhan pada sistem yang dibuat. Mempermudah juga ketika program akan berkomunikasi (dijadikan API) ke sistem / program lain.
3. Mempermudah kode dibaca secara sudut pandang manusia
Bagi programmer yang terbiasa membaca kode secara runut adanya komponen semisal preconditions mampu mempermudah pemahaman bagaimana kode membutuhkan apa. Postcondition juga mempermudah kita mengetahui seperti apa output yang akan dihasilkan. Begitu pula invariants bisa memberi pemahaman apa saja yang seharusnya sistem jaga ketika suatu fungsi / metode dipanggil.
Kekurangan
1. Runtime overhead
Melakukan cek pada setiap komponen DbC ketika program berjalan akan mempengaruhi performance jauh lebih lambat, apalagi ketika fungsi / method itu dalam keadaan load yang tinggi. Walaupun demikian, dimasa sekarang banyak cara untuk mengatasi masalah ini.
2. Effort lebih ketika development
Membuat dan maintenance program yang menggunakan DbC bisa menambah effort yang signifikan ketika masa pengembangan software. Termasuk mengecheck komponen-komponen yang dibuat untuk DbC sesuai atau tidaknya.
Contoh Program
Contoh DbC menggunakan bahasa pemrograman Java
Contoh DbC menggunakan bahasa pemrograman Python
Kurang lebih seperti itu untuk contoh pengaplikasiannya. Dalam beberapa contoh ada yang menggunakan library pihak ke-3 seperti iContract, JML, dsbnya. Tidak menutup kemungkinan contoh yang saya buat kurang tepat karena menggunakan exception dibandingkan assertion.
Kesimpulan
Sumber:
- https://wiki.c2.com/?DesignByContract diakses 25-Desember-2023
- Hunt Andrew, Thomas David. The pragmatic programmer
- https://objectcomputing.com/resources/publications/sett/september-2011-design-by-contract-in-java-with-google di akses 24-Desember-2023
Apabila ada kesalahan dalam penulisan ini mohon diberitahu agar bisa saya perbaiki. Semoga bermanfaat.
Posting Komentar untuk "Design By Contract (DbC)"
Berilah komentar, saran, dan kritik dengan bijak