Saya berdiskusi dengan manajer pengujian tentang peran unit dan pengujian integrasi. Dia meminta agar para pengembang melaporkan apa yang telah diuji unit dan integrasi mereka serta caranya. Perspektif saya adalah bahwa pengujian unit dan integrasi adalah bagian dari proses pengembangan, bukan proses pengujian. Di luar semantik yang saya maksud adalah bahwa tes unit dan integrasi tidak boleh dimasukkan dalam laporan pengujian dan penguji sistem tidak boleh khawatir tentang mereka. Alasan saya didasarkan pada dua hal.
Tes unit dan integrasi direncanakan dan dilakukan terhadap antarmuka dan kontrak, selalu. Terlepas dari apakah Anda menggunakan kontrak formal, Anda masih menguji apa misalnya metode yang seharusnya dilakukan, yaitu kontrak.
Dalam pengujian integrasi Anda menguji antarmuka antara dua modul yang berbeda. Antarmuka dan kontrak menentukan kapan tes lulus. Tetapi Anda selalu menguji bagian terbatas dari keseluruhan sistem. Pengujian sistem di sisi lain direncanakan dan dilakukan terhadap spesifikasi sistem. Spesifikasi menentukan kapan tes lulus.
Saya tidak melihat nilai apa pun dalam mengomunikasikan luas dan dalamnya unit dan tes integrasi ke tester (sistem). Misalkan saya menulis laporan yang mencantumkan jenis tes unit apa yang dilakukan pada kelas lapisan bisnis tertentu. Apa yang harus dia ambil dari itu?
Menilai apa yang harus dan tidak boleh diuji dari itu adalah kesimpulan yang salah karena sistem mungkin masih tidak berfungsi seperti yang diminta spesifikasi meskipun semua unit dan tes integrasi lulus.
Ini mungkin tampak seperti diskusi akademis yang tidak berguna, tetapi jika Anda bekerja di lingkungan yang sangat formal seperti saya, itu sebenarnya penting dalam menentukan bagaimana kita melakukan sesuatu. Lagi pula, apakah aku benar-benar salah?
sumber
Jawaban:
Menulis tes otomatis adalah pekerjaan pengembang; tes adalah bagian dari basis kode dan harus diperlakukan seperti itu - mereka harus tunduk pada tinjauan kode yang sama, standar pengkodean, disiplin kontrol sumber, dll, seperti sisa proyek.
Menjalankan tes mengatakan dilakukan karena dua alasan: Pertama, sebagai alat dalam membimbing pengembang. Anda menjalankan tes untuk memverifikasi bahwa kode yang baru saja Anda tulis melakukan apa yang seharusnya, Anda menggunakannya sebagai dokumentasi tambahan, dan untuk memverifikasi bahwa perubahan tidak merusak fungsi yang ada. Jika Anda melakukan TDD nyata, pengujian juga merupakan sumber spesifikasi teknis yang resmi. Alasan kedua untuk menggunakan tes ini adalah selama QA dan penyebaran. Menjalankan semua tes otomatis harus menjadi salah satu langkah pertama dalam setiap putaran pengujian; menjalankan tes otomatis itu murah (hampir tidak ada tenaga kerja yang diperlukan sama sekali), dan tidak masuk akal untuk melakukan pengujian manual jika tes otomatis gagal.
Ini berarti bahwa tanggung jawabnya harus seperti ini:
Jika Anda memiliki server build, maka tugas QA (mengenai tes otomatis) bermuara pada "buka laporan server build dan verifikasi bahwa semuanya berwarna hijau".
sumber
an authoritative source of technical specifications
. Tes harus menjadi konfirmasi spesifikasi, tetapi tentunya bukan pengganti. Itu bukan untuk mengatakan bahwa saya menganjurkan untuk spec besar di muka baik, tetapi saya membuat perbedaan bahwa kita menerapkan tes untuk memvalidasi hal-hal yang kita tahu tentang cara di mana sistem harus berperilaku, daripada memiliki tes menentukan perilaku. Mungkin ada perbedaan mencolok, tetapi tetap penting.Saya pikir yang paling penting bagi Anda adalah menjelaskan mengapa dia membutuhkan laporan itu.
Mungkin ada penjelasan yang berbeda (seperti yang disarankan oleh beberapa jawaban), yang membutuhkan strategi yang sangat berbeda.
sumber
Saya pikir peran QA dan Pengembangan, dan interaksi, dapat sangat bervariasi antara organisasi. Tetapi secara umum, di tim saya, saya memberi tahu anggota yang bergabung untuk berpura-pura seolah-olah tidak ada tim QA, dalam arti bahwa mereka bertanggung jawab atas perubahan yang mereka dorong ke dalam produksi. Pada gilirannya, tim QA kami tidak banyak berasumsi tentang pengujian pengembang, dan melakukan sejumlah pengujian sistem secara keseluruhan.
Untuk alasan ini, tim QA kami tidak terlalu peduli tentang apa yang diuji dan tidak unit sebelum mereka memulai pengujian.
Saya pikir sangat membantu bagi tim QA untuk memahami apa yang dilakukan dan tidak dicakup oleh unit test, pada level tinggi, sehingga kita dapat bekerja bersama untuk mengidentifikasi kesenjangan, dan area yang mungkin membutuhkan lebih banyak kekakuan. Jadi, mungkin rekan Anda setelah ringkasan tingkat tinggi, yang bertentangan dengan detail berdarah.
sumber
Apakah dia benar-benar berusaha memperdebatkan apakah pengujian semacam ini sebenarnya dalam ranah "pengembangan", atau apakah dia hanya mencoba mencari tahu seberapa baik kode Anda dicakup oleh pengujian unit? Hanya dengan melihat informasi yang Anda berikan, sepertinya dia hanya ingin tahu bagian mana dari kode yang dibahas dan di mana dia harus memfokuskan upaya timnya.
Saya bekerja pada tim pengujian keluar dari sekolah sebelum saya pindah ke peran pengembangan, dan saya bisa melihat bagaimana ini mungkin berharga baginya dan timnya.
sumber
Saya tidak melihat bahwa itu terlalu penting.
Jika Anda tidak menyediakannya untuk QA / Pengujian, dan mereka tidak melakukan tes yang tepat, dan gagal dalam produksi, itu adalah kesalahan mereka untuk membiarkannya melalui QA ke dalam produksi tanpa memverifikasi itu berfungsi seperti yang ditentukan.
Jika Anda menyediakannya untuk QA / Pengujian, dan mereka tidak melakukan tes yang tepat ... hasil yang sama seperti jika Anda belum memberikannya.
Namun, jika Anda memberikannya, mereka dapat membandingkannya dengan spesifikasi juga, dan / atau menyarankan tes mana yang mungkin cacat, atau perlu diubah karena mereka memang menemukan bug.
Sungguh, saya tidak melihat banyak kekurangan dalam menyediakannya. Masih dalam QA / pengujian untuk memvalidasi terhadap spesifikasi. Jika mereka mengambil jalan malas dan hanya mengandalkan bahwa pengujian Anda cukup baik karena mereka semua lulus, itu adalah mereka yang gagal dalam pekerjaan mereka. Selama mereka masih memiliki spek juga, hasil tes unit / integrasi hanya bulu, dan seharusnya tidak dapat melukai Anda dengan satu atau lain cara. Ini adalah alasan kami memiliki dev dan QA. Pemeriksaan berulang yang dilakukan aplikasi seperti yang ditentukan.
Devs membuat kesalahan, QA membuat kesalahan, idealnya mereka tidak membuat kesalahan pada item yang sama ... dan jika mereka lakukan ... itu berpotensi analis yang menjatuhkan bola menulis spec yang tidak jelas.
sumber
Pengujian unit adalah tanggung jawab pengembang bahwa pengujian dapat bermanfaat untuk memahami cara kerja potongan kode. Beberapa mungkin melihat ini sebagai bentuk dokumentasi dan dengan demikian memiliki beberapa nilai walaupun mungkin ada overhead jika tes unit diubah secara teratur.
Nilai lain dalam melewati tes adalah bahwa hal ini dapat menghindari penggandaan pada tes yang mungkin berlebihan dalam hal memastikan fungsionalitas dasar.
Ada juga pengujian penerimaan pengguna yang terpisah dari semua ini karena pengguna akhir mungkin memiliki pemahaman sendiri tentang bagaimana suatu sistem berfungsi.
sumber
Jika perusahaan Anda memiliki metodologi yang ditetapkan untuk memastikan kualitas produknya (jika mereka sesuai dengan SOX, atau berusaha meningkatkan level CMMI mereka, mereka mungkin melakukannya), maka produk harus dapat berdiri untuk mengaudit untuk menunjukkan bahwa prosesnya diikuti.
Seringkali, proses yang didefinisikan termasuk pengujian unit (yang merupakan hal yang baik). Sayangnya, ini juga berarti Anda harus mendokumentasikan tes unit Anda dan membuktikan bahwa tes tersebut dijalankan untuk dapat mengaudit. Jadi itu berarti Anda perlu cara untuk melaporkan tes unit Anda.
Lihatlah alat seperti Sonar untuk membantu Anda - itu akan melaporkan tingkat cakupan kode dan hasil uji unit Anda berjalan.
sumber
Ini benar-benar tergantung pada perusahaan tetapi dari pengalaman saya bekerja baik sebagai penguji sistem dalam pendekatan tradisional tetapi juga sebagai penguji yang bekerja dalam tim tangkas dalam model CD, mengetahui apa yang telah unit dan diuji integrasi sangat berguna.
Kualitas adalah tanggung jawab tim - baik pengembang, penguji dan Manajemen Produk dan bekerja bersama adalah cara terbaik untuk memastikan hal itu.
Jadi manajer pengujian ingin tahu apa yang telah diuji unit dan integrasi dan ini merupakan pekerjaan ekstra untuk pengembang tetapi menghemat keseluruhan pekerjaan untuk proyek! Dengan memberikan informasi kepada manajer tes, mereka dapat memfokuskan upaya tim pengujian mereka pada apa yang penting dan penting. Seperti disebutkan sebelumnya, jika area kode tidak diuji unit, tim dapat memfokuskan upaya mereka di sana dibandingkan dengan area yang banyak diuji - mengapa menduplikasi upaya? Anda semua bekerja menuju tujuan akhir yang sama dari perangkat lunak berkualitas tinggi yang dirilis tepat waktu.
sumber
Saya akan berpikir bahwa akan bermanfaat untuk menyediakan hal semacam ini. Cakupan unit test haruslah sesuatu yang diketahui oleh pengembangan dan pengujian sehingga mereka dapat menjelaskannya.
Jelas, Anda harus menguji hal-hal penting dalam bisnis apa pun yang terjadi. Anda harus menguji fungsionalitas yang umum digunakan dengan keras terlepas dari apakah ia memiliki cakupan uji unit yang bagus. Tidak ada salahnya untuk memberi tahu mereka tempat-tempat lain yang dicakup oleh unit test. Apakah kode sudah memeriksa kasus tepi dalam satu kontrol kecil ini? Hal-hal semacam ini bermanfaat untuk diketahui di semua sisi bisnis.
sumber
Perlu disebutkan pendekatan yang dibahas dalam buku "Bagaimana Google Menguji Perangkat Lunak": Pengujian dan Kontrol Kualitas adalah tanggung jawab semua orang, dan standarnya sangat ketat.
The nyata peran apa yang secara tradisional disebut "Pengujian" departemen, sebenarnya produktivitas pengembang; yaitu otomatisasi untuk memungkinkan organisasi mencapai tingkat ketelitian yang disyaratkan secara ekonomi.
sumber