Praktek Agile: Tinjauan Kode - Gagal meninjau atau mengemukakan masalah?

53

Pada akhir sprint 2 minggu dan tugas memiliki ulasan kode, dalam ulasan kami menemukan fungsi yang berfungsi, dapat dibaca, tetapi cukup panjang dan memiliki sedikit bau kode. Pekerjaan refactor yang mudah.

Kalau tidak, tugas tersebut sesuai dengan definisi yang dilakukan.

Kami punya dua pilihan.

  • Gagal meninjau kode, sehingga tiket tidak ditutup dalam sprint ini, dan kami sedikit mendapat semangat, karena kami tidak dapat melewatkan tiket.
  • Refactor adalah pekerjaan kecil, dan akan selesai dalam sprint berikutnya (atau bahkan sebelum dimulai) sebagai cerita setengah poin yang sangat kecil.

Pertanyaan saya adalah: apakah ada masalah atau pertimbangan yang melekat dengan menaikkan tiket di belakang ulasan, bukannya gagal?

Sumber daya yang saya dapat temukan dan telah membaca ulasan kode detail 100% atau tidak sama sekali, biasanya, tetapi saya menemukan itu biasanya tidak realistis.

Erdrik Ironrose
sumber
23
Jadi, jika Anda tidak dapat gagal dalam review kode untuk itu, apa tujuan dari review tersebut? Saat ini tampaknya bagi Anda itu untuk melihat apakah sesuatu berfungsi , tentu saja itu tugas tes atau tester, bukan review kode.
VLAZ
21
Saya pikir sebagian besar jawaban kehilangan poin penting dalam pertanyaan Anda: Jika tidak, tugas tersebut sesuai dengan definisi yang telah dilakukan. Apakah masalah yang Anda sebutkan bagian dari apa yang tim Anda anggap sebagai tugas "belum selesai"? Atau masalah ini tidak dipertimbangkan dalam tugas "selesai" apa yang seharusnya? Jika definisi Anda tentang "selesai" termasuk "tidak ada kode bau" maka tugas tersebut tidak selesai.
Josh Bagian
1
@ErdrikIronrose jadi sepertinya perubahannya tidak sesuai standar dan mungkin tidak (dengan mudah) dirawat. Meskipun komentar Anda yang lain tampaknya menunjukkan bahwa perubahan itu bukan bagian dari permintaan, dalam hal ini seharusnya tidak menjadi bagian dari tinjauan kode. Jika seseorang menulis kode yang benar dan up-to-standar di sebelah peretasan jelek yang ada, maka, silakan, naikkan tiket untuk memperbaiki peretasan jelek dan lulus tinjauan kode saat ini. Jika seseorang menulis kode yang benar tetapi tidak memenuhi standar (seperti pertanyaan Anda menunjukkan), maka jangan menyelesaikan tinjauan kode sampai selesai dengan benar.
VLAZ
9
@ErdrikIronrose: Ah, jadi kode cara bau tidak dibuat saat mengerjakan cerita yang sedang ditinjau , tetapi sudah ada? Itu perbedaan penting - pertimbangkan mengedit pertanyaan.
sleske
1
@vlaz Anda harus membuat jawaban dari komentar Anda
Ister

Jawaban:

67

Adakah masalah atau pertimbangan yang melekat dengan mengangkat tiket di belakang ulasan, bukannya gagal?

Tidak secara inheren. Sebagai contoh, implementasi dari perubahan saat ini mungkin telah menggali masalah yang sudah ada di sana, tetapi tidak diketahui / nampak sampai sekarang. Gagal tiket tidak adil karena Anda akan gagal untuk sesuatu yang tidak terkait dengan tugas yang sebenarnya dijelaskan.

dalam ulasan kami menemukan suatu fungsi

Namun, saya menduga bahwa fungsi di sini adalah sesuatu yang ditambahkan oleh perubahan saat ini. Dalam hal ini, tiket harus gagal karena kode tidak lulus tes bau.

Di mana Anda akan menarik garis, jika tidak di mana Anda sudah menariknya? Anda jelas tidak berpikir kode ini cukup bersih untuk tetap berada dalam basis kode dalam bentuk saat ini; jadi mengapa Anda kemudian mempertimbangkan untuk memberikan tiket?

Gagal meninjau kode, sehingga tiket tidak ditutup dalam sprint ini, dan kami sedikit mendapat semangat, karena kami tidak dapat melewatkan tiket.

Tampaknya bagi saya seolah-olah Anda secara tidak langsung berpendapat bahwa Anda mencoba memberikan tiket ini suatu keuntungan bagi moral tim, daripada menguntungkan kualitas basis kode.

Jika itu masalahnya, maka prioritas Anda beragam. Standar kode bersih tidak boleh diubah hanya karena itu membuat tim lebih bahagia. Kebenaran dan kebersihan kode tidak bergantung pada suasana hati tim.

Refactor adalah pekerjaan kecil, dan akan selesai dalam sprint berikutnya (atau bahkan sebelum dimulai) sebagai cerita setengah poin yang sangat kecil.

