Apa cara paling efektif untuk melakukan tinjauan kode? [Tutup]

71

Saya tidak pernah menemukan cara ideal untuk melakukan tinjauan kode, namun sering kali pelanggan saya membutuhkannya. Setiap pelanggan tampaknya melakukannya dengan cara yang berbeda dan saya tidak pernah merasa puas dengan mereka.

Apa cara yang paling efektif bagi Anda untuk melakukan tinjauan kode?

Sebagai contoh:

  • Apakah satu orang dianggap sebagai penjaga gerbang untuk kualitas dan ulasan kode, atau apakah tim memiliki standar?
  • Apakah Anda melakukan review kode sebagai latihan tim menggunakan proyektor?
  • Apakah ini dilakukan sendiri, melalui email atau menggunakan alat?
  • Apakah Anda menghindari ulasan dan menggunakan hal-hal seperti pemrograman pasangan dan kepemilikan kode kolektif untuk memastikan kualitas kode?
Paddyslacker
sumber
Smart Bear Software memiliki buku gratis yang disebut Best Kept Secrets of Peer Code Review . Gratis dengan pengiriman gratis. Dan sementara mereka menindaklanjuti dengan email penjualan sesekali. Mereka hampir tidak mengganggu. Ngomong-ngomong ... bukunya lumayan bagus.
John MacIntyre

Jawaban:

32

Di pekerjaan saya, kami memiliki aturan yang sangat sederhana: perubahan harus ditinjau oleh setidaknya satu pengembang lain sebelum penggabungan atau komit ke trunk . Dalam kasus kami ini berarti orang lain secara fisik duduk dengan Anda di komputer Anda dan melewati daftar perubahan. Ini bukan sistem yang sempurna, tetapi secara nyata telah meningkatkan kualitas kode.

Jika Anda tahu bahwa kode Anda akan ditinjau yang memaksa Anda untuk memeriksanya terlebih dahulu. Banyak masalah menjadi jelas saat itu. Di bawah sistem kami, Anda harus menjelaskan apa yang Anda lakukan pada pengulas, yang lagi-lagi menyebabkan Anda melihat masalah yang mungkin Anda lewatkan sebelumnya. Juga, jika sesuatu dalam kode Anda tidak segera jelas bagi pengulas, itu indikasi yang baik bahwa nama yang lebih baik, komentar, atau refactoring diperlukan. Dan, tentu saja, pemeriksa mungkin menemukan masalah juga. Selain itu, selain melihat perubahan, peninjau juga dapat melihat masalah dalam kode terdekat.

Ada dua kelemahan utama sistem ini. Ketika perubahan itu sepele, tidak masuk akal untuk memeriksanya. Namun, kita benar-benar harus tetap berpegang pada aturan, untuk menghindari kemiringan licin dari menyatakan perubahan sebagai "sepele" ketika mereka tidak. Di sisi lain, ini bukan cara yang sangat baik untuk meninjau perubahan signifikan pada sistem atau penambahan komponen baru yang besar.

Kami telah mencoba ulasan yang lebih formal sebelumnya, ketika satu pengembang akan mengirim kode email untuk ditinjau ke seluruh tim, dan kemudian seluruh tim akan berkumpul dan membahasnya. Ini menghabiskan banyak waktu setiap orang, dan akibatnya ulasan ini sedikit dan jarang, dan hanya sebagian kecil dari basis kode yang ditinjau. "Satu orang lain mengulas perubahan sebelum melakukan" telah bekerja lebih baik bagi kami.

Dima
sumber
Sangat bermanfaat, terima kasih! Saya sedang mempersiapkan sesi tim saya sendiri dan saya pikir ini bisa menjadi pendekatan yang baik.
Neonigma
13

