Kodni ko'rib chiqish bo'yicha eng yaxshi amaliyotlar

Internet kodlarni sharhlash bo'yicha juda ko'p materiallarni taqdim etadi: kodni sharhlarning kompaniya madaniyati, xavfsizlikning rasmiy sharhlari, qisqa qo'llanmalar, uzoqroq ro'yxatlar, insoniylashtirilgan sharhlar, birinchi navbatda kodlarni ko'rib chiqish sabablari, eng yaxshi tajribalar, eng yaxshilari. amaliyotlar, xatolarni aniqlash uchun kodlarni ko'rib chiqish samaradorligi statistikasi va xatolarni tekshirish bo'yicha misollar. Oh, albatta kitoblar ham bor. Uzoq hikoyaning qisqasi, ushbu blogda Palantirning kod sharhlarini taqdim etadi. O'zaro taqrizlarni chuqur madaniy ravishda istamaydigan tashkilotlar ushbu qo'llanmaga amal qilishdan oldin Karl E. Vigersning "Humanizing Peer Review" mavzusidagi mukammal inshosi bilan maslahatlashishni istashlari mumkin.

Ushbu xabar bizning Java Code Sifat asboblar zanjirining eng yaxshi amaliy qo'llanmalaridan nusxa olingan va quyidagi mavzularni qamrab oladi:

  • Nima uchun, nima va qachon kodlarni tekshirish kerak
  • Kodni ko'rib chiqishga tayyorlash
  • Kodlarni ko'rib chiqish
  • Kodni ko'rib chiqish misollari

Motivatsiya

