it-swarm-id.com

Apa cara paling efektif untuk melakukan tinjauan kode?

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 secara langsung, melalui email atau menggunakan alat?
  • Apakah Anda menghindari ulasan dan menggunakan hal-hal seperti pemrograman pasangan dan kepemilikan kode kolektif untuk memastikan kualitas kode?
71
Paddyslacker

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 anggota tim lainnya, dan kemudian seluruh tim akan berkumpul dan membahasnya. Ini menghabiskan banyak waktu semua 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.

32
Dima

Saya suka ulasan kode, meskipun itu bisa menyebalkan. Alasan saya menyukai mereka adalah karena mereka lebih memperhatikan kode dan cara pandang 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 Rush melalui 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 baik 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.

13
George Marian

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) untuk benar-benar efektif dalam hal itu (60-90 menit setiap saat adalah batas efektivitas). Ulasan kode adalah cara yang bagus untuk berbagi ide dan pengetahuan. Tidak peduli berapa banyak 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 di " 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.

6
Brandon DuRette

Tidak ada alasan. Berlatih pemrograman pasangan. Ini tinjauan kode terbaik. Mekanisme lainnya 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!

3
karthiks

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

2
mezmo

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. :-)

2
Paul Nathan

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 pasangan banyak sehingga semua orang mendapat kesempatan untuk bekerja dengan kode.

2
Martin Wickman

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 set bola mata.

Alat yang sangat bagus dan gratis Papan Tinjauan bekerja sangat baik bagi kami, dan telah terbukti sebagai cara yang bagus untuk mengkomunikasikan ulasan.

2
GavinH

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 dev, saya meninjau kode saya sendiri berkali-kali agar bisa 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 pada fungsi, kelas dll.

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

2
Chris

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 tinjauan 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.

2
Brian R. Bondy

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. Tergantung pada situasi yang tepat, orang, jadwal, dll.
  • Apakah ini dilakukan secara langsung, 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 pelik, atau ketika bekerja pada infrastruktur inti atau ketika bersiap 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 semua item pengkodean, jawaban yang benar harus memperhitungkan:

  • Jenis perusahaan (mis. Startup vs. perusahaan besar)
  • Ukuran perusahaan
  • Jumlah pengembang
  • Anggaran
  • Jangka waktu
  • Beban kerja
  • Kompleksitas kode
  • Kemampuan peninjau
  • Ketersediaan pengulas
1
Michael Durrant

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 kita lakukan adalah bahwa setiap kali kita merasa seperti ulasan kode akan berguna, kita menambahkan komentar "// todo: review kode oleh joe" ke kode yang dimodifikasi. Biasanya, kita 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 tersedia pada saat itu, kami menggunakan metode review-over-the-shoulder yang baik.

Sebagai peninjau, 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 " todo ... "komentar

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

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

  • overhead yang sangat ringan
  • keterlacakan
1
Brann

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 bekerja karena itu merupakan bagian integral dari proses kami dan semua orang telah menyetujui 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 dibuat, 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.

0
Bill Leeper