Apa itu pola pikir yang membantu ketika melakukan tinjauan kode formal


14

Tim kami baru-baru ini mulai melakukan tinjauan kode terhadap setiap checkin.

Saat tim memimpin saya mencoba menemukan keseimbangan antara memberikan terlalu banyak saran, mengganggu pengembang dan mengurangi output tim, dan melepaskan kode yang saya tulis berbeda.

Adakah bukti, studi, atau panduan dari sumber-sumber terkenal yang menyarankan pendekatan yang membantu?


2
Pertanyaan pertama untuk bertanya pada diri sendiri: mengapa Anda melakukan tinjauan kode?
Philip Kendall

1
Saya akan tergoda untuk memberikan semacam "kepentingan" pada setiap umpan balik. Kerentanan keamanan kritis = sangat penting. Bug = kepentingan normal. Pemformatan kode = tidak penting (alat menyalahkan yang tidak memformat ulang sesuka Anda dan bukan programmer).
Brendan

Mungkin menarik bagi Anda
Laiv

Cara seseorang mendekati atau merespons ulasan kode mengatakan banyak tentang kemampuan mereka untuk mempertahankan objektivitas dan berpikir kritis. Terkadang pengembang perlu pelatihan untuk tujuan ini secara khusus.
Frank Hileman

Jawaban:


15

Ingatlah tujuan menyeluruh: pada akhirnya, hanya perangkat lunak yang berfungsi

Tinjauan rekan dan tinjauan kode check-in memiliki tujuan untuk meningkatkan kualitas . Tetapi tidak ada yang lebih buruk untuk kualitas selain seorang pengembang yang terdemotivasi. Sebagai pemimpin tim, peran Anda bukan untuk mengesahkan kode sebagai sesuatu yang bisa Anda tulis sendiri, tetapi untuk mempromosikan kerja tim dan memastikan hasil keseluruhan.

Tetapkan cakupan yang jelas untuk ulasan Anda

Ingat: ini bukan kode Anda, tetapi kode tim. Jadi, fokuslah pada hal-hal yang bisa mengarah pada hasil yang salah.

  • Jangan menantang cara pengembang Anda telah memilih untuk memenuhi persyaratan, kecuali Anda yakin itu tidak akan berhasil (tapi itu seharusnya sudah gagal tes, bukan?)

  • Jangan menantang kinerja yang buruk kecuali jika ada ukuran yang menunjukkan di mana masalahnya. Optimalisasi prematur adalah akar dari semua kejahatan ;-)

  • Jika Anda menemukan desain atau struktur perangkat lunak yang menantang, maka tanyakan pada diri Anda mengapa itu tidak tertangkap muka! Kode yang sudah ditulis mahal untuk ditulis ulang. Jika ini terjadi, saatnya untuk meninjau pengembangan perangkat lunak Anda dan praktik kerja tim setidaknya sebanyak kode.

  • alamat kepatuhan dengan standar pengkodean yang ditetapkan. Ini adalah topik yang paling menjengkelkan untuk didiskusikan baik bagi peninjau maupun yang ditinjau. Ketika semua orang setuju untuk menggunakan nama kelas dengan huruf besar dalam tim Anda dan satu orang tanpa kelas, apakah ini masalah selera? Atau efektivitas kerja tim dan risiko?

By the way, jika Anda merasa standar pengkodean tidak layak untuk dibahas, hapus itu membentuk standar Anda dan jangan buang waktu dan energi di atasnya.

Kembangkan kepemimpinan: sisi manusiawi dari tinjauan

Sebagai pemimpin tim, di sini Anda dapat menemukan peluang untuk mengembangkan diri dan tim Anda, di luar formalitas kendali mutu:

  • Ulasan kode jauh lebih menyenangkan untuk semua orang, jika ada pertukaran yang benar. Berikan kesempatan kepada pengembang Anda untuk menunjukkan keterampilan mereka (dan ya, mungkin Anda bisa belajar sesuatu yang baru).
  • Milikilah kritik terbuka pada pilihan desain, atau standar yang ada. Terkadang orang dapat mengatasi frustrasi dengan lebih baik, hanya karena mereka dapat membicarakannya.
  • Latih junior Anda: jangan ragu untuk memberikan saran, atau refactoring orientasi untuk iterasi berikutnya. Jangan lakukan ini dengan senior: di dunia lain peran Anda masing-masing bisa berubah.

Manfaatkan praktik lain

Ada beberapa hal yang dapat Anda hindari dalam tinjauan kode:

  • Penggunaan penganalisa kode statis dalam rantai pembuatan Anda dapat mengotomatiskan temuan bug umum , atau konstruksi non portable, jauh sebelum peer review. Beberapa alat bahkan dapat memeriksa beberapa standar pengkodean Anda .
  • Jika Anda memiliki standar tentang tata letak kode, gunakan pra-komit cetakan cantik atau format serupa untuk memformat kode seperti yang diperlukan secara otomatis. Jangan pernah menghabiskan waktu untuk sesuatu yang bisa dilakukan oleh perangkat lunak untuk Anda lebih baik dan tanpa mendiskusikan :-)
  • Akhirnya, kualitas tidak hanya dijamin oleh ulasan, tetapi juga oleh tes. Jika Anda belum menggunakan TDD , pikirkan secara terpisah tentang tinjauan kode.

"Perangkat lunak yang berfungsi"? Sangat tidak berguna. "Perangkat lunak yang benar" - itulah yang saya sukai!
Frank Hileman

