emrevarol.com

የትምህርት ቁሳቁሶች

ምርጥ የኮዲንግ ልምዶች እና ውጤታማ የኮድ ግምገማ

A2SV - University of Rwanda

ገለፃውን ይመልከቱ

የA2SV ኮድ ግምገማ ማረጋገጫ ዝርዝር

ወርቃማው መስፈርት። የሚገመግሙትን እያንዳንዱን pull request ለመገምገም አስር ምድቦች።

1 ግልፅነት እና ተነባቢነት
ይጠይቁ
  • የfunction እና variable ስሞች ግልፅ ናቸው?
  • ያለ ግምት ኮዱን መረዳት እችላለሁ?
  • ዓላማው ግልፅ ነው?
  • ሎጂኩ ለመከተል ቀላል ነው?
ቀይ ማስጠንቀቂያዎች
እንደ xtmpdatacalcprocess ያሉ ስሞች፤ በጥልቀት የተደረደረ ሎጂክ፤ ትልልቅ ግልፅ ያልሆኑ functions
2 የFunction እና የዲዛይን ጥራት
ይጠይቁ
  • እያንዳንዱ function አንድ ግልፅ ነገር ያደርጋል?
  • የንግድ ሎጂክ ከside effects ተለይቷል?
  • ዲዛይኑ ለመሞከር ቀላል ነው?
  • ከመጠን በላይ የሚሰራ function አለ?
ቀይ ማስጠንቀቂያዎች
ማረጋገጥ + ማስቀመጥ + ኢሜይል + logging በአንድ function ውስጥ፤ በlogic functions ውስጥ print ማድረግ፤ በፋይሉ ውስጥ የተበተነ hardcoded ባህሪ
3 ትክክለኛነት
ይጠይቁ
  • ኮዱ ችግሩን በትክክል ይፈታዋል?
  • ግምቶች ግልፅ ናቸው?
  • ሁሉም ጉዳዮች ተያዙ?
ቀይ ማስጠንቀቂያዎች
የጎደለ input validation፤ የdictionary key ግምቶች፤ magic values፤ ጸጥ ያለ ውድቀት
4 Edge Cases
ይጠይቁ
  • ባዶ input ሲኖር ምን ይሆናል?
  • ልክ ያልሆነ input ሲኖር ምን ይሆናል?
  • የጎደሉ keys ሲኖሩ ምን ይሆናል?
  • ዜሮ ወይም አሉታዊ ዋጋዎች ሲኖሩ ምን ይሆናል?
ቀይ ማስጠንቀቂያዎች
ደስተኛው ጎዳና ብቻ ተመልክቷል፤ አስፈላጊ በሚሆንበት ቦታ የመከላከያ ምርመራዎች የሉም
5 ሙከራዎች
ይጠይቁ
  • ሙከራዎች ተካትተዋል?
  • ሙከራዎች ትክክለኛ ውጤቶችን ይፈትሻሉ?
  • Edge cases ተሸፍነዋል?
  • እነዚህ ሙከራዎች regressions ይይዛሉ?
ቀይ ማስጠንቀቂያዎች
አንድ ሙከራ ብቻ፤ እንደ > 0 ያሉ ደካማ assertions፤ ልክ ያልሆነ input ጉዳዮች የሉም፤ ለተቀየረ ሎጂክ ሙከራ የለም
6 ድግግሞሽ
ይጠይቁ
  • ሎጂክ ተደጋግሟል?
  • የጋራ ሎጂክ ሊወጣ ይችላል?
  • የንግድ ሕጎች በብዙ ቦታዎች ተደጋግመዋል?
ቀይ ማስጠንቀቂያዎች
የተደጋገሙ ቀመሮች፤ የተደጋገሙ condition blocks፤ የተደጋገሙ hardcoded ዋጋዎች
7 የስህተት አያያዝ
ይጠይቁ
  • ስህተቶች በግልፅ ተያዙ?
  • ኮዱ በሚረዳ መንገድ ይወድቃል?
  • ልክ ያልሆኑ ሁኔታዎች ይታያሉ?
ቀይ ማስጠንቀቂያዎች
ያለ ማብራሪያ None መመለስ፤ የተዋጡ exceptions፤ የተደበቁ የውድቀት ሁነቶች
8 ጥገናነት
ይጠይቁ
  • ይህ በኋላ ለማስፋት ቀላል ይሆናል?
  • ሌላ ኢንጂነር ይህንን በጥንቃቄ ማሻሻል ይችላል?
  • ይህ የኮድ ቤዙን ያጸዳዋል ወይስ ያበላሸዋል?
ቀይ ማስጠንቀቂያዎች
Hardcoded ሕጎች፤ ከመጠን በላይ ትልቅ PR፤ በጥብቅ የተገናኘ ሎጂክ
9 የRepository ጥራት
ይጠይቁ
  • የrepo አወቃቀር ግልፅ ነው?
  • README ጠቃሚ ነው?
  • አዲስ ኢንጂነር ፕሮጀክቱን በቀላሉ ማሄድ ይችላል?
  • Dependencies ይታያሉ?
ቀይ ማስጠንቀቂያዎች
የsetup መመሪያዎች የሉም፤ ደካማ README፤ ግራ የሚያጋባ አቀማመጥ፤ የtest ማውጫ ይጎድላል
10 የPR ጥራት
ይጠይቁ
  • PR ትኩረቱ ያተኮረ ነው?
  • ርዕሱ ገላጭ ነው?
  • መግለጫው ጠቃሚ ነው?
  • የለውጡ መጠን ምክንያታዊ ነው?
