Skip to main content

Code Review Processes

Code Review nima?โ€‹

Code Review - bu sizning yozgan kodingizni boshqa dasturchilar ko'rib chiqib, taklif va tuzatishlar berishidadir.

Bu xuddi maktabda inshoni tekshirib berish kabi - lekin kod uchun! ๐Ÿ“

Nima uchun Code Review kerak?โ€‹

1. Xatolarni topish ๐Ÿ›โ€‹

# Reviewer topishi mumkin:
if user.age > 18: # Nima uchun faqat 18?
return True
# Taklif: >= 18 bo'lishi kerakmi?

2. Kod sifatini yaxshilash โœจโ€‹

// Yomon kod:
function calc(a, b) {
return a + b * 2 - 5; // Bu nima qiladi?
}

// Reviewer taklifi:
function calculateDiscountedPrice(originalPrice, taxRate) {
const priceWithTax = originalPrice + (originalPrice * taxRate);
const discount = 5;
return priceWithTax - discount;
}

3. Bilim almashish ๐Ÿคโ€‹

  • Yangi dasturchilar o'rganadi
  • Tajribali dasturchilar bilim ulashadi
  • Jamoaning kod yazish uslubi bir xil bo'ladi

4. Xavfsizlik ๐Ÿ”’โ€‹

# Xavfli:
password = request.form['password'] # Hash qilinmagan!

# Reviewer topadi:
password = hash_password(request.form['password'])

Code Review jarayoniโ€‹

1. Pull Request yaratishโ€‹

# Feature branch da ishlash
git checkout -b feature/user-login
# ... kod yozish ...
git add .
git commit -m "User login funksiyasi qo'shildi"
git push origin feature/user-login

2. PR ning yaxshi tavsifiโ€‹

## O'zgarishlar

### Nima qilindi:
- User login page yaratildi
- Password validation qo'shildi
- Session management sozlandi

### Test:
- โœ… Unit testlar o'tdi
- โœ… Manual testing bajarildi
- โœ… Edge case lar tekshirildi

### Screenshot:
![Login page](screenshot.png)

### Checklist:
- [x] Kod test qilindi
- [x] Documentation yangilandi
- [x] No breaking changes

3. Reviewer tanlashโ€‹

# CODEOWNERS fayli
# Global
* @senior-dev @team-lead

# Frontend
/frontend/ @frontend-team @ui-designer

# Backend API
/api/ @backend-team @api-architect

# DevOps
/docker/ @devops-team
/k8s/ @devops-team @infra-team

4. Review jarayoniโ€‹

Reviewer ning vazifasi:โ€‹

a) Kod mantiqini tekshirish:

# Reviewer savolli:
def divide_numbers(a, b):
return a / b # b=0 bo'lsa nima bo'ladi?

# Taklif:
def divide_numbers(a, b):
if b == 0:
raise ValueError("Bo'luvchi nolga teng bo'lishi mumkin emas")
return a / b

b) Performance ni tekshirish:

// Savollar:  
users.forEach(user => {
database.save(user); // Har bir user uchun alohida DB call?
});

// Taklif:
database.bulkSave(users); // Batch save

c) Security tekshirish:

-- Xavfli:
query = f"SELECT * FROM users WHERE id = {user_id}" -- SQL Injection!

-- Xavfsiz:
query = "SELECT * FROM users WHERE id = %s"
cursor.execute(query, (user_id,))

Review Typesโ€‹

1. Formal Reviewโ€‹

  • Rasmiy jarayon
  • Ko'p reviewerlar (2-3 kishi)
  • Detailed checklist
  • Enterprise loyihalar uchun

2. Lightweight Reviewโ€‹

  • Tez jarayon
  • 1-2 reviewer
  • Asosiy narsalarni tekshirish
  • Startup/Agile uchun

3. Pair Programmingโ€‹

  • Real-time review
  • Ikki kishi birga kod yozadi
  • Darhol feedback
  • Complex vazifalar uchun

Review da nimalarni tekshirish?โ€‹

1. Functionality โš™๏ธโ€‹

  • Kod ishlayaptimi?
  • Requirements ni qondiraptimi?
  • Edge case lar handle qilinganmi?

2. Code Quality ๐Ÿ’Žโ€‹