Jika implementasi tiket asli menyebabkan bau kode, maka itu harus diatasi di tiket asli. Anda hanya boleh membuat tiket baru jika bau kode tidak dapat secara langsung dikaitkan dengan tiket asli (misalnya, skenario "jerami yang mematahkan punggung unta").

Sumber daya yang saya dapat temukan dan telah membaca ulasan kode detail 100% atau tidak sama sekali, biasanya, tetapi saya menemukan itu biasanya tidak realistis.

Lulus / gagal pada dasarnya adalah keadaan biner , yang secara inheren semua atau tidak sama sekali.

Apa yang Anda maksudkan di sini, saya pikir, adalah lebih dari yang Anda menafsirkan ulasan kode memerlukan kode sempurna atau jika gagal, dan itu tidak terjadi.

Kode tidak boleh rapi, hanya harus memenuhi standar kebersihan yang masuk akal yang digunakan oleh tim / perusahaan Anda. Ketaatan pada standar itu adalah pilihan biner: ia menganut (lulus) atau tidak (gagal).

Berdasarkan uraian masalah Anda, jelas bahwa Anda tidak berpikir bahwa ini mematuhi standar kode yang diharapkan, dan karenanya tidak boleh dilewatkan karena alasan tersembunyi seperti moral tim.

Kalau tidak, tugas tersebut sesuai dengan definisi yang dilakukan.

Jika "itu menyelesaikan pekerjaan" adalah tolok ukur terbaik untuk kualitas kode, maka kita tidak perlu menciptakan prinsip kode bersih dan praktik yang baik untuk memulai - kompiler dan pengujian unit akan menjadi proses peninjauan otomatis kami dan Anda tidak perlu ulasan kode atau argumen gaya.

Flater
sumber
26
"Kebenaran dan kebersihan kode tidak bergantung pada suasana hati tim." Memberi +1 untuk ini saja, namun satu-satunya peringatan untuk seluruh jawaban ini adalah mencapai tenggat waktu. Jika gagal tinjauan kode ini berarti fitur yang sangat dinanti tidak akan masuk ke rilis berikutnya, Anda harus menyeimbangkan kebersihan kode dengan kebutuhan klien. Tetapi ingat kode yang salah yang memenuhi tenggat waktu klien hari ini adalah masalah produksi besok.
Greg Burghardt
11
Jawaban bagus - tegas tetapi tidak kasar. Satu titik tangensial mungkin juga: bagaimana kita bisa melakukan tinjauan kode sangat terlambat dalam sprint sehingga refactor yang mudah tidak dapat dilakukan tanpa menyebabkan seluruh sprint gagal?
Daniel
@Aniel: Pengembang mungkin terlibat, atau mungkin masalah perencanaan. Waktu antara menyelesaikan tugas dan menyelesaikan sprint biasanya minimal karena (di dunia yang ideal) orang akan menyelesaikan tugas terakhir sprint mereka di sekitar waktu penutupan sprint. Anda tidak dapat mengambil periode diperpanjang untuk meninjau / memperbaiki; atau sebagai alternatif, mungkin pengembang tidak hadir / tersedia untuk sisa sprint.
Flater
8
+1 Pemrogram dapat merasa senang ketika mereka telah menulis kode yang baik. Melewati kontrol kualitas Anda bukanlah jawaban untuk meningkatkan moral. Penolakan sesekali untuk masalah kecil tidak mungkin membuat moral menderita. Jika moral Anda menderita karena gagal secara teratur untuk lulus kontrol kualitas, jawabannya adalah melakukan sesuatu tentang kegagalan QC sepanjang waktu, bukan menjatuhkan standar.
jpmc26
1
@GregBurghardt: Karena saya telah melihat argumen tenggat waktu disalahgunakan di banyak perusahaan, saya cenderung hanya setuju untuk memberikan ulasan buruk jika dan hanya jika tugas untuk refactoring langsungnya dibuat dan direncanakan untuk sprint pasca-rilis pertama. Biaya waktu tambahan menambahkan penghalang entri yang berarti untuk menghindari kualitas kode.
Flater
38

Pada akhir sprint 2 minggu dan sebuah tugas memiliki ulasan kode [...] Pekerjaan refactor yang mudah.

Mengapa itu muncul di akhir sprint? Peninjauan kode harus terjadi segera setelah Anda berpikir kode tersebut selesai (atau bahkan sebelumnya). Anda harus memeriksa definisi Anda tentang selesai dengan setiap cerita yang Anda selesaikan.

Jika Anda mendapati diri Anda menyelesaikan cerita sesaat sebelum ulasan demo / sprint Anda sehingga Anda tidak dapat melakukan tugas yang "kecil", maka Anda perlu lebih baik dalam memperkirakan pekerjaan Anda. Ya, cerita itu belum selesai. Bukan karena ulasan kode, tetapi karena Anda tidak berencana untuk memasukkan perubahan dari tinjauan kode. Itu seperti memperkirakan "pengujian" untuk mengambil waktu nol, karena "jika Anda memprogramnya dengan benar, itu hanya akan berfungsi, kan?". Itu bukan cara kerjanya. Pengujian akan menemukan kesalahan dan ulasan kode akan menemukan hal-hal yang berubah. Jika tidak, itu akan membuang-buang waktu.