ቀይ ማስጠንቀቂያዎች
ግልፅ ያልሆኑ ርዕሶች፤ ማብራሪያ የለም፤ ያልተዛመዱ ለውጦች ተቀላቅለዋል፤ ግዙፍ PRs

የግምገማ አስተያየት ቅጦች

ለተለመዱ የግምገማ ሁኔታዎች ሙያዊ አገላለፆች። እነዚህን እንደ መነሻ ይጠቀሙ።

ስያሜ
"ይህንን function ዓላማውን በተሻለ ሁኔታ እንዲያንፀባርቅ እንደገና ልንሰይመው እንችላለን?"
"ይህ variable ስም በጣም አጠቃላይ ይመስላል። የበለጠ ገላጭ ልናደርገው እንችላለን?"
ሎጂክ
"ተነባቢነትን ለማሻሻል ይህንን condition ልናቃልለው እንችላለን?"
"ይህንን ሎጂክ ወደ helper function ማውጣት ትርጉም ይኖረዋል?"
ሙከራዎች
"ለባዶ input ጉዳይ ሙከራ መጨመር እንችላለን?"
"ሰፊ ምርመራ ከመጠቀም ይልቅ ትክክለኛውን የሚጠበቅ ዋጋ assert ማድረግ እንችላለን?"
መዋቅር
"ይህ function ብዙ ነገሮችን የሚያደርግ ይመስላል። ኃላፊነቶችን መለየት እንችላለን?"
"ይህንን ወደ ትንንሽ functions መከፋፈል ለመሞከር እና ለመገምገም ቀላል ያደርገዋል?"
Edge Cases
"ይህ key ከጎደለ ምን ይሆናል?"
"inputን ከማስኬድ በፊት ማረጋገጥ አለብን?"
የPR ጥራት
"ለውጡን እና እንዴት መሞከር እንዳለበት የሚያብራራ አጭር PR መግለጫ መጨመር ይችላሉ?"

ቀጥታ ማሳያ: ይህንን Pull Request ይገምግሙ

ለልምምድ ሆን ተብሎ የተበላሸ PR። ችግሮቹን ማግኘት ይችላሉ?

Branch: feature/cart-total-update
ርዕስ: "Update cart calculation logic"
መግለጫ: "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
የግምገማ መመሪያ - ሊገኙ የሚገባቸው ችግሮች
የPR ደረጃ ችግሮች
  • ግልፅ ያልሆነ PR ርዕስ: "Update cart calculation logic" ምን እንደተቀየረ አይገልፅም
  • መግለጫው አጠቃላይ እና ጠቃሚ ያልሆነ ነው
  • ለገምጋሚዎች የሙከራ ዕቅድ ወይም መመሪያ የለም
የኮድ ደረጃ ችግሮች
  • የFunction ስም calc በጣም አጠቃላይ ነው - calculate_cart_total መሆን አለበት
  • Parameter d ግልፅ አይደለም - discount_enabled መሆን አለበት
  • Variables t እና i ገላጭ አይደሉም
  • Magic numbers: 0.90.10.05 የተሰየሙ constants መሆን አለባቸው
  • ለpremium ምርመራ በጥልቀት የተደረደሩ if blocks - .get() ይጠቀሙ
  • process_cart ከንግድ ሎጂክ ጋር የተቀላቀለ side effect (print) አለው
  • ለitems ወይም user input validation የለም
  • Boolean parameter d=False positionally እንደ True ማስተላለፍ ግራ የሚያጋባ ነው
የTest ደረጃ ችግሮች
  • ለሙሉው module አንድ test case ብቻ
  • ደካማ assertion: > 0 ትክክለኛነትን አያረጋግጥም
  • Edge case ሙከራዎች የሉም (ባዶ ዝርዝር፣ የጎደሉ keys፣ premium ያልሆነ ተጠቃሚ)
  • process_cartን አይሞክርም
የRepo ደረጃ ችግሮች
  • README በመሰረቱ ባዶ ነው - የsetup መመሪያዎች የሉም፣ መግለጫ የለም
  • ሙከራዎችን እንዴት ማሄድ እንደሚቻል መረጃ የለም
የተሻሻለ ስሪት - 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

የቤት ስራ

የPR ግምገማ ምደባ: እንደ ሙያዊ ኢንጂነር ይገምግሙ

ማቅረቢያዎ የሚከተሉትን ማካተት አለበት:

  • 10 ጠቅላላ ዝቅተኛ የግምገማ አስተያየቶች
  • ቢያንስ 3 ከስያሜ ጋር የተያያዙ አስተያየቶች
  • ቢያንስ 2 ከTest ጋር የተያያዙ አስተያየቶች
  • ቢያንስ 2 የዲዛይን ወይም የfunction ኃላፊነት አስተያየቶች
  • ቢያንስ 1 የRepository ጥራት አስተያየት
  • ቢያንስ 1 የRefactoring ጥቆማ

የማቅረቢያ ቅርፅ

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?

የሚከተሉትን ፋይሎች ይገምግሙ:

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.
ታላላቅ ኢንጂነሮች ኮድ እንዲሰራ ብቻ አያደርጉም። ኮዱ ሊረዳ፣ ሊሞከር፣ ሊገመገም እና ሊታመን የሚችል ያደርጋሉ።
የቀኑ ጥቅስ
"ዛሬ ለማፅዳት ጊዜ ያጣችሁበት ኮድ ነገ ቡድናችሁን የሚያስቸግር ችግር ይሆናል።"