Strategi untuk berurusan dengan tes A / B dan Gitflow

8

Saya ingin tahu strategi apa yang Anda gunakan untuk menangani uji A / B dari aplikasi dan gitflow Anda.

Gambaran:

Kami adalah tim yang terdiri dari 6 programmer yang mengembangkan dan memelihara Aplikasi besar. Sejauh ini kami telah bekerja di gitflow dengan beberapa add-on pada proses yang ditambahkan oleh kami yang bekerja dengan sangat baik selama beberapa tahun. Dengan cara yang disederhanakan, kami menggunakan:

  • cabang utama (hanya kode versi yang diterbitkan)
  • cabang rilis yang menyatu dalam master setelah tes redundansi akhir
  • perbaikan terbaru yang hanya berinteraksi dengan cabang utama dalam kasus ekstrim
  • mengembangkan yang mengakumulasi modul yang dikembangkan saat mereka selesai dan diuji, akhirnya bergabung ke rilis.
  • / fitur yang merupakan kelompok fitur yang bercabang dari pengembangan dan setelah mereka selesai dan melewati berbagai tahap pengujian bergabung kembali ke mengembangkan fungsi menambahkan
  • / fix_develop yang merupakan sekelompok fitur yang berisi perbaikan untuk bug yang ditemui dari versi sebelumnya yang tidak terlalu mendesak untuk memulai perbaikan terbaru.

Sekarang, seiring perkembangan aplikasi, dengan tim UX dan tim pemangku kepentingan lainnya, kami mengadopsi strategi pengujian A / B yang lebih kuat di mana rilis baru akan memiliki 2 versi, dan berdasarkan bagaimana pengguna kami menyukai satu versi atau yang lain akan menjadi master terakhir versi selama mereka masuk akal bagi pengguna kami.

Setelah menjelaskan itu, pertanyaannya adalah : Strategi apa yang telah Anda gunakan atau rekomendasikan untuk mengelola kode versi pengujian A / B di gitflow?

Opsi yang saya anggap tidak konsisten, misalnya bercabang cabang A dan B dari master dan kemudian bergabung dengan cabang rilis ke satu atau yang lain, di mana saya tidak tahu bagaimana berurusan dengan memisahkan kode yang terkandung dari cabang rilis ke fitur ranting. Pilihan lain adalah membuat rilis A, dan cabang B dan mengembangkan cabang A dan B yang terdengar seperti terlalu banyak cabang dan kebingungan untuk rekan tim saya.

Saya mendengar pendapat Anda, terima kasih!

Pembaruan: Aplikasi yang kami kembangkan adalah Aplikasi Android dan kami menerapkan pengujian A / B menggunakan platform PlayStore untuk pengujian A / B, yang mengharuskan untuk membuat dua APK dan mengunggah salah satunya dengan rollout%. Agar lebih mudah, dan karena perubahan terkadang lebih besar dari sekadar posisi tombol, kami memutuskan untuk tidak menambahkan sakelar kami sendiri untuk pengujian A dan B dalam satu APK tunggal.

alexm
sumber
Bukankah ini hanya cabang fitur?
Robert Harvey
1
masalahnya adalah cabang-cabang ini akan pergi ke toko, jadi harus memecah semua protokol pengujian jika saya hanya mengunggah kode dari cabang fitur. Bagaimana menurut anda?
alexm
Anda akan menjalani seluruh proses pemeriksaan untuk cabang yang mungkin tidak pernah menjadi produk aktual? Bukankah itu pada dasarnya menggandakan pekerjaan Anda?
Robert Harvey
Bagaimanapun ini hanya cara saya melihatnya sekarang, ide saya dengan posting adalah untuk belajar bagaimana orang lain menangani masalah ini dan menerapkan apa yang saya pikir akan masuk akal bagi kita
alexm
itu menggandakan pekerjaan, tetapi ada hal-hal penting yang perlu kita uji dan buktikan jika mereka bekerja untuk pengguna kita yang cukup kompleks, ini semua dilakukan untuk memperbesar bagian bawah fanel pengguna aktif kita, jadi itu banyak pekerjaan, tetapi masuk akal untuk menguji
alexm

Jawaban:

11

Cara saya selalu melihatnya dilakukan adalah memiliki basis kode tunggal yang mampu melayani kedua halaman / tampilan / formulir.

yaitu. Fiturnya ditandai dan digunakan dengan dua atau lebih konfigurasi, atau metode 'apakah pengguna mendapat A atau B' itu sendiri adalah bagian dari aplikasi.

Dalam hal ini Anda hanya memiliki satu versi kode, sehingga kontrol sumber Anda tidak ikut berperan.

Ini jauh lebih disukai daripada alternatif menjaga beberapa versi basis kode dengan fitur yang berbeda. Ini cenderung menyimpang sangat cepat dan Anda akhirnya harus mengimplementasikan fitur yang sama beberapa kali.

Secara umum saya akan berhati-hati dan membatasi ruang lingkup perbedaan A dan B dapat memiliki keduanya sehingga mereka dapat dicolokkan ke metode saklar generik (lihat A atau lihat B misalnya) dan agar Anda dapat memahami alasan untuk setiap statistik yang berbeda Anda keluar dari pengujian Anda. misalnya apakah kenaikan penjualan dikaitkan dengan warna tombol atau formula harga?

