1.5 Konsep Dasar Bug
Dalam dunia pengembangan perangkat lunak, bug adalah istilah yang digunakan untuk menyebut kesalahan atau gangguan dalam sistem yang menyebabkan aplikasi tidak berjalan sebagaimana mestinya. Bentuk bug bisa bermacam-macam, seperti perhitungan yang salah, tampilan antarmuka (UI) yang kacau, tombol yang tidak merespons, hingga aplikasi yang tiba-tiba tertutup atau crash.
Bug merupakan hal yang wajar terjadi dalam proses pembuatan perangkat lunak. Bahkan perusahaan besar seperti Google, Microsoft, dan Apple pun tidak luput dari bug dalam produk mereka. Ini bisa dipahami karena perangkat lunak masa kini sangat kompleks, terdiri dari jutaan baris kode, dikembangkan oleh banyak tim, dan digunakan di berbagai jenis perangkat serta sistem operasi. Ditambah lagi, perilaku pengguna pun sangat beragam, sehingga kemungkinan terjadinya kesalahan makin besar.
Beberapa penyebab umum munculnya bug antara lain:
- Kesalahan logika dalam kode, misalnya salah rumus.
- Ketidaksesuaian pemahaman antara tim bisnis dan tim teknis dalam menerjemahkan kebutuhan pengguna.
- Integrasi yang gagal antara komponen, modul, atau sistem eksternal.
- Masalah pada data, seperti input tidak valid atau format data salah.
- Perbedaan lingkungan, misalnya aplikasi berjalan baik di Android versi tertentu tetapi gagal di versi lain.
Di era digital saat ini, hampir semua aspek kehidupan bergantung pada perangkat lunak: dari layanan perbankan, belanja online, transportasi daring, hingga pendidikan dan hiburan. Karena itu, menjaga kualitas aplikasi menjadi sangat penting agar pengguna merasa nyaman dan aman. Di sinilah peran QA (Quality Assurance) menjadi krusial.
Salah satu tugas utama QA adalah menemukan dan mencatat bug secara sistematis. QA tidak sekadar mencari kesalahan, tapi juga memastikan bug tersebut benar-benar berdampak, mudah direproduksi, dan dilaporkan dengan jelas agar bisa segera diperbaiki oleh developer. Memahami apa itu bug dan dari mana asalnya menjadi langkah awal yang penting sebelum mempelajari tentang jenis pengujian, menulis laporan bug yang efektif, serta bagaimana menangani defect dalam proses pengembangan perangkat lunak secara profesional.
Untuk membuka pembelajaran pada topik ini, berikut beberapa pertanyaan awal yang dapat membantu Digiers melihat gambaran besarnya.
Pernahkah Digiers menggunakan aplikasi yang tiba-tiba berhenti bekerja atau menampilkan hasil yang aneh?
Menurut Digiers, apa yang menyebabkan bug bisa muncul dalam suatu aplikasi?
Kenapa penting bagi tim QA untuk menemukan bug sebelum produk dirilis ke publik?
Selain itu, sebelum kita masuk ke materi, yuk kenali dulu apa saja yang akan Digiers capai di akhir pembelajaran topik ini. Memahami tujuan pembelajaran membantu proses belajar menjadi lebih fokus dan terarah.
- Mengidentifikasi perbedaan bug, error, defect, dan failure saat proses pengujian perangkat lunak.
- Menganalisis dampak bug terhadap user experience dan cost impact pada pengembangan perangkat lunak.
- Menganalisis penyebab kegagalan proses checkout di platform e-commerce dan kegagalan payment di platform fintech.
Subtopik 1.5.1 Definisi Bug, Error, Defect dan Failure
Dalam proses pengembangan perangkat lunak, kita sering mendengar istilah seperti bug, error, defect, dan failure. Meskipun sering digunakan secara bergantian, sebenarnya istilah-istilah ini memiliki arti yang berbeda. Memahami perbedaan maknanya sangat penting, terutama bagi tim QA (Quality Assurance), agar komunikasi antar anggota tim lebih jelas dan proses pelaporan serta penelusuran masalah menjadi lebih efektif.
1. Error
Error adalah kesalahan yang dilakukan oleh manusia, biasanya oleh developer atau engineer, ketika menulis, memahami, atau mengimplementasikan kode. Kesalahan ini bisa berupa salah rumus, logika program yang keliru, atau salah memahami kebutuhan sistem. Error bersifat internal dan sering kali belum langsung terlihat sampai aplikasi dijalankan atau diuji.
Contoh: Developer salah menuliskan operator matematika, misalnya menggunakan + (penjumlahan) padahal seharusnya - (pengurangan). Error adalah akar dari hampir semua masalah dalam pengembangan perangkat lunak. Satu error kecil bisa memicu rangkaian bug yang kompleks.
Ciri-ciri Error:
● Terjadi sebelum software dijalankan.
● Sering ditemukan saat coding, code review, atau static analysis.
● Bisa menyebabkan defect atau fault bila tidak ditangani.
2. Defect
Defect adalah ketidaksesuaian antara apa yang diharapkan (requirement) dengan apa yang benar-benar terjadi di aplikasi. Defect biasanya ditemukan saat tahap pengujian (testing), dan merupakan hasil nyata dari error yang dilakukan di tahap pengembangan.
Contoh: Aplikasi e-commerce seharusnya memberikan diskon 10% saat checkout, namun ternyata hanya memberikan 5%, ini adalah defect karena output tidak sesuai spesifikasi. Dalam siklus pengembangan perangkat lunak, defect sangat penting untuk dicatat dan dilaporkan karena dapat mengganggu fungsionalitas sistem.
Ciri-ciri Defect:
● Ditemukan oleh QA/tester saat pengujian.
● Bisa jadi tidak terlihat oleh end-user.
● Harus dilacak dan dicatat dalam defect tracking system seperti Jira, TestRail, dll.
3. Bug
Bug adalah istilah umum yang digunakan untuk menyebut segala bentuk kesalahan atau cacat dalam sistem perangkat lunak. Bug bisa disebabkan oleh error, defect, fault, atau gabungan dari semuanya. Dalam percakapan sehari-hari di dunia QA dan developer, “bug” adalah istilah yang paling lazim digunakan untuk menyebut masalah dalam aplikasi.
Contoh: Tombol "Login" tidak berfungsi saat ditekan, meskipun UI terlihat normal. Ini disebut sebagai bug. Bug bisa muncul karena kesalahan logika, kesalahan validasi, masalah integrasi antar sistem, hingga kesalahan UI/UX.
Ciri-ciri Bug:
● Umumnya muncul saat pengujian atau saat aplikasi sudah digunakan publik.
● Bisa bersifat fungsional (functionality), visual (UI), performa, atau kompatibilitas.
● Harus direplikasi dan didokumentasikan dengan baik agar bisa diperbaiki.
4. Failure
Failure adalah kondisi ketika software tidak dapat menjalankan fungsinya dalam lingkungan nyata, atau dengan kata lain, kegagalan sistem yang terlihat oleh pengguna akhir (end-user). Failure biasanya terjadi karena defect yang tidak ditemukan atau tidak diperbaiki selama proses pengujian.
Contoh: Pengguna melakukan checkout, tetapi setelah pembayaran, aplikasi hanya menampilkan halaman kosong dan tidak ada konfirmasi transaksi. Pengguna tidak tahu apakah transaksi berhasil atau tidak. Failure memiliki dampak paling besar karena langsung menyentuh pengguna dan bisnis. Ia bisa menyebabkan kerugian finansial, kehilangan reputasi, bahkan menyebabkan pelanggaran hukum (misalnya jika menyangkut data pribadi).
Ciri-ciri Failure:
● Terjadi saat aplikasi sudah live di lingkungan produksi.
● Dirasakan langsung oleh pengguna akhir.
● Harus ditangani cepat (hotfix) karena berpotensi merusak kepercayaan.
Dengan memahami alur ini, mulai dari error manusia, menjadi defect dalam sistem, lalu muncul sebagai bug yang ditemukan selama pengujian, dan akhirnya menyebabkan failure di lapangan, kita bisa mengidentifikasi dimana celahnya terjadi, siapa yang perlu dilibatkan, dan bagaimana cara mencegahnya di masa mendatang.
Perbedaan Error, Defect, dan Failure
Dalam proses pengembangan perangkat lunak, sebuah kesalahan kecil yang dilakukan di tahap awal bisa berdampak besar saat produk digunakan oleh pengguna. Gambar berikut menggambarkan tahapan terjadinya failure dalam pengembangan perangkat lunak yang dimulai dari:
1. Error, terjadi akibat kesalahan yang dilakukan oleh manusia, seperti developer atau programmer.
2. Dari error kemudian berkembang menjadi bug (defect/fault).
3. Hingga akhirnya, memicu terjadinya failure saat sistem dijalankan.
Gambar 1.5.1 Perbedaan Error, Defect, Failure
Untuk memahami lebih dalam mengenai perbedaan antara error, defect, dan failure, berikut ini adalah ringkasan yang dapat membantu kamu mengenali bagaimana kesalahan bisa muncul, terdeteksi, dan berdampak pada pengguna akhir.
Istilah |
Definisi |
Kapan Terjadi |
Siapa yang Biasanya Menemukan |
Contoh |
Error |
Kesalahan manusia dalam menulis kode, logika, atau dokumentasi yang menyebabkan program tidak bekerja sebagaimana mestinya. |
Saat proses pengembangan, khususnya ketika developer menulis atau memahami kode. |
Developer (umumnya saat coding atau review awal). |
Salah tanda kurung atau operator dalam perhitungan. |
Defect |
Ketidaksesuaian antara output aktual dengan output yang diharapkan sesuai dengan requirement atau spesifikasi. |
Setelah sistem diuji dan hasil yang diberikan tidak sesuai dengan requirement. |
QA Engineer atau stakeholder selama verifikasi hasil. |
Sistem menampilkan diskon 5% padahal seharusnya 10% sesuai requirement. |
Failure |
Kondisi ketika perangkat lunak tidak menjalankan fungsinya dalam lingkungan nyata seperti yang diharapkan oleh pengguna. |
Saat software digunakan di lingkungan produksi dan terjadi perilaku yang tidak sesuai fungsi yang seharusnya. |
Pengguna akhir (end-user) atau tim support saat aplikasi live di lingkungan nyata. |
Aplikasi e-commerce tidak bisa menyelesaikan pembayaran padahal semua input benar. |
Tabel 1.5.1 Perbedaan Error, Defect, Failure
Mengapa Memahami Perbedaan Ini Penting?
Setiap istilah error, defect, dan failure memiliki posisi khusus dalam Software Testing Life Cycle (STLC):
● Error terjadi sebelum pengujian dimulai (pada fase requirement, desain, atau implementasi).
● Defect diidentifikasi selama proses pengujian.
● Bug report adalah alat komunikasi untuk mendeskripsikan defect secara sistematis.
● Failure ditemukan saat pengujian acceptance, beta testing, atau ketika sistem sudah di lingkungan produksi.
Dengan memahami jalur dari error → defect → bug → failure, tim bisa mengetahui di mana masalah terjadi, siapa yang perlu dilibatkan, dan bagaimana cara mencegahnya agar tidak terulang.
- Severity adalah ukuran tentang seberapa parah dampak suatu bug terhadap fungsionalitas sistem. Semakin besar pengaruh bug terhadap jalannya sistem utama, maka semakin tinggi severity-nya. Fokus severity adalah: "Seberapa rusak sistem karena bug ini?". Severity biasanya ditentukan oleh QA atau tester, berdasarkan pemahaman terhadap fungsionalitas dan requirement aplikasi.
- Priority menunjukkan tingkat urgensi penanganan bug, yaitu seberapa cepat bug harus diperbaiki dibandingkan bug lainnya. Fokus priority adalah: "Seberapa cepat masalah ini harus diselesaikan?". Priority biasanya ditentukan oleh Product Owner, Project Manager, atau Lead Developer, dengan mempertimbangkan: deadline release, dampak ke user bisnis, dan tingkat visibilitas bug di produksi.
Di era digital saat ini, perangkat lunak digunakan dalam hampir semua aspek kehidupan, mulai dari belanja online, layanan keuangan, hingga pendidikan. Oleh karena itu, menjaga kualitas aplikasi menjadi sangat penting. Dengan memahami perbedaan error, defect, bug, dan failure, serta cara mengelola setiap masalah berdasarkan tingkat severity dan priority-nya, tim QA dan developer bisa bekerja lebih efektif dalam menciptakan perangkat lunak yang andal dan berkualitas.
Studi Kasus: Bug di Platform E-Commerce
Pada akhir tahun 2014, banyak pengguna marketplace Amazon menemukan barang-barang mahal, termasuk gadget dan perangkat elektronik yang dijual hanya dengan harga $0.01 (satu sen). Masalah ini terjadi karena adanya bug pada sistem diskon otomatis yang sebenarnya dirancang untuk uji coba penjual (merchant). Bug ini tidak terdeteksi selama pengujian, karena QA hanya melakukan pengujian pada akun pengguna biasa tanpa mencakup pengujian dengan peran penjual. Akibatnya, skenario penting tidak diuji secara menyeluruh.
Masalah utama terletak pada defect dalam business rule, di mana sistem diskon tidak memvalidasi kombinasi antara harga asli dan nilai minimum diskon. Developer menulis aturan diskon yang mengabaikan validasi jika input berasal dari penjual dengan level tertentu. Hal ini menimbulkan failure nyata saat merchant secara tidak sengaja atau sengaja mengaktifkan diskon ekstrem tanpa tanpa batas harga minimum, yang menyebabkan kerugian besar saat transaksi benar-benar terjadi.
Dari sudut pandang QA, kasus ini adalah contoh kegagalan dalam memvalidasi kebutuhan (requirement validation) dan kurangnya cakupan pengujian (test coverage). Bug ini bisa dicegah jika QA menyusun test case yang mencakup skenario ekstrem pada sistem penjual. Bug bisnis seperti ini tidak terlihat sebagai error teknis, tetapi sangat berbahaya secara operasional.
Dampak dari bug ini bukan hanya pada sisi kerugian perusahaan, tetapi juga menyangkut kepercayaan pengguna, reputasi merek, dan kompleksitas refund logistik yang terjadi setelahnya.
Pembelajaran dari kasus ini: pengujian terhadap bisnis logic tidak boleh diabaikan, terutama untuk sistem yang berkaitan langsung dengan transaksi, keuangan, atau harga jual.