Kod sifatini yaxshilash va jamoa va kompaniya madaniyatiga ijobiy ta'sirlardan foyda olish uchun biz kodlarni ko'rib chiqamiz. Misol uchun:

  • O'zgarish to'g'risida so'rovni ko'rib chiqadigan retseptorlar tushunchasi komissionerlarga asoslanadi: komissiya bo'sh qismlarni tozalashga, TODOlarni birlashtirishga va majburiyatni yaxshilashga intiladi. Kodlash bo'yicha mutaxassislarning tengdoshlari tomonidan tan olinishi ko'plab dasturchilar uchun g'urur manbai hisoblanadi.
  • Bilim almashish rivojlanish guruhlariga bir necha jihatdan yordam beradi:
    - CR keyinchalik qo'shilgan / o'zgartirilgan / o'chirilgan funktsionallikni, keyinchalik bajarilgan ish asosida qurishi mumkin bo'lgan guruh a'zolariga aniq etkazadi.
    - Komissar sharhlovchilar o'rganishi mumkin bo'lgan usul yoki algoritmdan foydalanishi mumkin. Umuman olganda, kod tekshiruvi butun tashkilot bo'ylab sifat panelini ko'tarishga yordam beradi.
    - Sharhlovchilar o'zgarishni yaxshilash yoki birlashtirishga yordam beradigan dasturlash usullari yoki kodlar bazasi to'g'risida bilimlarga ega bo'lishlari mumkin; masalan, boshqa birov bir vaqtning o'zida shunga o'xshash xususiyat yoki tuzatish ustida ishlamoqda.
    - Ijobiy o'zaro ta'sir va aloqa jamoa a'zolari o'rtasidagi ijtimoiy aloqalarni mustahkamlaydi.
  • Kodlar bazasidagi izchillik kodni o'qish va tushunishni osonlashtiradi, xatolarni oldini olishga yordam beradi va doimiy va ko'chib o'tuvchi ishlab chiqaruvchilar turlari o'rtasidagi hamkorlikni osonlashtiradi.
  • Kod parchalarining to'g'riligini miya bolasi bo'lgan muallif uchun baholash qiyin, va to'liq kontekstga ega bo'lmagan sharhlovchini hukm qilish oson. Tushunarli kodni qayta ishlatish mumkin, xatosiz va kelajakka qarshi.
  • Tasodifiy xatolar (masalan, xatolar), shuningdek tarkibiy xatolar (masalan, o'lik kod, mantiq yoki algoritm xatolari, ishlash yoki arxitektura bilan bog'liq muammolar) ko'pincha tashqi nuqtai nazarga ega bo'lgan tanqidchilarni aniqlash osonroq. Tadqiqotlar shuni ko'rsatdiki, hatto qisqa va norasmiy kodlarni ko'rib chiqish kod sifati va xato chastotasiga sezilarli ta'sir qiladi.
  • Muvofiqlik va tartibga solish muhiti ko'pincha ko'rib chiqishni talab qiladi. CR - bu umumiy xavfsizlik tuzoqlaridan qochishning ajoyib usuli. Agar sizning xususiyatingiz yoki atrof-muhitingiz xavfsizlik talablariga javob beradigan bo'lsa, mahalliy xavfsizlik nazoratchilari tomonidan ko'rib chiqilishi (va talab qilinishi mumkin) (OWASP qo'llanmasi bu jarayonning yaxshi namunasidir).

Nimani ko'rib chiqish kerak

Bu savolga abadiy to'g'ri javob yo'q va har bir guruh o'z yondashuviga rozi bo'lishi kerak. Ba'zi jamoalar asosiy filialga birlashtirilgan har bir o'zgarishlarni ko'rib chiqishni afzal ko'rishadi, boshqalarida esa "arzimaslik" chegarasi bo'ladi, unga ko'ra tekshirish talab qilinmaydi. Savdo muhandislarning (ikkala muallifning ham, sharhlovchilarning ham) vaqtidan unumli foydalanish va kod sifatini saqlash o'rtasida. Ba'zi bir tartibga solish muhitida, hatto ahamiyatsiz o'zgarishlar uchun ham, kodni tekshirish talab qilinishi mumkin.

Kodni sharhlash befoyda: jamoadagi eng katta odam bo'lish sizning kodingizni qayta ko'rib chiqishga hojat yo'q degani emas. Kamdan kam hollarda kod kamchiliklarga ega bo'lsa ham, sharhlash murabbiylik va hamkorlik uchun imkoniyat beradi va minimal darajada kodlar bazasida kod tushunchasini diversifikatsiya qiladi.

Qachon ko'rib chiqiladi

Kodni tekshirish avtomatlashtirilgan tekshirishlar (testlar, uslublar, boshqa CI) muvaffaqiyatli tugatilgandan so'ng amalga oshirilishi kerak, ammo kod omborning asosiy tarmog'iga birlashguncha. Biz odatda so'nggi nashrdan beri umumiy o'zgarishlarni rasmiy kodlarni ko'rib chiqishni amalga oshirmaymiz.

Magistral tarmog'ini bir birlik sifatida birlashtirishi kerak bo'lgan, ammo bitta oqilona CRga moslash uchun juda katta bo'lgan murakkab o'zgarishlarni hisobga olgan holda, birlashtirilgan CR modelini ko'rib chiqing: asosiy filial / katta xususiyat va bir qator ikkilamchi filiallarni yarating (masalan, xususiyat) / big-feature-api, xüsusiyyət / big-feature-test va boshqalar) har birida funktsiyalarning kichik qismini ajratib turuvchi va alohida / katta xususiyatli bo'limga qarshi kodlarni alohida ko'rib chiqadigan. Barcha ikkinchi darajali filiallar birlamchi / katta xususiyatga birlashtirilgandan so'ng, uni asosiy filialga birlashtirish uchun CR-ni yarating.

Kodni ko'rib chiqishga tayyorlash

Sharhlovchilarning vaqtini va g'ayratini yo'qotmaslik uchun ko'rib chiqish oson bo'lgan mualliflik huquqini taqdim etish muallifning zimmasidadir:

  • Qo'llanish doirasi va hajmi. O'zgarishlar tor, aniq belgilangan, o'z-o'zini qamrab oladigan miqyosga ega bo'lishi kerak, ular to'liq qamrab oladi. Masalan, o'zgarish yangi funktsiyani amalga oshirishi yoki xatoni tuzatishi mumkin. Qisqa o'zgarishlarni uzoqroqlardan afzal ko'radi. Agar CR ~ 5 dan ortiq fayllarga jiddiy o'zgarishlar kiritsa yoki yozish uchun 1-2 kundan ko'proq vaqt kerak bo'lsa yoki ko'rib chiqishga 20 daqiqadan ko'proq vaqt kerak bo'lsa, ularni bir nechta o'z-o'zidan tuzilgan CR-larga bo'lish haqida o'ylab ko'ring. Masalan, ishlab chiquvchi interfeys va hujjatlar nuqtai nazaridan yangi xususiyatlar uchun APIni belgilaydigan bitta o'zgartirishni va shu interfeys uchun bajarilishini qo'shadigan ikkinchi o'zgartirishni yuborishi mumkin.
  • Faqat to'liq, o'z-o'zidan ko'rib chiqilgan (farqi bo'yicha) va o'z-o'zini sinovdan o'tgan CR-larni yuboring. Sharhlovchilarning vaqtini tejash uchun, taqdim etilgan o'zgarishlarni sinab ko'ring (ya'ni test to'plamini ishga tushiring) va tekshiruvchilarni tayinlashdan oldin ularning barcha tuzilishlardan, shuningdek, barcha sinovlardan va kod sifati tekshiruvlaridan o'tganligiga ishonch hosil qiling.
  • Qayta tiklanadigan o'zgarishlar xatti-harakatni o'zgartirmasligi kerak; aksincha, xulq-atvorni o'zgartiradigan o'zgartirishlar refaktoring va kodni formatlashdagi o'zgarishlardan qochishi kerak. Buning bir nechta yaxshi sabablari bor:
    O'zgartirishlarni qaytarish ko'pincha ko'plab chiziqlar va fayllarga tegishlidir va shuning uchun ular kamroq e'tibor bilan ko'rib chiqiladi. Kutilmagan xatti-harakatlar hech kimni sezmasdan kodlar bazasiga kirib ketishi mumkin.
    - Qayta tiklanadigan katta o'zgarishlar gilos terish, rezervatsiya va boshqa manbalarni boshqarish sehrini buzadi. Repozitoriya bo'yicha keng ko'lamli qayta ishlash majburiyatining bir qismi sifatida kiritilgan xatti-harakatlarning o'zgarishini bekor qilish juda og'ir.
    - Munozaralarni formatlash, formatlash yoki formatlashdan ko'ra, insonni ko'rib chiqishning ko'p vaqtini dastur mantig'iga sarflash kerak. Checkstyle, TSLint, Baseline, Prettier va boshqalar kabi avtomatlashtirilgan asboblarni ishlatishni afzal ko'ramiz.

Xabarlarni topshiring

Quyida ommaviy e'lon qilingan standartga muvofiq yaxshi majburiyat to'g'risidagi xabarning misoli keltirilgan:

Katta harf bilan yozilgan, qisqa (80 belgidan kam)
Agar kerak bo'lsa, batafsilroq tushuntirish matni. Taxminan 120 ta belgi bilan o'rab oling. Ba'zi kontekstlarda birinchi
satr elektron pochta mavzusi sifatida, qolgan qismi esa matn sifatida tanlanadi. Bo'sh joyni ajratib turing
tananing xulosasi juda muhim (agar siz tanani to'liq tark qilmasangiz); qayta ishga tushirish kabi vositalar siz ishlayotganingizda chalkashib ketishi mumkin
ikkisi birga.
O'zingizning xato xabaringizni "Xatolikni tuzatish" yoki "Xatolikni tuzatish" yoki "Xatolikni tuzatish" deb yozing. Ushbu konventsiya mos keladi
Git birlashtirish va git orqaga qaytarish kabi buyruqlar tomonidan hosil qilingan xabarlarni yuborish.
Keyingi paragraflar bo'sh satrlardan keyin keladi.
- O'q balli ham yaxshi

Olingan majburiyat nimani o'zgartirishi va uni qanday bajarishini tasvirlashga harakat qiling:

> BAD. Buni qilmang.
Yana kompilyatsiya qiling
> Yaxshi.
IntelliJ kompilyatsiyasini tuzatish uchun jcsv qaramligini qo'shing

Sharhlovchilarni topish

Komissiya uchun kod bazasi bilan tanish bo'lgan bir yoki ikkita sharhlovchini taklif qilish odatiy holdir. Ko'pincha, sharhlovchilardan biri loyiha rahbari yoki katta muhandisdir. Loyihaning egalari yangi CR haqida xabardor bo'lish uchun o'zlarining loyihalariga obuna bo'lishni ko'rib chiqishlari kerak. Uchdan ortiq tomonlarning kodlarni ko'rib chiqish ko'pincha samarasiz yoki hatto teskarisi hisoblanadi, chunki turli sharhlovchilar qarama-qarshi o'zgarishlarni taklif qilishi mumkin. Bu to'g'ri amalga oshirish bo'yicha fundamental kelishmovchiliklarni ko'rsatishi mumkin va keng tarmoqli kenglikdagi forumda, masalan, shaxsan yoki barcha aloqador tomonlar bilan videokonferentsiyada ko'rib chiqilgandan keyin hal qilinishi kerak.

Kodlarni ko'rib chiqish

Kodni ko'rib chiqish - bu jamoaning turli a'zolari o'rtasida sinxronizatsiya qilish nuqtasi va shuning uchun taraqqiyotni blokirovka qilish imkoniyati mavjud. Shunday qilib, kodlarni ko'rib chiqish tezkor bo'lishi kerak (kunlar emas, balki soat bo'yicha) va guruh a'zolari va rahbarlar vaqt majburiyatidan xabardor bo'lishlari va ko'rib chiqish vaqtini birinchi navbatda belgilashlari kerak. Agar siz tekshiruvni o'z vaqtida yakunlay olaman deb o'ylamasangiz, darhol boshqa birovni topishi uchun komissionerga xabar bering.

Sharh etarli darajada puxta ishlab chiqilishi kerak, chunki taqrizchi o'zgarishni boshqa ishlab chiquvchiga batafsil ma'lumot darajasida tushuntirishi mumkin. Bu kodlar bazasi tafsilotlari bir nechta odamga ma'lum bo'lishini ta'minlaydi.

Tekshiruvchi sifatida siz kodlash standartlariga rioya qilish va sifat to'sig'ini saqlash uchun javobgarsiz. Sharh kodi - bu bilimdan ko'proq san'at. Uni o'rganishning yagona usuli - buni amalga oshirish; Tajribali sharhlovchi, kam tajribaga ega bo'lgan boshqa sharhlovchilarni o'zgartirishlari to'g'risida o'ylab, ularni avval ko'rib chiqishni taklif qilishi kerak. Agar muallif yuqoridagi ko'rsatmalarni (ayniqsa o'z-o'zini ko'rib chiqish va kodning ishlashini ta'minlashga) rioya qilgan deb hisoblasak, sharhlovchi kodlarni ko'rib chiqishda e'tibor berishlari kerak bo'lgan narsalar ro'yxati:

Maqsad

  • Ushbu kod muallifning maqsadiga erishadimi? Har bir o'zgarish aniq sababga ega bo'lishi kerak (yangi xususiyat, refaktor, bugfix va boshqalar). Taqdim etilgan kod aslida ushbu maqsadga erishadimi?
  • Savollar bering. Vazifalar va sinflar biron bir sababga ko'ra mavjud bo'lishi kerak. Agar sabab sharhlovchiga tushunarli bo'lmasa, bu kodni qayta yozish yoki sharhlar yoki testlar bilan qo'llab-quvvatlash kerakligini ko'rsatuvchi belgi bo'lishi mumkin.

Amalga oshirish

  • Muammoni qanday hal qilganingiz haqida o'ylang. Agar u boshqacha bo'lsa, nega? Kodingiz ko'proq (chekka) holatlarga ishlov beradimi? Qisqa / osonroq / toza / tezroq / xavfsizroq va funktsional jihatdan tengmi? Siz sezgan biron bir asosiy rasm mavjudmi, ammo hozirgi kod bilan ushlanib qolmaganmi?
  • Foydali abstraksiyalar uchun potentsialni ko'ryapsizmi? Qisman takrorlanadigan kod ko'pincha ko'proq mavhum yoki umumiy funktsiyani olish mumkinligini va keyinchalik turli kontekstlarda qayta ishlatilishini anglatadi.
  • Dushman kabi o'ylab ko'ring, lekin bu haqda yoqimli bo'ling. Muammoli konfiguratsiyalar / ularning ma'lumotlarini buzadigan ma'lumotlarni kiritish orqali yorliqlar yoki etishmayotgan holatlar mualliflarini "tutib olishga" harakat qiling.
  • Kutubxonalar yoki mavjud mahsulot kodi haqida o'ylang. Kimdir mavjud funktsiyalarni qayta o'rnatganda, bu shunchaki ular allaqachon mavjudligini bilishmagani uchun emas. Ba'zida, kod yoki funktsionallik, masalan, qaramlikdan qochish uchun maqsadga ko'ra takrorlanadi. Bunday holatlarda kodni sharhlash maqsadni aniqlashtirishi mumkin. Mavjud kutubxona tomonidan kiritilgan funksiya allaqachon ta'minlanganmi?
  • O'zgarish standart naqshlarga mos keladimi? O'rnatilgan kod bazalari odatda konvensiyalar, dasturlarning mantiqiy dekompozitsiyasi, ma'lumotlar turlarini aniqlash va hokazolar atrofida naqshlarni namoyish etadi. Odatda o'zgartirishlar mavjud naqshlarga muvofiq amalga oshirilishi ma'qul.
  • O'zgarish kompilyatsiya vaqtiga yoki ish vaqtiga bog'liqlikni qo'shadimi (ayniqsa, sub-loyihalar o'rtasida)? Biz o'z mahsulotlarimizni imkon qadar kam bog'liqlik bilan bo'shashgan holda saqlashni xohlaymiz. Bog'lanish va tuzilish tizimidagi o'zgarishlarni sinchkovlik bilan o'rganish kerak.

Aniqlik va uslub

  • O'qish tajribangiz haqida o'ylang. Siz tushunchalarni etarli darajada vaqt ichida tushundingizmi? Oqim mutanosibmi va o'zgaruvchan va usullarning nomlari osonmi? Bir nechta fayl yoki funktsiyalarni kuzatib borishga muvaffaq bo'ldingizmi? Siz nomlashda nomuvofiq bo'lib qoldingizmi?
  • Kod kodlash ko'rsatmalariga va kod uslubiga mos keladimi? Kod uslub, API konventsiyalari va boshqalar nuqtai nazaridan loyihaga mos keladimi? Yuqorida aytib o'tilganidek, biz avtomatlashtirilgan vositalar yordamida uslublar bo'yicha munozaralarni hal qilishni afzal ko'ramiz.
  • Ushbu kodda TODOlar bormi? TODO-lar shunchaki kod shaklida to'planib, vaqt o'tishi bilan eskiradi. Muallifga GitHub yoki JIRA haqida chiptani topshirishni va TODOga raqamini biriktirishni tavsiya eting. Taklif etilayotgan kodni o'zgartirish sharhlangan kodni o'z ichiga olmaydi.

Saqlash qobiliyati

  • Sinovlarni o'qing. Agar testlar bo'lmasa va ular bo'lishi kerak bo'lsa, muallifdan bir oz yozishni so'rang. Darhaqiqat, tekshirib bo'lmaydigan xususiyatlar kamdan-kam uchraydi, ammo bu xususiyatlarning sinab ko'rilmagan tatbiqi afsuski keng tarqalgan. Sinovlarni o'zlari tekshiring: ular qiziqarli voqealarni yoritmoqdami? Ularni o'qish mumkinmi? CR umumiy test qamrovini kamaytiradimi? Ushbu kod buzilishi mumkinligini o'ylab ko'ring. Sinovlar uchun uslubiy standartlar ko'pincha yadro kodidan farq qiladi, ammo baribir muhimdir.
  • Ushbu CR sinov kodi, stekan stakanlari yoki integratsiya testlarini buzish xavfini keltiradimi? Ko'pincha ularni oldindan tuzish / birlashtirish oldingi tekshiruvlarning bir qismi sifatida tekshirib bo'lmaydi, ammo ularni pastga tushirish hamma uchun og'riqli bo'ladi. Izlash kerak bo'lgan aniq narsalar: sinov dasturlari yoki rejimlarini o'chirish, konfiguratsiyadagi o'zgarishlar va artefaktning joylashishi / tuzilishidagi o'zgarishlar.
  • Ushbu o'zgarish orqaga qarab moslikni buzadimi? Agar shunday bo'lsa, hozircha o'zgarishlarni birlashtirish yaxshimi yoki uni keyingi nashrga o'tkazish kerakmi? Buzilishlar ma'lumotlar bazasi yoki sxema o'zgarishlari, ommaviy API o'zgarishlari, foydalanuvchi ish oqimining o'zgarishi va boshqalarni o'z ichiga olishi mumkin.
  • Ushbu kod integratsiya sinovlariga muhtojmi? Ba'zida kodni faqat birlik sinovlari bilan etarli darajada sinab ko'rish mumkin emas, ayniqsa kod boshqa tizimlar yoki konfiguratsiyalar bilan o'zaro aloqada bo'lsa.
  • Kod darajasidagi hujjatlar, sharhlar va xabarlarni qoldiring. Ortiqcha sharhlar kodni chalkashtirib yuboradi va xabarlar kelajakdagi hissa qo'shuvchilarni yashiradi. Bu har doim ham qo'llanilmaydi, ammo sifatli sharhlar va etkazilgan xabarlar o'zlari uchun to'lanadi. (Ajoyib yoki juda dahshatli xabarni yoki sharhni ko'rgan vaqtingizni eslang).
  • Tashqi hujjatlar yangiladimi? Agar sizning loyihangiz README, CHANGELOG yoki boshqa hujjatlarni saqlasa, u o'zgarishlarni aks ettirish uchun yangilandi? Eskirgan hujjatlar hech kimdan ko'ra chalkash bo'lishi mumkin va kelajakda uni yangilashdan ko'ra tuzatish qimmatga tushadi.

Qisqa / o'qiladigan / samarali / oqlangan kodni maqtashni unutmang. Aksincha, CR-ni rad etish yoki rad etish qo'pol emas. Agar o'zgartirish ortiqcha yoki ahamiyatsiz bo'lsa, uni tushuntirish bilan rad eting. Agar siz uni bir yoki bir nechta halokatli nosozliklar tufayli qabul qilib bo'lmaydigan deb hisoblasangiz, tushuntirish bilan uni rad eting. Ba'zida CRning to'g'ri natijasi: “buni boshqa yo'l bilan qilaylik” yoki hattoki “umuman qilmaylik”.

Sharhlovchilarga hurmat bilan munosabatda bo'ling. Qarama-qarshi fikrlash qulay bo'lsa ham, bu sizning xususiyatingiz emas va siz barcha qarorlarni qabul qila olmaysiz. Agar kodni ko'rib chiquvchi bilan kelisha olmasangiz, real vaqt rejimida aloqaga o'ting yoki uchinchi fikrga murojaat qiling.

Xavfsizlik

API oxirgi nuqtalari kodlar bazasining qolgan qismiga mos keladigan tegishli avtorizatsiya va autentifikatsiyani bajarishini tekshiring. Boshqa keng tarqalgan kamchiliklarni tekshiring, masalan, zaif konfiguratsiya, foydalanuvchi tomonidan zararli ma'lumotlar kiritilishi, jurnal voqealari yo'qligi va boshqalar. Shubha tug'ilganda, CR-ni dastur xavfsizligi bo'yicha mutaxassisga yuboring.

Sharhlar: qisqa, samimiy, ta'sirchan

Sharhlar qisqa va neytral tilda yozilishi kerak. Kodni tanqid qiling, muallif emas. Biror narsa noaniq bo'lsa, jaholatni qabul qilishdan ko'ra tushuntirishni so'rang. Egalik olmoshlaridan saqlaning, xususan, "mening kodim sizning o'zgartirishingizdan oldin ishladi", "sizning usulingiz xato" va hokazolar bilan bir qatorda, mutlaq hukmlardan qoching: "bu hech qachon ishlamaydi", "natija doimo noto'g'ri".

Takliflarni (masalan, "Taklif: aniqligini oshirish uchun ajratib olish usuli"), zarur bo'lgan o'zgartirishlarni (masalan, "Qo'shish @ qo'shish") va muhokama qilish yoki aniqlashtirishni talab qiladigan fikrlarni (masalan, "Bu haqiqatan ham to'g'ri xulqmi?") Farqlashga harakat qiling. shuning uchun, iltimos, mantiqni tushuntirib beradigan sharh qo'shing. ") Muammoni chuqur tushuntirish uchun havolalar yoki ko'rsatmalar berishni ko'rib chiqing.

Kodni ko'rib chiqish tugagach, muallif sizning sharhlaringizga qanday javob berishini va o'zgarishlar kiritilgandan so'ng CRni qayta ko'rib chiqishni xohlaysizmi (masalan, "javob bergandan keyin qo'shilishni his eting" "Iltimos, mening takliflarimni ko'rib chiqing va qachon ko'rishim mumkinligini menga xabar bering.")

Sharhlarga javob berish

Kodni ko'rib chiqishdan maqsad - muallifni o'zgartirish haqidagi so'rovni takomillashtirish; shu sababli, sharhlovchingizning maslahatlari sizni xafa qilmaydi va agar siz rozi bo'lmasangiz ham ularni jiddiy qabul qiling. Har bir sharhga javob bering, hatto bu oddiy "ACK" yoki "amalga oshirilgan" bo'lsa ham. Nega ba'zi qarorlarni qabul qilganingizni, nima uchun ba'zi funktsiyalar mavjudligini va hokazolarni tushuntiring. Agar siz taqrizchi bilan kelisha olmasangiz, haqiqiy holatga o'ting. vaqt aloqasi yoki tashqi fikrni izlash.

Fikslarni bir xil filialga surish kerak, lekin alohida topshiriq bilan. Tekshiruv jarayonida siqilish retseptorga o'zgarishlarni kuzatishni qiyinlashtiradi.

Turli jamoalarning qo'shilish siyosati turlicha: ba'zi jamoalar faqat loyiha egalarini birlashtirishga ruxsat berishadi, boshqa jamoalar esa ijobiy kodni ko'rib chiqqandan so'ng hissa qo'shish uchun birlashishga ruxsat berishadi.

Shaxsiy kodni ko'rib chiqish

Kodlarni ko'rib chiqishda aksariyat hollarda asenkron diff-ga asoslangan Reviewable, Gerrit yoki GitHub kabi vositalar juda yaxshi tanlovdir. Turli xil tajribaga yoki tajribaga ega bo'lgan tomonlar o'rtasidagi murakkab o'zgarishlar yoki sharhlar bitta ekran yoki proektor oldida yoki masofadan turib VTC yoki ekran almashish vositalari orqali amalga oshirilganda samaraliroq bo'lishi mumkin.

Misollar

Quyidagi misollarda ko'rib chiqilgan sharhlar // R: ... kod bloklarida sharhlar bilan ko'rsatilgan.

Noto'g'ri nomlash

sinf MyClass {
  shaxsiy int countTotalPageVisits; // R: nom o'zgaruvchilar izchil
  xususiy int noyobUsersCount;
}

Noto'g'ri usul imzolari

MyInterface interfeysi {
  / ** Agar s ajratib olinmasa, {@ bog'lanish ixtiyoriy # bo'sh} ni qaytaradi. * /
  ommaviy Ixtiyoriy  extractString (String s);
  / ** Qayta yozib bo'lmaganda {@ kod s s} bekor qilinadi. * /
  // R: qaytish qiymatlarini uyg'unlashtirishi kerak: bu erda ham ixtiyoriy <> dan foydalaning
  public String rewriteString (String-lar);
}

Kutubxonadan foydalanish

// R: Guava's MapJoiner-dan olib tashlang va o'zgartiring
String joinAndConcatenate (Map  xaritasi, String keyValueSeparator, String keySeparator);

Shaxsiy did

int dayCount; // R: nit: Men odatda numo-ni fooCount-dan afzal ko'raman; sizga yordam beradi, lekin biz uni ushbu loyihada izchil saqlashimiz kerak

Xatolar

// R: Bu numIterations + 1 iteratsiyasini amalga oshiradi, bu qasddanmi?
// Agar bo'lsa, raqamlar semantikasini o'zgartirish haqida o'ylaysizmi?
for (int i = 0; i <= raqamlar; ++ i) {
  ...
}

Arxitektura muammolari

otherService.call (); // R: Menimcha, Boshqalar xizmatiga bog'liqlikdan qochish kerak. Buni shaxsan muhokama qilsak bo'ladimi?

Mualliflar

Robert F (GitHub / Twitter)