emrevarol.com

Ders Materyalleri

En İyi Kodlama Pratikleri ve Etkili Kod İnceleme

A2SV - Ruanda Üniversitesi

Sunumu Görüntüle

A2SV Kod İnceleme Kontrol Listesi

Altın standart. İncelediğiniz her pull request'i değerlendirmek için on kategori.

1 Açıklık ve Okunabilirlik
Sor
  • Fonksiyon ve değişken isimleri açık mı?
  • Kodu tahmin etmeden anlayabiliyor muyum?
  • Amaç belirgin mi?
  • Mantık takip edilmesi kolay mı?
Tehlike İşaretleri
x, tmp, data, calc, process gibi isimler; derinden iç içe geçmiş mantık; büyük ve anlaşılmaz fonksiyonlar
2 Fonksiyon ve Tasarım Kalitesi
Sor
  • Her fonksiyon tek bir açık iş yapıyor mu?
  • İş mantığı yan etkilerden ayrılmış mı?
  • Tasarım test edilmesi kolay mı?
  • Çok fazla iş yapan bir fonksiyon var mı?
Tehlike İşaretleri
Doğrulama + kaydetme + e-posta + loglama tek fonksiyonda; mantık fonksiyonlarında print; dosya boyunca dağılmış sabit kodlanmış davranış
3 Doğruluk
Sor
  • Kod gerçekten problemi doğru çözüyor mu?
  • Varsayımlar açık mı?
  • Tüm durumlar ele alınmış mı?
Tehlike İşaretleri
Eksik girdi doğrulama; dictionary anahtar varsayımları; sihirli değerler; sessiz hata
4 Sınır Durumları
Sor
  • Boş girdi ile ne oluyor?
  • Geçersiz girdi ile ne oluyor?
  • Eksik anahtarlarla ne oluyor?
  • Sıfır veya negatif değerlerle ne oluyor?
Tehlike İşaretleri
Sadece mutlu yol düşünülmüş; gerekli yerlerde savunmacı kontroller yok
5 Testler
Sor
  • Testler dahil edilmiş mi?
  • Testler kesin sonuçları kontrol ediyor mu?
  • Sınır durumları kapsanmış mı?
  • Bu testler regresyonları yakalayabilir mi?
Tehlike İşaretleri
Sadece bir test; > 0 gibi zayıf doğrulamalar; geçersiz girdi testleri yok; değişen mantık için test yok
6 Tekrarlama
Sor
  • Mantık tekrarlanmış mı?
  • Ortak mantık ayrıştırılabilir mi?
  • İş kuralları birden fazla yerde tekrarlanmış mı?
Tehlike İşaretleri
Tekrarlanan formüller; tekrarlanan koşul blokları; tekrarlanan sabit kodlanmış değerler
7 Hata Yönetimi
Sor
  • Hatalar açıkça yönetiliyor mu?
  • Kod anlaşılır bir şekilde mi hata veriyor?
  • Geçersiz durumlar görünür mü?
Tehlike İşaretleri
Açıklama olmadan None döndürme; yutulmuş istisnalar; gizli hata modları
8 Sürdürülebilirlik
Sor
  • Bu kod sonradan genişletilmesi kolay olacak mı?
  • Başka bir mühendis bunu güvenle değiştirebilecek mi?
  • Bu değişiklik kod tabanını daha temiz mi yoksa daha karmaşık mı yapıyor?
Tehlike İşaretleri
Sabit kodlanmış kurallar; aşırı büyük PR; sıkı bağlı mantık
9 Depo Kalitesi
Sor
  • Depo yapısı açık mı?
  • README yararlı mı?
  • Yeni bir mühendis projeyi kolayca çalıştırabilir mi?
  • Bağımlılıklar görünür mü?
Tehlike İşaretleri
Kurulum talimatları yok; zayıf README; kafa karıştırıcı düzen; test dizini eksik
10 PR Kalitesi
Sor
  • PR odaklı mı?
  • Başlık açıklayıcı mı?
  • Açıklama yardımcı mı?
  • Değişiklik boyutu makul mü?
Tehlike İşaretleri
Belirsiz başlıklar; açıklama yok; karışık ilgisiz değişiklikler; dev PR'lar

İnceleme Yorum Şablonları

Yaygın inceleme senaryoları için profesyonel ifadeler. Bunları başlangıç noktası olarak kullanın.

Adlandırma
"Bu fonksiyonun amacını daha iyi yansıtması için yeniden adlandırabilir miyiz?"
"Bu değişken adı çok genel görünüyor. Daha açıklayıcı yapabilir miyiz?"
Mantık
"Okunabilirliği artırmak için bu koşulu sadeleştirebilir miyiz?"
"Bu mantığı bir yardımcı fonksiyona çıkarmak mantıklı olur mu?"
Testler
"Boş girdi durumu için bir test ekleyebilir miyiz?"
"Burada geniş bir kontrol yerine beklenen kesin değeri doğrulayabilir miyiz?"
Yapı
"Bu fonksiyon birden fazla iş yapıyor gibi görünüyor. Sorumlulukları ayırabilir miyiz?"
"Bunu daha küçük fonksiyonlara bölmek test ve incelemeyi kolaylaştırır mı?"
Sınır Durumları
"Bu anahtar eksik olursa ne olur?"
"Girdiyi işlemeden önce doğrulamamız gerekir mi?"
PR Kalitesi
"Değişikliği ve nasıl test edilmesi gerektiğini açıklayan kısa bir PR açıklaması ekleyebilir misiniz?"