Jadi untuk meringkasnya: ya, DoD adalah biner. Lulus atau gagal. Peninjauan kode bukan biner, seharusnya lebih seperti tugas yang sedang berlangsung. Anda tidak bisa gagal . Ini sebuah proses dan pada akhirnya selesai. Tetapi jika Anda tidak merencanakan dengan baik, Anda tidak akan sampai pada tahap "selesai" dan terjebak dalam wilayah "tidak selesai" di ujung sprint. Itu tidak baik untuk moral, tetapi Anda perlu memperhitungkannya dalam perencanaan.

tidak ada
sumber
5
Inilah jawaban yang muncul di benak saya. Jika setiap cerita diimplementasikan dengan cabang masing-masing, maka jangan menunda meninjau dan menggabungkan cabang sampai akhir sprint. Sebaliknya, buat permintaan tarik segera setelah cabang diyakini siap, dan tetap lakukan iterasi pada cabang itu sampai benar-benar dilakukan, disetujui, dan digabung. Jika proses itu belum selesai pada akhir sprint maka ceritanya belum selesai.
Daniel Pryden
20

Sederhana: Anda meninjau perubahannya . Anda tidak meninjau kondisi program sebaliknya. Jika saya memperbaiki bug di fungsi 3.000 baris, maka Anda memeriksa bahwa perubahan saya memperbaiki bug, dan hanya itu. Dan jika perubahan saya memperbaiki bug, Anda menerima perubahan itu.

Jika Anda pikir fungsi terlalu panjang, maka Anda memasukkan permintaan perubahan untuk membuat fungsi lebih pendek, atau membaginya, setelah perubahan saya diterima, dan permintaan perubahan itu kemudian dapat diprioritaskan sesuai dengan kepentingannya. Jika keputusan dibuat bahwa tim memiliki hal-hal yang lebih penting untuk dilakukan, maka itu akan ditangani kemudian.

Akan konyol jika Anda bisa memutuskan prioritas pengembangan selama tinjauan kode, dan menolak perubahan saya karena alasan itu akan menjadi upaya untuk memutuskan prioritas pembangunan.

Singkatnya, benar-benar dapat diterima untuk menerima perubahan kode dan segera menaikkan tiket berdasarkan hal-hal yang Anda lihat saat meninjau perubahan. Dalam beberapa kasus Anda bahkan akan melakukan hal ini jika perubahan itu sendiri menyebabkan masalah: Jika lebih penting untuk memiliki perubahan sekarang daripada untuk memperbaiki masalah. Misalnya jika orang lain diblokir, menunggu perubahan, maka Anda ingin membuka blokir mereka sementara kode dapat ditingkatkan.

gnasher729
sumber
4
Saya pikir dalam hal ini perubahannya adalah fungsi yang terlalu panjang - jika Anda telah memperkenalkan fungsi 3000 baris yang sebelumnya tidak ada (atau fungsi 10 baris sebelumnya).
user3067860
3
Pada prinsipnya jawaban ini benar sekali. Dalam praktik ..... Jika semua pengembang percaya dan mempraktikkan praktik pengkodean yang baik seimbang terhadap usaha maka Anda mungkin tidak akan sering mengalami masalah ini dan kemudian jawaban ini tepat. Namun .... sepertinya selalu ada satu atau dua pengembang yang melakukan semuanya dengan cepat dan kotor untuk menghemat 5 menit sekarang; sedangkan mereka mengabaikan jam sampai berhari-hari atau berbulan-bulan mereka menambah pekerjaan yang akan terjadi kemudian. Dalam kasus tersebut, jawaban ini hanyalah kemiringan yang licin karena harus memulai dari awal dan mendesain ulang seluruh sistem.
Dunk
+1, meskipun saya pikir Anda harus mengulangi ulang paragraf terakhir untuk membuatnya menonjol bahwa memeriksa kode dengan masalah harus menjadi pengecualian mutlak. Maksudku, hanya saja seseorang diblokir tidak cukup alasan. Gagal menjalankan sprint tunggal juga tidak cukup alasan, dan tentu saja bukan alasan yang dapat digunakan berulang kali.
Frax
@ user3067860 Jika Anda telah mengubah fungsi 10 baris menjadi fungsi 3000 baris - maka jelas gagal. Jika Anda telah mengubah fungsi 3000 baris menjadi 3010 - maka mungkin lewat. Tetapi bagaimana jika Anda telah mengubah fungsi 100 baris (biasanya agak terlalu besar) menjadi fungsi 300 baris ( pasti terlalu besar)?
Martin Bonner mendukung Monica
9

Gagal meninjau kode, sehingga tiket tidak ditutup dalam sprint ini, dan kami sedikit mendapat semangat, karena kami tidak dapat melewatkan tiket.

