Jawaban saya akan dari perspektif bisnis dunia nyata dan tantangan yang dihadapi oleh setiap tim pengembangan. Apa yang saya lihat dalam pertanyaan ini dan banyak jawaban sebenarnya tentang mengendalikan cacat.
Kode dapat bebas bug. Ambil contoh kode "Hello World" untuk bahasa pemrograman apa pun, dan jalankan di platform yang dimaksudkan dan itu akan bekerja secara konsisten dan menghasilkan hasil yang diinginkan. Akhirnya ada teori tentang ketidakmungkinan kode bebas bug.
Potensi bug masuk sebagai logika menjadi lebih kompleks. Contoh Hello World yang sederhana tidak memiliki logika dan melakukan hal statis yang sama setiap kali. Segera setelah Anda menambahkan perilaku dinamis yang digerakkan oleh logika adalah apa yang memperkenalkan kompleksitas yang mengarah pada bug. Logikanya sendiri dapat cacat, atau data yang dimasukkan ke logika dapat bervariasi dengan cara yang tidak ditangani oleh logika.
Aplikasi modern juga tergantung pada run-time libraries, CLR, middleware, database, dll. Lapisan yang sekaligus menghemat waktu pengembangan secara keseluruhan, juga merupakan lapisan di mana bug di dalam lapisan tersebut dapat ada dan tidak terdeteksi melalui pengembangan & pengujian UAT dan dalam produksi.
Terakhir, rangkaian aplikasi / sistem yang aplikasi gunakan data yang mengumpankan logikanya adalah semua sumber bug potensial baik di dalam logikanya, atau di dalam perangkat lunak yang menumpukan tumpangan logika di atasnya, atau sistem hulu tempat ia mengonsumsi data.
Pengembang tidak dalam kendali 100% dari setiap bagian bergerak yang mendukung logika aplikasi mereka. Sebenarnya, kita tidak bisa mengendalikan banyak hal. Itulah sebabnya pengujian unit penting, dan konfigurasi serta manajemen perubahan adalah proses penting yang tidak boleh kita abaikan atau malas / ceroboh.
Juga, perjanjian yang terdokumentasi antara aplikasi Anda yang mengkonsumsi data dari sumber di luar kendali Anda, yang menentukan format dan spesifikasi spesifik untuk data yang ditransfer, serta batas atau kendala yang dianggap oleh sistem Anda bahwa sistem sumber bertanggung jawab untuk memastikan keluaran berada di dalam batas-batas itu.
Dalam aplikasi dunia nyata dari rekayasa perangkat lunak Anda tidak akan dapat membuatnya terbang dengan menjelaskan kepada bisnis mengapa aplikasi secara teoritis tidak dapat bebas bug. Diskusi tentang sifat antara teknologi dan bisnis ini tidak akan pernah terjadi kecuali setelah kegagalan teknologi yang berdampak pada kemampuan bisnis untuk menghasilkan uang, mencegah kehilangan uang, dan / atau membuat orang tetap hidup. Jawaban untuk "bagaimana ini bisa terjadi" tidak dapat "biarkan saya menjelaskan teori ini sehingga Anda mengerti."
Dalam hal perhitungan besar-besaran yang secara teoritis bisa memakan waktu lama untuk melakukan perhitungan dan mendapatkan hasil, aplikasi yang tidak dapat selesai dan kembali dengan hasil - itu adalah bug. Jika sifat perhitungannya sedemikian sehingga sangat memakan waktu dan intensif komputasi, Anda menerima permintaan itu dan memberikan umpan balik kepada pengguna bagaimana / kapan mereka dapat mengambil hasilnya, dan memulai benang paralel untuk mengaduknya. Jika ini perlu terjadi lebih cepat daripada yang dapat dilakukan pada satu server, dan bisnis cukup penting, maka Anda skala di banyak sistem yang diperlukan. Inilah sebabnya mengapa cloud sangat menarik, dan kemampuan untuk memintal node untuk bekerja dan menurunkannya saat selesai.
Jika ada kemungkinan untuk mendapatkan permintaan yang tidak dapat diselesaikan oleh jumlah daya komputasi, itu tidak boleh berjalan di sana berjalan hingga tak terbatas dengan proses bisnis menunggu jawaban atas apa yang dianggap bisnis sebagai masalah yang terbatas.
print "Hello, World!"
... bisakah Anda menjadi lebih jelas?