Saya suka ulasan kode, meskipun itu bisa menyebalkan. Alasan saya suka mereka adalah karena mereka lebih memperhatikan kode dan perspektif yang berbeda. Saya percaya bahwa bahkan dengan pemrograman pasangan, kode harus ditinjau. Cukup mudah bagi dua orang yang mengerjakan kode yang sama untuk secara kolektif melakukan kesalahan yang sama yang mungkin tidak dilewatkan oleh sepasang mata yang berbeda.

Jika dilakukan sebagai grup dengan proyektor, itu harus ditinjau secara individual sebelum pertemuan. Kalau tidak, itu hanya buang-buang waktu saja.

Saya hanya melakukan tinjauan kode melalui email dan dalam grup. Secara umum, saya tidak berpikir mereka harus dilakukan sendiri. Anda merasakan sedikit tekanan lebih untuk menelusuri kode dengan seseorang melihat dari balik bahu Anda. Saya percaya bahwa alat yang dirancang untuk meninjau kode akan menjadi aset yang baik, karena dapat membantu dengan beberapa aspek biasa dan harus membuatnya lebih mudah untuk menandai bit kode yang bermasalah kemudian melalui email.

Masalah dengan meminta satu orang melakukan semua tinjauan kode adalah bahwa hal itu dapat menjadi hambatan. Dengan standar pengkodean yang terdokumentasi dan dirancang dengan baik, seharusnya tidak perlu. Bergantung pada lingkungan / jadwal rilis, mungkin ide yang bagus untuk selalu menjadikan seseorang sebagai peninjau kode siaga.

Saya percaya bahwa kepemilikan kode adalah ide yang bagus karena orang ini dapat menjadikannya prioritas untuk memahami kode itu dan berpotensi memainkan peran sebagai penjaga gerbang.

George Marian
sumber
+1 untuk "Jika dilakukan sebagai grup dengan proyektor, itu harus ditinjau secara individual sebelum pertemuan. Jika tidak, itu hanya buang-buang waktu yang menyebalkan."
AShelly
1
"Jika dilakukan sebagai grup dengan proyektor, itu adalah buang-buang waktu yang menyebalkan" .. Itu, perbaiki itu untukmu.
gbjbaanb
Ketika Anda melakukannya secara langsung, ini adalah proses yang berbeda, Anda tidak meninjau kode yang lain saat dia melihat dari balik bahu Anda. Dialah yang menjelaskan baris demi baris apa yang dia ubah, apa yang dilakukannya, dan mengapa saat Anda mendengarkannya. Itu memberi tekanan pada siapa yang membuat kode untuk menjelaskannya, bukan pada Anda untuk memahami dan memeriksanya.
Didier A.
6

Di SmartBear kami tidak hanya membuat alat peninjau kode , kami juga menggunakannya setiap hari. Ini merupakan bagian penting dari proses pengembangan kami. Kami meninjau setiap perubahan yang diperiksa.

Saya pikir itu ide buruk untuk memiliki resensi kode gatekeeper tunggal karena berbagai alasan. Orang itu menjadi hambatan dan mereka harus melakukan terlalu banyak peninjauan kode (hanya untuk menjaga proyek tetap berjalan) agar benar-benar efektif (60-90 menit setiap saat adalah batas efektivitas). Ulasan kode adalah cara yang bagus untuk berbagi ide dan pengetahuan. Tidak peduli seberapa besar superstar gatekeeper Anda, mereka dapat belajar dari orang lain di tim. Selain itu, meminta semua orang melakukan tinjauan kode juga menciptakan lingkungan "kepemilikan kode kolektif" - di mana orang merasa bahwa mereka memiliki kualitas kode (bukan hanya QA atau penjaga gerbang).

Kami memiliki whitepaper gratis tentang " Praktik Terbaik untuk Tinjauan Kode Peer " yang memiliki 11 tips untuk membuat ulasan kode efektif. Sebagian besar dari ini adalah isi yang sama dari buku yang disebutkan oleh Yohanes dalam bentuk yang lebih suling.

