Saya seorang kontraktor yang baru-baru ini memulai dengan sebuah perusahaan.
Tim adalah 3 pengembang yang terdiri dari 2 pengembang tingkat menengah hingga menengah, dengan pengembang lainnya di tingkat yang sama segera dimulai, dan saya sendiri (6 Tahun xp). Untuk kedua pengembang yang sudah ada, ini adalah pekerjaan pertama mereka di luar universitas / perguruan tinggi, dan mereka belum pernah memiliki pengembang senior yang mengawasi pekerjaan mereka sebelumnya.
Tidak ada kebijakan kontrol Versi eksplisit. Pengembang melakukan semua pengembangan pada bagasi dan kemudian menyebar ke produksi langsung dari mesin pengembangan mereka. Tim yang ada tidak terbiasa dengan percabangan.
Saya mengubah semua ini dan memperkenalkan CI, TDD test / staging / server produksi dll, bersama dengan kebijakan kontrol versi untuk melengkapi ini.
Sistem kontrol sumber adalah TFS, yang belum pernah saya gunakan sebelumnya. Ini dikonfigurasi sebagai satu repositori raksasa.
Saya telah menuliskan beberapa petunjuk untuk mereka, tetapi apakah ada hal lain yang harus saya tambahkan / ubah, dengan mengingat pengalaman tim?
Kebijakan Kontrol Versi
Pengembangan dilakukan di bagasi
Jika perubahan diperkirakan memakan waktu lebih dari satu minggu maka itu harus dilakukan pada cabang, dengan penggabungan reguler dari batang ke cabang untuk menghentikan keduanya tidak sinkron.
Cabang rilis dibuat untuk kode produksi. Cabang itu seharusnya hanya berisi kode stabil. Kami dapat memiliki satu cabang rilis yang diperbarui dari bagasi sekali per sprint, atau kami dapat membuat cabang rilis terpisah untuk setiap minggu.
Jika perbaikan bug mendesak yang mempengaruhi kode produksi perlu dilakukan, maka akan dilakukan pada cabang rilis, dan bergabung kembali ke bagasi.
Jika kita mengadopsi strategi satu cabang rilis maka trunk akan digabung ke cabang rilis sekali per sprint menjelang akhir sprint.
Jika kami mengadopsi strategi terpisah cabang per rilis, maka trunk TIDAK PERNAH digabungkan ke dalam cabang Release
Dalam beberapa skenario mungkin perlu melakukan perbaikan bug dua kali pada cabang yang berbeda, jika cabang terlalu banyak menyimpang. Jika kita melakukan sprint pendek maka ini seharusnya tidak terlalu sering terjadi.
Saya berencana memiliki tiga server. Uji lingkungan yang selalu menjalankan kode terbaru dalam repo. Lingkungan pementasan yang menjalankan kandidat rilis terbaru untuk pementasan / pengujian kode Kandidat dan tujuan UAT, dan lingkungan produksi.
Alasan mengapa saya berencana untuk melakukan ini adalah sejauh ini klien hanya melakukan perangkat lunak internal. Proyek terbaru untuk klien media profil tinggi, dan perasaan saya adalah bahwa tim perlu mengadopsi model pengembangan yang lebih profesional daripada apa yang mereka lakukan saat ini.
Misalnya saat ini, pengguna dapat menelepon tim dengan laporan bug. Para pengembang menemukan dan memperbaiki bug, melakukan uji cepat uji bola mata pada mesin mereka sendiri dan kemudian menyebar langsung ke produksi. Tidak ada pengujian otomatis atau apa pun.
Kalau dipikir-pikir saya pikir fitur cabang adalah langkah terlalu jauh dan saya akan menghapusnya.
Jadi intinya adalah a) tidak bercabang sama sekali) b) cabang rilis dan trunk, dan c) cabang rilis per rilis dan trunk.
Saya condong ke arah yang terakhir. Pikiran awal saya adalah bahwa saya akan memiliki kandidat rilis dan rilis untuk ditayangkan di server yang terpisah (UAT / Produksi) pada saat yang sama, tetapi secara efektif trunk adalah kandidat rilis pada setiap titik waktu, jadi satu cabang per rilis condong ke arah gila. Satu-satunya pemikiran saya adalah jika kita tidak ingin para pemangku kepentingan kita melihat kode pengembangan maka kita mungkin memerlukan cabang kandidat rilis terpisah, tetapi YAGNI dan semua itu .....
Jawaban:
Untuk tim yang terdiri dari 3-4 devs, Anda mengusulkan terlalu banyak cabang CARA.
Setiap cabang yang Anda buat adalah overhead tambahan yang disertai dengan biaya (waktu yang dihabiskan untuk menggabungkan, melacak apa yang ada di sana, dll). Anda perlu memastikan bahwa manfaat yang Anda dapatkan dari memiliki cabang lebih besar daripada biayanya.
Perlu diingat bahwa satu-satunya manfaat nyata bagi cabang adalah isolasi kode. Itu berarti Anda perlu alasan konkret untuk ingin memiliki kode yang terisolasi.
Memiliki cabang rilis terpisah untuk setiap sprint adalah gila. Mengapa Anda memerlukan kode dari satu sprint yang diisolasi dari kode untuk yang berikutnya? Mengapa tidak hanya memiliki cabang rilis stabil tunggal yang dapat dibawa maju dengan setiap sprint?
Hampir semua fitur baru non-sepele akan memakan waktu setidaknya seminggu secara real-time setelah Anda memperhitungkan pengembangan, pengujian pengembang, gangguan harian dan kegiatan lainnya, dll.
Juga, apa itu "penggabungan reguler"? Harian? Mingguan? Setiap penggabungan yang Anda lakukan membutuhkan waktu - Anda perlu memastikan cabang gabungan target membangun & berjalan setelah perubahan Anda. Pada tim kecil, penggabungan yang sering adalah banyak overhead.
Kami memiliki tim yang terdiri dari 4 pengembang yang bekerja pada basis kode 1+ juta baris dan ini adalah cara kami beroperasi:
Satu aturan utama adalah: jangan periksa kode yang tidak dibuat.
Itu dia. Sederhana, mudah dimengerti, mendapatkan isolasi yang kita butuhkan (kapan saja kita dapat membuat versi rilis untuk versi apa pun).
Sisi baiknya untuk memiliki semua pekerjaan pengembangan dilakukan pada satu cabang:
sumber
Anda telah menuliskan beberapa petunjuk untuk mereka, tetapi Anda belum menjelaskan mengapa pendekatan Anda lebih baik daripada yang sudah mereka gunakan . Ini mungkin bermasalah. Jika Anda dalam semangat "Kami akan melakukannya dengan cara saya, karena saya memiliki enam tahun pengalaman profesional, dan Anda tidak" (dan membaca pertanyaan Anda, tampaknya persis seperti ini), siap untuk dibenci oleh anggota tim Anda yang akan mencoba melakukan apa pun yang mereka tidak bisa menerapkan konsep Anda.
Apakah mereka memiliki masalah yang perlu diselesaikan? Sangat penting untuk menjawab pertanyaan ini terlebih dahulu, karena mereka benar-benar memiliki masalah dan akan menyambut saran Anda, atau mereka baik-baik saja berfungsi seperti yang mereka lakukan saat ini, dan Anda hanya mendorong mereka cara Anda bekerja , hanya karena Anda lebih suka bekerja dengan cara ini.
Akhirnya, memaksa mereka untuk menggunakan cabang dapat memiliki dampak yang sangat negatif . Bekerja dengan bagasi mudah, terutama di lingkungan Agile. Pengembang melakukan perubahan pada trunk, akhirnya menangani konflik kecil, dan perubahan tersebut segera digunakan oleh platform Integrasi Berkelanjutan. Dengan cabang:
Pengembang harus berpikir di mana perubahan itu harus terjadi,
Seseorang harus mengelola cabang dan menggabungkan dari cabang ke bagasi,
Penggabungan antar cabang dilakukan lebih jarang daripada melakukan, yang berarti bahwa seseorang harus berurusan dengan konflik yang lebih besar dan lebih sulit untuk ditangani daripada konflik antara dua komitmen,
Setiap komit tidak selalu menemukan jalannya ke Integrasi Berkelanjutan, yang menunda informasi yang didapat pengembang tentang efek komit (terutama regresi).
Fakta bahwa:
membuat segalanya lebih buruk. Saya bekerja di tim programmer yang tidak berpengalaman, di mana seorang manajer yang tidak berpengalaman memutuskan untuk bermain dengan cabang. Ini menghasilkan banyak ( banyak ) waktu yang terbuang dan merupakan hal yang ingin Anda hindari untuk sebuah proyek yang memiliki tenggat waktu.
sumber
Seperti kata Mainma, berhati-hatilah dengan percabangan. Anda menyebutkan percabangan setiap beberapa minggu, apakah benar-benar perlu memiliki banyak cabang?
Atau, Anda juga bisa memiliki model 'tarik' dan bukan model dorong. Jika Anda menggunakan Git atau Mercurial, Anda bisa meminta server integrasi memvalidasi perubahan sebelum mendorong ke server pusat. Di TFS, Anda dapat melakukan hal serupa menggunakan check-in yang terjaga keamanannya . Dengan cara ini, Anda dapat memiliki validasi dan menghindari kompleksitas cabang.
sumber