Apa yang akan menjadi praktik terbaik untuk memiliki kode sumber 'ditinjau' dalam repositori kontrol sumber?

12

Apa yang akan menjadi cara terbaik untuk mengelola kode sumber yang ditinjau dalam repositori kontrol sumber? Haruskah kode sumber melewati proses peninjauan sebelum diperiksa, atau haruskah peninjauan kode terjadi setelah kode tersebut dikomit? Jika ulasan terjadi setelah kode dicek ke repositori, lalu bagaimana itu harus dilacak?

Vimal Raj
sumber

Jawaban:

4

Google memiliki praktik peninjauan kode terbaik dari tempat mana pun yang pernah saya lihat. Semua orang yang saya temui di sana sepakat sepenuhnya tentang cara melakukan tinjauan kode. Mantra ini "ditinjau lebih awal dan sering".

Misalkan Anda menggunakan proses yang tampak seperti apa yang disarankan Graham Lee. (Yang merupakan proses yang sebelumnya saya gunakan sendiri.) Masalahnya adalah bahwa pengulas diminta untuk melihat potongan besar kode. Itu adalah upaya yang jauh lebih banyak, dan lebih sulit untuk mendapatkan pengulas untuk melakukannya. Dan ketika mereka melakukannya, lebih sulit untuk membuat mereka melakukan pekerjaan itu dengan seksama. Terlebih lagi ketika mereka melihat masalah desain, lebih sulit untuk membuat pengembang kembali dan mengulang semua kode kerja mereka untuk membuatnya lebih baik. Anda masih menangkap barang, dan itu masih berharga, tetapi Anda tidak akan menyadari bahwa Anda kehilangan lebih dari 90% dari keuntungan.

Sebaliknya, Google memiliki ulasan kode pada setiap komitmen sebelum dapat masuk ke kontrol sumber. Naif banyak orang berpikir bahwa ini akan menjadi proses yang berat. Tetapi dalam praktiknya tidak seperti itu. Ternyata lebih mudah untuk meninjau potongan-potongan kecil kode secara terpisah. Ketika masalah ditemukan, itu jauh lebih sedikit pekerjaan untuk mengubah desain karena Anda belum menulis banyak kode di sekitar desain itu. Hasilnya adalah bahwa jauh lebih mudah untuk melakukan tinjauan kode menyeluruh, dan jauh lebih mudah untuk memperbaiki masalah yang berubah.

Jika Anda ingin melakukan review kode seperti yang dilakukan Google (yang saya sangat sarankan), ada perangkat lunak untuk membantu Anda melakukannya. Google telah merilis alat mereka yang terintegrasi dengan Subversion sebagai Rietveld . Go (bahasa) dikembangkan dengan versi Rietveld yang dimodifikasi untuk digunakan dengan Mercurial. Ada penulisan ulang untuk orang yang menggunakan git bernama Gerrit . Saya juga melihat dua alat komersial yang direkomendasikan untuk ini, Crucible and Review Board .

Satu-satunya yang saya gunakan adalah versi internal Google Rietveld, dan saya sangat senang dengannya.

btilly
sumber
4

Teknik yang saya gunakan di banyak tim adalah ini:

  • pengembang dapat mengintegrasikan sumber pada cabang mereka sendiri atau repo lokal tanpa ulasan
  • pengembang dapat berintegrasi dengan trunk / master tanpa ulasan
  • kode harus ditinjau, dan komentar ulasan ditujukan, sebelum dapat diintegrasikan dari trunk / master ke cabang kandidat rilis

Merupakan tanggung jawab penulis kode untuk mencari ulasan, dan tanggung jawab pengelola cabang rilis untuk memastikan bahwa hanya kode yang ditinjau yang digabung.

Ada alat yang mendukung peninjauan kode, tetapi saya belum pernah menggunakannya. Pelacakan yang melakukan review untuk penggabungan dapat dilakukan di dalam repo. Saya telah menggunakan properti svn dan memaksa pekerjaan yang melekat pada komitmen untuk menunjukkan siapa yang mengulas apa.


