Bug perangkat lunak adalah kesalahan dalam kode yang digunakan untuk membuat program komputer. Bug dapat menyebabkan berbagai macam masalah yang berbeda tergantung pada jenis program dan jenis bug tertentu yang terlibat. Misalnya, beberapa bug dapat menyebabkan program macet dan berhenti bekerja. Lainnya berpotensi menyebabkan kesalahan dalam kinerja program yang mengakibatkan program berperilaku dengan cara yang tidak terduga. Terkadang bug perangkat lunak bahkan dapat menyebabkan program mati total.
Sebagian besar pakar pemrograman setuju bahwa hampir tidak mungkin membuat program dengan ukuran berapa pun tanpa muncul beberapa jenis bug perangkat lunak. Dengan program yang lebih rumit, kemungkinan bug berkembang umumnya meningkat. Ini karena mungkin lebih sulit bagi pemrogram untuk menemukan semua bug dalam program di mana ada banyak tindakan berbeda yang dapat dilakukan pengguna.
Untuk menemukan masalah bug perangkat lunak yang ada, pemrogram umumnya melakukan semua yang mereka bisa untuk menguji program dengan hati-hati sebelum merilisnya ke publik. Kadang-kadang mereka bahkan dapat mempekerjakan pekerja khusus hanya untuk tujuan pengujian perangkat lunak seluas mungkin dan melaporkan hasilnya kepada pemrogram. Bahkan dengan semua perlindungan ini, banyak bug perangkat lunak tidak ditemukan sebelum program dirilis.
Dalam beberapa kasus, pengembang mungkin menemukan bug tetapi memutuskan bahwa itu tidak cukup serius untuk menjamin penundaan rilis perangkat lunak. Ketika itu terjadi, pengembang dapat melanjutkan dan merilis program dan kemudian mengembangkan pembaruan, yang akan memperbaiki bug yang tersisa. Ini juga merupakan pendekatan biasa untuk menangani bug yang ditemukan setelah rilis program.
Kadang-kadang, sebuah program mungkin dalam keadaan fluks yang konstan karena pemrogram cenderung memasukkan lebih banyak fitur dari waktu ke waktu. Proses ini umumnya menimbulkan masalah bug perangkat lunak baru dengan setiap rilis. Ini bisa menjadi siklus tanpa akhir, dengan pemrogram terus menambahkan fitur ke perangkat lunak dan memperbaiki bug. Pada dasarnya, program mungkin tidak pernah benar-benar selesai. Sebaliknya, itu mungkin terus berkembang sambil mengalami rasa sakit yang tumbuh di sepanjang jalan.
Membuat program komputer melibatkan penggunaan kode yang ditulis dalam bahasa pemrograman. Sifat pengkodean komputer berarti bahwa kesalahan ketik kecil dan kesalahan serupa dapat dengan mudah menyebabkan masalah bug perangkat lunak, dan sangat sulit bagi pemrogram untuk menghindari membuat beberapa masalah dengan cara ini. Bug juga mungkin berkembang karena programmer membuat kesalahan logika saat membuat kode.