Apa tujuan dari Peninjauan Kode

76

Saya sedang dalam proses mencoba menjual organisasi saya berdasarkan nilai ulasan kode. Saya telah bekerja di beberapa tempat di mana mereka bekerja. Saya telah melihat mereka terbiasa dengan pilihan gaya styling, dan keputusan fungsional, dan saya telah melihat mereka digunakan sebagai tidak lebih dari pengecekan usus untuk memastikan tidak ada yang berbahaya sedang dilaksanakan. Perasaan saya adalah bahwa tujuan yang paling efektif adalah di antara dua opsi.

Jadi, apa tujuan dari Peninjauan Kode?

SoylentGray
sumber
16
Terkait (tentang Stack Overflow): Tujuan Ulasan Kode
yannis
16
- Bagaimana Anda tahu jika Anda telah menulis kode yang mudah dibaca dan mudah dirawat? - Rekan Anda memberi tahu Anda setelah meninjau kode. 'Dasar Pemikiran: Anda tidak dapat menentukan ini sendiri karena Anda tahu lebih banyak sebagai penulis daripada yang dikatakan oleh kode itu sendiri. Komputer tidak dapat memberi tahu Anda, karena alasan yang sama dengan itu tidak dapat memberi tahu apakah sebuah lukisan itu seni atau bukan. Oleh karena itu, Anda memerlukan manusia lain - yang mampu memelihara perangkat lunak - untuk melihat apa yang telah Anda tulis dan memberikan pendapatnya. Nama formal dari proses tersebut adalah "Peer Review" . '
nyamuk
3
"Apa tujuan dari tinjauan kode?" untuk mencegah pengembang menulis kode terribad , dan mengarahkan mereka ke arah yang benar.
zzzzBov
7
Tampaknya Ulasan Kode mungkin memiliki jawaban tidak langsung untuk pertanyaan ini .. cukup telusuri pertanyaan dan jawaban di sana, tujuan tinjauan kode menjadi sangat jelas :)
Mathieu Guindon
3
Saya bertanya-tanya berapa kali programmer menemukan bug dalam kode mereka sendiri hanya melalui proses sederhana menjelaskan kode mereka selama peninjauan?
kapak-tidak aktif

Jawaban:

75

Ada beberapa alasan mengapa Anda ingin melakukan tinjauan kode:

  • Pendidikan pengembang lainnya. Pastikan semua orang melihat modifikasi yang terkait dengan perbaikan atau peningkatan cacat sehingga mereka dapat memahami seluruh perangkat lunak. Ini sangat berguna ketika orang sedang mengerjakan komponen yang perlu diintegrasikan atau pada sistem yang kompleks di mana satu orang dapat pergi untuk waktu yang lama tanpa melihat modul-modul tertentu.
  • Menemukan cacat atau peluang untuk perbaikan. Baik kode yang dapat dikirim maupun kode uji dan data dapat diperiksa untuk menemukan kelemahannya. Ini memastikan bahwa kode pengujian kuat dan valid dan bahwa desain dan implementasi konsisten di seluruh aplikasi. Jika perlu ada perubahan tambahan yang dibuat, itu menangkap peluang lebih dekat ke titik masuk.

Ada beberapa kasus bisnis untuk melakukan tinjauan:

  • Menemukan cacat atau masalah yang perlu diperbaiki lebih dekat dengan injeksi mereka. Ini lebih murah.
  • Berbagi pemahaman tentang sistem dan pelatihan silang. Lebih sedikit waktu bagi pengembang untuk melakukan perubahan dengan cepat.
  • Identifikasi kemungkinan penyempurnaan pada sistem.
  • Membuka implementasi untuk memastikan bahwa penguji menyediakan cakupan yang memadai. Mengubah kotak hitam menjadi kotak abu-abu atau kotak putih dari perspektif pengujian.

Jika Anda mencari diskusi yang komprehensif tentang manfaat dan strategi implementasi untuk ulasan sejawat, saya akan merekomendasikan memeriksa Ulasan Peer dalam Perangkat Lunak: Panduan Praktis oleh Karl Wiegers .

