Why Does Software Have Bugs?

Beberapa hari yang lalu, teman saya – seorang sistem analis, mengeluh karena program yang dia dapat dari programmer memiliki banyak bug. Saking asyiknya menyusuri bug satu persatu, dia mulai ganti profesi jadi seorang bug hunter. Berbicara mengenai testing dan implementasi sistem. Ada salah satu bagian yang bikin mengena banget. “why does software have bugs?”. Pertanyaan yang susah atau gampang buat dijawab. Setiap orang mempunyai sudut pandang tersendiri dalam menjawab pertanyaan ini.

Jadi inget jaman kuliah S1 dulu, kalo bikin program di lab, pasti selalu aja ngomongin logika. Harus begini lah, harus begitu lah. Padahal yang ngajarin blom tentu tahu logika programmnya. Nah lho?¬† Kebanyakan pengajar di lab selalu menggunakan logika dari senior/ pengajar sebelumnya, terlepas logika tersebut bagus atau enggak, efektif dalam penggunaan memori atau tidak, ‘bersih’ atau enggak, atau segudang parameter lainnya. Saya menamakan istilah ini dengan nama ‘Derivatif Logic’. Yup, logika turunan dari senior ke junior. Hihihi.

Saya lebih menyukai tutor yang menjelaskan mengenai konsep programming, basic logic yang umum digunakan dan struktur data. Dengan begitu saya bisa bebas menggunakan cara saya dalam membuat program, tentunya dengan memperhatikan logika dan struktur data yang baik. Ternyata yang baik menurut saya, belum tentu baik menurut orang lain. Pernah ketika saya membuat sistem network monitoring menggunakan JAVA, dimana teman saya seenaknya menghapus 15 baris menjadi 7 baris program. Udah gitu program yang saya buat masih menyisakan beberapa bug dan celah keamanan.

Berikut ini adalah beberapa situasi dan kondisi  yang menyebabkan suatu software masih meninggalkan bug.
1. Miscommunication or no Communication
Terkadang programmer dengan user suka gak nyambung. Susahnya programmer adalah ketika mereka mulai berhadapan dengan user. Memahami apa yang diinginkan user adalah kunci utama keberhasilan seorang programmer. Nggak jarang hasil dari coding mengalami perubahan sesudahnya dan bahkan yang lebih parah tidak sesuai dengan kemauan si user. Programmer adalah seorang implementor yang mendapatkan segalanya dari seorang sistem analis. Kalo dari awalnya sistem analis sudah susah mendapatkan user requirement yang lengkap untuk mendevelop suatu sistem, sudah dapat dipastikan hasil yang diharapkan juga jauh dari harapan user.

2. Software Complexity
Kompleksitas perangkat lunak yang dibuat menjadi kesulitan tersendiri ketika programmer tidak mengetahui mengenai software-software terbaru yang digunakan saat ini. Baik itu yang berhubungan dengan Multi-tiered applications, client-server, distributed applications, data communications, enormous relational databases, dan juga ukuran dari aplikasi yang berkontribusi dalam menciptakan kompleksitas perangkat lunak.

3. Programming Error
Namanya juga manusia yang tidak pernah luput dari kesalahan. Mungkin saja ketika sedang asik-asiknya ngoding, ada temen yang gangguin, trus jadi lupa deh. Atau ketika hampir deadline, seseorng yang jauh di sana bawaannya ngajakin ribut mulu. Ups.. jadi cerita pengalaman pribadi. Intinya satu: fokus!

4. Changing Reqirement
Emang bikin bete kalo tiba-tiba ada perubahan dari user, padahal perubahan tersebut dapat mengakibatkan efek ‘reschedule’ dan ‘redone’ terhadap sistem atau aplikasi yang dibuat.

5. Time Pressures
Bekerja di bawah tekanan juga bisa mengakibatkan seorang programmer membuat kesalahan. Deadline yang mepet, waktu kerja yang terbatas, fasilitas yang tidak memadai. Pantes aja banyak perusahaan ‘software house’ yang dalam persyaratan requirementnya suka menyebutkan “mampu bekerja di bawah tekanan”. Hahaha

6. Egos
Manusiawi kalo manusia mempunyai rasa egois. Tapi egois yang berlebihan dan menganggap remeh suatu pekerjaan, bukan hal yang tidak mungkin menuju suatu kegagalan. Banyak programmer yang merasa jago atau mungkin juga mereka melakukan itu supaya tidak dianggap remeh. “I can whip that out in a few hours” dibandingkan dengan “I can’t estimate how long it will take”.

7. Poorly Documented Code
Untuk hal yang satu ini biasanya lebih kepada pengembangan suatu software yang ada. Bayangkan jika kita harus megembangkan ulang suatu software dimana programmer sebelumnya tidak membuat suatu dokumentasi yang baik. Di beberapa perusahaan banyak yang tidak menyediakan insentif untuk programmer untuk mendokumentasikan source code mereka dengan rapih, dapat dimengerti dan ‘maintainable code’. Mungkin banyak diantara programmer yang memandang ‘if it was hard to write, it should be hard to read’. Disini pentingnya seorang Technical Writer yang membantu seorang programmer dalam mendokumentasikan pekerjaannya.

Leave a Reply