Brandon DuRette
sumber
1
Tautkan ke bawah ...........
Pacerier
Maaf tentang tautan yang membusuk. Saya mengedit ke URL saat ini, tetapi itu tidak akan mencegahnya terjadi lagi.
Brandon DuRette
3

Tidak ada alasan. Berlatih pemrograman pasangan. Ini tinjauan kode terbaik. Mekanisme lain menghasilkan permainan menyalahkan. Pemrograman pasangan menginduksi semangat tim dan kepemilikan kolektif. Selain itu, Anda memperdebatkan ide dengan pasangan Anda, gagal dengan cepat, mengambil tindakan korektif dan hanya kode pasangan dan kode yang ditinjau yang akan dimasukkan ke dalam Sistem Manajemen Konfigurasi (CMS). Selamat memprogram pasangan!

karthiks
sumber
Saya sangat setuju. Pemrograman pasangan memastikan bahwa kualitas kode diperiksa seperti yang tertulis. Selanjutnya, perkenalkan TDD dan Anda akan menguji, kode yang dikontrol kualitas dirilis ke cabang fitur. Uji fitur di cabang terhadap tes QA yang ditulis secara terpisah. Saat lulus, bergabunglah untuk menguasai. Kode bersih, master bersih.
dooburt
Pemrograman pasangan tidak bekerja untuk persentase yang sangat besar dari pengembang perangkat lunak dan saya berani mengatakan bahwa itu kemungkinan mengesampingkan pengembang terbaik. Kebanyakan pengembang SW menyukai pemrograman komputer karena mereka introvert, yang berarti mereka lebih suka bekerja dengan komputer daripada orang. I untuk satu, perlu masuk ke "zona" untuk menjadi efektif dan itu berarti "jangan ganggu saya". Tinggalkan saya di zona saya dan saya akan melakukan pekerjaan 4 atau 5 pengembang lain dan kemudian beberapa.
Dunk
2

Jika Anda mengerjakan proyek di mana banyak orang akan berkontribusi pada basis kode, standar perlu dibuat.

Pada titik ini, dalam pengalaman saya, yang terbaik adalah menunjuk satu orang sebagai "raja" ulasan kode jika Anda mau dan apa yang dikatakannya berlaku. Dalam hal ini, jika satu pengguna tidak mematuhi standar, raja akan menjaganya.

Sebagai seorang pengembang, saya meninjau kode saya sendiri berkali-kali agar dapat dibaca, masuk akal, dan yang lainnya. Biasanya kita menggunakan javadoc atau sejenisnya dalam bahasa tertentu yang kita kode dengan dan menggunakan tag @author untuk melampirkan kepemilikan ke fungsi, kelas dll.

Jika suatu fungsi tidak benar, kami berbicara dengan pemilik, sama dengan kelas, dll.

Chris
sumber
2

Di perusahaan saya setiap tugas ditugaskan sebagai penguji untuk menguji tugas, dan juga peninjau kode untuk meninjau kode.

Jika produk Anda sudah dirilis dan Anda ingin memastikan Anda tidak melakukan kesalahan (seperti kebocoran pegangan, atau kebocoran memori) ulasan kode adalah hal yang hebat. Saya pikir selama pengembangan awal sebelum merilis produk Anda, ulasan kode mungkin terlalu banyak bekerja.

Jika tim Anda memiliki semua pengembang senior, maka peer review masih bermanfaat. Setiap orang terkadang melakukan kesalahan. Jika tim Anda memiliki beberapa senior dan beberapa junior, maka biarkan pengembang senior melakukan ulasan kode, tetapi masih memiliki ulasan kode untuk kode senior juga.

Satu hal penting tentang tinjauan kode adalah dapat menangkap kesalahan yang kita buat, tetapi itu bukan pengganti untuk pengujian.

Brian R. Bondy
sumber
2

Saya sarankan menggunakan ulasan kode jika Anda tidak melakukan pemrograman pasangan.