Thomas Owens
sumber
7
+1, saya pikir Anda melihat poin utama dengan baik, dengan prioritas yang benar. Menjaga desain tetap konsisten saat berhadapan dengan rekan kerja yang terus-menerus menemukan solusi "WTF" yang sangat kreatif hanya dapat dicapai dengan ulasan kode reguler.
Doc Brown
Kami melakukan tinjauan kode dalam kode JavaScript kami, terutama untuk memastikan pengembang mematuhi standar yang diuraikan, menggunakan pola yang ditetapkan saat merancang modul, menggunakan komponen yang disediakan dan tidak mulai melakukan pengkodean ninja (sengaja atau tidak) di sekitar masalah yang sudah kami miliki solusinya. untuk. Mereka juga hebat untuk menemukan seseorang secara tidak sengaja menulis thiskonteks, tidak menggunakan .hasOwnPropertydi tempat seharusnya, dll, dll. - Jadi, terutama untuk standar. Dalam bahasa yang dikelola seperti C # Anda tentu saja memiliki beberapa alasan lebih sedikit daripada bahasa dinamis.
Tidak
1
Sejauh ini jawaban Anda hanya menyinggung perbaikan kode kebenaran. Gagal menangani keterbacaan / pemeliharaan kode, yang jarang dapat secara akurat dikuantifikasi oleh pengembang yang sedang berkembang.
ArTs
51

Ulasan Kode adalah alat untuk transfer pengetahuan .

  • Ketika pengembang meninjau kode masing-masing, mereka mendapatkan keakraban di semua area sistem. Ini mengurangi faktor bus proyek, dan membuat pengembang lebih efisien ketika harus melakukan pemeliharaan pada bagian dari sistem yang tidak mereka tulis.

  • Ketika seorang programmer junior meninjau kode senior, programmer junior dapat mengambil trik jika tidak hanya dipelajari melalui pengalaman. Ini juga bisa berfungsi sebagai koreksi terhadap kode yang terlalu rumit.

    Peninjauan kode menyeluruh akan sering memerlukan pemeriksaan terhadap berbagai dokumentasi. Ini cara yang bagus untuk belajar bahasa atau API.

  • Ketika seorang programmer senior meninjau kode junior, ini adalah kesempatan untuk menyelesaikan masalah sebelum diterjemahkan ke dalam hutang teknis. Peninjauan kode bisa menjadi pengaturan yang baik untuk membimbing programmer junior.

Ulasan kode bukan tentang:

  • ... menemukan bug. Itulah gunanya tes. Masih sering terjadi bahwa tinjauan kode menemukan beberapa masalah.

  • ... pilih-pilih masalah gaya - puas dengan satu gaya, dan gunakan pemformat otomatis untuk menegakkannya. Tetapi ada banyak hal yang tidak dapat diperiksa oleh alat otomatis. Ulasan kode adalah tempat yang baik untuk memastikan kode didokumentasikan atau didokumentasikan sendiri.

amon
sumber
2
poin terakhir Anda tentang masalah gaya nitpicking Saya tidak sepenuhnya setuju dengan - kami baru saja memiliki pengalaman yang mengerikan meninjau kode pengembang junior & keluhan yang paling mencolok sebenarnya pada gaya, tetapi bukan jenis masalah gaya yang mudah diprogram diberlakukan .... waaaaaay terlalu banyak jika pernyataan untuk edgecases dll; masalah yang ya Anda dapat membuat komputer menemukan dalam beberapa kasus, tetapi kebanyakan bukan masalah yang layak ditemukan secara umum dengan skrip. Membutuhkan 30 detik pembacaan bagi kita untuk mulai melihatnya, 30 lainnya untuk menjelaskan kepada dev & mudah-mudahan memperbaiki masalah ini. Masih kaget dengan hal itu: /
Pasif
7
@pacifist. Itu bukan tipe gaya yang dijabarkan penjawab. Gaya adalah tentang lokasi kawat gigi, lekukan dan sebagainya. Jika pengembang junior Anda menggunakan terlalu banyak jika pernyataan, Anda memiliki masalah yang sama sekali berbeda dari gaya; atribut umum pengkodean GAYA adalah tidak mempengaruhi kinerja. Dan saya pikir sejumlah besar pernyataan jika akan memengaruhi kinerja.
Pimgd
12
Saat melakukan tinjauan, saya sering melihat hal-hal yang menurut saya "ini terlihat seperti bug", lalu saya menulis uji kasus khusus untuk membuktikan bahwa itu adalah bug. Jadi salah satu dari banyak tujuan ulasan kode adalah menemukan bug. Itu sebabnya saya pikir sudut pandang "review kode atau tes" sedikit terlalu bermata tunggal.
Doc Brown
2
Selain @DocBrown ada kasus yang tidak dapat dengan mudah diuji - data balapan, beberapa jenis deadlock, livelock, perilaku / nilai yang tidak terdefinisi (kebanyakan dalam C / C ++ tetapi urutan elemen dalam tabel hash di juga tidak ditentukan) atau sumber daya leek (membuka file dalam satu lingkaran mungkin merupakan ide yang buruk bahkan dengan GC). Beberapa dari hal-hal itu dapat dideteksi dengan analisis statis-kompiler yang cukup pintar .
Maciej Piechotka
2
@pacifist contoh spesifik Anda akan benar-benar diledakkan dalam ulasan kode. Ini juga akan menjadi bendera merah untuk setiap penganalisa kode statis (Kompleksitas siklis 17!). Peninjauan kode akan dengan cepat mengidentifikasi fungsi ini sebagai masalah dengan gaya semantik (atau bahkan algoritme!). Namun. Masalah seperti ini bukan hanya masalah "gaya". Jika Anda memperlakukannya seperti itu maka Anda akan memiliki beberapa kode yang benar-benar jahat di repositori Anda segera; itu hanya "gaya", setelah semua.
Pimgd
12