Ini tampaknya menjadi masalah.
Secara teori Anda tahu apa yang harus Anda lakukan, tetapi mendekati tenggat waktu sehingga Anda tidak ingin melakukan apa yang Anda tahu harus Anda lakukan.

Jawabannya sederhana: Lakukan apa pun yang akan Anda lakukan jika Anda mendapat kode yang sama untuk ulasan kode pada hari pertama sprint. Jika itu dapat diterima maka seharusnya sekarang. Jika tidak, itu tidak akan sekarang.

xyious
sumber
"Pelanggan yang terhormat Anda tidak dapat memiliki fitur Anda selama 2-3 minggu karena kode kami berfungsi, tetapi kami tidak menyukai tampilannya", ... tolong jangan pergi ke pesaing kami ... atau beri tahu CEO !
RandomUs1r
6
@ Pelanggan RandomUs1r seharusnya tidak memiliki informasi seperti itu. Itu tidak dilakukan karena tidak ada cukup waktu untuk itu dan hanya itu. Apakah pelanggan menentukan bagaimana kode harus ditulis? Jika Anda memanggil tukang listrik untuk memperbaiki kabel di rumah Anda, apakah Anda pergi "Ganti saja kabelnya tetapi jangan repot-repot memeriksa apakah itu kabel yang benar"? Atau apakah Anda memberi tahu dokter Anda "Saya sakit - beri saya beberapa pil tetapi jangan mendiagnosis saya terlebih dahulu"? Ulasan kode harus menjadi bagian yang tidak terpisahkan dari pekerjaan, bukan sesuatu yang ditentukan oleh pelanggan.
VLAZ
1
@ RandomUs1r: "" Pengembang yang terhormat, mengapa fitur tidak selesai? " - jawabannya harus" karena kami tidak punya cukup waktu untuk membangunnya ke tingkat kualitas yang dapat diterima ", mungkin diikuti oleh" Kami dapat memberikannya untuk Anda jika Anda mau berkompromi pada kualitas ".
Bryan Oakley
1
@ RandomUs1r jadi pada dasarnya Anda ingin mengorbankan kualitas kode sekarang kemungkinan membuatnya jauh lebih sulit untuk mengimplementasikan fitur nanti. Perbaikan 2 hari sekarang bisa sangat menghemat 4 minggu kemudian. Maka itu adalah "Pelanggan yang terhormat, Anda tidak dapat memiliki fitur Anda selama 2-3 minggu karena butuh waktu lama untuk menerapkan fitur kecil sekarang". Apakah ini merupakan akhir dari sprint atau apakah ini merupakan tenggat waktu utama? Jika itu adalah tenggat waktu utama, saya bisa melihat penggabungan sekarang, menulis perbaikan selama 2 hari ke depan dan menaikkan PR setelah tenggat waktu.
xyious
5
Yang saya katakan adalah bahwa jika standar Anda berbeda pada hari pertama dan hari terakhir sprint maka Anda tidak memiliki standar dan kualitas Anda pasti akan sia-sia.
xyious
5

Bagian besar dari proses ini adalah memutuskan apa yang dilakukan berarti dan tetap berpegang pada senjata Anda. Ini juga berarti tidak melakukan terlalu banyak komitmen dan menyelesaikan ulasan sejawat Anda pada waktunya untuk membiarkan pengujian memastikan pekerjaan juga selesai secara fungsional.

Ketika datang ke masalah ulasan kode, ada beberapa cara Anda bisa mengatasinya, dan pilihan yang tepat tergantung pada beberapa faktor.

  • Anda bisa membersihkan kode sendiri dan biarkan orang itu tahu apa yang Anda lakukan. Memberikan beberapa peluang pendampingan, tetapi ini harus menjadi hal yang cukup sederhana yang dapat dilakukan dalam beberapa menit.
  • Anda dapat menendang balik dengan komentar tentang apa yang salah. Jika penanganan kesalahan dilakukan dengan buruk, atau pengembang terus mengulangi kesalahan yang sama, ini dapat dibenarkan.
  • Anda dapat membuat tiket dan menimbulkan hutang teknis. Tiket ada di sana untuk memastikan Anda membayarnya nanti. Mungkin Anda berada dalam krisis waktu dan dalam proses meninjau perubahan Anda melihat masalah yang lebih besar tidak secara langsung terkait dengan perubahan tersebut.

Intinya adalah bahwa ketika Anda selesai dengan pekerjaan Anda harus selesai dengan itu. Jika ada masalah yang lebih besar dari apa yang dikerjakan pengembang, angkat bendera dan lanjutkan. Tetapi Anda tidak harus berada dalam posisi di mana ada jam sebelum akhir sprint dan Anda baru saja mendapatkan ulasan sejawat. Baunya seperti terlalu memaksakan sumber daya Anda, atau menunda-nunda ulasan sejawat. (bau proses).

Berin Loritsch
sumber
4