sumber
2
+1: kecuali "adalah tanggung jawab pembuat kode untuk mencari ulasan". Kecuali jika manajemen menuntut peninjauan selesai, mereka akan menjadi tidak relevan. Harus ada semacam sistem penghargaan (bahkan santai atau informal) atau itu tidak akan selesai. Penjaga cabang menjawab seseorang dan memiliki semacam hadiah karena didisiplinkan dalam memeriksa ulasan kode. Potongan teka-teki ini juga penting. Bisakah Anda jelaskan mengapa orang akan disiplin dalam melakukan ini?
S.Lott
@ S.Banyak tim yang saya garap, kebanggaan profesional. Juga, jika Anda tidak mendapatkan ulasan, kode Anda tidak terintegrasi (seperti dijelaskan di atas). Karenanya kode Anda tidak masuk ke produk, dan Anda tidak melakukan pekerjaan hari / minggu / iterasi. Jika pengembang Anda tidak termotivasi untuk melakukan pekerjaan mereka, Anda memiliki masalah lebih buruk daripada mengatur repositori kontrol sumber Anda.
@ Graham Lee: "Kebanggaan Profesional"? Saya mengejek (tapi tidak punya banyak untuk melanjutkan.) "Pengembang tidak termotivasi untuk melakukan pekerjaan mereka" adalah masalahnya. Banyak manajer akan menumbangkan proses yang baik dengan menuntut rilis sebelum jadwal atau menuntut fitur tambahan dimasukkan. Faktor-faktor apa yang memotivasi untuk mencegah proses subverting? Apa yang menghentikan manajer untuk mengatakan "Kami perlu ini besok, kami tidak punya waktu untuk ulasan kode"?
S.Lott
@ S.Banyak saya tidak tahu tentang Anda, tapi saya tidak melepaskan banyak omong kosong, tidak peduli seberapa banyak manajer berpikir dia tahu lebih baik tentang bagaimana pekerjaan saya dilakukan.
@ Graham Lee: Saya mencoba untuk menghindari melepaskan kode kereta. Pertanyaan saya adalah "apa yang memotivasi tim Anda untuk menghindari manajemen merongrong proses Anda." Ini proses yang bagus, saya ingin tahu lebih banyak.
S.Lott
1

Saya tidak pernah memisahkan kode untuk ditinjau oleh kriteria yang dikomit / tidak berkomitmen - satu-satunya kriteria yang saya temui adalah tes unit dan tes integrasi berwarna hijau.

Sedangkan untuk pelacakan saya akan merekomendasikan untuk memperbarui aliran dalam pelacak masalah favorit Anda. Untuk contoh, bukan:

  • Pemilik produk -> Analis -> Pengembang -> QA -> Release engineer

Anda mungkin ingin memperkenalkan satu tahap lagi (ulasan):

  • Pemilik produk -> Analis -> Pengembang -> Peninjau -> QA -> Release engineer

Karenanya untuk setiap tiket di negara bagian yang menerapkan , Anda dapat menetapkan peninjau dan hanya tiket yang diulas akan maju ke QA.

Andrey Taptunov
sumber
1

Saya hanya memiliki satu pengalaman ulasan kode, jadi saya tidak bisa mengatakan seberapa bagusnya.

Saya bekerja dengan sekelompok kecil coders (~ 10-15), dan kami menggunakan VS Team Foundation Studio. Kami diminta untuk mengkomit kode sekali sehari, dan sebelum setiap kode komit harus ditinjau oleh orang lain dalam grup (mudah-mudahan oleh seseorang juga terlibat dalam proyek). Selama komit, nama orang itu juga dimasukkan dalam bidang.

