Di mana tim QA harus melakukan pengujian dalam model percabangan Gitflow

23

Kami adalah tim besar (10-12 pengembang dan 4 qa) yang mengerjakan beberapa proyek dengan repositori git yang sama. Ini adalah layanan web backend berbasis pegas boot. Kami mencari strategi percabangan dan penerapan git yang baik. kami juga memiliki tim qa yang memastikan bahwa fitur kami berfungsi seperti yang diharapkan (bebas bug sampai batas tertentu).

Setelah membaca beberapa artikel, saya merasa bahwa model Gitflow akan bekerja dengan baik untuk kita. Inilah pertanyaan saya.

Di mana tim QA kami harus menguji fitur kami?

  1. haruskah mereka menguji pada cabang fitur, di mana mereka akan meningkatkan bug dan pengembang akan memperbaikinya dan setelah lulus uji QA kami bergabung untuk mengembangkan. dan QA akan kembali melakukan pengujian integrasi dalam mengembangkan cabang.
  2. haruskah kita menggabungkan semua fitur (setelah pengujian unit dan pengujian dasar dari pengembang) untuk mengembangkan cabang dan membiarkan pengujian qa dari sana. perbaikan dan tes semua akan terjadi dalam pengembangan juga.

Saya ingin tahu pendekatan apa yang berhasil baik untuk orang lain.

Srini
sumber

Jawaban:

14

QA mungkin harus menguji dua kali.

Pengujian pertama harus sekitar perubahan spesifik dan dilakukan pada cabang fitur. Ini memungkinkan QA menguji perubahan spesifik dan melihat bahwa perubahan tertentu selesai seperti yang ditentukan dan berperilaku seperti yang diharapkan. Ini juga memberi mereka pratinjau awal untuk pengujian putaran kedua, yang sebenarnya penting untuk QA.

Berasal dari latar belakang saya di berbagai lingkungan yang diatur, pengujian kedua perlu dilakukan pada tag pada cabang pengembangan yang terkait dengan rilis, atau cabang rilis, atau mungkin cabang master. Sebelum rilis, QA harus menguji kode lengkap dan lengkap yang akan digunakan sebelum digunakan dan Anda harus dapat menyatakan bahwa apa pun yang diuji oleh QA persis sama dengan apa yang digunakan untuk produksi. Preferensi saya adalah bahwa setelah kode dibekukan, tag diterapkan ke cabang rilis dan QA akan mengujinya. Perubahan akan dilakukan di cabang pengembangan, dicek spot, dan kemudian diuji lagi dalam tag baru pada cabang rilis. Tag ini pada cabang rilis akan sesuai dengan kandidat rilis.

Saya membuat beberapa asumsi di sini. Pertama, Anda memiliki cakupan pengujian berbasis pengembang yang cukup baik. Idealnya, ini akan menjadi unit otomatis dan tes integrasi yang dijalankan dan dilakukan pengembang sebelum mengirim kode apa pun pada cabang apa pun ke QA. Pengembang mungkin juga ingin melakukan beberapa pengujian eksplorasi di sekitar UI untuk memastikan bahwa semuanya terlihat tepat sebelum pengujian QA. Kedua, ada koordinasi yang baik antara pengembangan dan QA untuk merencanakan perubahan yang dimasukkan untuk memastikan waktu QA yang cukup berdasarkan fitur.

Thomas Owens
sumber
2
beberapa masalah yang saya miliki dengan pendekatan ini adalah 1) setiap fitur akan membutuhkan mesin untuk digunakan. terkadang kami mengerjakan 5 fitur beberapa kali hanya berpasangan. mungkin kita bisa mengatur jenkins untuk menjalankan VM? apa yang semua orang lakukan? 2) qa perlu tahu yang membangun di atas mesin yang mana. 3) saya bertanya-tanya apakah itu mubazir karena kita akan melakukan pengujian menyeluruh di cabang rilis.
srini
4

Pertanyaan bagus Saya tidak berpikir ada jawaban 'resmi' yang benar untuk ini. Itu tergantung seberapa cepat Anda bisa menguji.

Masalah penting adalah bahwa setiap penggabungan, kompilasi atau bahkan penyebaran, berpotensi dapat membuat bug. Semakin jauh 'naik' rantai yang Anda uji, semakin cepat Anda tahu tentang bug, tetapi juga semakin banyak kali Anda harus menguji ulang.

