Software Reliability
Reliability berdasakan dictionary.com
The ability to be relied on or depended on, as for accuracy, honesty, or achievement.
Nah, berikut reliability dalam software
Software reliability is the probability of failure-free operation of a computer program for a specified period in a specified environment.
Berdasarkan definisi di atas, reliability tuh kemampuan suatu program buat jalan sesuai spesifikasi dan minim banget kegagalannya. Gampang sih kedengerannya, tapi dalam prakteknya, bikin program yang reliable itu susah banget, terutama untuk program dengan skala besar gitu.
Penasaran ga sih, apa penyebab sistem itu unreliable? Nah, di artikel ini gue pengen ngebahas satu masalah yang paling signifikan yang berpengaruh banget ke reliability, yaitu kompleksitas (complexity). Jadi, kompleksitas di sini mengacu pada tingkat pemahaman kita terhadap sistem tersebut, apakah itu gampang atau susah banget dipahamin.
Biasanya dua pendekatan di bawah ini dilakuin buat ngertiin suatu sistem:
- Testing: Melakukan pengujian secara langsung terhadap sistem tersebut. Pengujian dilakukan secara manual oleh manusia atau menggunakan otomatisasi dengan mesin.
- Informal reasoning: Mencoba mahamin sistem dari dalam dan berharap dapat pemahaman yang akurat.
Gue sebagai programmer, sering banget pake dua pendekatan itu dalam kerjaan sehari-hari. Testing manual itu cara paling cepet sih, tapi kurang akurat buat ngertiin sistem secara keseluruhan. Sebenarnya, kedua pendekatan tersebut memiliki batasan masing-masing:
- Testing: Melakukan pengujian terhadap semua kasus yang mungkin merupakan hal yang tidak mungkin dilakukan. Seperti yang diungkapkan oleh Joe Armstrong dalam presentasinya yang judulnya “The mess we’re in”. Total atom di alam semesta aja ada sekitar 10⁷⁸ x 10⁸² dan dia bilang kalo kita hitung total kombinasi state dari 3 variabel di JavaScript, jumlahnya lebih dari total atom di alam semesta. Dijkstra juga pernah bilang, “testing is hopelessly inadequate… (it) can be used very effectively to show the presence of bugs but never to show their absence.”
- Informal reasoning: ya itu dia, batasannya adalah kita cuman ngerti sebatas itu aja, mungkin kurang tepat, dan bisa aja kita salah.
Dari batasan itu, kita bisa liat kalo informal reasoning itu lebih penting. Kenapa? Karena testing secara kodratnya memiliki batasan, sedangkan informal reasoning itu hal yang pasti jadi bagian proses kerja seorang programmer. Alasan lainnya juga, jika kita melakukan improvement pada informal reasoning, kita dapat mengurangi kesalahan yang terjadi, dan jika kita melakukan improvement pada testing maka akan membantu kita mendeteksi error lebih banyak. Mencegah dan mendeteksi itu beda ya bro. Dalam hal ini, mencegah kesalahan lebih baik daripada mengobatinya, bukan?
Nggak berarti testing itu ga penting, tetep penting sih. Tapi ada yang lebih penting lagi.
Kesederhanaan (simplicity) sangat berpengaruh dalam pendekatan informal reasoning. Jadi, kalo harus memilih investasi antara pengujian dan kesederhanaan, investasi dalam kesederhanaan lebih disarankan. Karena pilihan itu bakal mempengaruhi segala upaya di masa depan buat ngertiin suatu sistem.