@FrankHileman Memang! Dan akurat, dapat diandalkan, dapat digunakan, performan, dan cocok untuk tujuan. Ini hanya masalah mendefinisikan istilah "bekerja" dengan tepat ;-)
Christophe

3

Sebagai pengembang kita, pola pikir harus tetap terbuka dan skeptis pada saat yang sama.

Terbuka, karena kita tidak tahu kapan pengembang mungkin mengejutkan kita, dan skeptis tentang ide kita sendiri karena kita sering lupa bahwa dalam rekayasa perangkat lunak tidak ada satu pun cara yang benar untuk mengimplementasikan solusi. Alasan di balik solusi kami bisa masuk akal bagi kami dan tidak membuat yang lain untuk yang lain. Di balik bau kode mungkin ada ide bagus. Mungkin, pengembang tidak menemukan cara untuk mengekspresikannya dengan benar.

Karena kami (manusia) sangat buruk dalam berkomunikasi, jangan membuat asumsi yang salah, berkeinginan untuk bertanya kepada pemilik kode tentang kode yang Anda tinjau. Jika dia gagal dalam mengkode ide di bawah standar perusahaan, karena pengembang utama bersedia membimbingnya juga.

Di sini pendekatan subyektif. Pendekatan objektif, IMO, dijelaskan dengan sangat baik dalam pertanyaan ini .

Selain tautan di atas, serangkaian tujuan yang harus dicapai (rawatan, keterbacaan, portabilitas, kohesi tinggi, kopling longgar, dll.) Tidak harus Sepuluh Perintah. Anda (tim) harus dapat menyesuaikan tujuan-tujuan ini ke titik di mana keseimbangan antara kualitas dan produktivitas membuat pekerjaan lebih nyaman dan "layak huni bagi pengembang".

Saya akan menyarankan penggunaan alat analisis kode statis untuk mengukur kemajuan kualitas sesuai dengan tujuan ini. Alat-alat seperti SonarQube memberi kami Gerbang Kualitas dan Profil Kualitas yang dapat disesuaikan sesuai dengan prioritas kami. Ini juga memberi kami pelacak masalah, di mana pengembang dapat ditargetkan dengan masalah yang terkait dengan bau kode, bug, praktik yang meragukan, dll.

Alat semacam ini bisa menjadi titik awal yang baik, tetapi seperti yang saya katakan tetap skeptis. Anda dapat menemukan beberapa aturan di Sonar menjadi tidak berarti bagi Anda, jadi silakan mengabaikannya atau menghapusnya dari profil kualitas Anda.


2

Campur tangan dengan kode pengembang untuk perubahan kosmetik akan mendemotivasi pengembang tetapi dalam keadaan absolut itu harus dilakukan. Pemimpin harus menemukan keseimbangan antara memberikan ulasan kode yang berguna dan belajar untuk melepaskan kekurangan kecil. https://blog.smartbear.com/sqc/for-the-new-team-lead-the-first-six-things-you-should-know/


apa "keadaan absolut" yang membutuhkan perubahan kosmetik?
Ewan

1
Ketika pedoman pengkodean tidak diikuti, kesalahan desain kode yang dapat menyebabkan kebocoran memori adalah contoh ketika lead tidak mampu melepaskannya.
Nishanth Menon

Tautan Anda sudah mati
Greenonline

1

Beberapa hal yang perlu diingat:

  1. Ini tentang psikologi seperti halnya tentang teknologi, jadi tidak ada aturan emas di sini.
  2. Apa yang dimaksud dengan orang bukan hanya tentang pengetahuan tetapi juga tentang budaya dan posisi dalam hierarki.
  3. Jika ini adalah permainan "lama" (perusahaan yang stabil dan mapan), tim yang terintegrasi dengan baik di mana orang yang saling percaya biasanya memiliki nilai lebih tinggi daripada kode yang sedang ditinjau. Seharusnya tidak digunakan untuk memaksa hal-hal yang tidak mutlak diperlukan untuk melanjutkan. Iblis ada dalam rincian ...
  4. Jika ini adalah permainan "pendek" (proyek sampingan, R&D, banyak freelancer dalam kelompok) biaya CR sering mengatasi petualangan yang datang dari melakukannya. Dan sikap harus "hanya membuatnya wajan"

-4

Hanya ada dua hal yang penting.

  1. Apakah ada tes otomatis untuk semua persyaratan?
  2. Apakah mereka semua lulus?

Segala sesuatu yang lain adalah kosmetik dan harus diperdebatkan tentang bir daripada ditegakkan sebagai gerbang.

Jika Anda mengikuti pandangan ini, maka itu membatasi Anda untuk area fokus yang sempit.

Apakah persyaratannya baik? Yang idealnya Anda harus tahu sebelum memulai tugas, yaitu kinerja, keamanan dll semua harus ada di sana

Apakah tes itu tes yang bagus? Setiap kasus tepi terjawab, apakah mereka menguji persyaratan dengan baik dll. Pada akhirnya: Dapatkah Anda menulis tes yang untuk persyaratan yang ada tetapi yang akan gagal?


3
Apakah Anda akan mengatakan kode itu tanpa jeda baris apa pun, dengan hanya nama variabel satu huruf dan jika tidak, dapat diterima? Semua tes akan lulus, tetapi tidak dapat dipertahankan .
Philip Kendall

Dalam ulasan kode? Iya. Begitu Anda masuk ke penamaan semua itu subyektif. Anda memilih contoh ekstrem, tetapi ada banyak kasus di mana orang menggunakan iterator huruf tunggal atau menyingkat kode menjadi fungsi garis tunggal yang akan dianggap praktik yang baik
Ewan
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.