Berbicara dalam istilah sehari-hari, praktis, saya pikir itu sepenuhnya tergantung pada konteksnya .
Dalam tim med-besar, bekerja dengan standar tinggi / sangat tinggi (berpikir perbankan, militer, skala besar, anggaran tinggi atau sistem bisnis kritis) maka saya pikir dengan jelas "debugging" harus "hasil pengujian" , dan mereka jelas hal yang sangat berbeda . Idealnya pengujian mengarah ke debugging (dalam lingkungan pementasan) dan dalam produksi kita perlu mendekati nol dari keduanya.
Pengujian dalam cakupan luas, teratur dan sangat formal - sementara debugging adalah proses tertentu yang terjadi sesekali ketika ada kebutuhan untuk memperbaiki kegagalan tertentu - yang tidak jelas dan membutuhkan penyelidikan yang lebih dalam dari fungsi sistem dan hasil keluaran.
Di sini, dalam pengujian pikiran saya adalah sesuatu yang penting, sedangkan debugging adalah alat khusus yang diperlukan hanya ketika resolusi kegagalan adalah buram.
Saya benar-benar memahami utilitas yang jelas dalam TDD untuk tim dan atau sistem besar daripada tidak mampu menjadi "kereta". Ini juga jelas masuk akal untuk sistem yang kompleks (sering kali "back-end") atau jika ada proporsi kompleksitas yang tinggi dalam kode dibandingkan dengan output. Kemudian "pengujian" memiliki peluang yang realistis untuk menginformasikan kapan dan mengapa kegagalan terjadi. Sistem yang melakukan banyak pekerjaan kompleks dan atau menghasilkan output yang terukur jelas umumnya mudah diuji, dan pengujian berbeda dari debugging. Dalam kasus-kasus ini pengujian sangat menyiratkan metode yang berdasarkan prosedur, metode formal untuk mengkonfirmasi atau mengacaukan kesesuaian antara harapan dan hasil aktual. Pengujian terjadi setiap saat, dan kadang-kadang memberi tahu kami tentang kebutuhan untuk debugging.
Akan menyenangkan jika ini adalah kebenaran di mana-mana, saya akan senang jika siklus dev saya dibatasi oleh keluaran biner yang jelas (merah, hijau) tetapi ...
Dalam kasus saya (yang secara khusus diakui - bekerja 98% solo pada sistem web perusahaan yang berukuran kecil, kurang dana, dan fokus pada data admin) Saya benar-benar tidak dapat melihat bagaimana TDD dapat membantu saya. Atau lebih tepatnya "debugging" dan "testing" secara virtual sama.
Terutama meskipun penggunaan istilah "pengujian" menyiratkan / erat terkait dengan metodologi TDD.
Saya tahu ini benar - benar, sama sekali tidak Zeitgeist "hindari orang yang tidak percaya, hindari, hindari", hal yang sangat tidak keren untuk dikatakan. Tetapi memikirkan konteks saya, dengan topi praktis yang tidak saya singgung, dalam imajinasi terliar saya melihat bagaimana TDD dapat membantu saya memberikan nilai lebih untuk uang kepada klien saya.
Atau lebih tepatnya, saya sangat tidak setuju dengan asumsi umum bahwa "pengujian" adalah proses berbasis kode formal.
Keberatan dasar saya (berlaku dalam konteks * * khusus saya ) adalah ...
Jika saya tidak bisa menulis kode yang bekerja andal - maka bagaimana sih aku bisa menulis kode yang bekerja andal untuk tes kata mungkin sub standar kode.
Bagi saya, saya belum pernah melihat contoh atau argumen yang (dalam konteks khusus saya) cukup menggembirakan saya bahkan untuk berpikir tentang menulis satu tes , saya mungkin sedang menulis beberapa kode pengujian yang benar-benar menggelikan saat ini, mungkin "apakah repositori saya mengembalikan seorang Pengguna entitas dengan Nama == X, ketika saya menanyakannya dengan tepat - dan hanya - itu? ", tetapi mungkin ada lebih banyak utilitas dalam diri saya menulis streaming ini, mungkin-internet-benar-benar-benar-benar-benar-benar-murni-bodoh-semburan- sampah yang memuaskan diri sendiri, sangat kurang informasi, darah mendidih, berlebih-lebih-sia-sia-sia-sia, tapi aku hanya merasa perlu berperan sebagai penasihat iblis di sini. (Agak berharap seseorang akan menunjukkan kepada saya cahaya dan mempertobatkan saya, mungkin ini akan memberi klien saya nilai uang yang lebih baik?).
Bisa dibilang "debugging" terkadang sama dengan "pengujian". Maksud saya ini adalah bahwa dalam kehidupan kerja sehari-hari saya, saya menghabiskan setidaknya sepertiga dari waktu saya bermain-main dengan versi lokal dari sistem saya di browser yang berbeda, mati-matian mencoba berbagai hal aneh dalam upaya untuk menghancurkan pekerjaan saya dan kemudian menyelidiki alasan mengapa itu gagal dan mengoreksi mereka.
Saya 100% setuju dengan utilitas yang jelas dalam mantra TDD "merah / hijau / refactor", tetapi bagi saya (bekerja dengan anggaran rendah, solo dev RIA land) saya benar-benar akan sangat menyukai seseorang untuk tolong tunjukkan saya bagaimana saya bisa mungkin , secara logis dan sangat realistis mendapatkan nilai tambahan dari menulis lebih banyak ( sama seperti kode pengujian yang berpotensi cacat ) daripada yang saya lakukan dari benar-benar berinteraksi dengan output penuh (dan pada dasarnya hanya) dari upaya saya yang pada dasarnya terikat pada interaksi manusia nyata.
Bagi saya ketika pengembang berbicara tentang "pengujian" itu biasanya menyiratkan TDD.
Saya mencoba kode seolah-olah ada tes, saya pikir semua pola / praktik dan tren yang didorong oleh semua pengembangan pengujian ini fantastis dan indah, tetapi bagi saya di dunia kecil saya "pengujian" tidak menulis lebih banyak kode, sebenarnya menguji keluaran dunia nyata dengan pendekatan realistis, dan itu hampir sama dengan debugging, atau lebih tepatnya perubahan aktif di sini adalah "debugging" yang merupakan akibat langsung dari manusia, "pengujian" output centric non otomatis. Ini berbeda dengan pandangan yang diterima secara umum tentang "pengujian" sebagai sesuatu yang otomatis dan formal, dan "debugging" sebagai sesuatu yang manusiawi dan ad-hoc atau tidak terstruktur.
Jika tujuannya benar-benar bernilai untuk uang / usaha, dan Anda membuat aplikasi interaktif berbasis web, maka output dari upaya adalah halaman web dan pada dasarnya bagaimana mereka bereaksi terhadap input manusia - jadi "pengujian" terbaik dicapai dengan menguji halaman-halaman web, melalui interaksi manusia nyata. Ketika interaksi ini mengarah ke hasil yang tidak diharapkan atau tidak diinginkan, maka "debugging" terjadi. Debugging juga terkait erat dengan ide inspeksi waktu nyata dari keadaan program. Pengujian umumnya terkait dengan otomatisasi yang menurut saya sering merupakan hubungan yang tidak menguntungkan.
Jika tujuannya benar-benar bernilai untuk usaha, dan pengujian otomatis efisien dan sangat bermanfaat, sementara debugging hanyalah output dari pengujian itu, atau pengganti yang buruk untuk pengujian otomatis, lalu mengapa situs web yang paling banyak dikunjungi kedua di dunia (Facebook ) begitu sering penuh dengan bug yang jelas menyilaukan (untuk pengguna, tetapi jelas bukan tim pengujian dan kode pengujian)?
Mungkin karena mereka berkonsentrasi pada lampu hijau yang meyakinkan dan lupa untuk benar-benar menggunakan hasil karya mereka?
Apakah terlalu banyak pengembang berpikir pengujian adalah sesuatu yang Anda lakukan dengan kode, dan debugging adalah sesuatu yang sesekali Anda lakukan dengan IDE karena ikon berubah menjadi merah dan Anda tidak dapat mengetahui alasannya? Saya pikir kata-kata ini memiliki penilaian nilai malang terkait dengan mereka, yang umumnya mengaburkan realitas praktis dari apa yang harus kita fokuskan untuk menutup kesenjangan antara harapan dan hasil.