Code Review va Branch Protection
Kodni jamoa bilan sayqallaymiz, main tarmog'ini esa qulflaymiz
11-sinfProfessional IT development2-hafta · 6-dars
Bugun nimani o'rganamiz?
Code Review
Nima uchun kerak va qanday o'tkaziladi
Etika va daraja
Odamni emas, kodni tahlil qilamiz. Blocker va Nitpick
Branch Protection
main tarmog'ini qulflaymiz
Review hajmi muhim
0
qator: eng samarali tekshirish hajmi
0
qatordan keyin xatoni ilg'ash keskin pasayadi
0
gacha tushadi (SmartBear tadqiqoti)
Xulosa: PR kichik bo'lsin, review sifatli bo'ladi.
01
Code Review nima?
Birlashtirishdan oldin boshqa muhandis kodni o'qib, tahlil qiladi
Review sikli
Qismlar ustiga bosing. Tuzatish va Review bir necha marta takrorlanishi mumkin.
Nega Code Review kerak?
Xatolar
Yangi nigoh xatoni erta ilg'aydi
Xavfsizlik
Ochiq parol, SQL inyeksiya, ruxsatsiz kirish
Bilim almashish
Yosh dasturchi tajribalidan o'rganadi
Kod tozaligi
Yagona format va me'moriy uslub
Rollar: bosing va aylantiring
Kodni yozgan va Pull Request ochgan muallif.
Kodni o'qib, tahlil qilib, fikr bildiruvchi tekshiruvchi.
Kodning aynan bitta qatoriga qoldirilgan aniq sharh.
02
Review etikasi
Bu kim aqlliroq ekanini isbotlash musobaqasi emas
Kodni tanqid qiling, shaxsni emas
Noto'g'ri
«Sen bu yerda juda xunuk va sekin kod yozgansan.»
VS
To'g'ri
«Bu sikl katta ro'yxatlarda sekinlashishi mumkin. Keling, uni lug'at (hashmap) orqali O(1) tezlikka keltiramiz.»
Dalil va taklif bor: sharh hujum emas, hamkorlik.
Buyruq emas, savol bering
Noto'g'ri
«Bu funksiyani 3 ga bo'l!»
VS
To'g'ri
«Funksiya 80 qatordan oshibdi. Testlash osonroq bo'lishi uchun 2 ta kichik funksiyaga ajratsak qanday qaraysiz?»
Sabab keltiring. Yaxshi yechimni ham maqtang. Pastga ↓
Maqtashni unutmang
«Ajoyib yechim, menga juda yoqdi!»
Review faqat xato topish emas. Nafis algoritm yozgan hamkasbga shunday sharh qoldiring.
Psixologik xavfsizlik
- Dasturchi kodiga o'z farzandidek bog'lanadi
- Keskin sharh g'ururga tegadi va tushkunlikka soladi
- So'zni to'g'ri tanlash texnik bilimdan kam emas
Mini-test: qaysi sharh yaxshi?
Hamkasbingiz sekin sikl yozgan. Qaysi sharh professional?
To'g'ri: sabab bor, shaxs emas kod tahlil qilinadi, taklif hamkorlik ohangida.
Reviewer uchun 5 ta savol
- Mantiq: kod vazifani to'g'ri bajaryaptimi?
- Chekka holatlar: bo'sh ro'yxat, nol, xato parol
- Xavfsizlik: ochiq parol yoki shifrlanmagan ma'lumot yo'qmi?
- O'qilishi: 6 oydan keyin tushunish oson bo'ladimi?
- Testlar: unit testlar qo'shilganmi?
03
Blocker va Nitpick
Pashshadan fil yasamang: jiddiylikni ajrating
Sharhning jiddiylik darajasi
Qismlarni bosing: izoh chiqadi.
Misollar: qaysi biri qaysi?
Tuzatish majburiy
- Tizim qulashiga olib keladigan xato
- Token ochiq qolgan (xavfsizlik)
- Biznes mantiq noto'g'ri ishlaydi
- Testlar yo'q
Ixtiyoriy, `nit:` bilan
- O'zgaruvchini boshqacha atash
- Ortiqcha bitta bo'sh qator
- Shaxsiy ta'bga bog'liq mayda uslub
Mini-test: Blocker yoki Nitpick?
Login funksiyasi bo'sh parolda server 500 xatosi berib qulaydi. Bu nima?
To'g'ri: server qulashi kritik xato, tuzatilmaguncha merge qilib bo'lmaydi.
04
GitHub review asboblari
Files changed, inline sharh va suggestion
Files changed
github.com/jamoa/loyiha/pull/7
calculate.py
+ qator ustiga kursor olib boring va + bosing
Files changed
github.com/jamoa/loyiha/pull/7
calculate.py
+ qator ustiga kursor olib boring va + bosing
Reviewer: Bu sikl katta ro'yxatda sekin. Taklif kodini ko'ring. [Commit suggestion]
Taklif kodi (suggestion)
```suggestion
def calculate_total(items):
return sum(item.price for item in items)
```
Author bitta bosishda Commit suggestion qiladi: o'z kompyuterida yozishi shart emas.
Review yakuni: 3 ta qaror
05
Branch Protection
Hatto jamoa sardori ham main ni xato bilan buza olmaydi
Himoyalangan main
Qismlarni bosing. Pastki yo'l main ga yopiq.
Push rad etiladi
git push origin main
remote: error: GH006: Protected branch update failed
remote: for refs/heads/main.
Xato matnida GH006 kodini ko'rasiz: bu himoya ishlayotganining belgisi.
Sozlash: qadam-baqadam
1. Settings, Branches
Repo ichida Settings, chap menyudan Branches, so'ng qoida qo'shish.
2. Branch name pattern
Maydonga main deb yozing.
3. Require a pull request
To'g'ridan-to'g'ri git push origin main butunlay bloklanadi.
4. Require approvals
Kamida 1 nafar (yoki 2) boshqa muhandis Approve bosmaguncha Merge nofaol.
5. Status checks, Save
CI testlari o'tmaguncha merge taqiqlanadi. Keyin Save changes.
Hatto xo'jayin ham buza olmaydi
«Do not allow bypassing the above settings»
- Professional kompaniyalarda bu band yoqiladi
- Repo egasi ham kamida bitta muhandis tasdig'isiz main ga kod qo'sha olmaydi
Amaliy topshiriq 20 daqiqa
OsonSQL kodiga xavfsizlik sharhi yozing: "... name = '" + user_input + "'"
O'rtaRepoda main uchun Branch Protection (1 approve) sozlang va push'ni sinang
QiyinHamkasb PR'iga Request changes bering, tuzatilgach Approve va squash merge
Xulosa
Bugun o'rgandik
Review etikasi, Blocker va Nitpick, suggestion, Branch Protection
Uyga vazifa
Portfolio repoda main himoyasi va PR'da 2 ta inline sharh (biri suggestion)
Keyingi hafta: Clean Code va SOLID tamoyillari (SRP, OCP, LSP, ISP, DIP)