apoorv020
sumber
Hanya melakukan satu kali per hari bagi saya sebagai bendera merah. Maaf.
btilly
Mungkin. Saya juga agak terkejut pada awalnya. Namun, itu bukan aturan yang keras dan cepat dan Anda bisa "menyimpan" perubahan lokal sebanyak yang Anda inginkan.
apoorv020
0

Saya bekerja di tim yang mengkode meninjau semua yang diperiksa pada perubahan demi perubahan selama beberapa ulasan seminggu. Ini berarti kami tidak selalu benar dengan ulasan kode tetapi mencapai apa yang kami capai.

Jadi pertama-tama, tanyakan apa yang ingin Anda capai dengan meninjau kode. Dalam kasus kami, itu bukan untuk menangkap pengembang idiot, ada asumsi kompetensi daripada asumsi ketidakmampuan. Itu memang memungkinkan tim untuk mendapatkan gambaran umum dari area lain dari sistem, dan memungkinkan beberapa keputusan desain yang dipertanyakan untuk diperbaiki sebelum mereka menjadi batu. Dengan dipertanyakan, maksud saya selalu ada lebih dari satu cara untuk menguliti kucing, dan tidak semua orang tahu ada pisau menguliti kucing sudah ada di kotak alat, jadi untuk berbicara.

Ian
sumber
0

Cara kami menangani tinjauan kode adalah bahwa setiap tugas dari perangkat lunak pelacakan proyek kami ditinjau. Saat itu kami menggunakan Mantis dan SVN. Komitmen proyek kami diikat ke dalam kedua sistem. Setiap komit harus dikaitkan dengan tugas dalam belalang. Setelah tugas selesai, status "Ready for Review" ditugaskan untuk itu.

Item RFR kemudian diambil oleh siapa saja yang memiliki waktu luang untuk ulasan atau ditugaskan ke orang tertentu untuk ditinjau. Pada hari Jumat semua item RFR harus ditinjau sebelum akhir hari sehingga tidak ada sisa untuk minggu berikutnya.

Satu-satunya masalah yang kami hadapi dalam proses ini adalah item besar yang memiliki banyak file. Untuk menangani hal ini, pembuat kode dan peninjau akan berkumpul dan pembuat kode akan menjalankan perubahan hingga peninjau memahaminya. Mereka akan melakukan review kode bersama.

Proses ini rusak ketika manajemen menentukan bahwa jika pemrograman rekan dilakukan review kode terpisah tidak perlu. Pengembang menjadi lemah tentang proses dan bug kecil bodoh mulai diperkenalkan. Akhirnya kami kembali ke proses awal dan semuanya kembali bersamaan.

Amy Patterson
sumber
0

Di tim saya, kami telah menggunakan latihan selama setahun terakhir atau yang tampaknya bekerja dengan sangat baik.

Organisasi kami menggunakan Perforce untuk kontrol versi. Perforce (per tahun yang lalu) termasuk fitur yang disebut Shelving. Dengan rak, saya bisa "menyimpan" perubahan saya untuk masalah tertentu. Mereka disimpan dalam sistem kontrol versi tetapi tidak diperiksa. Lalu saya meminta pengembang lain di tim saya untuk meninjau kode.

Pengembang lain dapat melihat perubahan saya yang tertunda di Perforce dari komputernya sendiri, dan membandingkan perubahan dengan revisi terbaru. Dia juga dapat "melepaskan dua belas" ke mesin lokalnya jika dia ingin mencoba perubahan saya. Ketika dia menyelesaikan ulasan, dia memberi tahu saya. Saya kemudian memeriksa kode saya dengan "Ditinjau oleh Bob" di akhir komentar.

Ini bekerja sangat baik untuk kita. Pertama-tama, ulasan kode pada umumnya telah terbukti sangat membantu. Selain itu, fitur rak Perforce memungkinkan kami untuk melakukan tinjauan tanpa memeriksa atau kesulitan besar meskipun tim kami tersebar secara geografis - itu sangat penting. Dan itu bekerja dengan baik.

tyrel
sumber