Untuk memastikan bahwa Anda telah menguji perangkat lunak yang digunakan pelanggan, Anda benar-benar harus menguji penyebaran langsung sebelum lalu lintas pelanggan (dengan asumsi aplikasi web) dialihkan ke server-server tersebut melalui pola penyebaran biru / hijau.

Tapi jelas ini agak terlambat untuk menjadi yang pertama kali Anda memeriksa kode sama sekali!

Jika Anda menguji cabang rilis dalam qa env maka Anda dapat mengambil risiko dan mengurangi pengujian langsung menjadi tes merokok saja. dan terapkan perbaikan bug ke cabang rilis. Tetapi Anda tidak dapat menilai apakah suatu fitur sudah lengkap sebelum membuat rilis

Jika Anda menguji pengembangan maka Anda mendapatkan cabang bug-fix-fitur mini. Fitur masih digabungkan sebelum dinilai, ditambah fitur untuk rilis berikutnya dapat bertabrakan dengan pengujian rilis saat ini.

Jika Anda menguji cabang Fitur, Anda memerlukan sejuta lingkungan dan harus mengatur urutan gabungan dan uji sign off. ditambah banyak pengujian ulang.

Dari pengalaman saya, saya akan merekomendasikan:

uji cepat cabang fitur pada mesin dev. cukup pastikan fitur-fiturnya lengkap dan penguji / pengembang setuju tentang apa arti persyaratan.

Pengujian sehari-hari / pengujian otomatis pada cabang dev yang digunakan untuk server qa. Memungkinkan Anda menguji semua fitur bersama dan mengatakan kapan Anda siap untuk merilis.

Jika semua fitur dalam tetapi pengujian belum selesai. misalnya sprint selesai. membuat cabang rilis dan menyebarkan ke lingkungan qa kedua. Hal ini memungkinkan untuk memperbaiki / menguji bug pada rilis 1 untuk melanjutkan pada saat yang sama dengan fitur untuk rilis 2.

(penggemar scrum akan mengatakan bahwa Anda hanya harus memasukkan perbaikan bug ke sprint 2 tetapi tetaplah praktis)

Tes asap pada penyebaran hijau / biru hidup sebelum beralih. Ini sangat penting karena Anda akan mengambil kesalahan konfigurasi / lingkungan yang tidak terlihat oleh siapa pun saat berkembang.

Ewan
sumber
-2

Saya setuju dengan Thomas Owens. Anda mungkin harus menguji dua kali. Sekali pada cabang fitur sebelum digabungkan dan sekali pada cabang utama Anda sebelum Anda rilis.

Bahkan, saya sangat menyukai alur kerja itu sehingga saya membuat alat, Topico , yang secara otomatis membuat dan menjalankan versi pakai aplikasi Anda untuk setiap permintaan tarik, masing-masing dengan URL pengujian uniknya sendiri. Ini memungkinkan tim QA Anda untuk menguji cabang fitur secara terpisah tanpa perlu semacam lingkungan uji dinamis yang diatur pada mesin mereka sendiri.

Pendekatan ini akan berarti hanya kode yang telah lulus pengujian manusia yang akan mencapai cabang utama Anda, sehingga menjaga integritasnya.

Saya memperkenalkan ini di beberapa perusahaan dan itu sangat membantu siklus rilis kami. Kami sekarang dapat menjadwalkan rilis secara akurat, dan kami jauh lebih baik dalam memahami apa yang mungkin membuatnya menjadi rilis berikutnya dan apa yang harus menunggu rilis berikutnya. Itu hanya memberi Anda lebih banyak kepercayaan diri.

nlyn
sumber
Saya hanya bisa berasumsi downvote itu karena seseorang tersinggung kepada saya menyebutkan alat saya sendiri. Alat ini secara khusus membahas masalah yang diungkapkan OP dalam komentar atas jawaban Thomas Owen, jadi saya tidak yakin bahwa downvote dijamin.
nlyn
Itu tampak seperti iklan untuk alat non-fosil Anda, karenanya downvotes. Aku akan memberimu satu lagi, jika aku bisa.
JohannesM