Bukan untuk membantah pro dan kontra dengan pasangan, tetapi sulit untuk membantah efek positif dari memiliki kode Anda terus-menerus ditinjau oleh (setidaknya) orang lain. Kode ini bahkan ditulis dan dirancang oleh (setidaknya) dua programmer - hampir tidak bisa lebih baik dari itu. Saya mengatakan "setidaknya" karena imo, Anda harus mencoba untuk beralih pasang banyak sehingga semua orang mendapat tembakan di bekerja dengan kode.

Martin Wickman
sumber
2

Salah satu hal yang saya coba lakukan dalam ulasan kode yang saya ikuti adalah setelah meninjau kode sendiri, saya melakukan analisis statis kode, menggunakan alat-alat seperti Findbugs, PMD, JavaNCCP et al, dan melihat masalah yang ditemukan alat-alat ini di dalam kode yang akan ditinjau. Saya terutama ingin melihat apa pun yang memiliki tingkat kompleksitas yang luar biasa tinggi, meminta mereka untuk menjelaskan mengapa tingkat kompleksitas itu diperlukan, atau mengapa kerentanan yang disarankan tidak penting.

YMMV

mezmo
sumber
2

Di mana saya saat ini bekerja, kami memproduksi perangkat keras dan perangkat lunak yang berinteraksi dengan mereka yang masuk ke infrastruktur kritis. Karenanya kami memiliki fokus yang sangat tinggi pada kualitas rilis. Kami menggunakan varian Inspeksi Fagan dan memiliki proses peninjauan formal. Kami bersertifikat ISO 9001, di antara sertifikasi lainnya.

Industri infrastruktur kritis sangat tertarik pada keandalan dan pengulangan yang sama. :-)

Paul Nathan
sumber
2

Di perusahaan saya, kami memiliki ulasan kode wajib untuk programmer junior, dan ulasan sukarela untuk manula. Tidak ada peninjau kode yang ditunjuk, permintaan peninjauan dikirim ke semua pengembang.

Sistem ini berfungsi dengan baik - ulasan dilakukan ketika waktu mengizinkan dan perubahan dapat ditinjau oleh beberapa perangkat bola mata.

Alat Review Board yang luar biasa dan gratis berfungsi sangat baik bagi kami, dan telah terbukti sebagai cara yang bagus untuk mengkomunikasikan ulasan.

Selamat
sumber
2
ulasan sukarela untuk manula. Saya telah bekerja pada banyak proyek di mana programmer senior pasti dapat menggunakan ulasan kode ...
Michel
1

Di perusahaan saya, kami tidak pernah melakukan tinjauan kode formal sebelum checkin, kecuali kami memodifikasi beberapa produksi yang sangat kritis dan tidak punya waktu untuk melakukan proses QA standar kami.

Apa yang kami lakukan adalah bahwa setiap kali kami merasa ulasan kode akan berguna, kami menambahkan komentar "// todo: review kode oleh joe" ke kode yang dimodifikasi. Biasanya, kami memilih Joe karena dia memiliki kode yang dimodifikasi, tetapi jika kriteria pemilihan ini tidak berlaku (biasanya, memang demikian), kami hanya memilih orang lain secara acak. Dan tentu saja, jika Joe kebetulan ada pada saat itu, kami menggunakan metode review-over-the-shoulder yang baik.

Sebagai pengulas, satu-satunya hal yang harus Anda lakukan adalah mencari secara berkala seluruh kode untuk "// todo: review kode oleh saya" , tinjau perubahannya, dan periksa kembali kode tanpa komentar "todo ..."

Jika ada masalah, kami kembali ke metode komunikasi tradisional (mail / chat / dll).

Metode ini memberi kami dua kualitas utama yang kami cari ke dalam sistem peninjauan:

  • overhead yang sangat ringan
  • keterlacakan
Brann
sumber
1

