Tim pengembangan kami telah menggunakan strategi percabangan GitFlow dan ini sangat luar biasa!
Baru-baru ini kami merekrut beberapa penguji untuk meningkatkan kualitas perangkat lunak kami. Idenya adalah bahwa setiap fitur harus diuji / QA oleh tester.
Di masa lalu, pengembang bekerja pada fitur pada cabang fitur yang terpisah dan menggabungkannya kembali ke develop
cabang setelah selesai. Pengembang akan menguji sendiri karyanya di feature
cabang itu. Sekarang dengan penguji, kami mulai menanyakan pertanyaan ini
Di cabang mana tester menguji fitur baru?
Jelas, ada dua opsi:
- pada cabang fitur individu
- di
develop
cabang
Pengujian Di Kembangkan Cabang
Awalnya, kami percaya ini adalah cara yang pasti untuk dilakukan karena:
- Fitur ini diuji dengan semua fitur lainnya digabungkan ke
develop
cabang sejak pengembangannya dimulai. - Konflik apa pun dapat dideteksi lebih awal dari nanti
- Itu membuat pekerjaan penguji mudah, ia hanya berurusan dengan satu cabang (
develop
) setiap saat. Dia tidak perlu bertanya kepada pengembang tentang cabang mana untuk fitur apa (cabang fitur adalah cabang pribadi yang dikelola secara eksklusif dan bebas oleh pengembang yang relevan)
Masalah terbesar dengan ini adalah:
The
develop
cabang tercemar dengan bug.Ketika penguji menemukan bug atau konflik, ia melaporkannya kembali ke pengembang, yang memperbaiki masalah pada pengembangan cabang (cabang fitur ditinggalkan setelah digabungkan), dan mungkin ada lebih banyak perbaikan yang diperlukan setelahnya. Multiple commitence melakukan atau menggabungkan (jika suatu cabang diciptakan kembali dari
develop
cabang lagi untuk memperbaiki bug) membuat memutar kembali fitur daridevelop
cabang menjadi sangat sulit jika memungkinkan. Ada beberapa fitur yang digabungkan dan diperbaiki didevelop
cabang pada waktu yang berbeda. Ini menciptakan masalah besar ketika kami ingin membuat rilis dengan hanya beberapa fitur didevelop
cabang
Menguji Cabang Fitur
Jadi kami berpikir lagi dan memutuskan untuk menguji fitur pada cabang fitur. Sebelum kami menguji, kami menggabungkan perubahan dari develop
cabang ke cabang fitur (mengejar ketinggalan dengan develop
cabang). Ini bagus:
- Anda masih menguji fitur dengan fitur lain di arus utama
- Pengembangan lebih lanjut (misalnya perbaikan bug, penyelesaian konflik) tidak akan mencemari
develop
cabang; - Anda dapat dengan mudah memutuskan untuk tidak merilis fitur sampai sepenuhnya diuji dan disetujui;
Namun, ada beberapa kekurangannya
- Penguji harus melakukan penggabungan kode, dan jika ada konflik (sangat mungkin), ia harus meminta bantuan pengembang. Penguji kami berspesialisasi dalam pengujian dan tidak mampu mengkode.
- suatu fitur dapat diuji tanpa adanya fitur baru lainnya. mis. Fitur A dan B keduanya sedang diuji pada saat yang sama, kedua fitur tersebut tidak mengetahui satu sama lain karena tidak satu pun dari mereka telah digabungkan ke
develop
cabang. Ini berarti Anda harus menguji terhadapdevelop
cabang lagi ketika kedua fitur tersebut digabungkan ke cabang berkembang. Dan Anda harus ingat untuk menguji ini di masa depan. - Jika Fitur A dan B keduanya diuji dan disetujui, tetapi ketika konflik digabungkan diidentifikasi, kedua pengembang untuk kedua fitur percaya itu bukan kesalahannya sendiri / pekerjaan karena cabang fitur-fiturnya melewati tes. Ada overhead tambahan dalam komunikasi, dan kadang-kadang siapa pun yang menyelesaikan konflik frustrasi.
Di atas adalah kisah kami. Dengan sumber daya terbatas, saya ingin menghindari menguji semuanya di mana-mana. Kami masih mencari cara yang lebih baik untuk mengatasi hal ini. Saya akan senang mendengar bagaimana tim lain menangani situasi seperti ini.
Jawaban:
Cara kami melakukannya adalah sebagai berikut:
Kami menguji pada cabang fitur setelah kami menggabungkan mengembangkan kode cabang terbaru pada mereka. Alasan utamanya adalah bahwa kami tidak ingin "mencemari" kode cabang pengembangan sebelum fitur diterima. Dalam hal fitur tidak akan diterima setelah pengujian tetapi kami ingin merilis fitur lain yang sudah bergabung pada pengembangan yang akan menjadi neraka. Develop adalah cabang dari mana rilis dibuat dan dengan demikian harus lebih baik dalam keadaan yang bisa dirilis. Versi panjangnya adalah kami menguji dalam banyak fase. Lebih analitis:
Apa pendapat Anda tentang pendekatan ini?
sumber
Tidak. Jangan, terutama jika 'kita' adalah penguji QA. Penggabungan akan melibatkan penyelesaian potensi konflik, yang paling baik dilakukan oleh pengembang (mereka tahu kode mereka), dan bukan oleh penguji QA (yang harus melanjutkan untuk menguji secepat mungkin).
Buat pengembang melakukan rebase atas
feature
cabangnya di atasdevel
, dan dorongfeature
cabang itu (yang telah divalidasi oleh pengembang sebagai kompilasi dan bekerja di atasdevel
negara cabang terbaru ).Itu memungkinkan untuk:
develop
, tetapi hanya jika konflik tidak terdeteksi oleh GitHub / GitLab.Setiap kali tester mendeteksi bug, ia akan melaporkannya kepada pengembang dan menghapus cabang fitur saat ini.
Pengembang dapat:
feature
cabang.Gagasan umum: pastikan bagian penggabungan / integrasi dilakukan oleh pengembang, serahkan pengujian ke QA.
sumber
Pendekatan terbaik adalah integrasi berkelanjutan , di mana ide umumnya adalah untuk menggabungkan cabang fitur ke cabang pengembang sesering mungkin. Ini mengurangi overhead dari penggabungan nyeri.
Andalkan tes otomatis sebanyak mungkin, dan buat build secara otomatis dengan unit test oleh Jenkins. Mintalah pengembang melakukan semua pekerjaan dengan menggabungkan perubahan mereka ke cabang utama dan menyediakan unit test untuk semua kode mereka.
Penguji / QA dapat berpartisipasi dalam ulasan kode, memeriksa pengujian unit dan menulis tes integrasi otomatis untuk ditambahkan ke suite regresi ketika fitur-fitur selesai.
Untuk info lebih lanjut, periksa tautan ini .
sumber
Kami menggunakan apa yang kami sebut "emas", "perak", dan "perunggu". Ini bisa disebut prod, staging, dan qa.
Saya datang untuk menyebut ini model melting pot. Ini bekerja dengan baik bagi kami karena kami memiliki kebutuhan besar untuk QA di sisi bisnis hal karena persyaratan mungkin sulit dipahami vs teknis.
Ketika bug atau fitur siap untuk pengujian itu masuk ke "perunggu". Ini memicu jenkins build yang mendorong kode ke lingkungan pre-built. Penguji kami (bukan teknisi super) hanya menekan sebuah tautan dan tidak peduli dengan kontrol sumber. Build ini juga menjalankan tes, dll. Kami bolak-balik pada build ini benar-benar mendorong kode ke lingkungan pengujian \ qa jika pengujian (unit, integrasi, selenium) gagal. Jika Anda menguji pada sistem yang terpisah (kami menyebutnya timbal), Anda dapat mencegah perubahan dari didorong ke lingkungan qa Anda.
Ketakutan awal adalah bahwa kita akan memiliki banyak konflik antara fitur ini. Itu memang terjadi adalah fitur X membuatnya tampak seperti fitur Y sedang rusak, tetapi itu cukup jarang dan benar-benar membantu. Ini membantu mendapatkan petak luas pengujian di luar apa yang tampaknya adalah konteks perubahan. Beruntung kali Anda akan mengetahui bagaimana perubahan Anda memengaruhi pengembangan paralel.
Setelah fitur melewati QA, kita memindahkannya ke "silver" atau staging. Membangun dijalankan dan tes dijalankan lagi. Setiap minggu kami mendorong perubahan ini ke "emas" atau pohon produksi kami dan kemudian menyebarkannya ke sistem produksi kami.
Pengembang memulai perubahan mereka dari pohon emas. Secara teknis Anda bisa mulai dari pementasan karena itu akan segera naik.
Perbaikan darurat dijatuhkan langsung ke pohon emas. Jika perubahan sederhana dan sulit untuk QA, ia bisa langsung menjadi perak yang akan menemukan jalannya ke pohon pengujian.
Setelah rilis kami, kami mendorong perubahan dalam emas (prod) ke perunggu (pengujian) hanya untuk menjaga semuanya sinkron.
Anda mungkin ingin rebase sebelum mendorong ke folder pementasan Anda. Kami telah menemukan bahwa membersihkan pohon pengujian dari waktu ke waktu membuatnya tetap bersih. Ada kalanya fitur ditinggalkan di pohon pengujian terutama jika pengembang pergi.
Untuk fitur multi-pengembang besar kami membuat repo bersama yang terpisah, tetapi menggabungkannya ke pohon pengujian sama ketika kita semua siap. Hal-hal yang dilakukan cenderung memantul dari QA sehingga penting untuk menjaga perubahan Anda terisolasi sehingga Anda dapat menambahkan dan kemudian menggabungkan / squash ke pohon pementasan Anda.
"Memanggang" juga merupakan efek samping yang bagus. Jika Anda memiliki perubahan mendasar, Anda ingin duduk sebentar sementara ada tempat yang bagus untuk itu.
Juga perlu diingat bahwa kami tidak mempertahankan rilis sebelumnya. Versi saat ini selalu merupakan satu-satunya versi. Meski begitu, Anda mungkin bisa memiliki master baking tree di mana penguji atau komunitas Anda dapat melihat bagaimana berbagai kontributor berinteraksi.
sumber
Saya tidak akan bergantung pada pengujian manual saja. Saya akan mengotomatiskan pengujian setiap cabang fitur dengan Jenkins. Saya menyiapkan laboratorium VMWare untuk menjalankan tes Jenkins di Linux dan Windows untuk semua browser. Ini benar-benar browser lintas yang luar biasa, solusi pengujian lintas platform. Saya menguji fungsional / integrasi dengan Selenium Webdriver. Tes selenium saya berjalan di bawah Rspec. Dan saya menulisnya secara khusus untuk dimuat oleh jRuby di Windows. Saya menjalankan tes unit tradisional di bawah uji Rspec dan Javascript di bawah Jasmine. Saya menyiapkan pengujian tanpa kepala dengan Phantom JS.
sumber
Di perusahaan kami, kami tidak dapat menggunakan pengembangan lincah dan membutuhkan persetujuan untuk setiap perubahan oleh bisnis, ini menyebabkan banyak masalah.
Pendekatan kami untuk bekerja dengan GIT adalah ini;
Kami telah menerapkan "Git Flow" di perusahaan kami. Kami menggunakan JIRA dan hanya Tiket JIRA yang disetujui yang harus diproduksi. Untuk persetujuan Tes kami memperluasnya dengan menciptakan Cabang Uji yang terpisah.
Langkah-langkah untuk memproses Tiket JIRA adalah:
Memisahkan setiap permintaan dalam fitur sendiri memastikan, hanya perubahan yang disetujui untuk produksi.
Proses lengkapnya terlihat seperti ini:
sumber