Tidak ada masalah inheren dengan masalah peninjauan kode yang diprioritaskan, tetapi sepertinya masalah utama yang perlu Anda setujui, sebagai sebuah tim, adalah:

  1. Apa tujuan ulasan kode Anda?
  2. Bagaimana hasil tinjauan kode terkait dengan Definisi Selesai untuk item kerja?
  3. Jika tinjauan kode berlaku sebagai tes gating, masalah apa yang dianggap sebagai 'pemblokir'?

Ini semua bermuara pada apa yang disepakati tim sebagai definisi Selesai. Jika meneruskan tinjauan kode dengan Zero Issues adalah definisi yang dilakukan untuk item pekerjaan, maka Anda tidak dapat menutup item yang belum memenuhi persyaratan ini.

Itu sama seperti jika selama pengujian unit suatu pengujian unit gagal. Anda akan memperbaiki bug, tidak mengabaikan tes unit, jika lulus tes unit adalah persyaratan untuk Selesai.

Jika tim belum menyetujui ulasan kode sebagai definisi Selesai, maka ulasan kode Anda bukan tes penerimaan gating dari item pekerjaan. Mereka adalah kegiatan tim yang merupakan bagian dari proses backlog Anda untuk mencari pekerjaan tambahan yang mungkin diperlukan. Dalam hal itu, setiap masalah yang Anda temukan tidak terkait dengan persyaratan item pekerjaan asli dan merupakan item kerja baru untuk diprioritaskan oleh tim.

Sebagai contoh, itu bisa sepenuhnya diterima bagi sebuah tim untuk memprioritaskan memperbaiki kesalahan pengetikan pada beberapa nama variabel karena tidak memengaruhi fungsionalitas bisnis yang telah disampaikan, meskipun tim benar-benar benci melihat nama variabel "myObkect".

Jay S
sumber
1

Jawaban yang lebih tinggi di sini sangat baik; ini membahas sudut refactoring.

Dalam kebanyakan kasus, sebagian besar pekerjaan ketika refactoring memahami kode yang ada; mengubahnya setelah itu umumnya merupakan bagian kecil dari pekerjaan karena satu dari dua alasan:

  1. Jika hanya membuat kode lebih jelas dan / atau ringkas, perubahan yang diperlukan jelas. Seringkali Anda mendapatkan pemahaman Anda tentang kode dengan mencoba perubahan yang tampak lebih bersih dan melihat apakah mereka benar-benar berfungsi, atau jika mereka melewatkan beberapa kehalusan dalam kode yang lebih kompleks.

  2. Anda sudah memikirkan desain atau struktur tertentu yang Anda butuhkan untuk membuat membangun fitur baru lebih mudah. Dalam hal itu, pekerjaan untuk mengembangkan desain itu adalah bagian dari cerita yang menghasilkan kebutuhan akannya; itu terlepas dari Anda yang perlu melakukan refactoring untuk sampai ke desain itu.

Mempelajari dan memahami kode yang ada adalah jumlah pekerjaan yang adil untuk manfaat non-permanen (satu bulan dari sekarang seseorang mungkin telah lupa banyak tentang kode jika mereka tidak terus membaca atau bekerja dengannya selama waktu itu), dan karenanya tidak masuk akal untuk melakukan ini kecuali pada bidang kode yang menyebabkan Anda masalah atau bahwa Anda berencana untuk berubah dalam waktu dekat. Pada gilirannya, karena ini adalah pekerjaan utama refactoring, Anda tidak boleh melakukan refactoring pada kode kecuali jika saat ini menyebabkan Anda masalah atau Anda berencana untuk mengubahnya dalam waktu dekat.

Tetapi ada satu pengecualian untuk itu: jika seseorang saat ini memiliki pemahaman yang baik tentang kode yang akan bocor dari waktu ke waktu, menggunakan pemahaman itu untuk membuat kode lebih jelas dan lebih cepat dipahami kemudian bisa menjadi investasi yang baik. Itulah situasi seseorang yang baru saja selesai mengembangkan sebuah cerita.

Refactor adalah pekerjaan kecil, dan akan selesai dalam sprint berikutnya (atau bahkan sebelum dimulai) sebagai cerita setengah poin yang sangat kecil.

Dalam hal ini Anda berpikir untuk membuat cerita terpisah untuk refactoring adalah tanda peringatan di beberapa bidang:

  1. Anda tidak memikirkan refactoring sebagai bagian dari pengkodean tetapi sebagai operasi terpisah, yang pada gilirannya membuatnya cenderung jatuh di bawah tekanan.

  2. Anda sedang mengembangkan kode yang akan lebih sulit untuk dipahami saat seseorang perlu bekerja dengannya, membuat cerita lebih lama.

  3. Anda mungkin membuang-buang waktu dan energi untuk melakukan refactoring hal-hal di mana Anda tidak mendapatkan banyak manfaat. (Jika perubahan terjadi jauh di kemudian hari, seseorang masih harus memahami kembali kode itu, bagaimanapun, itu lebih efisien dikombinasikan dengan pekerjaan refactoring. Jika perubahan tidak terjadi kemudian, refactoring tidak melayani apa pun tujuan sama sekali, kecuali mungkin yang estetis.)