Kami menemukan cara paling efektif untuk melakukan tinjauan kode adalah 1-on-1 menggunakan github untuk menunjukkan perbedaan di cabang.


  • Apakah satu orang dianggap sebagai penjaga gerbang untuk kualitas dan ulasan kode, atau apakah tim memiliki standar?

    • Tergantung pada ukuran tim - tim 3 akan memiliki 1 senior yang memiliki pengetahuan terbaik tentang praktik yang baik, sedangkan tim 12 dapat memiliki 3 atau 4 orang yang akan memenuhi peran itu.
  • Apakah Anda melakukan review kode sebagai latihan tim menggunakan proyektor?

    • Secara langsung. 1 lawan 1 tidak terlalu mengancam. Terkadang dilakukan di area komunal meskipun untuk penyebaran pengetahuan. Bergantung pada situasi yang tepat, orang, jadwal, dll.
  • Apakah ini dilakukan sendiri, melalui email atau menggunakan alat?

    • Secara langsung. Kami menggunakan git dan github dan memiliki peninjauan kode yang hebat dan alat perbandingan yang berbeda untuk mempermudah peninjauan kode.
  • Apakah Anda menghindari ulasan dan menggunakan hal-hal seperti pemrograman pasangan dan kepemilikan kode kolektif untuk memastikan kualitas kode?

    • Kami mencoba melakukan keduanya seperlunya. Itu berarti bahwa ketika terjebak pada masalah yang sangat sulit, atau ketika bekerja pada infrastruktur inti atau ketika mempersiapkan diri untuk liburan atau meninggalkan perusahaan, berpasangan dapat dilakukan untuk berbagi dan mentransfer pengetahuan. Sebagian besar kode atau kode yang memiliki lebih dari perubahan kosmetik harus ditinjau di akhir juga.

Seperti halnya semua item pengkodean, jawaban yang benar harus memperhitungkan:

  • Jenis perusahaan (misalnya perusahaan baru vs. perusahaan besar)
  • Ukuran perusahaan
  • Jumlah pengembang
  • Anggaran
  • Jangka waktu
  • Beban kerja
  • Kompleksitas kode
  • Kemampuan peninjau
  • Ketersediaan pengulas
Michael Durrant
sumber
0

Saya telah bekerja di banyak perusahaan dan melihat banyak proses. Tim saya saat ini menangani ini yang terbaik yang saya lihat sejauh ini.

Kami menggunakan proses pengembangan yang gesit dan sebagai bagian dari itu kami memiliki gerbang yang harus dilalui setiap cerita. Salah satu gerbang itu adalah ulasan kode. Cerita tidak bergerak untuk menguji sampai peninjauan kode selesai.

Selain itu kami menyimpan kode kami di github.com. Jadi setelah pengembang menyelesaikan perubahan mereka, mereka memposting tautan ke komit pada cerita.

Lalu kami memberi tag sesama pengembang untuk ditinjau. Github memiliki sistem komentar yang memungkinkan seseorang untuk berkomentar langsung pada baris kode yang dimaksud. Github kemudian mengirim email ke distro, jadi kadang-kadang kami benar-benar mendapatkan perhatian ekstra dari beberapa tim kami yang lain.

Proses ini telah bekerja dengan sangat baik bagi kami. Kami memang menggunakan alat proses tangkas yang membuat posting komit mudah serta memfasilitasi komunikasi.

Jika suatu masalah sangat lengket, kami akan duduk dan membahasnya. Ini berfungsi karena ini merupakan bagian integral dari proses kami dan semua orang setuju tentang bagaimana proses itu bekerja. Kami dapat memindahkan tiket kembali ke proses yang sedang berlangsung jika ulasan kode menghasilkan pengerjaan ulang yang diperlukan dan kemudian dapat ditinjau kembali setelah perubahan dilakukan, atau pengulas dapat mencatat pada cerita bahwa memperbaiki item sudah cukup dan tidak perlu ditinjau kembali.

Jika pengujian menendang sesuatu kembali, itu semua jalan kembali ke dalam proses dan perubahan lebih lanjut juga ditinjau.

Bill Leeper
sumber