[trivial tips] lakukan 1 hal dan lakukan dengan baik



Terkadang paham teori tidak mutlak bisa menerapkanya secara praktek. Entah ini cuma saya atau ada yang lain mengalami kesulitan ini, saat menyusun program saya selalu berusaha untuk menggunakan prinsip do one thing and do it well.


Yang sering terjadi (entah apa ada orang lain selain saya yang mengalami ini) saya malah sering berakhir dengan menulis 1 function yang serba bisa entah kenapa. Akhirnya pada saat debug atau maintain bisa makan waktu lama atau malah 1 bug di perbaiki, muncul bug lainnya. Ini karena ketika kita mendebug function yang serba bisa, 1 aspek di rubah maka yang lain harus ikut di rubah juga, sungguh memakan waktu. Padahal kalau mengikuti prinsip yang di sebutkan tadi, dengan membuat 1 function dengan 1 tujuan itu semua bisa di hindari, karena dengan begitu kita menyembunyikan dan memisahkan detil-detil merepotkan low-level yang harus di urus untuk melakukan 1 tujuan itu, dengan begitu juga ketika akan maintain atau debug (asumsi masalah yang di hadapi cuma 1) perhatian kita akan tertuju pada 1 dan hanya 1 function itu saja yang akan kita utak-atik tanpa mengganggu aspek lainnya di kode.

Nah, mengatasi masalah ini (menghindari dari membuat fungsi serba bisa) saya dapat solusinya ketika menyusun GUI (ngayal sih lebih tepatnya). Bayangkan program yang di rencanakan sudah jadi, bayangkan ketika kita membuka programnya, apa yang akan muncul atau option-option apa yang akan di suguhkan. dari situ selanjutnya, buatlah kode beserta function main dan lain-lainnya TAPI tidak berisi kode yang sebenarnya, isi saja dengan comment-comment tentang rencana apa yang akan terjadi, untuk mempermudah ilustrasi saya beri contoh, kali ini saya membuat tool buat macam-macam :

int main ()
{
    //give option to user, what software can provide
    //read request from user
        //arp spoof
        //detect mac address etc
   
    //do the service as request
   
  }
 begitu kira-kira comment-comment perencanaan yang saya maksud, formatnya tidak ada, ini hanya seperti sebuah abstraksi. Pokoknya yang terpenting comment-comment tersebut mewakili pemikiran kita. Dalam contoh ini saya membayangkan ketika program terbuka ada tersuguhi option-option seperti arp spoof, detect mac address dan lain-lainnya

Dari comment-comment itu kita jadi punya bayangan yang sangat jelas fungsi apa saja yang harus di buat dan hanya akan mengurus 1 hal, yah untuk masing-masing option akan di buatkan function-nya sendiri-sendiri. Bayangkan lagi, dalam contoh ini kita memilih arp spoof, tentunya option-option dari aksi arp spoof seperti mengisi mac address server dan target akan muncul, untuk memenuhi semua itu di buatlah fungsi yang terpisah-pisah seperti :


void do_spoof ()
{
       
    //check ip forward
        //if success, read mac address of victim
        //read mac address of server
        //spoofing
    //else exit and notif user to turn on the forward
}

yah, untuk agar spoof kita berguna, kita harus mengaktifkan fitur ip forward dulu di komputer kita (aksi terakhir dari arp spoof kebanyakan adalah man in the middle makanya kalau tidak aktif akan percuma spoofnya)

jika di cek ternyata aktif, maka program akan meminta alamat mac address server dan target  dan setelah itu program akan melakukan arp spoofing, nah dalam arp spoofing ini program akan melakukan arp reply ke server dan target (yah, sudah sangat jelas kita akan buat function terpisah lagi disini)
dan jika ternyata tidak aktif, program akan keluar dan memberitahu user untuk mengaktifkan fitur ip forwardnya, berangkat dari sini function-function yang akan di buat adalah :


int create_socket ()
{

}

void send_arp (/* target */)
{
   
}

void spoof_victim (/* target */)
{
    //create socket
    //send arp spoof to victim
}

void spoof_server ()
{
    //create socket
    //send arp spoof to server
}

void spoofing ()
{
    // spoof server
   
    // spoof victim
}

int check_forward ()
{

}
 spoof_victim dan spoof_server keliatannya sama tapi tetap saya pisah untuk berjaga-jaga kalau nanti ada apa-apa di kedepannya (sulit jelaskanya bagaimana, ini seperti cuma perasaan saya saja atau insting mungkin).

Fungsi-fungsi yang sudah sangat obvious tidak perlu di beri komentar.

Nah, dari sini setelah selesai merancang gambaran besar dari program, barulah komentar-komentar itu di gantikan dengan kode aslinya, tapi saran saya lebih baik buat file baru dan copas function-function yang di buat tadi dan setelah itu ganti jadi kode asli comment-commentnya

sekian, bahasan kali ini. Mungkin terlihat sangat trivial dan tidak penting tapi karena saya cukup dapat kesulitan untuk menerapkan prinsip do one thing ini, saya berasumsi mungkin di luar sana ada yang senasib dengan saya dan saya hanya berbagi cara saya mengatasi problem ini

sekian.

Komentar