Canlı Demo: Bu Pull Request'i İnceleyin

Pratik için kasıtlı olarak hatalı bir PR. Sorunları bulabilir misiniz?

Branch: feature/cart-total-update
Başlık: "Update cart calculation logic"
Açıklama: "Updated the cart calculation logic and added support for discount."
src/cart.py
def calc(items, user, d=False): t = 0 for i in items: if i["type"] == "book": t += i["price"] * 0.9 else: t += i["price"] if d: t = t - t * 0.1 if user is not None: if "is_premium" in user: if user["is_premium"] == True: t = t - t * 0.05 return t def process_cart(items, user): total = calc(items, user, True) print("cart processed") return total
tests/test_cart.py
from src.cart import calc def test_calc(): items = [{"type": "book", "price": 100}] user = {"is_premium": True} assert calc(items, user, True) > 0
README.md
# Cart Project cart logic
İnceleme Rehberi - Bulunması Gereken Sorunlar
PR Düzeyinde Sorunlar
  • Belirsiz PR başlığı: "Update cart calculation logic" neyin değiştiğini açıklamıyor
  • Açıklama genel ve yardımcı değil
  • İnceleyenler için test planı veya talimat yok
Kod Düzeyinde Sorunlar
  • Fonksiyon adı calc çok genel - calculate_cart_total olmalı
  • Parametre d belirsiz - discount_enabled olmalı
  • Değişkenler t ve i açıklayıcı değil
  • Sihirli sayılar: 0.9, 0.1, 0.05 adlandırılmış sabitler olmalı
  • Premium kontrolü için derinden iç içe if blokları - .get() kullanın
  • process_cart iş mantığıyla karışık bir yan etkiye (print) sahip
  • items veya user için girdi doğrulaması yok
  • Boolean parametre d=False konumsal olarak True geçirilmesi kafa karıştırıcı
Test Düzeyinde Sorunlar
  • Tüm modül için sadece bir test senaryosu
  • Zayıf doğrulama: > 0 doğruluğu kontrol etmiyor
  • Sınır durumu testleri yok (boş liste, eksik anahtarlar, premium olmayan kullanıcı)
  • process_cart test edilmemiş
Depo Düzeyinde Sorunlar
  • README neredeyse boş - kurulum talimatları yok, açıklama yok
  • Testlerin nasıl çalıştırılacağı hakkında bilgi yok
İyileştirilmiş Versiyon - cart_improved.py
src/cart_improved.py
BOOK_DISCOUNT_RATE = 0.10 GENERAL_DISCOUNT_RATE = 0.10 PREMIUM_DISCOUNT_RATE = 0.05 def calculate_item_price(item): item_type = item["type"] price = item["price"] if item_type == "book": return price * (1 - BOOK_DISCOUNT_RATE) return price def apply_general_discount(total_price, discount_enabled): if not discount_enabled: return total_price return total_price * (1 - GENERAL_DISCOUNT_RATE) def apply_premium_discount(total_price, user): if not user or not user.get("is_premium", False): return total_price return total_price * (1 - PREMIUM_DISCOUNT_RATE) def calculate_cart_total(items, user, discount_enabled=False): total_price = 0 for item in items: total_price += calculate_item_price(item) total_price = apply_general_discount(total_price, discount_enabled) total_price = apply_premium_discount(total_price, user) return total_price def process_cart(items, user): total_price = calculate_cart_total(items, user, discount_enabled=True) return total_price

Ödev

PR İnceleme Ödevi: Profesyonel Bir Mühendis Gibi İnceleyin

Tesliminiz şunları içermelidir:

  • 10 toplam Minimum inceleme yorumu
  • 3 min Adlandırma ile ilgili yorumlar
  • 2 min Test ile ilgili yorumlar
  • 2 min Tasarım veya fonksiyon sorumluluğu yorumları
  • 1 min Depo kalitesi yorumu
  • 1 min Yeniden yapılandırma önerisi

Teslim Formatı

Dosya: src/orders.py
Satır/Alan: calc fonksiyonu
Yorum: Fonksiyon adı çok genel. Netlik için
calculate_order_total olarak yeniden adlandırabilir miyiz?

Dosya: tests/test_orders.py
Satır/Alan: test_calc
Yorum: Bu test sadece sonucun sıfırdan büyük olduğunu kontrol
ediyor. Bunun yerine beklenen kesin değeri doğrulayabilir miyiz?

Aşağıdaki dosyaları inceleyin:

src/orders.py
def calc(items, vip=False): total = 0 for i in items: if i["type"] == "book": total += i["price"] * 0.9 elif i["type"] == "electronics": total += i["price"] else: total += i["price"] if vip == True: total = total - total * 0.05 return total def checkout(items, user): total = calc(items, user["vip"]) print("checking out order...") print("total is", total) return {"ok": True, "total": total}
src/utils.py
def f(x): if x == None: return False return True
tests/test_orders.py
from src.orders import calc def test_calc(): items = [{"type": "book", "price": 100}] assert calc(items, False) > 0
README.md
# Orders Run it with python.
Harika mühendisler sadece kodun çalışmasını sağlamaz. Kodu anlaşılır, test edilebilir, incelenebilir ve güvenilir yaparlar.
Günün Sözü
"Bugün temizlemek için çok meşgul olduğunuz kod, yarın ekibinize sahip olan sorun haline gelir."