Saya bertanya-tanya bagaimana tipikal bagi pemrogram untuk mengganti topi dan melakukan pengujian pada pekerjaan masing-masing. Asumsikan bahwa tim ingin mengambil pendekatan "tanggung jawab bersama" untuk memindahkan tugas dari yang diformalkan ke pembebasan mereka -
Apakah ide yang bagus untuk membuat programmer bekerja sebagai pengujian perangkat lunak selama mereka tidak menulis fitur?
Apakah ini sering terjadi?
Sejauh mana seorang programmer dapat "menguji" pekerjaan mereka sendiri?
Bahkan dengan TDD dan unit test, bukankah masih ada kebutuhan untuk perangkat pengujian perangkat lunak dalam proses pengembangan?
testing
development-process
David di Dakota
sumber
sumber
Jawaban:
Setelah programmer menguji fitur mereka dapat menjadi tas campuran. Di satu sisi programmer dapat "terlalu terbiasa" dengan blok kode dan cukup menguji parameter tipe pass / fail yang terkenal. Di sisi lain jika programmer yang "terlalu akrab" dengan kode mereka rajin dalam membuat fitur berfungsi, mereka akan memiliki lebih banyak pengetahuan tentang kasus pinggiran yang dapat menyebabkan masalah, karena mereka tahu cara kerja fungsi dan celah potensial. didalamnya.
Saya pikir ini terjadi lebih sering daripada tidak. Saya pikir sebagian besar toko pemrograman ada di tim kecil, atau di bawah banyak tekanan untuk menyelesaikan sesuatu. Ini tidak memberi mereka kemewahan QA / Tester khusus dalam kelompok mereka, jadi semua orang harus menarik bagian mereka. Masih ada cukup banyak toko "koboi sendirian" di luar sana di mana setiap pengembang pada dasarnya bertanggung jawab atas seluruh siklus hidup aplikasi mereka. Itulah yang terjadi pada saya.
Saya akan menunda kembali ke # 1 untuk ini. Saya pikir seorang programmer mampu menguji pekerjaan mereka sendiri, di luar model TDD, karena mereka memiliki pengetahuan mendalam tentang cara kerja fitur mereka. Mereka perlu berhati-hati untuk "mundur" dan mampu meliput masalah spesifik dan luas dengan kode (seperti "gemar meraba" bidang entri teks - apa yang terjadi?), Tetapi itu bisa dilakukan.
sumber
Pengembang yang menguji kode masing-masing tidak boleh dilakukan alih - alih pengujian oleh spesialis QA yang terfokus, tetapi akan lebih baik sebagai tambahanuntuk pengujian oleh tester yang fokus. Pengembang terampil dalam berpikir tentang cara membuat produk bekerja. Penguji adalah satu-satunya orang di tim (BA, PM, pengembang, dll.) Yang berfokus pada mencari tahu bagaimana produk bisa gagal. Ini pola pikir yang sangat berbeda. Pikirkan tentang pekerjaan "down time" Anda - misalnya, ketika Anda menguraikan proyek-proyek di kepala Anda saat mandi. Apakah Anda berpikir, "Oh, saya yakin ini akan menjadi cara yang baik untuk menangani fitur itu!" atau apakah Anda berpikir, "Hei, saya harus melihat apakah saya dapat membuat kode itu gagal jika saya melakukan INI!"? Pekerjaan tidak hanya terjadi di kantor, dan pengembang mungkin tidak akan bekerja memecahkan kode di "waktu luang" mereka. Penguji juga harus mengumpulkan berbagai pengetahuan tentang alat pengujian dan teknik serta pengalaman memilih di antara mereka yang tidak dimiliki oleh para pengembang,
Pada saat yang sama, pengalaman lintas disiplin adalah hal yang sangat baik, dan selalu ada manfaatnya bekerja dengan kode pengembang lain. Memiliki dev yang berusaha lebih keras dalam pengujian sebelum QA / orang pengujian tertentu melihat kode mungkin akan menghasilkan kode kualitas yang lebih baik, yang mungkin akan menghasilkan tes turn-around yang lebih cepat, cakupan tes yang lebih baik, dan bahkan dapat mengurangi (tetapi tidak menghilangkan) jumlah penguji khusus yang dibutuhkan.
Jika Anda benar-benar harus melakukan trade-off karena ketersediaan head-count yang rendah atau jika kelompok keterampilan untuk QA sangat buruk di mana Anda berada, pengaturan ini akan lebih baik daripada tidak sama sekali - tetapi tujuannya harus tetap mendapatkan penguji nyata di sebelum tim tumbuh terlalu besar.
sumber
Saya belum pernah melihat metode pengujian yang buruk.
Haruskah programmer menguji kode mereka sendiri? Ya - jelas.
Haruskah orang lain menguji kode mereka? Ya - jelas.
Apakah cakupan menguji ide yang bagus? Iya.
Apakah pengujian Monte-Carlo baik? Iya.
Kami dapat memiliki apa yang kami anggap sebagai pengaturan yang cukup baik untuk pengujian, dan kemudian orang baru melakukan beberapa pengujian. Tebak apa? Mereka menemukan masalah yang tidak ditemukan sebelumnya.
Tanda kualitasnya semakin baik adalah ketika persentase masalah yang ditemukan dalam pengujian yang tidak benar-benar bug mendekati 100%.
sumber
Ada gerakan pengembangan besar dan berkembang yang disebut Test Driven Development atau TDD. Saya tidak mengklaim sebagai ahli dan benar-benar berjuang untuk mendapatkan kepala saya melakukan metode ini secara default, tetapi intinya adalah bahwa pengembang pertama-tama menulis tes gagal kemudian menulis kode untuk lulus tes itu.
Konsep ini memiliki banyak kekuatan. Salah satunya adalah Anda memiliki serangkaian tes hebat. Lain adalah bahwa karena ini dilakukan dalam banyak peningkatan kecil Anda segera tahu jika Anda memecahkan sesuatu. Salah satu hal yang saya lihat dengan metode ini dan "mandat" pengujian semuanya adalah bahwa Anda tidak membuat pengembang berlarian memasukkan fitur tambahan karena mereka keren atau rapi. Selalu ada biaya untuk fitur dan berkali-kali pengembang tidak melihat atau merasakan biaya itu. Dengan TDD mereka melakukannya, karena Anda menulis test case sebelum Anda menulis kode.
Ada ekstensi pada teori ini serta mengambil penulisan tes ke sumber persyaratan di mana pakar bisnis menulis serangkaian tes fungsional yang membentuk spesifikasi dan kemudian pengembang mengembangkan ke set kasus uji.
Jadi dengan TDD pengembang menulis banyak tes, beberapa berpendapat untuk rasio 1: 1 untuk baris kode tes ke baris kode.
sumber
Membalik ini - saya pikir ada nilai besar yang bisa didapat dalam merekrut setidaknya beberapa orang untuk tim yang lebih baik dalam pengujian daripada mereka di coding. Ini adalah serangkaian keterampilan yang berbeda dari pengembangan dan saya pikir - bahkan dengan TDD dan praktik lincah lainnya - bahwa seseorang yang memiliki mata yang baik untuk pengujian tidak ternilai untuk kualitas produk.
Jadi, mudah ditanyakan - apakah penguji harus mengkode sebanyak yang diuji oleh penguji.
IMO - ya, harus ada setidaknya campuran sedikit. Memiliki perspektif di ujung lain dalam menghasilkan suatu produk membuat Anda tetap berpengetahuan luas dan dapat meningkatkan wawasan baru.
sumber
Saya pikir itu adalah tanggung jawab seorang programmer untuk melakukan uji tuntas yang cukup baik sebelum memeriksa sepotong kode dan menandatanganinya, ini berarti:
...
Kemudian programmer lain harus meninjau kode itu dan tes unit.
Kemudian seorang penguji / QA yang berdedikasi harus menguji kode itu.
Saya tidak berpikir bahwa ada alasan untuk tidak melakukan yang pertama 3. Dan saya tidak berpikir bahwa ada alasan untuk tidak melakukan langkah terakhir, tetapi memiliki tes penguji khusus setiap bit kode mahal dan perusahaan kecil (berpikir setidaknya) bahwa ini adalah kemewahan yang mereka tidak mampu.
sumber
Secara pribadi, saya tidak percaya bahwa pengujian khusus harus ditinggalkan dari persamaan. Saya pikir Anda perlu menemukan orang yang setidaknya tidak mengembangkan produk yang sama (atau mungkin modul besar), yang akan memungkinkan beberapa programmer lain untuk menguji, asalkan mereka benar-benar tidak tahu apa implementasinya. Saya pikir hal yang paling penting adalah apakah mereka pernah atau tidak, pengembang harus dapat berfungsi sebagai penguji, dan penguji harus dapat berfungsi sebagai pengembang. Memiliki basis pengetahuan dan keakraban membuat pengembangan, pengujian, dan komunikasi antara keduanya menjadi lebih mudah.
sumber
Ya, meskipun mereka tidak "berfungsi sebagai pengujian perangkat lunak". Tes menulis adalah bagian dari pekerjaan seorang programmer. Juga, menulis tes yang baik adalah keterampilan. Tidak dapat menguji fitur Anda dengan benar bukanlah cacat dalam pengujian, ini merupakan indikator kurangnya keterampilan *.
Saya tentu berharap begitu.
Sementara seorang programmer dapat sepenuhnya menguji pekerjaan mereka, mungkin ada nilai dalam proses QA eksternal. Saya jarang menemukan itu yang menjadi masalah.
Tujuan pengujian ada tiga:
Pengujian pengembang dapat dan harus melayani semua tujuan ini. Jika pengujian pengembang cukup untuk mereka, tidak perlu untuk pengujian lebih lanjut.
* Pair programming membuat lebih sulit untuk menulis tes yang buruk karena Anda tidak pernah menguji fitur Anda sendiri.
sumber