Memperbanyak Assert

Dalam pembuatan program, programmer sering kehilangan detail apa yang terjadi di bagian kode tertentu. Terutama kalau program yang dibuat terdiri dari ribuan baris kode.Lebih parah lagi, jika kode tersebut sudah lama tidak disentuh.  Dan ketika bug ditemukan , programmer akan mencari cara untuk memperbaiki bug tersebut dengan melakukan debugging ke kode yang diduga sebagai penyebab. Waktu penyelesaian tentu tergantung seberapa sulit bug tersebut. Usaha “mencari” solusi dengan debugging ini bisa di minimalkan jika kita memasang banyak ASSERT di kode. Contoh : void DataSender::Init(std::string filename)    {       std::ifstream config_file(filename, std::ios::in | std::ios::binary | std::ios::ate);       assert( config_file.is_open() ) ;       // do something       // …       // … } jika file config tidak bisa di buka, assertion failed akan terjadi , dan programmer/user akan segera tau. Skenario yang terjadi jika kode diatas tanpa ASSERT : suatu saat path file diubah, dan file tidak bisa dibuka. akibatnya akan ada masalah dengan class DataSender, jika berungtung program akan crash, dan programmer dapat crash/ stack trace, jika tidak kemungkinan DataSender akan tetap berjalan tapi data tidak terkirim. Programmer akan mencari dengan banyak dugaan penyebab: apa jaringan internet lagi down?, apa library networknya bermasalah?, apa pemakai class DataSender? apa terkirim tapi ada delay ?. banyak yang harus dijawab . arghhh. dari contoh ini, assert bisa menghemat waktu :). assert akan dihilangkan di-release version , jika assert ingin dipakai di release version lebih baik memakai preprocessor untuk menggantikannya. disini ASSERT diganti dengan std::exception failed :p .

#ifdef NDEBUG // release      #ifdef REAL_RELEASE           #define MY_ASSERT(x)      #else           #define MY_ASSERT(x) if(!x) std::throw std::exception(“assertion failed”);      #endif #else          // debug      #define MY_ASSERT(x) assert(x) #endif

btw, hati-hati dengan kode semacam ini :

ASSERT( very_important_function() ) ;

:)

comments powered by Disqus