Jadi jawabannya di sini adalah untuk gagal item untuk memperjelas bahwa sesuatu dalam proses Anda gagal (dalam hal ini, itu pengembang atau tim tidak mengalokasikan waktu untuk meninjau dan menerapkan perubahan yang keluar dari ulasan) dan membuat pengembang segera melanjutkan pekerjaan pada item.

Saat Anda memperkirakan untuk iterasi berikutnya, perkirakan kembali cerita yang ada sebagai jumlah pekerjaan yang tersisa untuk membuatnya lulus review dan menambahkannya ke iterasi Anda berikutnya, tetapi pertahankan estimasi dari iterasi sebelumnya. Ketika cerita selesai pada akhir iterasi berikutnya, tetapkan jumlah total historis pekerjaan ke jumlah perkiraan pertama dan kedua sehingga Anda tahu berapa banyak perkiraan pekerjaan yang benar-benar dimasukkan ke dalamnya. Ini akan membantu menghasilkan perkiraan yang lebih akurat dari cerita yang sama di masa depan pada kondisi proses Anda saat ini. (Yaitu, jangan berasumsi bahwa perkiraan Anda yang sebenarnya tidak akan terjadi lagi; anggap itu akan terjadi lagi sampai Anda berhasil menyelesaikan cerita serupa sambil mengurangi pekerjaan.)

Curt J. Sampson
sumber
1

Saya terkejut dengan kurangnya tanggapan dalam jawaban dan komentar terhadap gagasan "gagal" review kode, karena itu bukan konsep yang saya, secara pribadi, kenal. Saya juga tidak akan merasa nyaman dengan konsep itu atau siapa pun dalam tim saya menggunakan terminologi itu.

Pertanyaan Anda secara eksplisit menyerukan "praktik tangkas," jadi mari kita tinjau kembali manifesto tangkas (penekanan milik saya):

Kami menemukan cara yang lebih baik untuk mengembangkan perangkat lunak dengan melakukannya dan membantu orang lain melakukannya. Melalui pekerjaan ini, kami menghargai:

  • Individu dan interaksi atas proses dan alat
  • Bekerja dengan perangkat lunak melalui dokumentasi yang komprehensif
  • Kolaborasi pelanggan atas negosiasi kontrak
  • Menanggapi perubahan setelah mengikuti rencana

Artinya, sementara ada nilai di item di sebelah kanan, kami lebih menghargai item di sebelah kiri.

Bicaralah dengan tim Anda. Diskusikan kode yang dimaksud. Nilai biaya dan manfaatnya dan putuskan - sebagai kelompok ahli yang kohesif - apakah akan memperbaiki kode ini sekarang, nanti, atau tidak pernah.

Mulai berkolaborasi. Berhenti gagal ulasan kode.

Semut P
sumber
Saya semua untuk kolaborasi. Tetapi istilah apa yang akan Anda gunakan, jika tidak "gagal"? Bahkan ketika berdiskusi, sebagai satu kelompok, satu orang akan mengatakan "ini tidak cukup baik, perlu refactoring" yang berarti, secara sederhana, itu gagal dalam pemeriksaan kualitas, kan?
Erdrik Ironrose
1
@ErdrikIronrose Saya tidak pernah menggunakan - atau perlu menggunakan - terminologi "gagal" tinjauan kode. Seseorang meninjau kode tersebut, sebuah diskusi seputar setiap titik perbaikan potensial terjadi, diikuti oleh keputusan apakah akan membahas poin-poin tersebut. Tidak ada "lewat" atau "gagal" yang terlibat, hanya komunikasi dan kemajuan. Saya tidak yakin mengapa ada kebutuhan untuk stempel karet.
Semut P
0

dalam ulasan kami menemukan fungsi yang berfungsi, dapat dibaca, tetapi cukup panjang dan memiliki beberapa bau kode ...

Apakah ada masalah atau pertimbangan yang melekat dengan menaikkan tiket di belakang ulasan, bukannya gagal?

Tidak masalah apa pun (menurut pendapat tim saya). Saya berasumsi bahwa kode memenuhi kriteria penerimaan yang dinyatakan dalam tiket (yaitu, itu berfungsi). Buat item backlog untuk mengatasi panjangnya, dan kode apa pun berbau, dan prioritaskan sama seperti tiket lainnya. Jika benar-benar kecil, maka hanya memprioritaskannya tinggi untuk sprint berikutnya.

Salah satu ucapan yang kami miliki adalah "Pilih peningkatan progresif daripada kesempurnaan yang tertunda".

Kami memiliki proses yang sangat lancar, dan membangun sejumlah fitur 'bukti konsep' yang cukup baik (1 atau 2 per sprint) yang berhasil melalui dev dan pengujian tetapi tidak pernah melewati tinjauan pemangku kepentingan internal (hmm, bisakah kita melakukan ini sebagai gantinya ?), alpha, atau beta ... sebagian bertahan, sebagian tidak.