Edit. untuk klarifikasi Aplikasi

Anda masih dapat memiliki fitur flag di aplikasi play store dan mengemas basis kode menjadi lebih dari satu apk.

Ewan
sumber
3
Ya, inilah yang akan saya sarankan: penandaan fitur. Satu-satunya masalah dengan itu adalah meningkatkan kompleksitas perangkat lunak Anda, kecuali jika Anda bermaksud untuk menghapus fitur (tidak terpakai) dalam rilis lanjutan.
Robert Harvey
1
ya, saya tidak mendukung fitur bendera biasanya, tapi ini adalah cara saya telah melakukannya dan melihatnya selesai. Saya yakin kita semua telah melihat kengerian yang dapat Anda peroleh dengan memiliki beberapa versi langsung dari produk yang sama di cabang. Jadi saya secara alami akan menghindar dari pendekatan itu sendiri.
Ewan
2
Anda masih dapat memiliki pengaturan konfigurasi dan mendapatkan dua aplikasi dari basis kode yang sama. Tentu aplikasi Anda akan lebih besar, tetapi .... mempertahankan beberapa basis kode adalah hal yang paling sulit
Ewan
2
tentu saja aliran semacam itu dapat diabstraksikan menjadi sebuah pandangan
Ewan
1
Ya, untuk tim pengembangan usaha, saya sarankan begitu. Bagi saya, dalam lingkungan pengembangan perusahaan yang berkomitmen secara intensif, aliran pengembangan basis trunk jauh lebih mudah. Lihat di sini: trunkbaseddevelopment.com . Sam Newman memiliki pembicaraan yang bagus tentang sakelar fitur di youtube: youtube.com/watch?v=lqRQYEHAtpk .
ivenxu
1

Saya setuju dengan @Ewan bahwa fitur bendera adalah cara untuk pergi. Dengan begitu Anda dapat menambahkan sesuatu dalam proses pembuatan yang akan menggunakan APK untuk tes A atau uji B. Tetapi jika menginginkan sebuah ide yang tidak menggunakan flag fitur, berikut adalah salah satu yang belum saya coba.

Anda bisa menarik kode umum ke pustaka terpisah di repositori terpisah. Kemudian, setiap versi tes memiliki repositori sendiri dengan gitflow dan master cabang sendiri yang dapat digunakan.

Ini akan membutuhkan lebih banyak upaya di awal karena semua kode umum harus ditarik ke pustaka kemudian dirujuk dalam repositori. Tetapi setelah pengaturan awal, saya percaya ini dapat merampingkan pengembangan fitur baru ke dalam uji A / B.

** Sekali lagi, ini hanya sebuah ide dan bukan sesuatu yang telah saya lakukan secara pribadi.

DFord
sumber
Ya itu masuk akal, kami memiliki perpustakaan dengan fungsi utama (C ++) dan kemudian Aplikasi konsumen (Android dan iOS) yang hanya berfungsi sebagai antarmuka dan layanan, apa yang kami ubah hanyalah cara aplikasi disajikan kepada pengguna, jadi ya, itu akan bekerja untuk tes A / B di Android. Namun, saya ingin memiliki kode terpusat dalam satu repositori, jadi saya mencari strategi gitflow di tengah: "menyalin semua cabang untuk A dan B" dan "memiliki hanya satu fitur A dan B atau cabang normal yang berarti repo kotor ".
alexm
0

Karena aplikasi Anda sudah berjalan dan memiliki beberapa pengguna, saya sarankan salah satu opsi berikut:

  • Saya sangat menyarankan Anda melakukan pemikiran desain sebelum menerapkan fitur besar baru;
  • Jika Anda masih perlu melakukan pengujian A / B, saya sarankan Anda tetap menggunakan gitflow normal dan memiliki cabang A dan cabang B ;

Kontrol sumber

Mempertimbangkan pengujian A / B, yang ingin saya jelaskan adalah:

  • Cabang : berisi kode tentang versi aplikasi. EG: A_HomeActivity, A_SettingsActivity, dll.
  • Cabang B : berisi kode tentang versi B aplikasi. EG: B_HomeActivity, B_SettingsActivity, dll.

Dari titik ini, Anda dapat menggunakan 2 strategi:

  • Buat dua versi yang sama sekali berbeda: A.apk dan B.apk ; atau
  • Buat cabang B juga mengandung kode dari cabang A, dan menyediakan aplikasi yang mampu menggunakan dua arus . Pengguna hanya mengunduh satu aplikasi dan memiliki opsi untuk mengaktifkan aliran baru untuk tujuan evaluasi. Saya telah melihat sesuatu seperti ini dilakukan oleh Bitbucket , di mana navigasi yang sama sekali baru tersedia untuk beberapa pengguna untuk evaluasi; setelah beberapa periode navigasi baru ini menjadi yang default.

Either way, setelah percobaan Anda cukup menghapus kode untuk fitur / aliran usang.

Emerson Cardoso
sumber