Saya tahu ini sangat mirip dengan pertanyaan lain yang sudah diajukan, tetapi sebenarnya sedikit berbeda. Tampaknya secara umum dianggap bahwa programmer tidak pandai melakukan peran pengujian aplikasi. Sebagai contoh:
Joel on Software - Lima (Salah) Top Alasan Anda Tidak Memiliki Penguji (penekanan)
Jangan pernah berpikir untuk memberi tahu lulusan CS perguruan tinggi bahwa mereka dapat bekerja untuk Anda, tetapi "semua orang harus melakukan tugas di QA untuk sementara waktu sebelum beralih ke kode". Saya telah melihat banyak hal ini. Programmer tidak menjadi penguji yang baik , dan Anda akan kehilangan programmer yang baik, yang jauh lebih sulit untuk diganti.
Dan dalam pertanyaan ini , salah satu jawaban paling populer mengatakan (sekali lagi, penekanan saya):
Pengembang bisa menjadi penguji, tetapi mereka seharusnya tidak menjadi penguji. Pengembang cenderung secara tidak sengaja / tidak sadar menghindari untuk menggunakan aplikasi dengan cara yang dapat merusaknya. Itu karena mereka menulisnya dan sebagian besar mengujinya dengan cara yang seharusnya digunakan.
Jadi pertanyaannya adalah apakah programmer buruk dalam pengujian? Bukti atau argumen apa yang ada untuk mendukung kesimpulan ini? Apakah programmer hanya buruk dalam menguji kode mereka sendiri? Apakah ada bukti yang menunjukkan bahwa pemrogram benar-benar bagus dalam pengujian?
Apa yang saya maksud dengan "pengujian?" Maksud saya bukan pengujian unit atau apapun yang dianggap sebagai bagian dari metodologi yang digunakan oleh tim perangkat lunak untuk menulis perangkat lunak. Maksud saya beberapa jenis metode jaminan kualitas yang digunakan setelah kode telah dibangun dan digunakan untuk apa pun yang oleh tim perangkat lunak akan disebut "lingkungan pengujian."
Jawaban:
Pertanyaannya tampaknya bertanya secara khusus tentang Pengujian Sistem , jadi itulah yang saya maksudkan di seluruh jawaban ini.
Saya pikir ada perbedaan penting yang harus dibuat antara menjadi orang jahat untuk memilih melakukan pengujian, dan benar-benar menjadi buruk dalam pengujian.
Mengapa programmer buruk dalam pengujian:
Mengapa programmer pandai pengujian:
Mengapa programmer adalah penguji yang buruk:
sumber
Saya pikir programmer buruk dalam menguji kode mereka sendiri .
Kami ingin percaya bahwa kode kami berfungsi dengan baik sesuai dengan persyaratan dan mengujinya. Di tempat saya, kami menguji kode kami sendiri, lalu menguji satu sama lain kode sebelum melepaskan ke dalam siklus pengujian yang sebenarnya dan jauh lebih banyak bug ditangkap dengan cara itu daripada hanya dengan menguji kode kami sendiri
sumber
Pemrogram jelas merupakan orang yang tepat untuk menguji beberapa bagian dari sistem - di tempat mereka adalah satu-satunya yang mungkin dapat melakukannya secara efektif.
Satu tempat programmer cenderung sangat buruk dalam pengujian adalah seluruh bit "menggunakan UI seperti pengguna normal" - mereka bukan pengguna normal dan tidak berperilaku seperti mereka. Sebagai contoh:
Jadi, pengguna normal melakukan banyak hal yang tidak dilakukan oleh programmer. Anda tidak dapat bergantung sepenuhnya pada tim pengembang untuk UAT.
sumber
Pada tingkat teknis (tes unit, tes integrasi, tes regresi), pemrogram mungkin satu-satunya orang yang memenuhi syarat untuk menjadi penguji, karena jenis tes ini dapat diotomatisasikan dan karenanya harus otomatis, yang merupakan sesuatu yang memerlukan pemrograman.
Tapi saya tidak berpikir itu yang Anda bicarakan, dan saya cukup yakin itu juga bukan apa yang Joel Spolsky maksud - itu adalah bagian yang tersisa, pengujian manual langsung: mengubah dokumen persyaratan dan spesifikasi fungsional menjadi skrip uji dan kemudian dengan cermat mengeksekusi skrip ini terhadap produk jadi.
Menjadi tester yang baik membutuhkan kualitas yang sebagian besar ortogonal bagi mereka yang membuat programmer yang baik. Ada sedikit tumpang tindih - Anda harus dapat berpikir secara analitis, Anda memerlukan afinitas tertentu dengan komputer pada umumnya - tetapi selain itu, keterampilan penguji jauh berbeda. Itu sendiri tidak berarti Anda dapat memiliki kedua set keterampilan, dan pada kenyataannya, beberapa orang mungkin melakukannya. Namun, untuk menjadi programmer yang benar-benar baik memerlukan kemalasan tertentu (keinginan untuk mengotomatiskan tugas-tugas Anda), sementara tester yang benar-benar bagus perlu kegigihan (periksa semua tiga ribu bidang formulir untuk inkonsistensi), dan sebagai konsekuensinya, bahkan para programmer yang memiliki apa yang diperlukan untuk menjadi seorang tester biasanya membenci ide itu.
Dan kemudian ada bias selektif: Seorang programmer yang sudah terlibat dengan sebuah proyek, bahkan jika hanya sedikit, sudah memiliki pengetahuan dalam tentang basis kode, dan akan mengalami kesulitan mendekati dengan pikiran kosong, dari perspektif pengguna akhir . Bahkan tidak harus eksplisit, seperti pada "Saya tahu tombol ini berfungsi, jadi saya hanya akan mencatat 'lulus'"; itu bisa menjadi jauh lebih halus, dan efek-efek halus itu dapat menyebabkan kasus-kasus tepi kritis tidak terjawab dalam pengujian.
sumber
Dari pengalaman saya, ya, programmer adalah penguji buruk. Terlalu sering saya melihat orang lain dan saya pergi, "Huh, tapi saya mengujinya sebelum saya check-in!" ketika dihadapkan oleh penguji mereproduksi bug di depan Anda.
Mengapa? Yah, saya tidak yakin mengapa itu tapi mungkin itu karena kami ingin melihat hal-hal bekerja. Atau kita hanya ingin menyelesaikan dengan menguji fitur ini atau itu.
Lagi pula, pengujian bukanlah keterampilan yang kami pelajari dan kami tidak bekerja sebagai programmer karena kami pandai memecahkan fitur. Kita juga mungkin tidak tahu bagaimana melakukan perencanaan pengujian yang tepat atau semua hal lain yang dilakukan QA. Kami tidak lagi memenuhi syarat untuk melakukan pekerjaan penguji daripada penguji yang memenuhi syarat untuk menerapkan pipa rendering 3d baru Anda.
Seperti dalam pertanyaan, pengujian tidak berarti sesuatu yang otomatis tetapi sebenarnya pengujian dengan menggunakan program.
sumber
Ada beberapa level pengujian. Pengujian "tingkat rendah" dapat dan harus dilakukan oleh pengembang. Saya pikir di unit testig.
Di sisi lain, pengujian "tingkat tinggi" sama sekali hal lain. Secara umum saya pikir pengembang adalah penguji buruk bukan karena mereka kehilangan keterampilan, tetapi karena sangat sulit mengubah cara berpikir dan cara bekerja dalam beberapa waktu.
Saya menggunakan untuk mencoba menguji sebanyak mungkin kode saya, tetapi setelah setidaknya 10 menit dibuat oleh tester, sesuatu untuk mempertimbangkan bug atau peningkatan muncul. Ini berarti menguji sesuatu yang Anda buat, adalah pekerjaan yang sulit. Anda tahu di mana harus mengklik, Anda tahu kapan mengklik, Anda tahu logika bisnis, Anda mungkin tahu bagaimana data bertahan. Anda adalah dewa yang tidak akan pernah jatuh.
sumber
Apa jenis pengujian yang Anda maksud? Jika Anda maksud pengujian menyeluruh yang komprehensif maka saya bisa melihat beberapa alasan untuk mengatakan ya meskipun saya menduga kebanyakan orang akan miskin dalam kategori ini jika seseorang menganggap semua kombinasi input yang mungkin sebagai persyaratan untuk pengujian tersebut.
Saya dapat mengakui bahwa pengembang yang mendesain perangkat lunak mungkin memiliki visi terowongan ketika datang ke apa kode untuk menangani dan mengabaikan beberapa kasus batas yang mungkin saja tidak dipertimbangkan. Misalnya, jika saya membuat formulir web yang mengambil angka, n, dan kemudian mencetak dari 1 ke n di layar, saya mungkin kehilangan beberapa kasus khusus seperti jika tidak ada yang dimasukkan atau sesuatu yang bukan angka alami seperti e atau pi . Apa yang seharusnya dilakukan oleh program dalam kasus-kasus ini dapat dipertanyakan.
Pengembangan yang Didorong Tes akan menjadi contoh metodologi pengembangan yang menempatkan pengujian pada sudut pandang berbeda yang mungkin memberikan pandangan lain di sini.
sumber
Pemrogram mendefinisikan tes dengan baik ketika mereka mendefinisikan tes sebelum menulis kode. Dengan latihan, mereka menjadi lebih baik.
Namun, ketika mendefinisikan tes untuk kode yang mereka tulis, mereka tidak melakukannya dengan sangat baik. Mereka akan memiliki titik buta yang sama dalam pengujian yang mereka miliki dalam menulis kode.
Menggunakan programmer untuk melakukan pengujian manual itu konyol. Pengujian manual cukup konyol; membuat programmer melakukannya dengan sangat konyol. Itu mahal dan mengusir programmer yang kompeten.
sumber
Salah satu jenis pengujian yang secara khusus saya lihat gagal di devlopers menguji apakah persyaratan telah terpenuhi. Apa yang para pemuja pikir artinya sesuatu dalam suatu persyaratan dan apa yang para penguji pikir artinya adalah seringkali adalah dua hal yang sama sekali berbeda.
Saya dapat memikirkan satu baru-baru ini di mana develoepr diminta untuk melakukan ekspor delta dan dev berpikir itu berarti untuk mendapatkan catatan yang belum dikirim sekali dan penguji berpikir itu berarti mendapatkan recrds baru dan perubahan apa pun. Mereka harus kembali ke klien untuk mencari tahu siapa yang benar. Saya mengkaji kode itu dan saya membuat asumsi yang sama bahwa dev lakukan tentang persyaratan. Karena secara logis jika Anda ingin memasukkan pembaruan, Anda akan menyebutkannya. Dan saya biasanya pandai menemukan hal-hal yang ambigu karena saya dulu pengguna akhir.
Jadi pengembang lain yang melakukan pengujian akan cenderung membuat banyak asumsi yang sama karena mereka juga akan membuat asumsi tertentu seperti "baik mereka akan memiliki lebih banyak detail jika itu berarti X wakil Y karena ada begitu banyak detail yang harus dijawab sebelum saya bisa melakukan Tetapi penulis persyaratan tidak berpikir seperti itu. Jadi seseorang yang berpikir lebih seperti persyaratan penulis perlu menguji asumsi pengembang dan seseorang yang bukan pengembang adalah orang yang lebih baik untuk melihat ada masalah.
sumber