Pada proyek saat ini, saya kehilangan jejak berapa kali kami membangun fitur tertentu, membawanya ke tangan para pemangku kepentingan, dan satu atau dua sprint kemudian, benar-benar menghapusnya karena arah produk telah berubah, atau persyaratan yang disebabkan penyusunan ulang lengkap tentang bagaimana fitur tersebut harus diimplementasikan. Tugas 'penyempurnaan' yang tersisa untuk fitur yang dihapus, atau yang tidak sesuai dengan persyaratan baru akan dihapus serta bagian dari perawatan jaminan simpanan.

railsdog
sumber
0

Menurut saya ada dua cara untuk melihat masalah ini:

  1. Cara akademik
  2. Cara dunia nyata

Berbicara secara akademis, sebagian besar proses peninjauan kode ada untuk gagal penyebaran PBI (item jaminan simpanan produk) ketika standar kualitas kode tidak terpenuhi.

Namun, tidak ada seorang pun di dunia nyata yang tangkas mengikuti T karena untuk satu (karena banyak alasan), industri yang berbeda memiliki persyaratan yang berbeda. Dengan demikian, memperbaiki kode sekarang atau mengambil utang teknis (kemungkinan besar Anda akan membuat PBI baru) harus diputuskan berdasarkan kasus. Jika itu akan mengkompromikan sprint atau rilis atau memperkenalkan sejumlah risiko yang tidak masuk akal, para pemangku kepentingan bisnis harus dilibatkan dalam keputusan tersebut.

RandomUs1r
sumber
2
tidak ada orang di dunia nyata yang lincah mengikuti T - itu tidak akan menjadi "lincah" lagi jika kita memiliki aturan yang terlalu ketat, kan?
Paŭlo Ebermann
@ PaŭloEbermann Saya pernah bercakap-cakap dengan perusahaan yang pernah saya wawancarai. Mereka mengklaim proses mereka tidak gesit karena itu bukan contoh buku teks tangkas. Meskipun semua yang mereka lakukan adalah semangat gesit. Saya menunjukkannya kepada mereka tetapi hanya bertemu dengan (pada dasarnya) "Tidak, kami tidak mengikuti prosedur lincah yang ditetapkan untuk surat itu, bahkan jika kami meminjam konsep-konsep dengan berat. Oleh karena itu, kami tidak gesit". Itu sangat aneh.
VLAZ
Seperti yang ditunjukkan oleh pengulas lain, dalam hal ini ada potensi pelajaran yang dapat dipetik dari kegagalan kode untuk benar-benar lulus ulasan. Menurut saya, orang-orang dalam proyek ini benar-benar tidak mengerti bahwa a) Anda perlu meluangkan waktu untuk meninjau dan memperbaiki setiap cerita, dan b) refactoring yang diperlukan untuk meninggalkan kode bersih adalah bagian penting dari cerita. Dalam hal itu, hal terbaik yang harus dilakukan adalah gagal cerita untuk menjelaskan bahwa hal-hal ini benar-benar tidak opsional.
Curt J. Sampson
@Curt Saya mendapatkan bahwa milik saya mungkin merupakan pandangan yang tidak populer dari sudut pandang dev (saya seorang dev juga btw), tetapi bisnis benar-benar harus didahulukan, mereka menandatangani gaji dan yang patut dihormati. Sejauh menyisakan waktu, saya akan kembali menantang pemahaman Anda tentang dunia nyata, dan Anda perlu menyadari bahwa itu tidak selalu mungkin dan banyak sprint berlari kencang karena devs perlu melakukan hal-hal di akhir sprint juga. Ini tidak seperti karena kode SOLID, sebuah departemen dapat menendang kaki mereka 1/10 hari setiap 2 minggu dan tidak melakukan apa-apa, itu mungkin bagus dalam jangka pendek, tetapi tidak lama.
RandomUs1r
@ RandomUs1r Saya bekerja di dunia nyata juga, saya mengambil jalan pintas setiap saat, dan saya selalu mengutamakan bisnis, jadi saya pikir saya kurang memahami di sini. Tapi deskripsi OP itu bukan "kami biasanya selalu mendapatkan ini dengan benar dan ini hanya bersendawa kecil standar" atau dia tidak akan memposting pertanyaan. Seperti yang saya jelaskan dalam jawaban saya, ini terlihat seperti masalah proses, dan Anda memperbaikinya dengan berlatih melakukan proses dengan benar sebelum bersantai dengannya.
Curt J. Sampson
-2

Tidak juga . Jika gagal tinjauan kode maka tugas tidak selesai. Tapi Anda tidak bisa gagal tinjauan kode pada pendapat pribadi. Kode melewati; beralih ke tugas berikutnya.

Itu harus menjadi panggilan yang mudah, dan fakta bahwa itu tidak menunjukkan bahwa Anda tidak memiliki aturan tertulis yang cukup jelas untuk ulasan kode.

  1. "Fungsinya cukup panjang". Tuliskan: Fungsinya harus kurang dari garis X (saya tidak menyarankan aturan tentang panjang fungsi adalah hal yang baik).

  2. "Ada beberapa bau kode". Tulis: fungsi publik harus memiliki unit test untuk fungsionalitas dan kinerja, baik CPU dan penggunaan memori harus di bawah batas x dan y.

