Bonnes Pratiques de Programmation et Revue de Code Efficace
Voir la PrésentationLa référence absolue. Dix catégories pour évaluer chaque pull request que vous examinez.
x, tmp, data, calc, process ; logique profondément imbriquée ; grandes fonctions peu claires> 0 ; pas de cas d'entrée invalide ; pas de tests pour la logique modifiéeNone sans explication ; exceptions avalées ; modes d'échec cachésFormulations professionnelles pour les scénarios de revue courants. Utilisez-les comme point de départ.
Une PR délibérément défectueuse pour s'entraîner. Pouvez-vous repérer les problèmes ?
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 totalfrom src.cart import calc
def test_calc():
items = [{"type": "book", "price": 100}]
user = {"is_premium": True}
assert calc(items, user, True) > 0# Cart Project
cart logiccalc est trop générique - devrait être calculate_cart_totald est peu clair - devrait être discount_enabledt et i ne sont pas descriptives0.9, 0.1, 0.05 devraient être des constantes nomméesif profondément imbriqués pour la vérification premium - utiliser .get()process_cart a un effet de bord (print) mélangé avec la logique métierd=False passé positionnellement comme True est confus> 0 ne vérifie pas l'exactitudeprocess_cartBOOK_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_priceExercice de Revue de PR : Relisez comme un Ingénieur Professionnel
Votre soumission doit inclure :
File: src/orders.py Line/Area: calc function Comment: The function name is too generic. Could we rename it to calculate_order_total for clarity? File: tests/test_orders.py Line/Area: test_calc Comment: This test only checks that the result is greater than zero. Could we assert the exact expected value instead?
Examinez les fichiers suivants :
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}def f(x):
if x == None:
return False
return Truefrom src.orders import calc
def test_calc():
items = [{"type": "book", "price": 100}]
assert calc(items, False) > 0# Orders
Run it with python.Les grands ingénieurs ne se contentent pas de faire fonctionner le code. Ils rendent le code compréhensible, testable, révisable et fiable.