Hal paling berharga yang saya dapatkan secara pribadi dari tinjauan kode adalah keyakinan bahwa kode tersebut jelas bagi orang lain. Apakah variabel diberi nama dengan jelas? Apakah tujuan dari setiap potongan kode cukup jelas? Apakah ada yang ambigu diklarifikasi dengan komentar? Apakah kasus tepi dan nilai yang valid untuk parameter diuraikan dalam komentar dan diperiksa dalam kode?


sumber
2
ini sepertinya tidak menawarkan sesuatu yang substansial daripada 4 jawaban sebelumnya
agas
2
@gnat: Jawaban lainnya membahas transfer pengetahuan dan menemukan bug. Ini penting, tetapi ada lebih banyak tinjauan kode.
1
sejauh yang saya tahu, ada bagian yang lebih masuk akal dalam jawaban ini : "Jika Anda mencari diskusi yang komprehensif tentang manfaat dan strategi implementasi untuk ulasan sejawat, saya akan merekomendasikan memeriksa Ulasan Peer dalam Perangkat Lunak: Panduan Praktis oleh Karl Wiegers. " Jawaban ini juga mencakup: "koreksi terhadap kode yang terlalu rumit"
agas
2
@gnat Ini menekankan aspek berbeda dari poin yang diangkat dalam jawaban lain. Pernahkah Anda bingung dengan kode Anda sendiri yang Anda tulis enam bulan lalu? Peninjauan kode memungkinkan Anda mempercepat proses itu. Jika kolega Anda bingung dengan kode Anda, Anda masih bisa mengklarifikasi sementara masalahnya masih segar dalam ingatan Anda.
200_success
1
@ 200_sukses mungkin. Tapi poin ini, jika memang ada, terlihat sangat buruk disajikan. Bahkan komentar Anda berhasil mengomunikasikannya lebih baik daripada "jawaban" ini. Belum lagi itu hanya mengulangi apa yang ditunjukkan dalam komentar sebelumnya yang mengacu pada jawaban kanonik yang menjelaskan hal ini dalam pertanyaan terkait
nyamuk
7

Saya ingin menambahkan dua area yang tidak tercakup oleh jawaban hebat lainnya:

Salah satu alasan bagus untuk ulasan kode adalah efek Hawthorne yang dalam kasus kami diterjemahkan menjadi: Jika Anda tahu seseorang akan melihat kode Anda sesudahnya maka Anda jauh lebih mungkin untuk menulisnya dengan lebih baik.

Alasan bagus lainnya adalah untuk praktik pembangunan yang aman dan lebih baik. Kita hanya perlu melihat kegagalan Apple (garis duplikasi kode yang tidak disengaja) atau bug Heartbleed (kegagalan dasar dalam validasi input) untuk memahami pentingnya tinjauan kode yang tepat dalam siklus hidup pengembangan yang aman.

Chris Knight
sumber