Jika Anda tidak dapat menghitung aturan untuk melewatkan tinjauan kode maka Anda akan mendapatkan kasus ini tentang apa yang pada dasarnya 'kode yang tidak Anda sukai'.

Jika Anda gagal 'kode yang tidak Anda sukai'? Saya akan mengatakan tidak. Anda secara alami akan mulai lulus / gagal berdasarkan aspek non-kode: Apakah Anda menyukai orang itu? Apakah mereka berdebat keras untuk kasus mereka atau hanya melakukan apa yang diperintahkan? Apakah mereka lulus kode Anda ketika mereka meninjau Anda?

Anda juga menambahkan langkah yang tidak dapat diverifikasi untuk proses estimasi. Saya memperkirakan tugas berdasarkan pada bagaimana saya pikir itu harus diprogram, tetapi kemudian pada akhirnya saya harus mengubah gaya pengkodean.

Berapa lama itu akan ditambahkan? Akankah peninjau yang sama melakukan peninjauan kode berikutnya dan setuju dengan peninjau pertama atau akankah mereka menemukan perubahan tambahan? Bagaimana jika saya tidak setuju dengan perubahan itu dan menunda melakukannya sementara saya mencari pendapat kedua atau membantah kasus ini?

Jika Anda ingin tugas diselesaikan dengan cepat, Anda harus membuatnya sespesifik mungkin. Menambahkan gerbang kualitas yang tidak jelas tidak akan membantu produktivitas Anda.

Re: Tidak mungkin untuk menuliskan aturan !!

Tidak terlalu sulit. Maksud Anda "Saya tidak bisa mengungkapkan apa yang saya maksud dengan kode 'baik'" . Setelah Anda mengetahuinya, Anda bisa melihat itu jelas masalah SDM jika Anda mulai mengatakan pekerjaan seseorang tidak tepat, tetapi Anda tidak bisa mengatakan mengapa.

Tuliskan aturan yang Anda bisa dan diskusikan sambil minum bir tentang apa yang membuat kode 'baik'.

Ewan
sumber
6
Tidak, Anda melewatkan poin bahwa "memiliki standar yang sempurna dan dapat diterapkan secara universal tanpa ambiguitas" bukanlah prasyarat realistis untuk melakukan tinjauan kode. Akan selalu ada jenis masalah baru yang belum Anda pertanggungjawabkan, dan karenanya Anda harus dapat membuat keputusan di wilayah yang belum dipetakan. Tentu saja, Anda kemudian harus mendokumentasikan keputusan itu sehingga bukan lagi wilayah yang belum dipetakan, tetapi jawaban Anda didasarkan pada asumsi bahwa Anda entah bagaimana dapat menjamin tidak adanya wilayah yang belum dipetakan jika hanya Anda menyusun aturan yang sempurna sebelum meninjau. Anda meletakkan kereta di depan kuda.
Flater
5
Mutlak seperti "fungsi harus kurang dari x baris" juga bukan jawabannya .
Blrfl
2
Setuju dengan Blrfl. Fungsi (secara umum) tidak boleh lebih dari 20 baris. Namun menjadikannya aturan mutlak adalah kesalahan. Keadaan khusus selalu mengalahkan aturan umum: jika Anda memiliki alasan yang baik untuk membuat fungsi Anda lebih dari 20 baris, maka lakukanlah.
Matt Messersmith
1
Anda seharusnya tidak memerlukan aturan untuk kode yang ditulis dengan spesifikasi hukum ... Anda hanya dapat memiliki pedoman ditambah fakta bahwa Anda semua mungkin orang dewasa yang berusaha mencapai tujuan akhir yang sama (kode yang berfungsi, dapat dibaca, dapat dipelihara). Memiliki semua anggota tim yang benar-benar diinvestasikan dalam tim dan bersedia bekerja bersama adalah inti dari Scrum, jadi jika Anda tidak memilikinya maka mungkin Scrum bukan untuk tim Anda.
user3067860
2
@ Ewan Tentu. Maksud saya adalah bahwa OP memiliki panjang pedoman fungsi , bukan aturan. Di mana pun ambang batas ditetapkan, ini memberikan saran untuk membantu orang menemukan kode yang sulit dipertahankan, tetapi itu tidak pernah menjadi aturan mutlak. Jika (seperti kata OP) itu benar-benar mudah dibaca, dan pengulas setuju bahwa itu benar-benar dapat dibaca, dan tidak ada masalah mengujinya dengan tepat, maka fungsinya adalah dengan ukuran yang tepat. Ulasan mungkin mendapat catatan satu baris yang mengatakan "Ya itu lebih lama dari yang disarankan, tapi kami setuju tidak apa-apa", dan pekerjaan selesai. Refactoring setelah titik itu adalah pelapisan emas.
Graham