# Yaxshi kod:
def calculate_user_age(birth_date: datetime) -> int:
"""
User yoshini hisoblash

Args:
birth_date: User tug'ilgan sana

Returns:
int: Yosh (yillarda)
"""
today = datetime.now()
return today.year - birth_date.year

3. Performance ๐Ÿš€โ€‹

# Yomon:
for user in users:
for role in user.roles: # O(nยฒ)
# ...

# Yaxshi:
user_roles = {user.id: user.roles for user in users} # O(n)

4. Security ๐Ÿ”โ€‹

# Tekshirish kerak:
- Input validation
- Authentication/Authorization
- Sensitive data handling
- SQL injection prevention
- XSS protection

5. Maintainability ๐Ÿ”งโ€‹

  • Kod o'qish osonmi?
  • Comments yetarlimi?
  • Function lar kichikmi?
  • Naming conventions to'g'rimi?

Review Commentsโ€‹

Yaxshi comment yozish:โ€‹

โŒ Yomon:

Bu yomon
Fix this
Wrong approach

โœ… Yaxshi:

Bu yerda potential memory leak bo'lishi mumkin. 
`close()` methodini `finally` block da chaqirishni taklif qilaman.

Misol:
try:
file = open('data.txt')
# ...
finally:
file.close()

Comment turlari:โ€‹

1. Must Fix (Majburiy) ๐Ÿ”ด

โ— BLOCKER: SQL injection vulnerability bu yerda.
Parameter binding ishlatishingiz kerak.

2. Should Fix (Tavsiya) ๐ŸŸก

๐Ÿ’ก SUGGESTION: Bu function juda uzun. Kichik functionlarga 
bo'lishni taklif qilaman readability uchun.

3. Nice to Have (Ixtiyoriy) ๐ŸŸข

โœจ NICE: Bu yerda caching qo'shsangiz performance yaxshilanadi.
Keyingi iteration da qo'shishingiz mumkin.

4. Question (Savol) โ“

โ“ QUESTION: Bu magic number (42) nimani anglatadi? 
Constant sifatida e'lon qilsak yaxshi bo'ladi.

5. Praise (Maqtash) ๐Ÿ‘

๐Ÿ‘ GREAT: Bu error handling juda yaxshi qilingan! 
Edge case larni ham handle qibsiz.

Review Tools va Platformsโ€‹

1. GitHub Pull Requestsโ€‹

