DEFENSIVE
PROGRAMMING
Sharing Session for
Developer Improvement
And Better Code Quality
By Freddy Munandar
Defensive Programming
• Suatu teknik pemograman untuk menjamin suatu fungsi
berjalan dengan sesuai dari pemakaian yang tidak
terduga
• Teknik pemograman yang digunakan terutama ketika
software bisa saja disalah gunakan oleh orang-orang
yang memiliki tujuan merusak atau merugikan
• Suatu pendekatan atau cara untuk meningkatkan kualitas
software dengan membuat software yang bisa diprediksi
meskipun masukan/input dari user tidak terduga
The Idea of Defensive Programming
• Aplikasi harus berperilaku dengan cara yang konsisten
dan dapat diprediksi bahkan dalam kasus kondisi tak
terduga
Pros: Defensive Programming
• Bertahan dari sesuatu yang tidak mungkin, karena
sesuatu yang tidak mungkin tetap bisa saja terjadi (e.g. in
programming context)
• Mencoba sebisa mungkin untuk melakukan atau
memberikan respon suatu hal yang benar (tidak crash)
ketika suatu input atau data yang digunakan tidak sesuai
(e.g. Divide by zero error, showing message, or make the
divider to one)
Cons: Defensive Programming
• Mengapa bertahan dari sesuatu yang tidak mungkin jika
itu tidak mungkin?
• Counter1: Sesuatu hal yang tidak mungkin menjadi
mungkin ketika ada orang baru dalam team, dan ketika
maintenance code
• Counter2: Manusia membuat segalanya mungkin ketika
membuat kesalahan
• Menambah jumlah baris code (Fat Code) dan sulit untuk
diubah
• Counter3: Gunakan prinsip DRY atau Refactoring untuk
memecah function yang besar
Strategi (checklist)
• Jangan pernah percaya input data dari user atau dari
eksternal atau bahkan dari internal (e.g. Database
with field contain NULL), harus selalu divalidasi
• Tidak peduli seberapa mungkin, berusaha keraslah
untuk mencegahnya (Preventive Logic)
• Jangan ber-asumsi jika suatu input atau parameter sudah
divalidasi di proses sebelumnya, selalu lakukan checking
ulang
• Fail early, cleanly, and openly - menyatakan apa yang
terjadi, di mana dan bagaimana memperbaikinya
~ DEMO ~
Referensi
• http://geekswithblogs.net/sdorman/archive/2008/07/04/wh
at-is-ldquodefensive-programmingrdquo.aspx
• http://c2.com/cgi/wiki?DefensiveProgramming

Defensive Programming

  • 1.
    DEFENSIVE PROGRAMMING Sharing Session for DeveloperImprovement And Better Code Quality By Freddy Munandar
  • 2.
    Defensive Programming • Suatuteknik pemograman untuk menjamin suatu fungsi berjalan dengan sesuai dari pemakaian yang tidak terduga • Teknik pemograman yang digunakan terutama ketika software bisa saja disalah gunakan oleh orang-orang yang memiliki tujuan merusak atau merugikan • Suatu pendekatan atau cara untuk meningkatkan kualitas software dengan membuat software yang bisa diprediksi meskipun masukan/input dari user tidak terduga
  • 3.
    The Idea ofDefensive Programming • Aplikasi harus berperilaku dengan cara yang konsisten dan dapat diprediksi bahkan dalam kasus kondisi tak terduga
  • 4.
    Pros: Defensive Programming •Bertahan dari sesuatu yang tidak mungkin, karena sesuatu yang tidak mungkin tetap bisa saja terjadi (e.g. in programming context) • Mencoba sebisa mungkin untuk melakukan atau memberikan respon suatu hal yang benar (tidak crash) ketika suatu input atau data yang digunakan tidak sesuai (e.g. Divide by zero error, showing message, or make the divider to one)
  • 5.
    Cons: Defensive Programming •Mengapa bertahan dari sesuatu yang tidak mungkin jika itu tidak mungkin? • Counter1: Sesuatu hal yang tidak mungkin menjadi mungkin ketika ada orang baru dalam team, dan ketika maintenance code • Counter2: Manusia membuat segalanya mungkin ketika membuat kesalahan • Menambah jumlah baris code (Fat Code) dan sulit untuk diubah • Counter3: Gunakan prinsip DRY atau Refactoring untuk memecah function yang besar
  • 6.
    Strategi (checklist) • Janganpernah percaya input data dari user atau dari eksternal atau bahkan dari internal (e.g. Database with field contain NULL), harus selalu divalidasi • Tidak peduli seberapa mungkin, berusaha keraslah untuk mencegahnya (Preventive Logic) • Jangan ber-asumsi jika suatu input atau parameter sudah divalidasi di proses sebelumnya, selalu lakukan checking ulang • Fail early, cleanly, and openly - menyatakan apa yang terjadi, di mana dan bagaimana memperbaikinya
  • 7.
  • 8.