# Review features:
- Line-by-line comments
- Suggestions (kod o'zgartirish takliflari)
- Approve/Request changes
- Draft PRs
- Review assignments

2. GitLab Merge Requestsโ€‹

# Advanced features:
merge_request:
approvals_required: 2
reset_approvals_on_push: true
disable_overriding_approvers: true

3. Azure DevOpsโ€‹

{
"reviewerPolicy": {
"minimumApproverCount": 2,
"resetOnSourcePush": true,
"blockLastPusherVote": true
}
}

4. Bitbucketโ€‹

  • Built-in code insights
  • Jira integration
  • Smart suggestions

Automated Code Reviewโ€‹

1. Linting Toolsโ€‹

# .github/workflows/lint.yml
name: Code Quality

on: [pull_request]

jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Run ESLint
run: |
npm install
npm run lint
- name: Run Pylint
run: |
pip install pylint
pylint *.py

2. Code Coverageโ€‹

# Coverage requirement
coverage:
range: 80..100
round: down
precision: 2

status:
project:
default:
target: 80%
threshold: 5%

3. Security Scanningโ€‹

# Automated security review
security:
- name: Run Snyk
uses: snyk/actions/node@master
with:
args: --severity-threshold=high

4. Code Quality Toolsโ€‹

# SonarQube integration
sonar-scanner \
-Dsonar.projectKey=myproject \
-Dsonar.host.url=http://localhost:9000 \
-Dsonar.login=$SONAR_TOKEN

Review Metrics va KPIsโ€‹

1. Speed Metricsโ€‹

- PR ochilgandan approve gacha vaqt
- First response time
- Time to merge

2. Quality Metricsโ€‹

- Defect discovery rate
- Post-release bugs
- Code coverage improvement

3. Team Metricsโ€‹

- Review participation rate
- Review thoroughness
- Knowledge sharing index

DevOps uchun Code Reviewโ€‹

1. Infrastructure as Code Reviewโ€‹

# Terraform review checklist:
- โœ… Resource naming conventions
- โœ… Security groups properly configured
- โœ… No hardcoded secrets
- โœ… Proper tagging
- โœ… Cost optimization

# Kubernetes review:
- โœ… Resource limits set
- โœ… Security contexts defined
- โœ… Proper labels and selectors
- โœ… ConfigMaps instead of hardcoded values

2. Pipeline Reviewโ€‹

# CI/CD pipeline review:
- โœ… Proper error handling
- โœ… Secure credential usage
- โœ… Rollback strategy defined
- โœ… Test coverage adequate
- โœ… Deployment strategy safe

3. Docker Reviewโ€‹

# Dockerfile best practices:
- โœ… Multi-stage builds
- โœ… Non-root user
- โœ… Minimal base image
- โœ… .dockerignore file
- โœ… Health checks defined

Common Review Problems va Solutionsโ€‹

1. Review Bottlenecks ๐Ÿšซโ€‹

Problem: PRlar uzoq kutadi

Solution:

# Automated assignment
code_review:
auto_assign:
- team: backend
files: ["*.py", "*.go"]
- team: frontend
files: ["*.js", "*.vue"]

round_robin: true
max_reviewers: 2

2. Review Quality ๐Ÿ“‰โ€‹

Problem: Sust review

Solution:

  • Review checklist yarating
  • Training o'tkazing
  • Review metrics tracking
  • Good/bad example lar ko'rsating

3. Large PRs ๐Ÿ“ฆโ€‹

Problem: Katta PR larni review qilish qiyin

Solution:

# PR size limits
if [[ $(git diff --name-only | wc -l) -gt 20 ]]; then
echo "โŒ PR juda katta! 20 ta fayldan ko'p"
exit 1
fi

Best Practicesโ€‹

1. Author uchun:โ€‹

  • โœ… Kichik, focused PR lar yarating
  • โœ… Self-review qiling yuborishdan oldin
  • โœ… Yaxshi tavsif yozing
  • โœ… Test qo'shing
  • โœ… Documentation yangilang

2. Reviewer uchun:โ€‹

  • โœ… Tez javob bering (24 soat ichida)
  • โœ… Constructive feedback bering
  • โœ… Code o'rniga problem ga focus qiling
  • โœ… Positive feedback ham bering
  • โœ… Questions so'rang, tushunmagan joylarni

3. Team uchun:โ€‹

  • โœ… Review culture yarating
  • โœ… Guidelines belgilang
  • โœ… Tools va automation ishlatang
  • โœ… Metrics track qiling
  • โœ… Continuous improvement

Review Checklist Templateโ€‹

## Code Review Checklist

### Functionality โš™๏ธ
- [ ] Kod ishlayaptimi?
- [ ] Requirements qondirilganmi?
- [ ] Edge cases handle qilinganmi?
- [ ] Error handling to'g'rimi?

### Code Quality ๐Ÿ’Ž
- [ ] Naming conventions to'g'rimi?
- [ ] Functions kichik va focused mi?
- [ ] DRY principle qo'llanganmi?
- [ ] Comments yetarlimi?

### Performance ๐Ÿš€
- [ ] Efficient algorithms ishlatilganmi?
- [ ] Database queries optimized mi?
- [ ] Memory leaks yo'qmi?
- [ ] Caching qo'llanganmi?

### Security ๐Ÿ”
- [ ] Input validation qilinganmi?
- [ ] Authentication/authorization to'g'rimi?
- [ ] Sensitive data secure mi?
- [ ] SQL injection himoyasi bormi?

### Testing ๐Ÿงช
- [ ] Unit tests yozilganmi?
- [ ] Test coverage yetarlimi?
- [ ] Integration tests bormi?
- [ ] Manual testing qilinganmi?

### DevOps ๐Ÿ”ง
- [ ] Docker configuration to'g'rimi?
- [ ] Environment variables ishlatilganmi?
- [ ] CI/CD pipeline ishlayaptimi?
- [ ] Monitoring/logging qo'shilganmi?

Xulosaโ€‹

Code Review - bu zamonaviy dasturlashning ajralmas qismi:

โœ… Quality Assurance - kod sifatini ta'minlash โœ… Knowledge Sharing - bilim almashish
โœ… Bug Prevention - xatolarni oldindan topish โœ… Team Growth - jamoaning rivojlanishi โœ… Standards Compliance - standartlarga rioya qilish

DevOps engineer sifatida review processni yaxshilash orqali butun development lifecycle ni optimize qilishingiz mumkin!